<div dir="ltr">(Reduced repro: <a href="https://lists.llvm.org/pipermail/cfe-commits/Week-of-Mon-20210322/362775.html">https://lists.llvm.org/pipermail/cfe-commits/Week-of-Mon-20210322/362775.html</a> )</div><br><div class="gmail_quote"><div dir="ltr" class="gmail_attr">On Tue, Mar 23, 2021 at 11:14 PM Zequan Wu via cfe-commits <<a href="mailto:cfe-commits@lists.llvm.org">cfe-commits@lists.llvm.org</a>> wrote:<br></div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex"><br>
Author: Zequan Wu<br>
Date: 2021-03-23T20:12:09-07:00<br>
New Revision: aae84b8e3939e815bbc1e64b3b30c0f10b055be4<br>
<br>
URL: <a href="https://github.com/llvm/llvm-project/commit/aae84b8e3939e815bbc1e64b3b30c0f10b055be4" rel="noreferrer" target="_blank">https://github.com/llvm/llvm-project/commit/aae84b8e3939e815bbc1e64b3b30c0f10b055be4</a><br>
DIFF: <a href="https://github.com/llvm/llvm-project/commit/aae84b8e3939e815bbc1e64b3b30c0f10b055be4.diff" rel="noreferrer" target="_blank">https://github.com/llvm/llvm-project/commit/aae84b8e3939e815bbc1e64b3b30c0f10b055be4.diff</a><br>
<br>
LOG: Revert "[Driver] Bring back "Clean up Debian multiarch /usr/include/<triplet> madness" and restore i586-linux-gnu"<br>
<br>
This breaks bots in chromium goma building.<br>
<br>
This reverts commit 424bf5d8918f6356f1b8e99205c5fc8b4783ca22.<br>
<br>
Added: <br>
<br>
<br>
Modified: <br>
    clang/lib/Driver/ToolChains/Gnu.cpp<br>
    clang/lib/Driver/ToolChains/Linux.cpp<br>
<br>
Removed: <br>
<br>
<br>
<br>
################################################################################<br>
diff  --git a/clang/lib/Driver/ToolChains/Gnu.cpp b/clang/lib/Driver/ToolChains/Gnu.cpp<br>
index bf0c3fa679d2..f2106a8c09f3 100644<br>
--- a/clang/lib/Driver/ToolChains/Gnu.cpp<br>
+++ b/clang/lib/Driver/ToolChains/Gnu.cpp<br>
@@ -2109,11 +2109,9 @@ void Generic_GCC::GCCInstallationDetector::AddDefaultGCCPrefixes(<br>
   static const char *const X32LibDirs[] = {"/libx32"};<br>
   static const char *const X86LibDirs[] = {"/lib32", "/lib"};<br>
   static const char *const X86Triples[] = {<br>
-      "i586-linux-gnu",     "i686-linux-gnu",<br>
-      "i686-pc-linux-gnu",  "i386-redhat-linux6E",<br>
-      "i686-redhat-linux",  "i386-redhat-linux",<br>
-      "i586-suse-linux",    "i686-montavista-linux",<br>
-      "i686-linux-android", "i386-gnu",<br>
+      "i686-linux-gnu",        "i686-pc-linux-gnu",  "i386-redhat-linux6E",<br>
+      "i686-redhat-linux",     "i386-redhat-linux",  "i586-suse-linux",<br>
+      "i686-montavista-linux", "i686-linux-android", "i386-gnu",<br>
   };<br>
<br>
   static const char *const M68kLibDirs[] = {"/lib"};<br>
@@ -3015,6 +3013,8 @@ Generic_GCC::addGCCLibStdCxxIncludePaths(const llvm::opt::ArgList &DriverArgs,<br>
   const Multilib &Multilib = GCCInstallation.getMultilib();<br>
   const std::string Triple = getMultiarchTriple(<br>
       getDriver(), GCCInstallation.getTriple(), getDriver().SysRoot);<br>
+  const std::string TargetMultiarchTriple =<br>
+      getMultiarchTriple(getDriver(), getTriple(), getDriver().SysRoot);<br>
   const GCCVersion &Version = GCCInstallation.getVersion();<br>
<br>
   // Try /../$triple/include/c++/$version then /../include/c++/$version.<br>
<br>
diff  --git a/clang/lib/Driver/ToolChains/Linux.cpp b/clang/lib/Driver/ToolChains/Linux.cpp<br>
index 0df2d3793819..cbfa5152bc8e 100644<br>
--- a/clang/lib/Driver/ToolChains/Linux.cpp<br>
+++ b/clang/lib/Driver/ToolChains/Linux.cpp<br>
@@ -604,11 +604,172 @@ void Linux::AddClangSystemIncludeArgs(const ArgList &DriverArgs,<br>
     return;<br>
   }<br>
<br>
-  // On Android and Debian, add /usr/include/$triple if exists.<br>
-  std::string MultiarchIncludeDir = getMultiarchTriple(D, getTriple(), SysRoot);<br>
-  if (!MultiarchIncludeDir.empty() &&<br>
-      D.getVFS().exists(SysRoot + "/usr/include/" + MultiarchIncludeDir))<br>
-    addExternCSystemInclude(DriverArgs, CC1Args, SysRoot + "/usr/include/" + MultiarchIncludeDir);<br>
+  // Implement generic Debian multiarch support.<br>
+  const StringRef X86_64MultiarchIncludeDirs[] = {<br>
+      "/usr/include/x86_64-linux-gnu",<br>
+<br>
+      // FIXME: These are older forms of multiarch. It's not clear that they're<br>
+      // in use in any released version of Debian, so we should consider<br>
+      // removing them.<br>
+      "/usr/include/i686-linux-gnu/64", "/usr/include/i486-linux-gnu/64"};<br>
+  const StringRef X86MultiarchIncludeDirs[] = {<br>
+      "/usr/include/i386-linux-gnu",<br>
+<br>
+      // FIXME: These are older forms of multiarch. It's not clear that they're<br>
+      // in use in any released version of Debian, so we should consider<br>
+      // removing them.<br>
+      "/usr/include/x86_64-linux-gnu/32", "/usr/include/i686-linux-gnu",<br>
+      "/usr/include/i486-linux-gnu"};<br>
+  const StringRef AArch64MultiarchIncludeDirs[] = {<br>
+      "/usr/include/aarch64-linux-gnu"};<br>
+  const StringRef ARMMultiarchIncludeDirs[] = {<br>
+      "/usr/include/arm-linux-gnueabi"};<br>
+  const StringRef ARMHFMultiarchIncludeDirs[] = {<br>
+      "/usr/include/arm-linux-gnueabihf"};<br>
+  const StringRef ARMEBMultiarchIncludeDirs[] = {<br>
+      "/usr/include/armeb-linux-gnueabi"};<br>
+  const StringRef ARMEBHFMultiarchIncludeDirs[] = {<br>
+      "/usr/include/armeb-linux-gnueabihf"};<br>
+  const StringRef M68kMultiarchIncludeDirs[] = {"/usr/include/m68k-linux-gnu"};<br>
+  const StringRef MIPSMultiarchIncludeDirs[] = {"/usr/include/mips-linux-gnu"};<br>
+  const StringRef MIPSELMultiarchIncludeDirs[] = {<br>
+      "/usr/include/mipsel-linux-gnu"};<br>
+  const StringRef MIPS64MultiarchIncludeDirs[] = {<br>
+      "/usr/include/mips64-linux-gnuabi64"};<br>
+  const StringRef MIPS64ELMultiarchIncludeDirs[] = {<br>
+      "/usr/include/mips64el-linux-gnuabi64"};<br>
+  const StringRef MIPSN32MultiarchIncludeDirs[] = {<br>
+      "/usr/include/mips64-linux-gnuabin32"};<br>
+  const StringRef MIPSN32ELMultiarchIncludeDirs[] = {<br>
+      "/usr/include/mips64el-linux-gnuabin32"};<br>
+  const StringRef MIPSR6MultiarchIncludeDirs[] = {<br>
+      "/usr/include/mipsisa32-linux-gnu"};<br>
+  const StringRef MIPSR6ELMultiarchIncludeDirs[] = {<br>
+      "/usr/include/mipsisa32r6el-linux-gnu"};<br>
+  const StringRef MIPS64R6MultiarchIncludeDirs[] = {<br>
+      "/usr/include/mipsisa64r6-linux-gnuabi64"};<br>
+  const StringRef MIPS64R6ELMultiarchIncludeDirs[] = {<br>
+      "/usr/include/mipsisa64r6el-linux-gnuabi64"};<br>
+  const StringRef MIPSN32R6MultiarchIncludeDirs[] = {<br>
+      "/usr/include/mipsisa64r6-linux-gnuabin32"};<br>
+  const StringRef MIPSN32R6ELMultiarchIncludeDirs[] = {<br>
+      "/usr/include/mipsisa64r6el-linux-gnuabin32"};<br>
+  const StringRef PPCMultiarchIncludeDirs[] = {<br>
+      "/usr/include/powerpc-linux-gnu",<br>
+      "/usr/include/powerpc-linux-gnuspe"};<br>
+  const StringRef PPCLEMultiarchIncludeDirs[] = {<br>
+      "/usr/include/powerpcle-linux-gnu"};<br>
+  const StringRef PPC64MultiarchIncludeDirs[] = {<br>
+      "/usr/include/powerpc64-linux-gnu"};<br>
+  const StringRef PPC64LEMultiarchIncludeDirs[] = {<br>
+      "/usr/include/powerpc64le-linux-gnu"};<br>
+  const StringRef SparcMultiarchIncludeDirs[] = {<br>
+      "/usr/include/sparc-linux-gnu"};<br>
+  const StringRef Sparc64MultiarchIncludeDirs[] = {<br>
+      "/usr/include/sparc64-linux-gnu"};<br>
+  const StringRef SYSTEMZMultiarchIncludeDirs[] = {<br>
+      "/usr/include/s390x-linux-gnu"};<br>
+  ArrayRef<StringRef> MultiarchIncludeDirs;<br>
+  switch (getTriple().getArch()) {<br>
+  case llvm::Triple::x86_64:<br>
+    MultiarchIncludeDirs = X86_64MultiarchIncludeDirs;<br>
+    break;<br>
+  case llvm::Triple::x86:<br>
+    MultiarchIncludeDirs = X86MultiarchIncludeDirs;<br>
+    break;<br>
+  case llvm::Triple::aarch64:<br>
+  case llvm::Triple::aarch64_be:<br>
+    MultiarchIncludeDirs = AArch64MultiarchIncludeDirs;<br>
+    break;<br>
+  case llvm::Triple::arm:<br>
+  case llvm::Triple::thumb:<br>
+    if (getTriple().getEnvironment() == llvm::Triple::GNUEABIHF)<br>
+      MultiarchIncludeDirs = ARMHFMultiarchIncludeDirs;<br>
+    else<br>
+      MultiarchIncludeDirs = ARMMultiarchIncludeDirs;<br>
+    break;<br>
+  case llvm::Triple::armeb:<br>
+  case llvm::Triple::thumbeb:<br>
+    if (getTriple().getEnvironment() == llvm::Triple::GNUEABIHF)<br>
+      MultiarchIncludeDirs = ARMEBHFMultiarchIncludeDirs;<br>
+    else<br>
+      MultiarchIncludeDirs = ARMEBMultiarchIncludeDirs;<br>
+    break;<br>
+  case llvm::Triple::m68k:<br>
+    MultiarchIncludeDirs = M68kMultiarchIncludeDirs;<br>
+    break;<br>
+  case llvm::Triple::mips:<br>
+    if (getTriple().getSubArch() == llvm::Triple::MipsSubArch_r6)<br>
+      MultiarchIncludeDirs = MIPSR6MultiarchIncludeDirs;<br>
+    else<br>
+      MultiarchIncludeDirs = MIPSMultiarchIncludeDirs;<br>
+    break;<br>
+  case llvm::Triple::mipsel:<br>
+    if (getTriple().getSubArch() == llvm::Triple::MipsSubArch_r6)<br>
+      MultiarchIncludeDirs = MIPSR6ELMultiarchIncludeDirs;<br>
+    else<br>
+      MultiarchIncludeDirs = MIPSELMultiarchIncludeDirs;<br>
+    break;<br>
+  case llvm::Triple::mips64:<br>
+    if (getTriple().getSubArch() == llvm::Triple::MipsSubArch_r6)<br>
+      if (getTriple().getEnvironment() == llvm::Triple::GNUABIN32)<br>
+        MultiarchIncludeDirs = MIPSN32R6MultiarchIncludeDirs;<br>
+      else<br>
+        MultiarchIncludeDirs = MIPS64R6MultiarchIncludeDirs;<br>
+    else if (getTriple().getEnvironment() == llvm::Triple::GNUABIN32)<br>
+      MultiarchIncludeDirs = MIPSN32MultiarchIncludeDirs;<br>
+    else<br>
+      MultiarchIncludeDirs = MIPS64MultiarchIncludeDirs;<br>
+    break;<br>
+  case llvm::Triple::mips64el:<br>
+    if (getTriple().getSubArch() == llvm::Triple::MipsSubArch_r6)<br>
+      if (getTriple().getEnvironment() == llvm::Triple::GNUABIN32)<br>
+        MultiarchIncludeDirs = MIPSN32R6ELMultiarchIncludeDirs;<br>
+      else<br>
+        MultiarchIncludeDirs = MIPS64R6ELMultiarchIncludeDirs;<br>
+    else if (getTriple().getEnvironment() == llvm::Triple::GNUABIN32)<br>
+      MultiarchIncludeDirs = MIPSN32ELMultiarchIncludeDirs;<br>
+    else<br>
+      MultiarchIncludeDirs = MIPS64ELMultiarchIncludeDirs;<br>
+    break;<br>
+  case llvm::Triple::ppc:<br>
+    MultiarchIncludeDirs = PPCMultiarchIncludeDirs;<br>
+    break;<br>
+  case llvm::Triple::ppcle:<br>
+    MultiarchIncludeDirs = PPCLEMultiarchIncludeDirs;<br>
+    break;<br>
+  case llvm::Triple::ppc64:<br>
+    MultiarchIncludeDirs = PPC64MultiarchIncludeDirs;<br>
+    break;<br>
+  case llvm::Triple::ppc64le:<br>
+    MultiarchIncludeDirs = PPC64LEMultiarchIncludeDirs;<br>
+    break;<br>
+  case llvm::Triple::sparc:<br>
+    MultiarchIncludeDirs = SparcMultiarchIncludeDirs;<br>
+    break;<br>
+  case llvm::Triple::sparcv9:<br>
+    MultiarchIncludeDirs = Sparc64MultiarchIncludeDirs;<br>
+    break;<br>
+  case llvm::Triple::systemz:<br>
+    MultiarchIncludeDirs = SYSTEMZMultiarchIncludeDirs;<br>
+    break;<br>
+  default:<br>
+    break;<br>
+  }<br>
+<br>
+  const std::string AndroidMultiarchIncludeDir =<br>
+      std::string("/usr/include/") +<br>
+      getMultiarchTriple(D, getTriple(), SysRoot);<br>
+  const StringRef AndroidMultiarchIncludeDirs[] = {AndroidMultiarchIncludeDir};<br>
+  if (getTriple().isAndroid())<br>
+    MultiarchIncludeDirs = AndroidMultiarchIncludeDirs;<br>
+<br>
+  for (StringRef Dir : MultiarchIncludeDirs) {<br>
+    if (D.getVFS().exists(SysRoot + Dir)) {<br>
+      addExternCSystemInclude(DriverArgs, CC1Args, SysRoot + Dir);<br>
+      break;<br>
+    }<br>
+  }<br>
<br>
   if (getTriple().getOS() == llvm::Triple::RTEMS)<br>
     return;<br>
<br>
<br>
<br>
_______________________________________________<br>
cfe-commits mailing list<br>
<a href="mailto:cfe-commits@lists.llvm.org" target="_blank">cfe-commits@lists.llvm.org</a><br>
<a href="https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits" rel="noreferrer" target="_blank">https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits</a><br>
</blockquote></div>