diff options
| author | Dylan DPC <dylan.dpc@gmail.com> | 2020-02-12 14:21:08 +0100 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2020-02-12 14:21:08 +0100 |
| commit | 75a977dd478b249a7d29bc4ed3efed8df85b1ddc (patch) | |
| tree | 6889c7a6e9fe488c43a5b0c256ea57d4d5c74532 | |
| parent | f2d829ce6ab52c9e5b9aacd1181c87208c736ee9 (diff) | |
| parent | 1bba9cfb9036eb44bb549f34c090cb38bd0d84fd (diff) | |
| download | rust-75a977dd478b249a7d29bc4ed3efed8df85b1ddc.tar.gz rust-75a977dd478b249a7d29bc4ed3efed8df85b1ddc.zip | |
Rollup merge of #68994 - Keruspe:sanitizers-conflict, r=Mark-Simulacrum
rustbuild: include channel in sanitizers installed name Allows parallel install of different rust channels. I'm not sure if the channel is the right thing to use there, but currently both beta and nightly try to install e.g. `/usr/lib/rustlib/x86_64-unknown-linux-gnu/lib/librustc_rt.asan.a` when before (and in current stable) it used to be `/usr/lib/rustlib/x86_64-unknown-linux-gnu/lib/librustc_asan-45a4390180e83d28.rlib` which contained a hash, making it unique. With this patch, `/usr/lib/rustlib/x86_64-unknown-linux-gnu/lib/librustc-nightly_rt.asan.a` gets installed
| -rw-r--r-- | src/bootstrap/native.rs | 16 | ||||
| -rw-r--r-- | src/librustc_codegen_ssa/back/link.rs | 7 | ||||
| -rw-r--r-- | src/librustc_codegen_ssa/build.rs | 4 |
3 files changed, 19 insertions, 8 deletions
diff --git a/src/bootstrap/native.rs b/src/bootstrap/native.rs index 1cfb4b2f63b..5790f236cc8 100644 --- a/src/bootstrap/native.rs +++ b/src/bootstrap/native.rs @@ -571,7 +571,7 @@ impl Step for Sanitizers { } let out_dir = builder.native_dir(self.target).join("sanitizers"); - let runtimes = supported_sanitizers(&out_dir, self.target); + let runtimes = supported_sanitizers(&out_dir, self.target, &builder.config.channel); if runtimes.is_empty() { return runtimes; } @@ -635,7 +635,11 @@ pub struct SanitizerRuntime { } /// Returns sanitizers available on a given target. -fn supported_sanitizers(out_dir: &Path, target: Interned<String>) -> Vec<SanitizerRuntime> { +fn supported_sanitizers( + out_dir: &Path, + target: Interned<String>, + channel: &str, +) -> Vec<SanitizerRuntime> { let mut result = Vec::new(); match &*target { "x86_64-apple-darwin" => { @@ -644,7 +648,7 @@ fn supported_sanitizers(out_dir: &Path, target: Interned<String>) -> Vec<Sanitiz cmake_target: format!("clang_rt.{}_osx_dynamic", s), path: out_dir .join(&format!("build/lib/darwin/libclang_rt.{}_osx_dynamic.dylib", s)), - name: format!("librustc_rt.{}.dylib", s), + name: format!("librustc-{}_rt.{}.dylib", channel, s), }); } } @@ -653,7 +657,7 @@ fn supported_sanitizers(out_dir: &Path, target: Interned<String>) -> Vec<Sanitiz result.push(SanitizerRuntime { cmake_target: format!("clang_rt.{}-x86_64", s), path: out_dir.join(&format!("build/lib/linux/libclang_rt.{}-x86_64.a", s)), - name: format!("librustc_rt.{}.a", s), + name: format!("librustc-{}_rt.{}.a", channel, s), }); } } @@ -662,7 +666,7 @@ fn supported_sanitizers(out_dir: &Path, target: Interned<String>) -> Vec<Sanitiz result.push(SanitizerRuntime { cmake_target: format!("clang_rt.{}-x86_64", s), path: out_dir.join(&format!("build/lib/fuchsia/libclang_rt.{}-x86_64.a", s)), - name: format!("librustc_rt.{}.a", s), + name: format!("librustc-{}_rt.{}.a", channel, s), }); } } @@ -671,7 +675,7 @@ fn supported_sanitizers(out_dir: &Path, target: Interned<String>) -> Vec<Sanitiz result.push(SanitizerRuntime { cmake_target: format!("clang_rt.{}-aarch64", s), path: out_dir.join(&format!("build/lib/fuchsia/libclang_rt.{}-aarch64.a", s)), - name: format!("librustc_rt.{}.a", s), + name: format!("librustc-{}_rt.{}.a", channel, s), }); } } diff --git a/src/librustc_codegen_ssa/back/link.rs b/src/librustc_codegen_ssa/back/link.rs index d3b8f7ea33f..aaa4448fc19 100644 --- a/src/librustc_codegen_ssa/back/link.rs +++ b/src/librustc_codegen_ssa/back/link.rs @@ -765,6 +765,9 @@ fn link_sanitizer_runtime(sess: &Session, crate_type: config::CrateType, linker: let default_sysroot = filesearch::get_or_default_sysroot(); let default_tlib = filesearch::make_target_lib_path(&default_sysroot, sess.opts.target_triple.triple()); + let channel = option_env!("CFG_RELEASE_CHANNEL") + .map(|channel| format!("-{}", channel)) + .unwrap_or_default(); match sess.opts.target_triple.triple() { "x86_64-apple-darwin" => { @@ -772,13 +775,13 @@ fn link_sanitizer_runtime(sess: &Session, crate_type: config::CrateType, linker: // LLVM will link to `@rpath/*.dylib`, so we need to specify an // rpath to the library as well (the rpath should be absolute, see // PR #41352 for details). - let libname = format!("rustc_rt.{}", name); + let libname = format!("rustc{}_rt.{}", channel, name); let rpath = default_tlib.to_str().expect("non-utf8 component in path"); linker.args(&["-Wl,-rpath".into(), "-Xlinker".into(), rpath.into()]); linker.link_dylib(Symbol::intern(&libname)); } "x86_64-unknown-linux-gnu" | "x86_64-fuchsia" | "aarch64-fuchsia" => { - let filename = format!("librustc_rt.{}.a", name); + let filename = format!("librustc{}_rt.{}.a", channel, name); let path = default_tlib.join(&filename); linker.link_whole_rlib(&path); } diff --git a/src/librustc_codegen_ssa/build.rs b/src/librustc_codegen_ssa/build.rs new file mode 100644 index 00000000000..ea2af6e192e --- /dev/null +++ b/src/librustc_codegen_ssa/build.rs @@ -0,0 +1,4 @@ +fn main() { + println!("cargo:rerun-if-changed=build.rs"); + println!("cargo:rerun-if-env-changed=CFG_RELEASE_CHANNEL"); +} |
