]> granicus.if.org Git - clang/commitdiff
Revert "[Driver] MinGW: Remove custom linker detection"
authorMartell Malone <martellmalone@gmail.com>
Wed, 13 Sep 2017 00:57:50 +0000 (00:57 +0000)
committerMartell Malone <martellmalone@gmail.com>
Wed, 13 Sep 2017 00:57:50 +0000 (00:57 +0000)
This reverts rL313102 because it still fails some build bot tests.

On many linux bots it fails with the following error.
error: invalid linker name in argument '-fuse-ld=lld'
and on some windows bots also because there is no ld.lld.exe
lld-link.exe: warning: ignoring unknown argument: -fuse-ld=lld

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@313104 91177308-0d34-0410-b5e6-96231b3b80d8

lib/Driver/ToolChains/MinGW.cpp
test/Driver/mingw-useld.c

index 6247efb3059db2594f7c908bc1268c85bfc5cb39..46e2289219c9fe56f7f7505a772c03a3bb00b1e0 100644 (file)
@@ -104,6 +104,14 @@ void tools::MinGW::Linker::ConstructJob(Compilation &C, const JobAction &JA,
   // handled somewhere else.
   Args.ClaimAllArgs(options::OPT_w);
 
+  StringRef LinkerName = Args.getLastArgValue(options::OPT_fuse_ld_EQ, "ld");
+  if (LinkerName.equals_lower("lld")) {
+    CmdArgs.push_back("-flavor");
+    CmdArgs.push_back("gnu");
+  } else if (!LinkerName.equals_lower("ld")) {
+    D.Diag(diag::err_drv_unsupported_linker) << LinkerName;
+  }
+
   if (!D.SysRoot.empty())
     CmdArgs.push_back(Args.MakeArgString("--sysroot=" + D.SysRoot));
 
@@ -233,7 +241,7 @@ void tools::MinGW::Linker::ConstructJob(Compilation &C, const JobAction &JA,
 
       if (Args.hasArg(options::OPT_static))
         CmdArgs.push_back("--end-group");
-      else
+      else if (!LinkerName.equals_lower("lld"))
         AddLibGCC(Args, CmdArgs);
     }
 
@@ -244,7 +252,7 @@ void tools::MinGW::Linker::ConstructJob(Compilation &C, const JobAction &JA,
       CmdArgs.push_back(Args.MakeArgString(TC.GetFilePath("crtend.o")));
     }
   }
-  const char *Exec = Args.MakeArgString(TC.GetLinkerPath());
+  const char *Exec = Args.MakeArgString(TC.GetProgramPath(LinkerName.data()));
   C.addCommand(llvm::make_unique<Command>(JA, *this, Exec, CmdArgs, Inputs));
 }
 
index e364635eff01c12caa99c58e1f8b185ef2ab0773..a0ab5a933864b1783fcf9bba6e45e4e256d3bd05 100644 (file)
@@ -1,19 +1,19 @@
-// RUN: %clang -### -target i686-pc-windows-gnu -fuse-ld=platform --sysroot=%S/Inputs/mingw_clang_tree/mingw32 %s 2>&1 | FileCheck -check-prefix=CHECK_LD_32 %s
-// CHECK_LD_32: "{{[^"]*}}ld{{(.exe)?}}"
+// RUN: %clang -### -target i686-pc-windows-gnu --sysroot=%S/Inputs/mingw_clang_tree/mingw32 %s 2>&1 | FileCheck -check-prefix=CHECK_LD_32 %s
+// CHECK_LD_32: ld{{(.exe)?}}"
 // CHECK_LD_32: "i386pe"
-// CHECK_LD_32-NOT: "{{[^"]*}}ld.lld{{(.exe)?}}"
+// CHECK_LD_32-NOT: "-flavor" "gnu"
 
-// RUN: %clang -### -target i686-pc-windows-gnu -fuse-ld=lld --sysroot=%S/Inputs/mingw_clang_tree/mingw32 %s 2>&1 | FileCheck -check-prefix=CHECK_LLD_32 %s
+// RUN: %clang -### -target i686-pc-windows-gnu --sysroot=%S/Inputs/mingw_clang_tree/mingw32 %s -fuse-ld=lld 2>&1 | FileCheck -check-prefix=CHECK_LLD_32 %s
 // CHECK_LLD_32-NOT: invalid linker name in argument
-// CHECK_LLD_32: "{{[^"]*}}ld.lld{{(.exe)?}}"
+// CHECK_LLD_32: lld{{(.exe)?}}" "-flavor" "gnu"
 // CHECK_LLD_32: "i386pe"
 
-// RUN: %clang -### -target x86_64-pc-windows-gnu -fuse-ld=lld --sysroot=%S/Inputs/mingw_clang_tree/mingw32 %s 2>&1 | FileCheck -check-prefix=CHECK_LLD_64 %s
+// RUN: %clang -### -target x86_64-pc-windows-gnu --sysroot=%S/Inputs/mingw_clang_tree/mingw32 %s -fuse-ld=lld 2>&1 | FileCheck -check-prefix=CHECK_LLD_64 %s
 // CHECK_LLD_64-NOT: invalid linker name in argument
-// CHECK_LLD_64: "{{[^"]*}}ld.lld{{(.exe)?}}"
+// CHECK_LLD_64: lld{{(.exe)?}}" "-flavor" "gnu"
 // CHECK_LLD_64: "i386pep"
 
-// RUN: %clang -### -target arm-pc-windows-gnu -fuse-ld=lld --sysroot=%S/Inputs/mingw_clang_tree/mingw32 %s 2>&1 | FileCheck -check-prefix=CHECK_LLD_ARM %s
+// RUN: %clang -### -target arm-pc-windows-gnu --sysroot=%S/Inputs/mingw_clang_tree/mingw32 %s -fuse-ld=lld 2>&1 | FileCheck -check-prefix=CHECK_LLD_ARM %s
 // CHECK_LLD_ARM-NOT: invalid linker name in argument
-// CHECK_LLD_ARM: "{{[^"]*}}ld.lld{{(.exe)?}}"
+// CHECK_LLD_ARM: lld{{(.exe)?}}" "-flavor" "gnu"
 // CHECK_LLD_ARM: "thumb2pe"