return UnknownDistro;
}
-static std::string findGCCBaseLibDir(const Driver &D,
- const std::string &GccTriple) {
+/// \brief Find an installed GCC lib base directory.
+///
+/// Tries both the auto-detected GccTriple passed in as well as the
+/// Driver-specified default host triple. Sets the GccTriple to the triple
+/// actually used.
+static std::string findGCCBaseLibDir(const Driver &D, std::string &GccTriple) {
// FIXME: Using CXX_INCLUDE_ROOT is here is a bit of a hack, but
// avoids adding yet another option to configure/cmake.
// It would probably be cleaner to break it in two variables
bool Exists;
llvm::SmallVector<std::string, 8> Paths(D.PrefixDirs.begin(),
D.PrefixDirs.end());
- Paths.push_back("/usr/");
- const std::string *Triples[] = {&GccTriple, &D.DefaultHostTriple};
+ Paths.push_back(D.SysRoot + "/usr/");
+ const std::string Triples[] = {GccTriple, D.DefaultHostTriple};
for (llvm::SmallVector<std::string, 8>::const_iterator it = Paths.begin(),
ie = Paths.end(); it != ie; ++it) {
for (unsigned i = 0; i < sizeof(GccVersions)/sizeof(char*); ++i) {
for (unsigned j = 0; j < sizeof(Triples)/sizeof(Triples[0]); ++j) {
- std::string Suffix = *Triples[j] + "/" + GccVersions[i];
+ GccTriple = Triples[j];
+ std::string Suffix = Triples[j] + "/" + GccVersions[i];
std::string t1 = *it + "lib/gcc/" + Suffix;
if (!llvm::sys::fs::exists(t1 + "/crtbegin.o", Exists) && Exists)
return t1;
}
}
}
+ GccTriple.clear();
return "";
}
// Add the non-multiplib suffixed paths (if potentially different).
if (!Base.empty() && !GccTriple.empty()) {
- if (!Suffix.empty())
+ if (!Suffix.empty() || !HasMultilib(Arch, Distro))
addPathIfExists(Base, Paths);
addPathIfExists(Base + "/../../../../" + GccTriple + "/lib", Paths);
addPathIfExists(Base + "/../../..", Paths);
// sysroot to make these tests independent of the host system.
//
// RUN: %clang -no-canonical-prefixes %s -### -o %t.o 2>&1 \
-// RUN: -ccc-host-triple i386-unkown-linux \
+// RUN: -ccc-host-triple i386-unknown-linux \
// RUN: --sysroot=%S/Inputs/basic_linux_tree \
// RUN: | FileCheck --check-prefix=CHECK-LD-32 %s
// CHECK-LD-32: "{{.*}}ld{{(.exe)?}}" "--sysroot=[[SYSROOT:[^"]+]]"
-// CHECK-LD-32: {{.*}} "-L[[SYSROOT]]/lib" "-L[[SYSROOT]]/usr/lib"
+// CHECK-LD-32: "[[SYSROOT]]/usr/lib/gcc/i386-unknown-linux/4.6.0/crtbegin.o"
+// CHECK-LD-32: "-L[[SYSROOT]]/usr/lib/gcc/i386-unknown-linux/4.6.0"
+// CHECK-LD-32: "-L[[SYSROOT]]/usr/lib/gcc/i386-unknown-linux/4.6.0/../../.."
+// CHECK-LD-32: "-L[[SYSROOT]]/lib"
+// CHECK-LD-32: "-L[[SYSROOT]]/usr/lib"
//
// RUN: %clang -no-canonical-prefixes %s -### -o %t.o 2>&1 \
// RUN: -ccc-host-triple x86_64-unknown-linux \
// RUN: --sysroot=%S/Inputs/basic_linux_tree \
// RUN: | FileCheck --check-prefix=CHECK-LD-64 %s
// CHECK-LD-64: "{{.*}}ld{{(.exe)?}}" "--sysroot=[[SYSROOT:[^"]+]]"
-// CHECK-LD-64: {{.*}} "-L[[SYSROOT]]/lib" "-L[[SYSROOT]]/usr/lib"
+// CHECK-LD-64: "[[SYSROOT]]/usr/lib/gcc/x86_64-unknown-linux/4.6.0/crtbegin.o"
+// CHECK-LD-64: "-L[[SYSROOT]]/usr/lib/gcc/x86_64-unknown-linux/4.6.0"
+// CHECK-LD-64: "-L[[SYSROOT]]/usr/lib/gcc/x86_64-unknown-linux/4.6.0/../../.."
+// CHECK-LD-64: "-L[[SYSROOT]]/lib"
+// CHECK-LD-64: "-L[[SYSROOT]]/usr/lib"