summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorChandler Carruth <chandlerc@gmail.com>2011-11-07 10:34:06 +0000
committerChandler Carruth <chandlerc@gmail.com>2011-11-07 10:34:06 +0000
commit9cab0c3e89b8e8ec16ab8885079a4bbb113268f5 (patch)
treefaf1ba1b0b012c8a990f2ad1fdeca5063b0ed3e8
parent69c35faa45ea902394ac7f429e6403b4452436ba (diff)
downloadllvm-9cab0c3e89b8e8ec16ab8885079a4bbb113268f5.tar.gz
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. ------------------------------------------------------------------------ llvm-svn: 143946
-rw-r--r--clang/lib/Driver/ToolChains.cpp49
1 files changed, 35 insertions, 14 deletions
diff --git a/clang/lib/Driver/ToolChains.cpp b/clang/lib/Driver/ToolChains.cpp
index 4440e27eb94f..d07abab9cf31 100644
--- a/clang/lib/Driver/ToolChains.cpp
+++ b/clang/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<StringRef> 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<StringRef>::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)