aboutsummaryrefslogtreecommitdiff
path: root/clang/lib/Driver/ToolChain.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'clang/lib/Driver/ToolChain.cpp')
-rw-r--r--clang/lib/Driver/ToolChain.cpp22
1 files changed, 16 insertions, 6 deletions
diff --git a/clang/lib/Driver/ToolChain.cpp b/clang/lib/Driver/ToolChain.cpp
index 2dba975a..27b66aa 100644
--- a/clang/lib/Driver/ToolChain.cpp
+++ b/clang/lib/Driver/ToolChain.cpp
@@ -86,7 +86,8 @@ ToolChain::ToolChain(const Driver &D, const llvm::Triple &T,
addIfExists(getLibraryPaths(), Path);
for (const auto &Path : getStdlibPaths())
addIfExists(getFilePaths(), Path);
- addIfExists(getFilePaths(), getArchSpecificLibPath());
+ for (const auto &Path : getArchSpecificLibPaths())
+ addIfExists(getFilePaths(), Path);
}
llvm::Expected<std::unique_ptr<llvm::MemoryBuffer>>
@@ -621,11 +622,20 @@ ToolChain::path_list ToolChain::getStdlibPaths() const {
return Paths;
}
-std::string ToolChain::getArchSpecificLibPath() const {
- SmallString<128> Path(getDriver().ResourceDir);
- llvm::sys::path::append(Path, "lib", getOSLibName(),
- llvm::Triple::getArchTypeName(getArch()));
- return std::string(Path.str());
+ToolChain::path_list ToolChain::getArchSpecificLibPaths() const {
+ path_list Paths;
+
+ auto AddPath = [&](const ArrayRef<StringRef> &SS) {
+ SmallString<128> Path(getDriver().ResourceDir);
+ llvm::sys::path::append(Path, "lib");
+ for (auto &S : SS)
+ llvm::sys::path::append(Path, S);
+ Paths.push_back(std::string(Path.str()));
+ };
+
+ AddPath({getTriple().str()});
+ AddPath({getOSLibName(), llvm::Triple::getArchTypeName(getArch())});
+ return Paths;
}
bool ToolChain::needsProfileRT(const ArgList &Args) {