diff options
| author | Alex Crichton <alex@alexcrichton.com> | 2017-06-22 13:14:00 -0700 |
|---|---|---|
| committer | Alex Crichton <alex@alexcrichton.com> | 2017-07-05 07:08:36 -0700 |
| commit | 7e6c9f363501c49d3a1f666d85d41891f50890b8 (patch) | |
| tree | 4ae27896af44a2d8226c640556d6e997ac67c148 /src/bootstrap/bin | |
| parent | 1d2db7b9e8082f0459e000985d77fc7ad0dabade (diff) | |
| download | rust-7e6c9f363501c49d3a1f666d85d41891f50890b8.tar.gz rust-7e6c9f363501c49d3a1f666d85d41891f50890b8.zip | |
Switch to rust-lang-nursery/compiler-builtins
This commit migrates the in-tree `libcompiler_builtins` to the upstream version at https://github.com/rust-lang-nursery/compiler-builtins. The upstream version has a number of intrinsics written in Rust and serves as an in-progress rewrite of compiler-rt into Rust. Additionally it also contains all the existing intrinsics defined in `libcompiler_builtins` for 128-bit integers. It's been the intention since the beginning to make this transition but previously it just lacked the manpower to get done. As this PR likely shows it wasn't a trivial integration! Some highlight changes are: * The PR rust-lang-nursery/compiler-builtins#166 contains a number of fixes across platforms and also some refactorings to make the intrinsics easier to read. The additional testing added there also fixed a number of integration issues when pulling the repository into this tree. * LTO with the compiler-builtins crate was fixed to link in the entire crate after the LTO process as these intrinsics are excluded from LTO. * Treatment of hidden symbols was updated as previously the `#![compiler_builtins]` crate would mark all symbol *imports* as hidden whereas it was only intended to mark *exports* as hidden.
Diffstat (limited to 'src/bootstrap/bin')
| -rw-r--r-- | src/bootstrap/bin/rustc.rs | 19 |
1 files changed, 15 insertions, 4 deletions
diff --git a/src/bootstrap/bin/rustc.rs b/src/bootstrap/bin/rustc.rs index 8c6eaee24f2..fbb2ae29ef2 100644 --- a/src/bootstrap/bin/rustc.rs +++ b/src/bootstrap/bin/rustc.rs @@ -142,6 +142,11 @@ fn main() { } } + let crate_name = args.windows(2) + .find(|a| &*a[0] == "--crate-name") + .unwrap(); + let crate_name = &*crate_name[1]; + // If we're compiling specifically the `panic_abort` crate then we pass // the `-C panic=abort` option. Note that we do not do this for any // other crate intentionally as this is the only crate for now that we @@ -150,9 +155,7 @@ fn main() { // This... is a bit of a hack how we detect this. Ideally this // information should be encoded in the crate I guess? Would likely // require an RFC amendment to RFC 1513, however. - let is_panic_abort = args.windows(2) - .any(|a| &*a[0] == "--crate-name" && &*a[1] == "panic_abort"); - if is_panic_abort { + if crate_name == "panic_abort" { cmd.arg("-C").arg("panic=abort"); } @@ -167,7 +170,15 @@ fn main() { Ok(s) => if s == "true" { "y" } else { "n" }, Err(..) => "n", }; - cmd.arg("-C").arg(format!("debug-assertions={}", debug_assertions)); + + // The compiler builtins are pretty sensitive to symbols referenced in + // libcore and such, so we never compile them with debug assertions. + if crate_name == "compiler_builtins" { + cmd.arg("-C").arg("debug-assertions=no"); + } else { + cmd.arg("-C").arg(format!("debug-assertions={}", debug_assertions)); + } + if let Ok(s) = env::var("RUSTC_CODEGEN_UNITS") { cmd.arg("-C").arg(format!("codegen-units={}", s)); } |
