-
Notifications
You must be signed in to change notification settings - Fork 13.7k
Allow linking a prebuilt optimized compiler-rt builtins library #143689
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
Allow linking a prebuilt optimized compiler-rt builtins library #143689
Conversation
This PR modifies If appropriate, please update This PR modifies If appropriate, please update
cc @tgross35 |
This comment has been minimized.
This comment has been minimized.
27fcb13
to
1ea1789
Compare
I don't really know much about the optimized compiler-rt builtins. Maybe @tgross35 might know more? |
Can you say more about how much time this saves? Historically it's been my impression locally that building is basically free, this flag is more about whether it's possible to build (e.g., needs to be off if you're ad-hoc cross compiling). Though maybe I'm remembering wrong? |
The goal is to enable optimized compiler-builtins in fedora packaging. There, rust is built using the distro provided llvm and resulting libraries. Some runtime features are absent if optimized compiler-builtins are not used. Notably, outlined aarch64 LSE atomic operations are not available without this support. |
Right, it's less about time and more about wanting to use our existing system LLVM packages. |
Ping @tgross35. The intent here is to enable optimized-builtins in Fedora using the system's compiler-rt.builtins library. |
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.
The changes to compiler-builtins lgtm with a possible rename of the var, assuming you have verified this works locally. Somebody more familiar with bootstrap (@Kobzol?) will need to review the changes there.
1ea1789
to
8ce8e15
Compare
I did test builds with the fedora targets (excepting s390x, it lacks a libcompiler-rt.builtins library in rawhide right now). Likewise, I verified the LSE support linked in for aarch64 does work. Is it a realistic case to consider something trying to link libgcc.a or libcompiler-rt.builtins.a when std already includes a copy of libcompiler-rt.builtins? That case I haven't tested. |
if let Some(dir) = rt_builtins_ext.parent() { | ||
println!("cargo::rustc-link-search=native={}", dir.display()); | ||
} | ||
println!( | ||
"cargo::rustc-link-lib=static:+verbatim={}", | ||
rt_builtins_ext.to_str().unwrap() | ||
); |
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.
Does println!("cargo::rustc-link-arg={}", rt_builtins_ext.to_str().unwrap())
work to replace these by chance? I think passing the exact path to the linker should avoid needing to set both -l
and -L
.
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.
That seems like it should work, but trying locally (x86-64-unknown-linux-gnu) didn't work as expected. The builtins library wasn't copied into the .rlib
as is the case with the above or letting rust built them.
I think this can happen in niche build setups, but no special handling should be needed; all three libraries make their builtin symbols weak, so conflicts aren't a problem. |
☔ The latest upstream changes (presumably #144773) made this pull request unmergeable. Please resolve the merge conflicts. |
8ce8e15
to
f8de502
Compare
compiler-builtins: plumb LSE support for aarch64 on linux/gnu when optimized-compiler-builtins not enabled Add dynamic support for aarch64 LSE atomic ops on linux/gnu targets when optimized-compiler-builtins is not enabled. Enabling LSE is the primary motivator for rust-lang#143689, though extending the rust version doesn't seem too farfetched. Are there more details which I have overlooked which make this impractical? I've tested this on an aarch64 host with LSE. r? `@tgross35`
compiler-builtins: plumb LSE support for aarch64 on linux/gnu when optimized-compiler-builtins not enabled Add dynamic support for aarch64 LSE atomic ops on linux/gnu targets when optimized-compiler-builtins is not enabled. Enabling LSE is the primary motivator for rust-lang#143689, though extending the rust version doesn't seem too farfetched. Are there more details which I have overlooked which make this impractical? I've tested this on an aarch64 host with LSE. r? ``@tgross35``
compiler-builtins: plumb LSE support for aarch64 on linux/gnu when optimized-compiler-builtins not enabled Add dynamic support for aarch64 LSE atomic ops on linux/gnu targets when optimized-compiler-builtins is not enabled. Enabling LSE is the primary motivator for rust-lang#143689, though extending the rust version doesn't seem too farfetched. Are there more details which I have overlooked which make this impractical? I've tested this on an aarch64 host with LSE. r? ```@tgross35```
compiler-builtins: plumb LSE support for aarch64 on linux/gnu when optimized-compiler-builtins not enabled Add dynamic support for aarch64 LSE atomic ops on linux/gnu targets when optimized-compiler-builtins is not enabled. Enabling LSE is the primary motivator for rust-lang#143689, though extending the rust version doesn't seem too farfetched. Are there more details which I have overlooked which make this impractical? I've tested this on an aarch64 host with LSE. r? ````@tgross35````
compiler-builtins: plumb LSE support for aarch64 on linux/gnu when optimized-compiler-builtins not enabled Add dynamic support for aarch64 LSE atomic ops on linux/gnu targets when optimized-compiler-builtins is not enabled. Enabling LSE is the primary motivator for rust-lang#143689, though extending the rust version doesn't seem too farfetched. Are there more details which I have overlooked which make this impractical? I've tested this on an aarch64 host with LSE. r? `````@tgross35`````
compiler-builtins: plumb LSE support for aarch64 on linux/gnu when optimized-compiler-builtins not enabled Add dynamic support for aarch64 LSE atomic ops on linux/gnu targets when optimized-compiler-builtins is not enabled. Enabling LSE is the primary motivator for rust-lang#143689, though extending the rust version doesn't seem too farfetched. Are there more details which I have overlooked which make this impractical? I've tested this on an aarch64 host with LSE. r? ``````@tgross35``````
compiler-builtins: plumb LSE support for aarch64 on linux/gnu when optimized-compiler-builtins not enabled Add dynamic support for aarch64 LSE atomic ops on linux/gnu targets when optimized-compiler-builtins is not enabled. Enabling LSE is the primary motivator for rust-lang#143689, though extending the rust version doesn't seem too farfetched. Are there more details which I have overlooked which make this impractical? I've tested this on an aarch64 host with LSE. r? ```````@tgross35```````
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.
Since this changes config options, you could also add a change entry to change_tracker.rs
, but this is probably so niche that it's not even needed.
LGTM from my side.
ad333e4
to
12172b6
Compare
This comment has been minimized.
This comment has been minimized.
Thanks. I also tried to improve the documentation in bootstrap.example.toml too. |
☔ The latest upstream changes (presumably #145352) made this pull request unmergeable. Please resolve the merge conflicts. |
12172b6
to
c1d67ef
Compare
This comment has been minimized.
This comment has been minimized.
☔ The latest upstream changes (presumably #145472) made this pull request unmergeable. Please resolve the merge conflicts. |
Extend the <target>.optimized-compiler-builtins bootstrap option to accept a path to a prebuilt compiler-rt builtins library, and update compiler-builtins to enable optimized builtins without building compiler-rt builtins.
Create a dedicated enum to abstract the different ways compiler-builtins can be configured. This also relaxes build.optimized-compiler-builtins to accept the path of a library to match the behavior of <target>.optimized-compiler-builtins override.
c1d67ef
to
148a07c
Compare
This PR was rebased onto a different master commit. Here's a range-diff highlighting what actually changed. Rebasing is a normal part of keeping PRs up to date, so no action is needed—this note is just to help reviewers. |
Thanks for the updates, LGTM as well |
…mpiler-builtins, r=Kobzol,tgross35 Allow linking a prebuilt optimized compiler-rt builtins library Extend the <target>.optimized-compiler-builtins bootstrap option to accept a path to a prebuilt compiler-rt builtins library, and update compiler-builtins to enable optimized builtins without building compiler-rt builtins.
Rollup of 13 pull requests Successful merges: - #143193 (Port `#[link]` to the new attribute parsing infrastructure ) - #143689 (Allow linking a prebuilt optimized compiler-rt builtins library) - #144885 (Implement some more checks in `ptr_guaranteed_cmp`. ) - #145535 (make rustdoc::invalid_html_tags more robust) - #145766 (test(rustfmt): Verify frontmatter is preserved) - #145811 (Fix some minor issues in comments) - #145814 (Handle unwinding fatal errors in codegen workers) - #145815 (Wait for DPkg frontend lock when trying to remove packages) - #145821 (compiletest: if a compiler fails, show its output) - #145845 (Make `x test distcheck` self-contained) - #145847 (Don't show warnings from xcrun with -Zverbose-internals) - #145856 (Update books) - #145858 (Update wasm-component-ld dependency) r? `@ghost` `@rustbot` modify labels: rollup
Rollup of 12 pull requests Successful merges: - #143689 (Allow linking a prebuilt optimized compiler-rt builtins library) - #144885 (Implement some more checks in `ptr_guaranteed_cmp`. ) - #145535 (make rustdoc::invalid_html_tags more robust) - #145766 (test(rustfmt): Verify frontmatter is preserved) - #145811 (Fix some minor issues in comments) - #145814 (Handle unwinding fatal errors in codegen workers) - #145815 (Wait for DPkg frontend lock when trying to remove packages) - #145821 (compiletest: if a compiler fails, show its output) - #145845 (Make `x test distcheck` self-contained) - #145847 (Don't show warnings from xcrun with -Zverbose-internals) - #145856 (Update books) - #145858 (Update wasm-component-ld dependency) r? `@ghost` `@rustbot` modify labels: rollup
…tins, r=Kobzol,tgross35 Allow linking a prebuilt optimized compiler-rt builtins library Extend the <target>.optimized-compiler-builtins bootstrap option to accept a path to a prebuilt compiler-rt builtins library, and update compiler-builtins to enable optimized builtins without building compiler-rt builtins.
Yielding to enclosing rollup, which flaked out. @bors retry |
Rollup of 12 pull requests Successful merges: - #143689 (Allow linking a prebuilt optimized compiler-rt builtins library) - #144885 (Implement some more checks in `ptr_guaranteed_cmp`. ) - #145535 (make rustdoc::invalid_html_tags more robust) - #145766 (test(rustfmt): Verify frontmatter is preserved) - #145811 (Fix some minor issues in comments) - #145814 (Handle unwinding fatal errors in codegen workers) - #145815 (Wait for DPkg frontend lock when trying to remove packages) - #145821 (compiletest: if a compiler fails, show its output) - #145845 (Make `x test distcheck` self-contained) - #145847 (Don't show warnings from xcrun with -Zverbose-internals) - #145856 (Update books) - #145858 (Update wasm-component-ld dependency) r? `@ghost` `@rustbot` modify labels: rollup
Rollup merge of #143689 - pmur:murp/external-rt-optimized-compiler-builtins, r=Kobzol,tgross35 Allow linking a prebuilt optimized compiler-rt builtins library Extend the <target>.optimized-compiler-builtins bootstrap option to accept a path to a prebuilt compiler-rt builtins library, and update compiler-builtins to enable optimized builtins without building compiler-rt builtins.
Extend the .optimized-compiler-builtins bootstrap option to accept a path to a prebuilt compiler-rt builtins library, and update compiler-builtins to enable optimized builtins without building compiler-rt builtins.