summaryrefslogtreecommitdiffstats
path: root/clang/lib
diff options
context:
space:
mode:
authorChandler Carruth <chandlerc@gmail.com>2011-11-06 08:21:07 +0000
committerChandler Carruth <chandlerc@gmail.com>2011-11-06 08:21:07 +0000
commit5b77c6c618c66e1a81ab4acfa0b9b3ab6a2e60aa (patch)
tree961915ab46d8b0cd8e0feb9d8e732aff0419c879 /clang/lib
parent5da43e83d206f164c1a1052f5fff36d82ab28f60 (diff)
downloadbcm5719-llvm-5b77c6c618c66e1a81ab4acfa0b9b3ab6a2e60aa.tar.gz
bcm5719-llvm-5b77c6c618c66e1a81ab4acfa0b9b3ab6a2e60aa.zip
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: 143866
Diffstat (limited to 'clang/lib')
-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 3d4f12cb865..df01fc9d789 100644
--- a/clang/lib/Driver/ToolChains.cpp
+++ b/clang/lib/Driver/ToolChains.cpp
@@ -1995,23 +1995,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)
OpenPOWER on IntegriCloud