Skip to content
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

Open
wants to merge 2 commits into
base: main
Choose a base branch
from
Open

Conversation

MalekiRe
Copy link

@MalekiRe MalekiRe commented Nov 4, 2023

No description provided.

@paul-hansen
Copy link
Contributor

paul-hansen commented Nov 9, 2023

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:

Cranelift

rustup 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

@paul-hansen
Copy link
Contributor

paul-hansen commented Nov 9, 2023

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.

@alice-i-cecile alice-i-cecile added the S-Ready-For-Final-Review Ready for a maintainer to consider for merging label May 5, 2024
@alice-i-cecile
Copy link
Member

@MalekiRe if you rebase this I'll merge it in :)

@alice-i-cecile alice-i-cecile added the S-Adopt-Me This PR could use some love: make a new PR with this work! label May 13, 2024
@@ -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.
Copy link

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)

@@ -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).
Copy link

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.

Copy link

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.

@BD103 BD103 removed the S-Ready-For-Final-Review Ready for a maintainer to consider for merging label Jun 11, 2024
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
A-Book C-Content S-Adopt-Me This PR could use some love: make a new PR with this work!
Projects
None yet
Development

Successfully merging this pull request may close these issues.

None yet

7 participants