[Solaris] Use the GCC Installation detector to add the C++ include paths.

Patch by Xan López!

llvm-svn: 247144
This commit is contained in:
Rafael Espindola 2015-09-09 13:36:00 +00:00
parent d7b073e0aa
commit d511726ce9
4 changed files with 40 additions and 9 deletions

View File

@ -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 {

View File

@ -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;

View File

@ -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);

View File

@ -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"