Skip to content

Commit 424bf5d

Browse files
committed
[Driver] Bring back "Clean up Debian multiarch /usr/include/<triplet> madness" and restore i586-linux-gnu
This reverts commit 933d146 and 21b211a (which mis-identified the issue) but restores i586-linux-gnu which was removed by `Gnu.cpp: remove obsoleted i386 triple detection from end-of-life distribution versions`. Looks like i586-linux-gnu was not dead enough (used in a sysroot by Fuchsia build bot based on Debian jessie:) but i486-linux-gnu should be very dead by now.
1 parent 282bf9e commit 424bf5d

File tree

2 files changed

+10
-171
lines changed

2 files changed

+10
-171
lines changed

clang/lib/Driver/ToolChains/Gnu.cpp

+5-5
Original file line numberDiff line numberDiff line change
@@ -2109,9 +2109,11 @@ void Generic_GCC::GCCInstallationDetector::AddDefaultGCCPrefixes(
21092109
static const char *const X32LibDirs[] = {"/libx32"};
21102110
static const char *const X86LibDirs[] = {"/lib32", "/lib"};
21112111
static const char *const X86Triples[] = {
2112-
"i686-linux-gnu", "i686-pc-linux-gnu", "i386-redhat-linux6E",
2113-
"i686-redhat-linux", "i386-redhat-linux", "i586-suse-linux",
2114-
"i686-montavista-linux", "i686-linux-android", "i386-gnu",
2112+
"i586-linux-gnu", "i686-linux-gnu",
2113+
"i686-pc-linux-gnu", "i386-redhat-linux6E",
2114+
"i686-redhat-linux", "i386-redhat-linux",
2115+
"i586-suse-linux", "i686-montavista-linux",
2116+
"i686-linux-android", "i386-gnu",
21152117
};
21162118

21172119
static const char *const M68kLibDirs[] = {"/lib"};
@@ -3013,8 +3015,6 @@ Generic_GCC::addGCCLibStdCxxIncludePaths(const llvm::opt::ArgList &DriverArgs,
30133015
const Multilib &Multilib = GCCInstallation.getMultilib();
30143016
const std::string Triple = getMultiarchTriple(
30153017
getDriver(), GCCInstallation.getTriple(), getDriver().SysRoot);
3016-
const std::string TargetMultiarchTriple =
3017-
getMultiarchTriple(getDriver(), getTriple(), getDriver().SysRoot);
30183018
const GCCVersion &Version = GCCInstallation.getVersion();
30193019

30203020
// Try /../$triple/include/c++/$version then /../include/c++/$version.

clang/lib/Driver/ToolChains/Linux.cpp

+5-166
Original file line numberDiff line numberDiff line change
@@ -604,172 +604,11 @@ void Linux::AddClangSystemIncludeArgs(const ArgList &DriverArgs,
604604
return;
605605
}
606606

607-
// Implement generic Debian multiarch support.
608-
const StringRef X86_64MultiarchIncludeDirs[] = {
609-
"/usr/include/x86_64-linux-gnu",
610-
611-
// FIXME: These are older forms of multiarch. It's not clear that they're
612-
// in use in any released version of Debian, so we should consider
613-
// removing them.
614-
"/usr/include/i686-linux-gnu/64", "/usr/include/i486-linux-gnu/64"};
615-
const StringRef X86MultiarchIncludeDirs[] = {
616-
"/usr/include/i386-linux-gnu",
617-
618-
// FIXME: These are older forms of multiarch. It's not clear that they're
619-
// in use in any released version of Debian, so we should consider
620-
// removing them.
621-
"/usr/include/x86_64-linux-gnu/32", "/usr/include/i686-linux-gnu",
622-
"/usr/include/i486-linux-gnu"};
623-
const StringRef AArch64MultiarchIncludeDirs[] = {
624-
"/usr/include/aarch64-linux-gnu"};
625-
const StringRef ARMMultiarchIncludeDirs[] = {
626-
"/usr/include/arm-linux-gnueabi"};
627-
const StringRef ARMHFMultiarchIncludeDirs[] = {
628-
"/usr/include/arm-linux-gnueabihf"};
629-
const StringRef ARMEBMultiarchIncludeDirs[] = {
630-
"/usr/include/armeb-linux-gnueabi"};
631-
const StringRef ARMEBHFMultiarchIncludeDirs[] = {
632-
"/usr/include/armeb-linux-gnueabihf"};
633-
const StringRef M68kMultiarchIncludeDirs[] = {"/usr/include/m68k-linux-gnu"};
634-
const StringRef MIPSMultiarchIncludeDirs[] = {"/usr/include/mips-linux-gnu"};
635-
const StringRef MIPSELMultiarchIncludeDirs[] = {
636-
"/usr/include/mipsel-linux-gnu"};
637-
const StringRef MIPS64MultiarchIncludeDirs[] = {
638-
"/usr/include/mips64-linux-gnuabi64"};
639-
const StringRef MIPS64ELMultiarchIncludeDirs[] = {
640-
"/usr/include/mips64el-linux-gnuabi64"};
641-
const StringRef MIPSN32MultiarchIncludeDirs[] = {
642-
"/usr/include/mips64-linux-gnuabin32"};
643-
const StringRef MIPSN32ELMultiarchIncludeDirs[] = {
644-
"/usr/include/mips64el-linux-gnuabin32"};
645-
const StringRef MIPSR6MultiarchIncludeDirs[] = {
646-
"/usr/include/mipsisa32-linux-gnu"};
647-
const StringRef MIPSR6ELMultiarchIncludeDirs[] = {
648-
"/usr/include/mipsisa32r6el-linux-gnu"};
649-
const StringRef MIPS64R6MultiarchIncludeDirs[] = {
650-
"/usr/include/mipsisa64r6-linux-gnuabi64"};
651-
const StringRef MIPS64R6ELMultiarchIncludeDirs[] = {
652-
"/usr/include/mipsisa64r6el-linux-gnuabi64"};
653-
const StringRef MIPSN32R6MultiarchIncludeDirs[] = {
654-
"/usr/include/mipsisa64r6-linux-gnuabin32"};
655-
const StringRef MIPSN32R6ELMultiarchIncludeDirs[] = {
656-
"/usr/include/mipsisa64r6el-linux-gnuabin32"};
657-
const StringRef PPCMultiarchIncludeDirs[] = {
658-
"/usr/include/powerpc-linux-gnu",
659-
"/usr/include/powerpc-linux-gnuspe"};
660-
const StringRef PPCLEMultiarchIncludeDirs[] = {
661-
"/usr/include/powerpcle-linux-gnu"};
662-
const StringRef PPC64MultiarchIncludeDirs[] = {
663-
"/usr/include/powerpc64-linux-gnu"};
664-
const StringRef PPC64LEMultiarchIncludeDirs[] = {
665-
"/usr/include/powerpc64le-linux-gnu"};
666-
const StringRef SparcMultiarchIncludeDirs[] = {
667-
"/usr/include/sparc-linux-gnu"};
668-
const StringRef Sparc64MultiarchIncludeDirs[] = {
669-
"/usr/include/sparc64-linux-gnu"};
670-
const StringRef SYSTEMZMultiarchIncludeDirs[] = {
671-
"/usr/include/s390x-linux-gnu"};
672-
ArrayRef<StringRef> MultiarchIncludeDirs;
673-
switch (getTriple().getArch()) {
674-
case llvm::Triple::x86_64:
675-
MultiarchIncludeDirs = X86_64MultiarchIncludeDirs;
676-
break;
677-
case llvm::Triple::x86:
678-
MultiarchIncludeDirs = X86MultiarchIncludeDirs;
679-
break;
680-
case llvm::Triple::aarch64:
681-
case llvm::Triple::aarch64_be:
682-
MultiarchIncludeDirs = AArch64MultiarchIncludeDirs;
683-
break;
684-
case llvm::Triple::arm:
685-
case llvm::Triple::thumb:
686-
if (getTriple().getEnvironment() == llvm::Triple::GNUEABIHF)
687-
MultiarchIncludeDirs = ARMHFMultiarchIncludeDirs;
688-
else
689-
MultiarchIncludeDirs = ARMMultiarchIncludeDirs;
690-
break;
691-
case llvm::Triple::armeb:
692-
case llvm::Triple::thumbeb:
693-
if (getTriple().getEnvironment() == llvm::Triple::GNUEABIHF)
694-
MultiarchIncludeDirs = ARMEBHFMultiarchIncludeDirs;
695-
else
696-
MultiarchIncludeDirs = ARMEBMultiarchIncludeDirs;
697-
break;
698-
case llvm::Triple::m68k:
699-
MultiarchIncludeDirs = M68kMultiarchIncludeDirs;
700-
break;
701-
case llvm::Triple::mips:
702-
if (getTriple().getSubArch() == llvm::Triple::MipsSubArch_r6)
703-
MultiarchIncludeDirs = MIPSR6MultiarchIncludeDirs;
704-
else
705-
MultiarchIncludeDirs = MIPSMultiarchIncludeDirs;
706-
break;
707-
case llvm::Triple::mipsel:
708-
if (getTriple().getSubArch() == llvm::Triple::MipsSubArch_r6)
709-
MultiarchIncludeDirs = MIPSR6ELMultiarchIncludeDirs;
710-
else
711-
MultiarchIncludeDirs = MIPSELMultiarchIncludeDirs;
712-
break;
713-
case llvm::Triple::mips64:
714-
if (getTriple().getSubArch() == llvm::Triple::MipsSubArch_r6)
715-
if (getTriple().getEnvironment() == llvm::Triple::GNUABIN32)
716-
MultiarchIncludeDirs = MIPSN32R6MultiarchIncludeDirs;
717-
else
718-
MultiarchIncludeDirs = MIPS64R6MultiarchIncludeDirs;
719-
else if (getTriple().getEnvironment() == llvm::Triple::GNUABIN32)
720-
MultiarchIncludeDirs = MIPSN32MultiarchIncludeDirs;
721-
else
722-
MultiarchIncludeDirs = MIPS64MultiarchIncludeDirs;
723-
break;
724-
case llvm::Triple::mips64el:
725-
if (getTriple().getSubArch() == llvm::Triple::MipsSubArch_r6)
726-
if (getTriple().getEnvironment() == llvm::Triple::GNUABIN32)
727-
MultiarchIncludeDirs = MIPSN32R6ELMultiarchIncludeDirs;
728-
else
729-
MultiarchIncludeDirs = MIPS64R6ELMultiarchIncludeDirs;
730-
else if (getTriple().getEnvironment() == llvm::Triple::GNUABIN32)
731-
MultiarchIncludeDirs = MIPSN32ELMultiarchIncludeDirs;
732-
else
733-
MultiarchIncludeDirs = MIPS64ELMultiarchIncludeDirs;
734-
break;
735-
case llvm::Triple::ppc:
736-
MultiarchIncludeDirs = PPCMultiarchIncludeDirs;
737-
break;
738-
case llvm::Triple::ppcle:
739-
MultiarchIncludeDirs = PPCLEMultiarchIncludeDirs;
740-
break;
741-
case llvm::Triple::ppc64:
742-
MultiarchIncludeDirs = PPC64MultiarchIncludeDirs;
743-
break;
744-
case llvm::Triple::ppc64le:
745-
MultiarchIncludeDirs = PPC64LEMultiarchIncludeDirs;
746-
break;
747-
case llvm::Triple::sparc:
748-
MultiarchIncludeDirs = SparcMultiarchIncludeDirs;
749-
break;
750-
case llvm::Triple::sparcv9:
751-
MultiarchIncludeDirs = Sparc64MultiarchIncludeDirs;
752-
break;
753-
case llvm::Triple::systemz:
754-
MultiarchIncludeDirs = SYSTEMZMultiarchIncludeDirs;
755-
break;
756-
default:
757-
break;
758-
}
759-
760-
const std::string AndroidMultiarchIncludeDir =
761-
std::string("/usr/include/") +
762-
getMultiarchTriple(D, getTriple(), SysRoot);
763-
const StringRef AndroidMultiarchIncludeDirs[] = {AndroidMultiarchIncludeDir};
764-
if (getTriple().isAndroid())
765-
MultiarchIncludeDirs = AndroidMultiarchIncludeDirs;
766-
767-
for (StringRef Dir : MultiarchIncludeDirs) {
768-
if (D.getVFS().exists(SysRoot + Dir)) {
769-
addExternCSystemInclude(DriverArgs, CC1Args, SysRoot + Dir);
770-
break;
771-
}
772-
}
607+
// On Android and Debian, add /usr/include/$triple if exists.
608+
std::string MultiarchIncludeDir = getMultiarchTriple(D, getTriple(), SysRoot);
609+
if (!MultiarchIncludeDir.empty() &&
610+
D.getVFS().exists(SysRoot + "/usr/include/" + MultiarchIncludeDir))
611+
addExternCSystemInclude(DriverArgs, CC1Args, SysRoot + "/usr/include/" + MultiarchIncludeDir);
773612

774613
if (getTriple().getOS() == llvm::Triple::RTEMS)
775614
return;

0 commit comments

Comments
 (0)