tags 783205 + patch thanks Hi Sylvestre,
As well as C header include path, there were also issues finding standard libraries and the dynamic linker on s390x. (Exactly the same issues as we had on kfreebsd a few months back.) I've written the attached patch for s390x, tested on Debian's s390x porterbox, which successfully compiles a small C or C++ executable now. Regards, -- Steven Chamberlain [email protected]
From: Steven Chamberlain <[email protected]> Date: Sun, 10 May 2015 19:46:59 +0100 Subject: support Debian s390x multiarch paths --- a/clang/lib/Driver/ToolChains.cpp +++ b/clang/lib/Driver/ToolChains.cpp @@ -2990,6 +2990,10 @@ static std::string getMultiarchTriple(co if (llvm::sys::fs::exists(SysRoot + "/lib/powerpc64le-linux-gnu")) return "powerpc64le-linux-gnu"; return TargetTriple.str(); + case llvm::Triple::systemz: + if (llvm::sys::fs::exists(SysRoot + "/lib/s390x-linux-gnu")) + return "s390x-linux-gnu"; + return TargetTriple.str(); } } @@ -3361,6 +3365,9 @@ void Linux::AddClangSystemIncludeArgs(co const StringRef PPC64LEMultiarchIncludeDirs[] = { "/usr/include/powerpc64le-linux-gnu" }; + const StringRef SYSTEMZMultiarchIncludeDirs[] = { + "/usr/include/s390x-linux-gnu" + }; ArrayRef<StringRef> MultiarchIncludeDirs; if (getTriple().getArch() == llvm::Triple::x86_64) { MultiarchIncludeDirs = X86_64MultiarchIncludeDirs; @@ -3390,6 +3397,8 @@ void Linux::AddClangSystemIncludeArgs(co MultiarchIncludeDirs = PPC64MultiarchIncludeDirs; } else if (getTriple().getArch() == llvm::Triple::ppc64le) { MultiarchIncludeDirs = PPC64LEMultiarchIncludeDirs; + } else if (getTriple().getArch() == llvm::Triple::systemz) { + MultiarchIncludeDirs = SYSTEMZMultiarchIncludeDirs; } for (StringRef Dir : MultiarchIncludeDirs) { if (llvm::sys::fs::exists(SysRoot + Dir)) { --- a/clang/lib/Driver/Tools.cpp +++ b/clang/lib/Driver/Tools.cpp @@ -7223,13 +7223,14 @@ static StringRef getLinuxDynamicLinker(c ? "/lib64/ld-linux-mipsn8.so.1" : "/lib64/ld.so.1"; } else if (ToolChain.getArch() == llvm::Triple::ppc) return "/lib/ld.so.1"; - else if (ToolChain.getArch() == llvm::Triple::ppc64 || - ToolChain.getArch() == llvm::Triple::systemz) + else if (ToolChain.getArch() == llvm::Triple::ppc64) return "/lib64/ld64.so.1"; else if (ToolChain.getArch() == llvm::Triple::ppc64le) return "/lib64/ld64.so.2"; else if (ToolChain.getArch() == llvm::Triple::sparcv9) return "/lib64/ld-linux.so.2"; + else if (ToolChain.getArch() == llvm::Triple::systemz) + return "/lib/ld64.so.1"; else if (ToolChain.getArch() == llvm::Triple::x86_64 && ToolChain.getTriple().getEnvironment() == llvm::Triple::GNUX32) return "/libx32/ld-linux-x32.so.2";
signature.asc
Description: Digital signature

