]> granicus.if.org Git - clang/commitdiff
Misc fixes for clang driver on Mips Linux. Patch by Simon Atanasyan.
authorEli Friedman <eli.friedman@gmail.com>
Tue, 8 Nov 2011 19:43:37 +0000 (19:43 +0000)
committerEli Friedman <eli.friedman@gmail.com>
Tue, 8 Nov 2011 19:43:37 +0000 (19:43 +0000)
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@144108 91177308-0d34-0410-b5e6-96231b3b80d8

lib/Driver/ToolChains.cpp
lib/Driver/Tools.cpp

index c3861efd16af16a6a7283fee4b81c228649ef2b8..e5f82bab7db2c5234940e0da481d2e8717a38de3 100644 (file)
@@ -1191,6 +1191,20 @@ Generic_GCC::GCCInstallationDetector::GCCInstallationDetector(const Driver &D)
     };
     LibDirs.append(X86LibDirs, X86LibDirs + llvm::array_lengthof(X86LibDirs));
     Triples.append(X86Triples, X86Triples + llvm::array_lengthof(X86Triples));
+  } else if (HostArch == llvm::Triple::mips) {
+    static const char *const MIPSLibDirs[] = { "/lib" };
+    static const char *const MIPSTriples[] = { "mips-linux-gnu" };
+    LibDirs.append(MIPSLibDirs,
+                   MIPSLibDirs + llvm::array_lengthof(MIPSLibDirs));
+    Triples.append(MIPSTriples,
+                   MIPSTriples + llvm::array_lengthof(MIPSTriples));
+  } else if (HostArch == llvm::Triple::mipsel) {
+    static const char *const MIPSELLibDirs[] = { "/lib" };
+    static const char *const MIPSELTriples[] = { "mipsel-linux-gnu" };
+    LibDirs.append(MIPSELLibDirs,
+                   MIPSELLibDirs + llvm::array_lengthof(MIPSELLibDirs));
+    Triples.append(MIPSELTriples,
+                   MIPSELTriples + llvm::array_lengthof(MIPSELTriples));
   } else if (HostArch == llvm::Triple::ppc) {
     static const char *const PPCLibDirs[] = { "/lib32", "/lib" };
     static const char *const PPCTriples[] = {
@@ -1773,6 +1787,14 @@ static std::string getMultiarchTriple(const llvm::Triple TargetTriple,
     if (llvm::sys::fs::exists(SysRoot + "/lib/x86_64-linux-gnu"))
       return "x86_64-linux-gnu";
     return TargetTriple.str();
+  case llvm::Triple::mips:
+    if (llvm::sys::fs::exists(SysRoot + "/lib/mips-linux-gnu"))
+      return "mips-linux-gnu";
+    return TargetTriple.str();
+  case llvm::Triple::mipsel:
+    if (llvm::sys::fs::exists(SysRoot + "/lib/mipsel-linux-gnu"))
+      return "mipsel-linux-gnu";
+    return TargetTriple.str();
   }
 }
 
@@ -1829,6 +1851,8 @@ Linux::Linux(const HostInfo &Host, const llvm::Triple &Triple)
   // to the link paths.
   path_list &Paths = getFilePaths();
   const bool Is32Bits = (getArch() == llvm::Triple::x86 ||
+                         getArch() == llvm::Triple::mips ||
+                         getArch() == llvm::Triple::mipsel ||
                          getArch() == llvm::Triple::ppc);
 
   const std::string Suffix32 = Arch == llvm::Triple::x86_64 ? "/32" : "";
index 9a90b85042e1e8f3566dd0fb5779e4a86f077123..6576fcae3e4280d78112fc90fc776c668faf84d7 100644 (file)
@@ -4338,6 +4338,14 @@ void linuxtools::Link::ConstructJob(Compilation &C, const JobAction &JA,
     CmdArgs.push_back("elf32ppclinux");
   else if (ToolChain.getArch() == llvm::Triple::ppc64)
     CmdArgs.push_back("elf64ppc");
+  else if (ToolChain.getArch() == llvm::Triple::mips)
+    CmdArgs.push_back("elf32btsmip");
+  else if (ToolChain.getArch() == llvm::Triple::mipsel)
+    CmdArgs.push_back("elf32ltsmip");
+  else if (ToolChain.getArch() == llvm::Triple::mips64)
+    CmdArgs.push_back("elf64btsmip");
+  else if (ToolChain.getArch() == llvm::Triple::mips64el)
+    CmdArgs.push_back("elf64ltsmip");
   else
     CmdArgs.push_back("elf_x86_64");
 
@@ -4361,6 +4369,9 @@ void linuxtools::Link::ConstructJob(Compilation &C, const JobAction &JA,
     else if (ToolChain.getArch() == llvm::Triple::arm ||
              ToolChain.getArch() == llvm::Triple::thumb)
       CmdArgs.push_back("/lib/ld-linux.so.3");
+    else if (ToolChain.getArch() == llvm::Triple::mips ||
+             ToolChain.getArch() == llvm::Triple::mipsel)
+      CmdArgs.push_back("/lib/ld.so.1");
     else if (ToolChain.getArch() == llvm::Triple::ppc)
       CmdArgs.push_back("/lib/ld.so.1");
     else if (ToolChain.getArch() == llvm::Triple::ppc64)