From e4936afae1efebb2ea0145f130c757c1b11ad88a Mon Sep 17 00:00:00 2001 From: Chandler Carruth Date: Mon, 7 Nov 2011 10:34:06 +0000 Subject: Merging r143866: ------------------------------------------------------------------------ r143866 | chandlerc | 2011-11-06 01:21:07 -0700 (Sun, 06 Nov 2011) | 4 lines Take a better approach to detecting and selecting multiarch include directories. This way we stop at the first multiarch directory found on the system. This achieves the real intended result of pruning non-existent directories. ------------------------------------------------------------------------ git-svn-id: https://llvm.org/svn/llvm-project/cfe/branches/release_30@143946 91177308-0d34-0410-b5e6-96231b3b80d8 --- lib/Driver/ToolChains.cpp | 49 +++++++++++++++++++++++++++++++++-------------- 1 file changed, 35 insertions(+), 14 deletions(-) diff --git a/lib/Driver/ToolChains.cpp b/lib/Driver/ToolChains.cpp index 4440e27eb9..d07abab9cf 100644 --- a/lib/Driver/ToolChains.cpp +++ b/lib/Driver/ToolChains.cpp @@ -2003,23 +2003,44 @@ void Linux::AddClangSystemIncludeArgs(const ArgList &DriverArgs, // Lacking those, try to detect the correct set of system includes for the // target triple. - // Generic Debian multiarch support: + // 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 ARMMultiarchIncludeDirs[] = { + "/usr/include/arm-linux-gnueabi" + }; + ArrayRef MultiarchIncludeDirs; if (getTriple().getArch() == llvm::Triple::x86_64) { - addExternCSystemInclude(DriverArgs, CC1Args, - "/usr/include/x86_64-linux-gnu"); - addExternCSystemInclude(DriverArgs, CC1Args, - "/usr/include/i686-linux-gnu/64"); - addExternCSystemInclude(DriverArgs, CC1Args, - "/usr/include/i486-linux-gnu/64"); + MultiarchIncludeDirs = X86_64MultiarchIncludeDirs; } else if (getTriple().getArch() == llvm::Triple::x86) { - addExternCSystemInclude(DriverArgs, CC1Args, - "/usr/include/x86_64-linux-gnu/32"); - addExternCSystemInclude(DriverArgs, CC1Args, "/usr/include/i686-linux-gnu"); - addExternCSystemInclude(DriverArgs, CC1Args, "/usr/include/i486-linux-gnu"); - addExternCSystemInclude(DriverArgs, CC1Args, "/usr/include/i386-linux-gnu"); + MultiarchIncludeDirs = X86MultiarchIncludeDirs; } else if (getTriple().getArch() == llvm::Triple::arm) { - addExternCSystemInclude(DriverArgs, CC1Args, - "/usr/include/arm-linux-gnueabi"); + MultiarchIncludeDirs = ARMMultiarchIncludeDirs; + } + for (ArrayRef::iterator I = MultiarchIncludeDirs.begin(), + E = MultiarchIncludeDirs.end(); + I != E; ++I) { + if (llvm::sys::fs::exists(*I)) { + addExternCSystemInclude(DriverArgs, CC1Args, D.SysRoot + *I); + break; + } } if (getTriple().getOS() == llvm::Triple::RTEMS) -- cgit v1.2.1