forked from OSchip/llvm-project
[Driver] Search compiler-rt paths in -print-file-name=
This makes it possible to print the name of compiler-rt libraries by using simply clang -print-file-name=libclang_rt.${runtime}-${arch}.so same as other libraries, without having to know the details of the resource directory organization. Differential Revision: https://reviews.llvm.org/D35820 llvm-svn: 310548
This commit is contained in:
parent
9c161e894a
commit
916a4672c1
|
@ -309,6 +309,8 @@ public:
|
|||
return ToolChain::CST_Libstdcxx;
|
||||
}
|
||||
|
||||
virtual std::string getCompilerRTPath() const;
|
||||
|
||||
virtual std::string getCompilerRT(const llvm::opt::ArgList &Args,
|
||||
StringRef Component,
|
||||
bool Shared = false) const;
|
||||
|
|
|
@ -3682,7 +3682,12 @@ std::string Driver::GetFilePath(StringRef Name, const ToolChain &TC) const {
|
|||
return P.str();
|
||||
}
|
||||
|
||||
SmallString<128> P(ResourceDir);
|
||||
SmallString<128> R(ResourceDir);
|
||||
llvm::sys::path::append(R, Name);
|
||||
if (llvm::sys::fs::exists(Twine(R)))
|
||||
return R.str();
|
||||
|
||||
SmallString<128> P(TC.getCompilerRTPath());
|
||||
llvm::sys::path::append(P, Name);
|
||||
if (llvm::sys::fs::exists(Twine(P)))
|
||||
return P.str();
|
||||
|
|
|
@ -308,6 +308,13 @@ static StringRef getArchNameForCompilerRTLib(const ToolChain &TC,
|
|||
return TC.getArchName();
|
||||
}
|
||||
|
||||
std::string ToolChain::getCompilerRTPath() const {
|
||||
SmallString<128> Path(getDriver().ResourceDir);
|
||||
StringRef OSLibName = Triple.isOSFreeBSD() ? "freebsd" : getOS();
|
||||
llvm::sys::path::append(Path, "lib", OSLibName);
|
||||
return Path.str();
|
||||
}
|
||||
|
||||
std::string ToolChain::getCompilerRT(const ArgList &Args, StringRef Component,
|
||||
bool Shared) const {
|
||||
const llvm::Triple &TT = getTriple();
|
||||
|
@ -320,9 +327,7 @@ std::string ToolChain::getCompilerRT(const ArgList &Args, StringRef Component,
|
|||
const char *Suffix = Shared ? (Triple.isOSWindows() ? ".dll" : ".so")
|
||||
: (IsITANMSVCWindows ? ".lib" : ".a");
|
||||
|
||||
SmallString<128> Path(getDriver().ResourceDir);
|
||||
StringRef OSLibName = Triple.isOSFreeBSD() ? "freebsd" : getOS();
|
||||
llvm::sys::path::append(Path, "lib", OSLibName);
|
||||
SmallString<128> Path(getCompilerRTPath());
|
||||
llvm::sys::path::append(Path, Prefix + Twine("clang_rt.") + Component + "-" +
|
||||
Arch + Env + Suffix);
|
||||
return Path.str();
|
||||
|
|
Loading…
Reference in New Issue