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";

Attachment: signature.asc
Description: Digital signature

Reply via email to