r253813 - Driver: Specifically tell the linker the target for mingw-w64

Martell Malone via cfe-commits cfe-commits at lists.llvm.org
Sat Nov 21 21:40:07 PST 2015


Author: martell
Date: Sat Nov 21 23:40:06 2015
New Revision: 253813

URL: http://llvm.org/viewvc/llvm-project?rev=253813&view=rev
Log:
Driver: Specifically tell the linker the target for mingw-w64

Cross compiling from linux and OSX results in Error: Exec format.
This is because the linker is expecting ELF formated objects.
By passing the target we can explicitly tell the linker that
it should be linking COFF objects regardless of the host.

Modified:
    cfe/trunk/lib/Driver/Tools.cpp

Modified: cfe/trunk/lib/Driver/Tools.cpp
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Driver/Tools.cpp?rev=253813&r1=253812&r2=253813&view=diff
==============================================================================
--- cfe/trunk/lib/Driver/Tools.cpp (original)
+++ cfe/trunk/lib/Driver/Tools.cpp Sat Nov 21 23:40:06 2015
@@ -9478,7 +9478,14 @@ void MinGW::Linker::ConstructJob(Compila
   StringRef LinkerName = Args.getLastArgValue(options::OPT_fuse_ld_EQ, "ld");
   if (LinkerName.equals_lower("lld")) {
     CmdArgs.push_back("-flavor");
-    CmdArgs.push_back("old-gnu");
+    CmdArgs.push_back("gnu");
+    CmdArgs.push_back("-target");
+    if (TC.getArch() == llvm::Triple::x86)
+      CmdArgs.push_back("i686--windows-gnu");
+    if (TC.getArch() == llvm::Triple::x86_64)
+      CmdArgs.push_back("x86_64--windows-gnu");
+    if (TC.getArch() == llvm::Triple::arm)
+      CmdArgs.push_back("armv7--windows-gnu");
   } else if (!LinkerName.equals_lower("ld")) {
     D.Diag(diag::err_drv_unsupported_linker) << LinkerName;
   }




More information about the cfe-commits mailing list