]> git.lizzy.rs Git - rust.git/commitdiff
Adjust linker_is_gnu branches for cases that don't work on windows.
authorLuqman Aden <me@luqman.ca>
Mon, 17 May 2021 23:14:13 +0000 (16:14 -0700)
committerLuqman Aden <me@luqman.ca>
Mon, 17 May 2021 23:14:13 +0000 (16:14 -0700)
compiler/rustc_codegen_ssa/src/back/linker.rs

index 74629fcd118c3eed046b5a77a5299146e1418cc1..dfcb3fe94f63069486875eac785924b935b7227e 100644 (file)
@@ -276,18 +276,27 @@ fn cmd(&mut self) -> &mut Command {
     fn set_output_kind(&mut self, output_kind: LinkOutputKind, out_filename: &Path) {
         match output_kind {
             LinkOutputKind::DynamicNoPicExe => {
-                if !self.is_ld && self.sess.target.linker_is_gnu {
+                if !self.is_ld
+                    && self.sess.target.linker_is_gnu
+                    && !self.sess.target.is_like_windows
+                {
                     self.cmd.arg("-no-pie");
                 }
             }
             LinkOutputKind::DynamicPicExe => {
-                // `-pie` works for both gcc wrapper and ld.
-                self.cmd.arg("-pie");
+                // noop on windows w/ gcc & ld, error w/ lld
+                if !self.sess.target.is_like_windows {
+                    // `-pie` works for both gcc wrapper and ld
+                    self.cmd.arg("-pie");
+                }
             }
             LinkOutputKind::StaticNoPicExe => {
                 // `-static` works for both gcc wrapper and ld.
                 self.cmd.arg("-static");
-                if !self.is_ld && self.sess.target.linker_is_gnu {
+                if !self.is_ld
+                    && self.sess.target.linker_is_gnu
+                    && !self.sess.target.is_like_windows
+                {
                     self.cmd.arg("-no-pie");
                 }
             }
@@ -347,7 +356,7 @@ fn link_dylib(&mut self, lib: Symbol, verbatim: bool, as_needed: bool) {
                 // has -needed-l{} / -needed_library {}
                 // but we have no way to detect that here.
                 self.sess.warn("`as-needed` modifier not implemented yet for ld64");
-            } else if self.sess.target.linker_is_gnu {
+            } else if self.sess.target.linker_is_gnu && !self.sess.target.is_like_windows {
                 self.linker_arg("--no-as-needed");
             } else {
                 self.sess.warn("`as-needed` modifier not supported for current linker");
@@ -358,7 +367,7 @@ fn link_dylib(&mut self, lib: Symbol, verbatim: bool, as_needed: bool) {
         if !as_needed {
             if self.sess.target.is_like_osx {
                 // See above FIXME comment
-            } else if self.sess.target.linker_is_gnu {
+            } else if self.sess.target.linker_is_gnu && !self.sess.target.is_like_windows {
                 self.linker_arg("--as-needed");
             }
         }
@@ -690,7 +699,7 @@ fn add_no_exec(&mut self) {
     }
 
     fn add_as_needed(&mut self) {
-        if self.sess.target.linker_is_gnu {
+        if self.sess.target.linker_is_gnu && !self.sess.target.is_like_windows {
             self.linker_arg("--as-needed");
         } else if self.sess.target.is_like_solaris {
             // -z ignore is the Solaris equivalent to the GNU ld --as-needed option