-
Notifications
You must be signed in to change notification settings - Fork 347
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
added section on cranelift codegen #801
Conversation
Idk how big of a deal it is, but the configuration the blog post this PR suggests doesn't work in projects that need to support Wasm. This is because per-target profiles aren't supported by Rust You could create a new profile to handle this but then you have to specify the profile every time. Instead it might be ideal to use rustflags for this as they can be specified per platform. Making cranelift still be used for linux but not for Wasm builds: Craneliftrustup component add rustc-codegen-cranelift-preview --toolchain nightly ~/.cargo/config.toml[target.x86_64-unknown-linux-gnu]
rustflags = ["-Zcodegen-backend=cranelift", ] Cranelift + Mold~/.cargo/config.toml[target.x86_64-unknown-linux-gnu]
rustflags = ["-Zcodegen-backend=cranelift", "-C", "link-arg=-fuse-ld=/usr/bin/mold"]
linker = "clang" Thanks to this blog post for helping me discover this as an option: https://benw.is/posts/how-i-improved-my-rust-compile-times-by-seventy-five-percent |
Though you wouldn't want to start shipping builds compiled with cranelift (for performance reasons) so maybe it's not a good idea to recommend that as it isn't limited to dev builds and people might forget to take it out. Personally I do my release builds in github actions so that wasn't a concern for me. |
@MalekiRe if you rebase this I'll merge it in :) |
@@ -200,6 +200,9 @@ Bevy can be built just fine using default configuration on stable Rust. However | |||
|
|||
For more information, see [The rustup book: Overrides](https://rust-lang.github.io/rustup/overrides.html#the-toolchain-file). | |||
|
|||
* **Cranelift Codegen**: This uses a new nightly-only codegen that can be 300% faster than LLVM! However it only currently works on Linux and is generally still immature. |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
30% is a more realistic average.
It works fine on Windows now and x86_64 macOS (arm64 macOS has some ABI issues)
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I could not get Bevy compiling on (intel) macOS with cranelift enabled. Specifically objc2
failed to build.
Windows works, but the installation process is a bit whackier and it may not play nice with sccache.
After my little investigation, it seems like the only platform where everything runs smoothly out of the box is still Linux.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
An issue for that at https://github.com/rust-lang/rustc_codegen_cranelift/issues would be appreciated.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Sure! I'll post one tomorrow :)
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Update: there you go rust-lang/rustc_codegen_cranelift#1504
Let me know in that issue if there's anything I can try out to help debug it.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Thanks!
@@ -200,6 +200,9 @@ Bevy can be built just fine using default configuration on stable Rust. However | |||
|
|||
For more information, see [The rustup book: Overrides](https://rust-lang.github.io/rustup/overrides.html#the-toolchain-file). | |||
|
|||
* **Cranelift Codegen**: This uses a new nightly-only codegen that can be 300% faster than LLVM! However it only currently works on Linux and is generally still immature. | |||
[Cranelift codegen setup](https://bjorn3.github.io/2023/10/31/progress-report-oct-2023.html). |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Maybe link to the setup section of the readme instead? Unlike this page it will be kept up to date if the setup changes.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Also it is possible to compile all dependencies with the LLVM backend and optimizations, but the main game crate with Cranelift to get much better runtime performance.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
@bjorn3 I've tried that before and ran into issues where I would get random segfaults.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
There were some abi incompatibilities in the past, but most should be fixed now.
Closing in favor of #1523 |
No description provided.