diff options
| author | Luqman Aden <me@luqman.ca> | 2021-06-01 17:13:10 -0700 |
|---|---|---|
| committer | Luqman Aden <me@luqman.ca> | 2021-06-01 17:13:10 -0700 |
| commit | f667aca127cfcd13c186075a7c98bbd1f9dc2ca7 (patch) | |
| tree | bbff20782476a07631acfe8d07a872eadfffb8bc | |
| parent | 625d5a693e4697bcafdd34fd1a38c281acabb8e9 (diff) | |
| download | rust-f667aca127cfcd13c186075a7c98bbd1f9dc2ca7.tar.gz rust-f667aca127cfcd13c186075a7c98bbd1f9dc2ca7.zip | |
Tweak wasm_base target spec to indicate linker is not GNU and update linker inferring logic for wasm-ld.
| -rw-r--r-- | compiler/rustc_codegen_ssa/src/back/link.rs | 2 | ||||
| -rw-r--r-- | compiler/rustc_codegen_ssa/src/back/linker.rs | 8 | ||||
| -rw-r--r-- | compiler/rustc_target/src/spec/wasm_base.rs | 1 |
3 files changed, 8 insertions, 3 deletions
diff --git a/compiler/rustc_codegen_ssa/src/back/link.rs b/compiler/rustc_codegen_ssa/src/back/link.rs index 32275e9b073..5f8f1110c83 100644 --- a/compiler/rustc_codegen_ssa/src/back/link.rs +++ b/compiler/rustc_codegen_ssa/src/back/link.rs @@ -1005,6 +1005,8 @@ fn linker_and_flavor(sess: &Session) -> (PathBuf, LinkerFlavor) { || stem.ends_with("-clang") { LinkerFlavor::Gcc + } else if stem == "wasm-ld" || stem.ends_with("-wasm-ld") { + LinkerFlavor::Lld(LldFlavor::Wasm) } else if stem == "ld" || stem == "ld.lld" || stem.ends_with("-ld") { LinkerFlavor::Ld } else if stem == "link" || stem == "lld-link" { diff --git a/compiler/rustc_codegen_ssa/src/back/linker.rs b/compiler/rustc_codegen_ssa/src/back/linker.rs index 4dc9a3f5e41..4631aa23398 100644 --- a/compiler/rustc_codegen_ssa/src/back/linker.rs +++ b/compiler/rustc_codegen_ssa/src/back/linker.rs @@ -472,7 +472,9 @@ impl<'a> Linker for GccLinker<'a> { // eliminate the metadata. If we're building an executable, however, // --gc-sections drops the size of hello world from 1.8MB to 597K, a 67% // reduction. - } else if self.sess.target.linker_is_gnu && !keep_metadata { + } else if (self.sess.target.linker_is_gnu || self.sess.target.is_like_wasm) + && !keep_metadata + { self.linker_arg("--gc-sections"); } } @@ -480,13 +482,13 @@ impl<'a> Linker for GccLinker<'a> { fn no_gc_sections(&mut self) { if self.sess.target.is_like_osx { self.linker_arg("-no_dead_strip"); - } else if self.sess.target.linker_is_gnu { + } else if self.sess.target.linker_is_gnu || self.sess.target.is_like_wasm { self.linker_arg("--no-gc-sections"); } } fn optimize(&mut self) { - if !self.sess.target.linker_is_gnu { + if !self.sess.target.linker_is_gnu && !self.sess.target.is_like_wasm { return; } diff --git a/compiler/rustc_target/src/spec/wasm_base.rs b/compiler/rustc_target/src/spec/wasm_base.rs index 87e740de08e..0c8d77a62b0 100644 --- a/compiler/rustc_target/src/spec/wasm_base.rs +++ b/compiler/rustc_target/src/spec/wasm_base.rs @@ -102,6 +102,7 @@ pub fn options() -> TargetOptions { // we use the LLD shipped with the Rust toolchain by default linker: Some("rust-lld".to_owned()), lld_flavor: LldFlavor::Wasm, + linker_is_gnu: false, // No need for indirection here, simd types can always be passed by // value as the whole module either has simd or not, which is different |
