diff options
author | Chandler Carruth <chandlerc@gmail.com> | 2011-11-05 20:17:13 +0000 |
---|---|---|
committer | Chandler Carruth <chandlerc@gmail.com> | 2011-11-05 20:17:13 +0000 |
commit | 7d7e9f963a4977e36efb90fd9c369f33ced1a95a (patch) | |
tree | 74034bd6b638d9316fc8718e0cbfe73846159e06 /lib/Driver/ToolChains.cpp | |
parent | 6fdebeef8f6067808ad5adcfbf3cf03e904d3eda (diff) |
Move the Linux header searching from the Frontend to the Driver. This is
the first (and diff-noisiest) step to making Linux header searching
tremendously more principled and less brittle. Note that this step
should have essentially no functional impact. We still search the exact
same set of paths in the exact same order. The only change here is where
the code implementing such a search lives.
This has one obvious negative impact -- we now pass a ludicrous number
of flags to the CC1 layer. That should go away as I re-base this logic
on the logic to detect a GCC installation. I want to do this in two
phases so the bots can tell me if this step alone breaks something, and
so that the diffs of the refactoring make more sense.
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@143822 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'lib/Driver/ToolChains.cpp')
-rw-r--r-- | lib/Driver/ToolChains.cpp | 475 |
1 files changed, 456 insertions, 19 deletions
diff --git a/lib/Driver/ToolChains.cpp b/lib/Driver/ToolChains.cpp index 3a404e5245..bfdd7196d0 100644 --- a/lib/Driver/ToolChains.cpp +++ b/lib/Driver/ToolChains.cpp @@ -53,6 +53,38 @@ using namespace clang::driver; using namespace clang::driver::toolchains; using namespace clang; +/// \brief Utility function to add a system include directory to CC1 arguments. +static void addSystemInclude(const ArgList &DriverArgs, ArgStringList &CC1Args, + const Twine &Path) { + CC1Args.push_back("-internal-isystem"); + CC1Args.push_back(DriverArgs.MakeArgString(Path)); +} + +/// \brief Utility function to add a system include directory with extern "C" +/// semantics to CC1 arguments. +/// +/// Note that this should be used rarely, and only for directories that +/// historically and for legacy reasons are treated as having implicit extern +/// "C" semantics. These semantics are *ignored* by and large today, but its +/// important to preserve the preprocessor changes resulting from the +/// classification. +static void addExternCSystemInclude(const ArgList &DriverArgs, + ArgStringList &CC1Args, const Twine &Path) { + CC1Args.push_back("-internal-externc-isystem"); + CC1Args.push_back(DriverArgs.MakeArgString(Path)); +} + +/// \brief Utility function to add a list of system include directories to CC1. +static void addSystemIncludes(const ArgList &DriverArgs, + ArgStringList &CC1Args, + ArrayRef<StringRef> Paths) { + for (ArrayRef<StringRef>::iterator I = Paths.begin(), E = Paths.end(); + I != E; ++I) { + CC1Args.push_back("-internal-isystem"); + CC1Args.push_back(DriverArgs.MakeArgString(*I)); + } +} + /// Darwin - Darwin tool chain for i386 and x86_64. Darwin::Darwin(const HostInfo &Host, const llvm::Triple& Triple) @@ -1922,6 +1954,430 @@ Tool &Linux::SelectTool(const Compilation &C, const JobAction &JA, return *T; } +void Linux::AddClangSystemIncludeArgs(const ArgList &DriverArgs, + ArgStringList &CC1Args) const { + const Driver &D = getDriver(); + + if (DriverArgs.hasArg(options::OPT_nostdinc)) + return; + + if (!DriverArgs.hasArg(options::OPT_nostdlibinc)) + addSystemInclude(DriverArgs, CC1Args, D.SysRoot + "/usr/local/include"); + + if (!DriverArgs.hasArg(options::OPT_nobuiltininc)) { + // Ignore the sysroot, we *always* look for clang headers relative to + // supplied path. + llvm::sys::Path P(D.ResourceDir); + P.appendComponent("include"); + CC1Args.push_back("-internal-nosysroot-isystem"); + CC1Args.push_back(DriverArgs.MakeArgString(P.str())); + } + + if (DriverArgs.hasArg(options::OPT_nostdlibinc)) + return; + + // Check for configure-time C include directories. + StringRef CIncludeDirs(C_INCLUDE_DIRS); + if (CIncludeDirs != "") { + SmallVector<StringRef, 5> dirs; + CIncludeDirs.split(dirs, ":"); + for (SmallVectorImpl<StringRef>::iterator I = dirs.begin(), E = dirs.end(); + I != E; ++I) { + StringRef Prefix = llvm::sys::path::is_absolute(*I) ? D.SysRoot : ""; + addExternCSystemInclude(DriverArgs, CC1Args, Prefix + *I); + } + return; + } + + // Lacking those, try to detect the correct set of system includes for the + // target triple. + + // Generic Debian multiarch support: + 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"); + } 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"); + } else if (getTriple().getArch() == llvm::Triple::arm) { + addExternCSystemInclude(DriverArgs, CC1Args, + "/usr/include/arm-linux-gnueabi"); + } + + if (getTriple().getOS() == llvm::Triple::RTEMS) + return; + + addExternCSystemInclude(DriverArgs, CC1Args, D.SysRoot + "/usr/include"); +} + +static void AddLibStdCXXIncludePaths(StringRef Base, StringRef ArchDir, + StringRef Dir32, StringRef Dir64, + const llvm::Triple &Triple, + const ArgList &DriverArgs, + ArgStringList &CC1Args) { + addSystemInclude(DriverArgs, CC1Args, Base); + + // Add the multilib dirs + llvm::Triple::ArchType Arch = Triple.getArch(); + bool Is64bit = Arch == llvm::Triple::ppc64 || Arch == llvm::Triple::x86_64; + if (Is64bit) + addSystemInclude(DriverArgs, CC1Args, Base + "/" + ArchDir + "/" + Dir64); + else + addSystemInclude(DriverArgs, CC1Args, Base + "/" + ArchDir + "/" + Dir32); + + // Add the backward dir + addSystemInclude(DriverArgs, CC1Args, Base + "/backward"); +} + +void Linux::AddClangCXXStdlibIncludeArgs(const ArgList &DriverArgs, + ArgStringList &CC1Args) const { + if (DriverArgs.hasArg(options::OPT_nostdlibinc) || + DriverArgs.hasArg(options::OPT_nostdincxx)) + return; + + const llvm::Triple &Triple = getTriple(); + StringRef CxxIncludeRoot(CXX_INCLUDE_ROOT); + if (CxxIncludeRoot != "") { + StringRef CxxIncludeArch(CXX_INCLUDE_ARCH); + if (CxxIncludeArch == "") + AddLibStdCXXIncludePaths(CxxIncludeRoot, Triple.str().c_str(), + CXX_INCLUDE_32BIT_DIR, CXX_INCLUDE_64BIT_DIR, + Triple, DriverArgs, CC1Args); + else + AddLibStdCXXIncludePaths(CxxIncludeRoot, CXX_INCLUDE_ARCH, + CXX_INCLUDE_32BIT_DIR, CXX_INCLUDE_64BIT_DIR, + Triple, DriverArgs, CC1Args); + return; + } + // FIXME: temporary hack: hard-coded paths. + + //===------------------------------------------------------------------===// + // Debian based distros. + // Note: these distros symlink /usr/include/c++/X.Y.Z -> X.Y + //===------------------------------------------------------------------===// + + // Ubuntu 11.11 "Oneiric Ocelot" -- gcc-4.6.0 + AddLibStdCXXIncludePaths( + "/usr/include/c++/4.6", + "x86_64-linux-gnu", "32", "", Triple, DriverArgs, CC1Args); + AddLibStdCXXIncludePaths( + "/usr/include/c++/4.6", + "i686-linux-gnu", "", "64", Triple, DriverArgs, CC1Args); + AddLibStdCXXIncludePaths( + "/usr/include/c++/4.6", + "i486-linux-gnu", "", "64", Triple, DriverArgs, CC1Args); + AddLibStdCXXIncludePaths( + "/usr/include/c++/4.6", + "arm-linux-gnueabi", "", "", Triple, DriverArgs, CC1Args); + + // Ubuntu 11.04 "Natty Narwhal" -- gcc-4.5.2 + AddLibStdCXXIncludePaths( + "/usr/include/c++/4.5", + "x86_64-linux-gnu", "32", "", Triple, DriverArgs, CC1Args); + AddLibStdCXXIncludePaths( + "/usr/include/c++/4.5", + "i686-linux-gnu", "", "64", Triple, DriverArgs, CC1Args); + AddLibStdCXXIncludePaths( + "/usr/include/c++/4.5", + "i486-linux-gnu", "", "64", Triple, DriverArgs, CC1Args); + AddLibStdCXXIncludePaths( + "/usr/include/c++/4.5", + "arm-linux-gnueabi", "", "", Triple, DriverArgs, CC1Args); + + // Ubuntu 10.10 "Maverick Meerkat" -- gcc-4.4.5 + AddLibStdCXXIncludePaths( + "/usr/include/c++/4.4", + "i686-linux-gnu", "", "64", Triple, DriverArgs, CC1Args); + // The rest of 10.10 is the same as previous versions. + + // Ubuntu 10.04 LTS "Lucid Lynx" -- gcc-4.4.3 + // Ubuntu 9.10 "Karmic Koala" -- gcc-4.4.1 + // Debian 6.0 "squeeze" -- gcc-4.4.2 + AddLibStdCXXIncludePaths( + "/usr/include/c++/4.4", + "x86_64-linux-gnu", "32", "", Triple, DriverArgs, CC1Args); + AddLibStdCXXIncludePaths( + "/usr/include/c++/4.4", + "i486-linux-gnu", "", "64", Triple, DriverArgs, CC1Args); + AddLibStdCXXIncludePaths( + "/usr/include/c++/4.4", + "arm-linux-gnueabi", "", "", Triple, DriverArgs, CC1Args); + // Ubuntu 9.04 "Jaunty Jackalope" -- gcc-4.3.3 + // Ubuntu 8.10 "Intrepid Ibex" -- gcc-4.3.2 + // Debian 5.0 "lenny" -- gcc-4.3.2 + AddLibStdCXXIncludePaths( + "/usr/include/c++/4.3", + "x86_64-linux-gnu", "32", "", Triple, DriverArgs, CC1Args); + AddLibStdCXXIncludePaths( + "/usr/include/c++/4.3", + "i486-linux-gnu", "", "64", Triple, DriverArgs, CC1Args); + AddLibStdCXXIncludePaths( + "/usr/include/c++/4.3", + "arm-linux-gnueabi", "", "", Triple, DriverArgs, CC1Args); + // Ubuntu 8.04.4 LTS "Hardy Heron" -- gcc-4.2.4 + // Ubuntu 8.04.[0-3] LTS "Hardy Heron" -- gcc-4.2.3 + AddLibStdCXXIncludePaths( + "/usr/include/c++/4.2", + "x86_64-linux-gnu", "32", "", Triple, DriverArgs, CC1Args); + AddLibStdCXXIncludePaths( + "/usr/include/c++/4.2", + "i486-linux-gnu", "", "64", Triple, DriverArgs, CC1Args); + // Ubuntu 7.10 "Gutsy Gibbon" -- gcc-4.1.3 + AddLibStdCXXIncludePaths( + "/usr/include/c++/4.1", + "x86_64-linux-gnu", "32", "", Triple, DriverArgs, CC1Args); + AddLibStdCXXIncludePaths( + "/usr/include/c++/4.1", + "i486-linux-gnu", "", "64", Triple, DriverArgs, CC1Args); + + //===------------------------------------------------------------------===// + // Redhat based distros. + //===------------------------------------------------------------------===// + // Fedora 15 (GCC 4.6.1) + AddLibStdCXXIncludePaths( + "/usr/include/c++/4.6.1", + "x86_64-redhat-linux", "32", "", Triple, DriverArgs, CC1Args); + AddLibStdCXXIncludePaths( + "/usr/include/c++/4.6.1", + "i686-redhat-linux", "", "", Triple, DriverArgs, CC1Args); + // Fedora 15 (GCC 4.6.0) + AddLibStdCXXIncludePaths( + "/usr/include/c++/4.6.0", + "x86_64-redhat-linux", "32", "", Triple, DriverArgs, CC1Args); + AddLibStdCXXIncludePaths( + "/usr/include/c++/4.6.0", + "i686-redhat-linux", "", "", Triple, DriverArgs, CC1Args); + // Fedora 14 + AddLibStdCXXIncludePaths( + "/usr/include/c++/4.5.1", + "x86_64-redhat-linux", "32", "", Triple, DriverArgs, CC1Args); + AddLibStdCXXIncludePaths( + "/usr/include/c++/4.5.1", + "i686-redhat-linux", "", "", Triple, DriverArgs, CC1Args); + // RHEL5(gcc44) + AddLibStdCXXIncludePaths( + "/usr/include/c++/4.4.4", + "x86_64-redhat-linux6E", "32", "", Triple, DriverArgs, CC1Args); + // Fedora 13 + AddLibStdCXXIncludePaths( + "/usr/include/c++/4.4.4", + "x86_64-redhat-linux", "32", "", Triple, DriverArgs, CC1Args); + AddLibStdCXXIncludePaths( + "/usr/include/c++/4.4.4", + "i686-redhat-linux","", "", Triple, DriverArgs, CC1Args); + // Fedora 12 + AddLibStdCXXIncludePaths( + "/usr/include/c++/4.4.3", + "x86_64-redhat-linux", "32", "", Triple, DriverArgs, CC1Args); + AddLibStdCXXIncludePaths( + "/usr/include/c++/4.4.3", + "i686-redhat-linux","", "", Triple, DriverArgs, CC1Args); + // Fedora 12 (pre-FEB-2010) + AddLibStdCXXIncludePaths( + "/usr/include/c++/4.4.2", + "x86_64-redhat-linux", "32", "", Triple, DriverArgs, CC1Args); + AddLibStdCXXIncludePaths( + "/usr/include/c++/4.4.2", + "i686-redhat-linux","", "", Triple, DriverArgs, CC1Args); + // Fedora 11 + AddLibStdCXXIncludePaths( + "/usr/include/c++/4.4.1", + "x86_64-redhat-linux", "32", "", Triple, DriverArgs, CC1Args); + AddLibStdCXXIncludePaths( + "/usr/include/c++/4.4.1", + "i586-redhat-linux","", "", Triple, DriverArgs, CC1Args); + // Fedora 10 + AddLibStdCXXIncludePaths( + "/usr/include/c++/4.3.2", + "x86_64-redhat-linux", "32", "", Triple, DriverArgs, CC1Args); + AddLibStdCXXIncludePaths( + "/usr/include/c++/4.3.2", + "i386-redhat-linux","", "", Triple, DriverArgs, CC1Args); + // Fedora 9 + AddLibStdCXXIncludePaths( + "/usr/include/c++/4.3.0", + "x86_64-redhat-linux", "32", "", Triple, DriverArgs, CC1Args); + AddLibStdCXXIncludePaths( + "/usr/include/c++/4.3.0", + "i386-redhat-linux", "", "", Triple, DriverArgs, CC1Args); + // Fedora 8 + AddLibStdCXXIncludePaths( + "/usr/include/c++/4.1.2", + "x86_64-redhat-linux", "", "", Triple, DriverArgs, CC1Args); + AddLibStdCXXIncludePaths( + "/usr/include/c++/4.1.2", + "i386-redhat-linux", "", "", Triple, DriverArgs, CC1Args); + + // RHEL 5 + AddLibStdCXXIncludePaths( + "/usr/include/c++/4.1.1", + "x86_64-redhat-linux", "32", "", Triple, DriverArgs, CC1Args); + AddLibStdCXXIncludePaths( + "/usr/include/c++/4.1.1", + "i386-redhat-linux", "", "", Triple, DriverArgs, CC1Args); + + + //===------------------------------------------------------------------===// + + // Exherbo (2010-01-25) + AddLibStdCXXIncludePaths( + "/usr/include/c++/4.4.3", + "x86_64-pc-linux-gnu", "32", "", Triple, DriverArgs, CC1Args); + AddLibStdCXXIncludePaths( + "/usr/include/c++/4.4.3", + "i686-pc-linux-gnu", "", "", Triple, DriverArgs, CC1Args); + + // openSUSE 11.1 32 bit + AddLibStdCXXIncludePaths( + "/usr/include/c++/4.3", + "i586-suse-linux", "", "", Triple, DriverArgs, CC1Args); + // openSUSE 11.1 64 bit + AddLibStdCXXIncludePaths( + "/usr/include/c++/4.3", + "x86_64-suse-linux", "32", "", Triple, DriverArgs, CC1Args); + // openSUSE 11.2 + AddLibStdCXXIncludePaths( + "/usr/include/c++/4.4", + "i586-suse-linux", "", "", Triple, DriverArgs, CC1Args); + AddLibStdCXXIncludePaths( + "/usr/include/c++/4.4", + "x86_64-suse-linux", "", "", Triple, DriverArgs, CC1Args); + + // openSUSE 11.4 + AddLibStdCXXIncludePaths( + "/usr/include/c++/4.5", + "i586-suse-linux", "", "", Triple, DriverArgs, CC1Args); + AddLibStdCXXIncludePaths( + "/usr/include/c++/4.5", + "x86_64-suse-linux", "", "", Triple, DriverArgs, CC1Args); + + // openSUSE 12.1 + AddLibStdCXXIncludePaths( + "/usr/include/c++/4.6", + "i586-suse-linux", "", "", Triple, DriverArgs, CC1Args); + AddLibStdCXXIncludePaths( + "/usr/include/c++/4.6", + "x86_64-suse-linux", "", "", Triple, DriverArgs, CC1Args); + // Arch Linux 2008-06-24 + AddLibStdCXXIncludePaths( + "/usr/include/c++/4.3.1", + "i686-pc-linux-gnu", "", "", Triple, DriverArgs, CC1Args); + AddLibStdCXXIncludePaths( + "/usr/include/c++/4.3.1", + "x86_64-unknown-linux-gnu", "", "", Triple, DriverArgs, CC1Args); + + // Arch Linux gcc 4.6 + AddLibStdCXXIncludePaths( + "/usr/include/c++/4.6.1", + "i686-pc-linux-gnu", "", "", Triple, DriverArgs, CC1Args); + AddLibStdCXXIncludePaths( + "/usr/include/c++/4.6.1", + "x86_64-unknown-linux-gnu", "", "", Triple, DriverArgs, CC1Args); + AddLibStdCXXIncludePaths( + "/usr/include/c++/4.6.0", + "i686-pc-linux-gnu", "", "", Triple, DriverArgs, CC1Args); + AddLibStdCXXIncludePaths( + "/usr/include/c++/4.6.0", + "x86_64-unknown-linux-gnu", "", "", Triple, DriverArgs, CC1Args); + + // Slackware gcc 4.5.2 (13.37) + AddLibStdCXXIncludePaths( + "/usr/include/c++/4.5.2", + "i486-slackware-linux", "", "", Triple, DriverArgs, CC1Args); + AddLibStdCXXIncludePaths( + "/usr/include/c++/4.5.2", + "x86_64-slackware-linux", "", "", Triple, DriverArgs, CC1Args); + // Slackware gcc 4.5.3 (-current) + AddLibStdCXXIncludePaths( + "/usr/include/c++/4.5.3", + "i486-slackware-linux", "", "", Triple, DriverArgs, CC1Args); + AddLibStdCXXIncludePaths( + "/usr/include/c++/4.5.3", + "x86_64-slackware-linux", "", "", Triple, DriverArgs, CC1Args); + + // Gentoo x86 gcc 4.5.3 + AddLibStdCXXIncludePaths( + "/usr/lib/gcc/i686-pc-linux-gnu/4.5.3/include/g++-v4", + "i686-pc-linux-gnu", "", "", Triple, DriverArgs, CC1Args); + // Gentoo x86 gcc 4.5.2 + AddLibStdCXXIncludePaths( + "/usr/lib/gcc/i686-pc-linux-gnu/4.5.2/include/g++-v4", + "i686-pc-linux-gnu", "", "", Triple, DriverArgs, CC1Args); + // Gentoo x86 gcc 4.4.5 + AddLibStdCXXIncludePaths( + "/usr/lib/gcc/i686-pc-linux-gnu/4.4.5/include/g++-v4", + "i686-pc-linux-gnu", "", "", Triple, DriverArgs, CC1Args); + // Gentoo x86 gcc 4.4.4 + AddLibStdCXXIncludePaths( + "/usr/lib/gcc/i686-pc-linux-gnu/4.4.4/include/g++-v4", + "i686-pc-linux-gnu", "", "", Triple, DriverArgs, CC1Args); + // Gentoo x86 2010.0 stable + AddLibStdCXXIncludePaths( + "/usr/lib/gcc/i686-pc-linux-gnu/4.4.3/include/g++-v4", + "i686-pc-linux-gnu", "", "", Triple, DriverArgs, CC1Args); + // Gentoo x86 2009.1 stable + AddLibStdCXXIncludePaths( + "/usr/lib/gcc/i686-pc-linux-gnu/4.3.4/include/g++-v4", + "i686-pc-linux-gnu", "", "", Triple, DriverArgs, CC1Args); + // Gentoo x86 2009.0 stable + AddLibStdCXXIncludePaths( + "/usr/lib/gcc/i686-pc-linux-gnu/4.3.2/include/g++-v4", + "i686-pc-linux-gnu", "", "", Triple, DriverArgs, CC1Args); + // Gentoo x86 2008.0 stable + AddLibStdCXXIncludePaths( + "/usr/lib/gcc/i686-pc-linux-gnu/4.1.2/include/g++-v4", + "i686-pc-linux-gnu", "", "", Triple, DriverArgs, CC1Args); + // Gentoo x86 llvm-gcc trunk + AddLibStdCXXIncludePaths( + "/usr/lib/llvm-gcc-4.2-9999/include/c++/4.2.1", + "i686-pc-linux-gnu", "", "", Triple, DriverArgs, CC1Args); + + // Gentoo amd64 gcc 4.5.3 + AddLibStdCXXIncludePaths( + "/usr/lib/gcc/x86_64-pc-linux-gnu/4.5.3/include/g++-v4", + "x86_64-pc-linux-gnu", "32", "", Triple, DriverArgs, CC1Args); + // Gentoo amd64 gcc 4.5.2 + AddLibStdCXXIncludePaths( + "/usr/lib/gcc/x86_64-pc-linux-gnu/4.5.2/include/g++-v4", + "x86_64-pc-linux-gnu", "32", "", Triple, DriverArgs, CC1Args); + // Gentoo amd64 gcc 4.4.5 + AddLibStdCXXIncludePaths( + "/usr/lib/gcc/x86_64-pc-linux-gnu/4.4.5/include/g++-v4", + "x86_64-pc-linux-gnu", "32", "", Triple, DriverArgs, CC1Args); + // Gentoo amd64 gcc 4.4.4 + AddLibStdCXXIncludePaths( + "/usr/lib/gcc/x86_64-pc-linux-gnu/4.4.4/include/g++-v4", + "x86_64-pc-linux-gnu", "32", "", Triple, DriverArgs, CC1Args); + // Gentoo amd64 gcc 4.4.3 + AddLibStdCXXIncludePaths( + "/usr/lib/gcc/x86_64-pc-linux-gnu/4.4.3/include/g++-v4", + "x86_64-pc-linux-gnu", "32", "", Triple, DriverArgs, CC1Args); + // Gentoo amd64 gcc 4.3.4 + AddLibStdCXXIncludePaths( + "/usr/lib/gcc/x86_64-pc-linux-gnu/4.3.4/include/g++-v4", + "x86_64-pc-linux-gnu", "", "", Triple, DriverArgs, CC1Args); + // Gentoo amd64 gcc 4.3.2 + AddLibStdCXXIncludePaths( + "/usr/lib/gcc/x86_64-pc-linux-gnu/4.3.2/include/g++-v4", + "x86_64-pc-linux-gnu", "", "", Triple, DriverArgs, CC1Args); + // Gentoo amd64 stable + AddLibStdCXXIncludePaths( + "/usr/lib/gcc/x86_64-pc-linux-gnu/4.1.2/include/g++-v4", + "x86_64-pc-linux-gnu", "", "", Triple, DriverArgs, CC1Args); + + // Gentoo amd64 llvm-gcc trunk + AddLibStdCXXIncludePaths( + "/usr/lib/llvm-gcc-4.2-9999/include/c++/4.2.1", + "x86_64-pc-linux-gnu", "", "", Triple, DriverArgs, CC1Args); +} + /// DragonFly - DragonFly tool chain which can call as(1) and ld(1) directly. DragonFly::DragonFly(const HostInfo &Host, const llvm::Triple& Triple) @@ -2230,27 +2686,8 @@ static bool getVisualStudioDir(std::string &path) { return false; } -// FIXME: Hoist this up, generalize, and document it as more stuff begins using -// it. -static void addSystemInclude(const ArgList &DriverArgs, ArgStringList &CC1Args, - const Twine &Path) { - CC1Args.push_back("-internal-isystem"); - CC1Args.push_back(DriverArgs.MakeArgString(Path)); -} - #endif // _MSC_VER -// FIXME: Generalize this and document it as more clients begin to use it. -static void addSystemIncludes(const ArgList &DriverArgs, - ArgStringList &CC1Args, - ArrayRef<StringRef> Paths) { - for (ArrayRef<StringRef>::iterator I = Paths.begin(), E = Paths.end(); - I != E; ++I) { - CC1Args.push_back("-internal-isystem"); - CC1Args.push_back(DriverArgs.MakeArgString(*I)); - } -} - void Windows::AddClangSystemIncludeArgs(const ArgList &DriverArgs, ArgStringList &CC1Args) const { if (DriverArgs.hasArg(options::OPT_nostdinc)) |