diff options
Diffstat (limited to 'clang/lib/Driver/ToolChain.cpp')
-rw-r--r-- | clang/lib/Driver/ToolChain.cpp | 22 |
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) { |