summaryrefslogtreecommitdiffstats
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.cpp52
1 files changed, 30 insertions, 22 deletions
diff --git a/clang/lib/Driver/ToolChain.cpp b/clang/lib/Driver/ToolChain.cpp
index 7dd1fa13cc1..b4491d6a556 100644
--- a/clang/lib/Driver/ToolChain.cpp
+++ b/clang/lib/Driver/ToolChain.cpp
@@ -267,46 +267,52 @@ Tool *ToolChain::getTool(Action::ActionClass AC) const {
llvm_unreachable("Invalid tool kind.");
}
-static StringRef getArchNameForCompilerRTLib(const ToolChain &TC,
- const ArgList &Args) {
- const llvm::Triple &Triple = TC.getTriple();
- bool IsWindows = Triple.isOSWindows();
-
- if (Triple.isWindowsMSVCEnvironment() && TC.getArch() == llvm::Triple::x86)
+static StringRef
+getArchNameForCompilerRTLib(const ToolChain &TC,
+ const llvm::Triple &EffectiveTriple,
+ const ArgList &Args) {
+ bool IsWindows = EffectiveTriple.isOSWindows();
+
+ if (EffectiveTriple.isWindowsMSVCEnvironment() &&
+ TC.getArch() == llvm::Triple::x86)
return "i386";
if (TC.getArch() == llvm::Triple::arm || TC.getArch() == llvm::Triple::armeb)
- return (arm::getARMFloatABI(TC, Args) == arm::FloatABI::Hard && !IsWindows)
+ return (arm::getARMFloatABI(TC, EffectiveTriple, Args) ==
+ arm::FloatABI::Hard &&
+ !IsWindows)
? "armhf"
: "arm";
return TC.getArchName();
}
-std::string ToolChain::getCompilerRT(const ArgList &Args, StringRef Component,
+std::string ToolChain::getCompilerRT(const llvm::Triple &EffectiveTriple,
+ const ArgList &Args, StringRef Component,
bool Shared) const {
- const llvm::Triple &TT = getTriple();
- const char *Env = TT.isAndroid() ? "-android" : "";
- bool IsITANMSVCWindows =
- TT.isWindowsMSVCEnvironment() || TT.isWindowsItaniumEnvironment();
+ const char *Env = EffectiveTriple.isAndroid() ? "-android" : "";
+ bool IsITANMSVCWindows = EffectiveTriple.isWindowsMSVCEnvironment() ||
+ EffectiveTriple.isWindowsItaniumEnvironment();
- StringRef Arch = getArchNameForCompilerRTLib(*this, Args);
+ StringRef Arch = getArchNameForCompilerRTLib(*this, EffectiveTriple, Args);
const char *Prefix = IsITANMSVCWindows ? "" : "lib";
- const char *Suffix = Shared ? (Triple.isOSWindows() ? ".dll" : ".so")
+ const char *Suffix = Shared ? (EffectiveTriple.isOSWindows() ? ".dll" : ".so")
: (IsITANMSVCWindows ? ".lib" : ".a");
SmallString<128> Path(getDriver().ResourceDir);
- StringRef OSLibName = Triple.isOSFreeBSD() ? "freebsd" : getOS();
+ StringRef OSLibName = EffectiveTriple.isOSFreeBSD() ? "freebsd" : getOS();
llvm::sys::path::append(Path, "lib", OSLibName);
llvm::sys::path::append(Path, Prefix + Twine("clang_rt.") + Component + "-" +
Arch + Env + Suffix);
return Path.str();
}
-const char *ToolChain::getCompilerRTArgString(const llvm::opt::ArgList &Args,
- StringRef Component,
- bool Shared) const {
- return Args.MakeArgString(getCompilerRT(Args, Component, Shared));
+const char *
+ToolChain::getCompilerRTArgString(const llvm::Triple &EffectiveTriple,
+ const llvm::opt::ArgList &Args,
+ StringRef Component, bool Shared) const {
+ return Args.MakeArgString(
+ getCompilerRT(EffectiveTriple, Args, Component, Shared));
}
bool ToolChain::needsProfileRT(const ArgList &Args) {
@@ -517,11 +523,13 @@ void ToolChain::addClangTargetOptions(const ArgList &DriverArgs,
void ToolChain::addClangWarningOptions(ArgStringList &CC1Args) const {}
-void ToolChain::addProfileRTLibs(const llvm::opt::ArgList &Args,
+void ToolChain::addProfileRTLibs(const llvm::Triple &EffectiveTriple,
+ const llvm::opt::ArgList &Args,
llvm::opt::ArgStringList &CmdArgs) const {
- if (!needsProfileRT(Args)) return;
+ if (!needsProfileRT(Args))
+ return;
- CmdArgs.push_back(getCompilerRTArgString(Args, "profile"));
+ CmdArgs.push_back(getCompilerRTArgString(EffectiveTriple, Args, "profile"));
}
ToolChain::RuntimeLibType ToolChain::GetRuntimeLibType(
OpenPOWER on IntegriCloud