forked from OSchip/llvm-project
[Driver] Search LibraryPaths when handling -print-file-name
This is necessary to handle the multiarch runtime directories. Differential Revision: https://reviews.llvm.org/D51573 llvm-svn: 342021
This commit is contained in:
parent
4034461abd
commit
8f2499f804
|
@ -4152,16 +4152,24 @@ const char *Driver::GetNamedOutputPath(Compilation &C, const JobAction &JA,
|
|||
}
|
||||
|
||||
std::string Driver::GetFilePath(StringRef Name, const ToolChain &TC) const {
|
||||
// Seach for Name in a list of paths.
|
||||
auto SearchPaths = [&](const llvm::SmallVectorImpl<std::string> &P)
|
||||
-> llvm::Optional<std::string> {
|
||||
// Respect a limited subset of the '-Bprefix' functionality in GCC by
|
||||
// attempting to use this prefix when looking for file paths.
|
||||
for (const std::string &Dir : PrefixDirs) {
|
||||
for (const auto &Dir : P) {
|
||||
if (Dir.empty())
|
||||
continue;
|
||||
SmallString<128> P(Dir[0] == '=' ? SysRoot + Dir.substr(1) : Dir);
|
||||
llvm::sys::path::append(P, Name);
|
||||
if (llvm::sys::fs::exists(Twine(P)))
|
||||
return P.str();
|
||||
return {P.str()};
|
||||
}
|
||||
return None;
|
||||
};
|
||||
|
||||
if (auto P = SearchPaths(PrefixDirs))
|
||||
return *P;
|
||||
|
||||
SmallString<128> R(ResourceDir);
|
||||
llvm::sys::path::append(R, Name);
|
||||
|
@ -4173,14 +4181,11 @@ std::string Driver::GetFilePath(StringRef Name, const ToolChain &TC) const {
|
|||
if (llvm::sys::fs::exists(Twine(P)))
|
||||
return P.str();
|
||||
|
||||
for (const std::string &Dir : TC.getFilePaths()) {
|
||||
if (Dir.empty())
|
||||
continue;
|
||||
SmallString<128> P(Dir[0] == '=' ? SysRoot + Dir.substr(1) : Dir);
|
||||
llvm::sys::path::append(P, Name);
|
||||
if (llvm::sys::fs::exists(Twine(P)))
|
||||
return P.str();
|
||||
}
|
||||
if (auto P = SearchPaths(TC.getLibraryPaths()))
|
||||
return *P;
|
||||
|
||||
if (auto P = SearchPaths(TC.getFilePaths()))
|
||||
return *P;
|
||||
|
||||
return Name;
|
||||
}
|
||||
|
|
|
@ -19,3 +19,9 @@
|
|||
// RUN: -resource-dir=%S/Inputs/resource_dir_with_per_target_subdir \
|
||||
// RUN: | FileCheck --check-prefix=CHECK-CLANGRT-X8664 %s
|
||||
// CHECK-CLANGRT-X8664: x86_64-linux-gnu{{/|\\}}lib{{/|\\}}libclang_rt.builtins.a
|
||||
|
||||
// RUN: %clang -rtlib=compiler-rt -print-file-name=libclang_rt.builtins.a 2>&1 \
|
||||
// RUN: --target=x86_64-linux-gnu \
|
||||
// RUN: -resource-dir=%S/Inputs/resource_dir_with_per_target_subdir \
|
||||
// RUN: | FileCheck --check-prefix=CHECK-FILE-NAME-X8664 %s
|
||||
// CHECK-FILE-NAME-X8664: x86_64-linux-gnu{{/|\\}}lib{{/|\\}}libclang_rt.builtins.a
|
||||
|
|
Loading…
Reference in New Issue