From 876e7c28661705dd67ff84d9899e848b72a08510 Mon Sep 17 00:00:00 2001 From: Rafael Espindola Date: Wed, 9 Sep 2015 13:36:00 +0000 Subject: [PATCH] [Solaris] Use the GCC Installation detector to add the C++ include paths. MIME-Version: 1.0 Content-Type: text/plain; charset=utf8 Content-Transfer-Encoding: 8bit Patch by Xan López! git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@247144 91177308-0d34-0410-b5e6-96231b3b80d8 --- lib/Driver/ToolChains.cpp | 25 +++++++++++++++++++++++++ lib/Driver/ToolChains.h | 4 ++++ lib/Frontend/InitHeaderSearch.cpp | 9 --------- test/Driver/solaris-header-search.cpp | 11 +++++++++++ 4 files changed, 40 insertions(+), 9 deletions(-) create mode 100644 test/Driver/solaris-header-search.cpp diff --git a/lib/Driver/ToolChains.cpp b/lib/Driver/ToolChains.cpp index d7989a7993..7f0b9bb747 100644 --- a/lib/Driver/ToolChains.cpp +++ b/lib/Driver/ToolChains.cpp @@ -2962,6 +2962,31 @@ Tool *Solaris::buildAssembler() const { Tool *Solaris::buildLinker() const { return new tools::solaris::Linker(*this); } +void Solaris::AddClangCXXStdlibIncludeArgs(const ArgList &DriverArgs, + ArgStringList &CC1Args) const { + if (DriverArgs.hasArg(options::OPT_nostdlibinc) || + DriverArgs.hasArg(options::OPT_nostdincxx)) + return; + + // Include the support directory for things like xlocale and fudged system + // headers. + addSystemInclude(DriverArgs, CC1Args, "/usr/include/c++/v1/support/solaris"); + + if (GCCInstallation.isValid()) { + GCCVersion Version = GCCInstallation.getVersion(); + addSystemInclude(DriverArgs, CC1Args, + getDriver().SysRoot + "/usr/gcc/" + + Version.MajorStr + "." + + Version.MinorStr + + "/include/c++/" + Version.Text); + addSystemInclude(DriverArgs, CC1Args, + getDriver().SysRoot + "/usr/gcc/" + Version.MajorStr + + "." + Version.MinorStr + "/include/c++/" + + Version.Text + "/" + + GCCInstallation.getTriple().str()); + } +} + /// Distribution (very bare-bones at the moment). enum Distro { diff --git a/lib/Driver/ToolChains.h b/lib/Driver/ToolChains.h index b953516d07..2a2fc73319 100644 --- a/lib/Driver/ToolChains.h +++ b/lib/Driver/ToolChains.h @@ -527,6 +527,10 @@ public: bool IsIntegratedAssemblerDefault() const override { return true; } + void AddClangCXXStdlibIncludeArgs( + const llvm::opt::ArgList &DriverArgs, + llvm::opt::ArgStringList &CC1Args) const override; + protected: Tool *buildAssembler() const override; Tool *buildLinker() const override; diff --git a/lib/Frontend/InitHeaderSearch.cpp b/lib/Frontend/InitHeaderSearch.cpp index e3a17c922f..f68cf0fc70 100644 --- a/lib/Frontend/InitHeaderSearch.cpp +++ b/lib/Frontend/InitHeaderSearch.cpp @@ -404,10 +404,6 @@ AddDefaultCPlusPlusIncludePaths(const llvm::Triple &triple, const HeaderSearchOp AddGnuCPlusPlusIncludePaths("/usr/gnu/include/c++/4.4.3", "", "", "", triple); break; - case llvm::Triple::Solaris: - AddGnuCPlusPlusIncludePaths("/usr/gcc/4.5/include/c++/4.5.2/", - "i386-pc-solaris2.11", "", "", triple); - break; default: break; } @@ -453,11 +449,6 @@ void InitHeaderSearch::AddDefaultIncludePaths(const LangOptions &Lang, AddUnmappedPath(P, CXXSystem, false); } } - // On Solaris, include the support directory for things like xlocale and - // fudged system headers. - if (triple.getOS() == llvm::Triple::Solaris) - AddPath("/usr/include/c++/v1/support/solaris", CXXSystem, false); - AddPath("/usr/include/c++/v1", CXXSystem, false); } else { AddDefaultCPlusPlusIncludePaths(triple, HSOpts); diff --git a/test/Driver/solaris-header-search.cpp b/test/Driver/solaris-header-search.cpp new file mode 100644 index 0000000000..667b2c05d4 --- /dev/null +++ b/test/Driver/solaris-header-search.cpp @@ -0,0 +1,11 @@ +// Test that the C++ headers are found. +// +// RUN: %clang -no-canonical-prefixes %s -### 2>&1 \ +// RUN: --target=sparc-sun-solaris2.11 \ +// RUN: --gcc-toolchain="" \ +// RUN: --sysroot=%S/Inputs/sparc-sun-solaris2.11 \ +// RUN: | FileCheck %s +// CHECK: "{{[^"]*}}clang{{[^"]*}}" "-cc1" +// CHECK: "-internal-isystem" "{{.*}}/usr/include/c++/v1/support/solaris" +// CHECK: "-internal-isystem" "{{.*}}/usr/gcc/4.8/include/c++/4.8.2" +// CHECK: "-internal-isystem" "{{.*}}/usr/gcc/4.8/include/c++/4.8.2/sparc-sun-solaris2.11" -- 2.40.0