diff --git a/src/bootstrap/compile.rs b/src/bootstrap/compile.rs index aef2df3e278..298bd58c6cd 100644 --- a/src/bootstrap/compile.rs +++ b/src/bootstrap/compile.rs @@ -821,8 +821,11 @@ fn copy_lld_to_sysroot(builder: &Builder, .join("bin"); t!(fs::create_dir_all(&dst)); - let exe = exe("lld", &target); - builder.copy(&lld_install_root.join("bin").join(&exe), &dst.join(&exe)); + let src_exe = exe("lld", &target); + let dst_exe = exe("rust-lld", &target); + // we prepend this bin directory to the user PATH when linking Rust binaries. To + // avoid shadowing the system LLD we rename the LLD we provide to `rust-lld`. + builder.copy(&lld_install_root.join("bin").join(&src_exe), &dst.join(&dst_exe)); } /// Cargo's output path for the standard library in a given stage, compiled diff --git a/src/bootstrap/dist.rs b/src/bootstrap/dist.rs index 19a2c94dca7..0da9611a5a9 100644 --- a/src/bootstrap/dist.rs +++ b/src/bootstrap/dist.rs @@ -493,12 +493,13 @@ impl Step for Rustc { // Copy over lld if it's there if builder.config.lld_enabled { - let exe = exe("lld", &compiler.host); + let exe = exe("rust-lld", &compiler.host); let src = builder.sysroot_libdir(compiler, host) .parent() .unwrap() .join("bin") .join(&exe); + // for the rationale about this rename check `compile::copy_lld_to_sysroot` let dst = image.join("lib/rustlib") .join(&*host) .join("bin") diff --git a/src/librustc_target/spec/wasm32_unknown_unknown.rs b/src/librustc_target/spec/wasm32_unknown_unknown.rs index 56170bbb869..6f51495bae9 100644 --- a/src/librustc_target/spec/wasm32_unknown_unknown.rs +++ b/src/librustc_target/spec/wasm32_unknown_unknown.rs @@ -51,6 +51,9 @@ pub fn target() -> Result { // no dynamic linking, no need for default visibility! default_hidden_visibility: true, + // we use the LLD shipped with the Rust toolchain by default + linker: Some("rust-lld".to_owned()), + .. Default::default() }; Ok(Target {