diff options
author | Eli Friedman <eli.friedman@gmail.com> | 2011-11-08 19:43:37 +0000 |
---|---|---|
committer | Eli Friedman <eli.friedman@gmail.com> | 2011-11-08 19:43:37 +0000 |
commit | 5bea4f6860543017be326e3fbe702edb2678d898 (patch) | |
tree | bb997f92f9ac9074076ce6bb455791bcb558a054 | |
parent | d9d137e6bc54bad6a7aa64b667aea22230e8264b (diff) |
Misc fixes for clang driver on Mips Linux. Patch by Simon Atanasyan.
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@144108 91177308-0d34-0410-b5e6-96231b3b80d8
-rw-r--r-- | lib/Driver/ToolChains.cpp | 24 | ||||
-rw-r--r-- | lib/Driver/Tools.cpp | 11 |
2 files changed, 35 insertions, 0 deletions
diff --git a/lib/Driver/ToolChains.cpp b/lib/Driver/ToolChains.cpp index c3861efd16..e5f82bab7d 100644 --- a/lib/Driver/ToolChains.cpp +++ b/lib/Driver/ToolChains.cpp @@ -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" : ""; diff --git a/lib/Driver/Tools.cpp b/lib/Driver/Tools.cpp index 9a90b85042..6576fcae3e 100644 --- a/lib/Driver/Tools.cpp +++ b/lib/Driver/Tools.cpp @@ -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) |