From d092ad27c9d8fa262d9b3e5784efd4e00320a80c Mon Sep 17 00:00:00 2001 From: comex Date: Tue, 29 May 2018 17:19:03 -0700 Subject: [PATCH 1/2] Pass -lfoo to linker rather than -l foo. --- src/librustc_codegen_llvm/back/linker.rs | 17 +++++++++++++---- 1 file changed, 13 insertions(+), 4 deletions(-) diff --git a/src/librustc_codegen_llvm/back/linker.rs b/src/librustc_codegen_llvm/back/linker.rs index dd1983bdc1723..73ef4ec62edf2 100644 --- a/src/librustc_codegen_llvm/back/linker.rs +++ b/src/librustc_codegen_llvm/back/linker.rs @@ -159,6 +159,15 @@ impl<'a> GccLinker<'a> { self } + fn add_lib(&mut self, lib: S) -> &mut Self + where S: AsRef + { + let mut os = OsString::from("-l"); + os.push(lib.as_ref()); + self.cmd.arg(os); + self + } + fn takes_hints(&self) -> bool { !self.sess.target.target.options.is_like_osx } @@ -185,8 +194,8 @@ impl<'a> GccLinker<'a> { } impl<'a> Linker for GccLinker<'a> { - fn link_dylib(&mut self, lib: &str) { self.hint_dynamic(); self.cmd.arg("-l").arg(lib); } - fn link_staticlib(&mut self, lib: &str) { self.hint_static(); self.cmd.arg("-l").arg(lib); } + fn link_dylib(&mut self, lib: &str) { self.hint_dynamic(); self.add_lib(lib); } + fn link_staticlib(&mut self, lib: &str) { self.hint_static(); self.add_lib(lib); } fn link_rlib(&mut self, lib: &Path) { self.hint_static(); self.cmd.arg(lib); } fn include_path(&mut self, path: &Path) { self.cmd.arg("-L").arg(path); } fn framework_path(&mut self, path: &Path) { self.cmd.arg("-F").arg(path); } @@ -202,7 +211,7 @@ impl<'a> Linker for GccLinker<'a> { fn link_rust_dylib(&mut self, lib: &str, _path: &Path) { self.hint_dynamic(); - self.cmd.arg("-l").arg(lib); + self.add_lib(lib); } fn link_framework(&mut self, framework: &str) { @@ -238,7 +247,7 @@ impl<'a> Linker for GccLinker<'a> { v.push(lib); self.linker_arg(&v); } else { - self.linker_arg("--whole-archive").cmd.arg(lib); + self.linker_arg("--whole-archive").add_lib(lib); self.linker_arg("--no-whole-archive"); } } From 089eb8cdccf3e9f14d260abe5b4ac956111b7cc6 Mon Sep 17 00:00:00 2001 From: comex Date: Tue, 29 May 2018 18:58:45 -0700 Subject: [PATCH 2/2] fix --- src/librustc_codegen_llvm/back/linker.rs | 8 +++----- 1 file changed, 3 insertions(+), 5 deletions(-) diff --git a/src/librustc_codegen_llvm/back/linker.rs b/src/librustc_codegen_llvm/back/linker.rs index 73ef4ec62edf2..f5461602e58f7 100644 --- a/src/librustc_codegen_llvm/back/linker.rs +++ b/src/librustc_codegen_llvm/back/linker.rs @@ -159,9 +159,7 @@ impl<'a> GccLinker<'a> { self } - fn add_lib(&mut self, lib: S) -> &mut Self - where S: AsRef - { + fn add_lib(&mut self, lib: &str) -> &mut Self { let mut os = OsString::from("-l"); os.push(lib.as_ref()); self.cmd.arg(os); @@ -229,7 +227,7 @@ impl<'a> Linker for GccLinker<'a> { self.hint_static(); let target = &self.sess.target.target; if !target.options.is_like_osx { - self.linker_arg("--whole-archive").cmd.arg("-l").arg(lib); + self.linker_arg("--whole-archive").add_lib(lib); self.linker_arg("--no-whole-archive"); } else { // -force_load is the macOS equivalent of --whole-archive, but it @@ -247,7 +245,7 @@ impl<'a> Linker for GccLinker<'a> { v.push(lib); self.linker_arg(&v); } else { - self.linker_arg("--whole-archive").add_lib(lib); + self.linker_arg("--whole-archive").cmd.arg(lib); self.linker_arg("--no-whole-archive"); } }