Skip to content

Commit

Permalink
[Driver] Bring back "Clean up Debian multiarch /usr/include/<triplet>…
Browse files Browse the repository at this point in the history
… madness"

This reverts commit aae84b8.

The chromium goma folks want to use a Debian sysroot without
lib/x86_64-linux-gnu to perform `clang -c` but no link action. The previous
commit has removed D.getVFS().exists check to make such usage work.
  • Loading branch information
MaskRay committed Mar 24, 2021
1 parent bfbfd83 commit 35dd647
Showing 1 changed file with 7 additions and 166 deletions.
173 changes: 7 additions & 166 deletions clang/lib/Driver/ToolChains/Linux.cpp
Expand Up @@ -562,172 +562,13 @@ void Linux::AddClangSystemIncludeArgs(const ArgList &DriverArgs,
return;
}

// Implement generic Debian multiarch support.
const StringRef X86_64MultiarchIncludeDirs[] = {
"/usr/include/x86_64-linux-gnu",

// FIXME: These are older forms of multiarch. It's not clear that they're
// in use in any released version of Debian, so we should consider
// removing them.
"/usr/include/i686-linux-gnu/64", "/usr/include/i486-linux-gnu/64"};
const StringRef X86MultiarchIncludeDirs[] = {
"/usr/include/i386-linux-gnu",

// FIXME: These are older forms of multiarch. It's not clear that they're
// in use in any released version of Debian, so we should consider
// removing them.
"/usr/include/x86_64-linux-gnu/32", "/usr/include/i686-linux-gnu",
"/usr/include/i486-linux-gnu"};
const StringRef AArch64MultiarchIncludeDirs[] = {
"/usr/include/aarch64-linux-gnu"};
const StringRef ARMMultiarchIncludeDirs[] = {
"/usr/include/arm-linux-gnueabi"};
const StringRef ARMHFMultiarchIncludeDirs[] = {
"/usr/include/arm-linux-gnueabihf"};
const StringRef ARMEBMultiarchIncludeDirs[] = {
"/usr/include/armeb-linux-gnueabi"};
const StringRef ARMEBHFMultiarchIncludeDirs[] = {
"/usr/include/armeb-linux-gnueabihf"};
const StringRef M68kMultiarchIncludeDirs[] = {"/usr/include/m68k-linux-gnu"};
const StringRef MIPSMultiarchIncludeDirs[] = {"/usr/include/mips-linux-gnu"};
const StringRef MIPSELMultiarchIncludeDirs[] = {
"/usr/include/mipsel-linux-gnu"};
const StringRef MIPS64MultiarchIncludeDirs[] = {
"/usr/include/mips64-linux-gnuabi64"};
const StringRef MIPS64ELMultiarchIncludeDirs[] = {
"/usr/include/mips64el-linux-gnuabi64"};
const StringRef MIPSN32MultiarchIncludeDirs[] = {
"/usr/include/mips64-linux-gnuabin32"};
const StringRef MIPSN32ELMultiarchIncludeDirs[] = {
"/usr/include/mips64el-linux-gnuabin32"};
const StringRef MIPSR6MultiarchIncludeDirs[] = {
"/usr/include/mipsisa32-linux-gnu"};
const StringRef MIPSR6ELMultiarchIncludeDirs[] = {
"/usr/include/mipsisa32r6el-linux-gnu"};
const StringRef MIPS64R6MultiarchIncludeDirs[] = {
"/usr/include/mipsisa64r6-linux-gnuabi64"};
const StringRef MIPS64R6ELMultiarchIncludeDirs[] = {
"/usr/include/mipsisa64r6el-linux-gnuabi64"};
const StringRef MIPSN32R6MultiarchIncludeDirs[] = {
"/usr/include/mipsisa64r6-linux-gnuabin32"};
const StringRef MIPSN32R6ELMultiarchIncludeDirs[] = {
"/usr/include/mipsisa64r6el-linux-gnuabin32"};
const StringRef PPCMultiarchIncludeDirs[] = {
"/usr/include/powerpc-linux-gnu",
"/usr/include/powerpc-linux-gnuspe"};
const StringRef PPCLEMultiarchIncludeDirs[] = {
"/usr/include/powerpcle-linux-gnu"};
const StringRef PPC64MultiarchIncludeDirs[] = {
"/usr/include/powerpc64-linux-gnu"};
const StringRef PPC64LEMultiarchIncludeDirs[] = {
"/usr/include/powerpc64le-linux-gnu"};
const StringRef SparcMultiarchIncludeDirs[] = {
"/usr/include/sparc-linux-gnu"};
const StringRef Sparc64MultiarchIncludeDirs[] = {
"/usr/include/sparc64-linux-gnu"};
const StringRef SYSTEMZMultiarchIncludeDirs[] = {
"/usr/include/s390x-linux-gnu"};
ArrayRef<StringRef> MultiarchIncludeDirs;
switch (getTriple().getArch()) {
case llvm::Triple::x86_64:
MultiarchIncludeDirs = X86_64MultiarchIncludeDirs;
break;
case llvm::Triple::x86:
MultiarchIncludeDirs = X86MultiarchIncludeDirs;
break;
case llvm::Triple::aarch64:
case llvm::Triple::aarch64_be:
MultiarchIncludeDirs = AArch64MultiarchIncludeDirs;
break;
case llvm::Triple::arm:
case llvm::Triple::thumb:
if (getTriple().getEnvironment() == llvm::Triple::GNUEABIHF)
MultiarchIncludeDirs = ARMHFMultiarchIncludeDirs;
else
MultiarchIncludeDirs = ARMMultiarchIncludeDirs;
break;
case llvm::Triple::armeb:
case llvm::Triple::thumbeb:
if (getTriple().getEnvironment() == llvm::Triple::GNUEABIHF)
MultiarchIncludeDirs = ARMEBHFMultiarchIncludeDirs;
else
MultiarchIncludeDirs = ARMEBMultiarchIncludeDirs;
break;
case llvm::Triple::m68k:
MultiarchIncludeDirs = M68kMultiarchIncludeDirs;
break;
case llvm::Triple::mips:
if (getTriple().getSubArch() == llvm::Triple::MipsSubArch_r6)
MultiarchIncludeDirs = MIPSR6MultiarchIncludeDirs;
else
MultiarchIncludeDirs = MIPSMultiarchIncludeDirs;
break;
case llvm::Triple::mipsel:
if (getTriple().getSubArch() == llvm::Triple::MipsSubArch_r6)
MultiarchIncludeDirs = MIPSR6ELMultiarchIncludeDirs;
else
MultiarchIncludeDirs = MIPSELMultiarchIncludeDirs;
break;
case llvm::Triple::mips64:
if (getTriple().getSubArch() == llvm::Triple::MipsSubArch_r6)
if (getTriple().getEnvironment() == llvm::Triple::GNUABIN32)
MultiarchIncludeDirs = MIPSN32R6MultiarchIncludeDirs;
else
MultiarchIncludeDirs = MIPS64R6MultiarchIncludeDirs;
else if (getTriple().getEnvironment() == llvm::Triple::GNUABIN32)
MultiarchIncludeDirs = MIPSN32MultiarchIncludeDirs;
else
MultiarchIncludeDirs = MIPS64MultiarchIncludeDirs;
break;
case llvm::Triple::mips64el:
if (getTriple().getSubArch() == llvm::Triple::MipsSubArch_r6)
if (getTriple().getEnvironment() == llvm::Triple::GNUABIN32)
MultiarchIncludeDirs = MIPSN32R6ELMultiarchIncludeDirs;
else
MultiarchIncludeDirs = MIPS64R6ELMultiarchIncludeDirs;
else if (getTriple().getEnvironment() == llvm::Triple::GNUABIN32)
MultiarchIncludeDirs = MIPSN32ELMultiarchIncludeDirs;
else
MultiarchIncludeDirs = MIPS64ELMultiarchIncludeDirs;
break;
case llvm::Triple::ppc:
MultiarchIncludeDirs = PPCMultiarchIncludeDirs;
break;
case llvm::Triple::ppcle:
MultiarchIncludeDirs = PPCLEMultiarchIncludeDirs;
break;
case llvm::Triple::ppc64:
MultiarchIncludeDirs = PPC64MultiarchIncludeDirs;
break;
case llvm::Triple::ppc64le:
MultiarchIncludeDirs = PPC64LEMultiarchIncludeDirs;
break;
case llvm::Triple::sparc:
MultiarchIncludeDirs = SparcMultiarchIncludeDirs;
break;
case llvm::Triple::sparcv9:
MultiarchIncludeDirs = Sparc64MultiarchIncludeDirs;
break;
case llvm::Triple::systemz:
MultiarchIncludeDirs = SYSTEMZMultiarchIncludeDirs;
break;
default:
break;
}

const std::string AndroidMultiarchIncludeDir =
std::string("/usr/include/") +
getMultiarchTriple(D, getTriple(), SysRoot);
const StringRef AndroidMultiarchIncludeDirs[] = {AndroidMultiarchIncludeDir};
if (getTriple().isAndroid())
MultiarchIncludeDirs = AndroidMultiarchIncludeDirs;

for (StringRef Dir : MultiarchIncludeDirs) {
if (D.getVFS().exists(SysRoot + Dir)) {
addExternCSystemInclude(DriverArgs, CC1Args, SysRoot + Dir);
break;
}
}
// On Debian (and its derivatives which ship g++-multiarch-incdir.diff) and
// Android, add /usr/include/$triple if exists.
std::string MultiarchIncludeDir = getMultiarchTriple(D, getTriple(), SysRoot);
if (!MultiarchIncludeDir.empty() &&
D.getVFS().exists(SysRoot + "/usr/include/" + MultiarchIncludeDir))
addExternCSystemInclude(DriverArgs, CC1Args,
SysRoot + "/usr/include/" + MultiarchIncludeDir);

if (getTriple().getOS() == llvm::Triple::RTEMS)
return;
Expand Down

0 comments on commit 35dd647

Please sign in to comment.