summaryrefslogtreecommitdiffstats
path: root/clang/lib
diff options
context:
space:
mode:
authorPeter Collingbourne <peter@pcc.me.uk>2015-11-20 20:49:39 +0000
committerPeter Collingbourne <peter@pcc.me.uk>2015-11-20 20:49:39 +0000
commit39719a77d151b9070d6d5fcd53dfff2f65eea6b2 (patch)
tree10843d9cf2a8afd0ccd869d6cd2517361c6efa7e /clang/lib
parent0d7f89d1ac148f105adddafe3ad4e9e4102b220e (diff)
downloadbcm5719-llvm-39719a77d151b9070d6d5fcd53dfff2f65eea6b2.tar.gz
bcm5719-llvm-39719a77d151b9070d6d5fcd53dfff2f65eea6b2.zip
Driver: Defer computation of linker path until it is needed.
This allows us to construct Linux toolchains without a valid linker. This is needed for example to build a CUDA device toolchain after r253385. llvm-svn: 253707
Diffstat (limited to 'clang/lib')
-rw-r--r--clang/lib/Driver/ToolChain.cpp2
-rw-r--r--clang/lib/Driver/ToolChains.cpp7
-rw-r--r--clang/lib/Driver/ToolChains.h2
-rw-r--r--clang/lib/Driver/Tools.cpp10
4 files changed, 7 insertions, 14 deletions
diff --git a/clang/lib/Driver/ToolChain.cpp b/clang/lib/Driver/ToolChain.cpp
index 80783bdcc4a..8cba13f04e3 100644
--- a/clang/lib/Driver/ToolChain.cpp
+++ b/clang/lib/Driver/ToolChain.cpp
@@ -359,7 +359,7 @@ std::string ToolChain::GetLinkerPath() const {
return "";
}
- return GetProgramPath("ld");
+ return GetProgramPath(DefaultLinker);
}
types::ID ToolChain::LookupTypeForExtension(const char *Ext) const {
diff --git a/clang/lib/Driver/ToolChains.cpp b/clang/lib/Driver/ToolChains.cpp
index d8603023e48..b7984c5482b 100644
--- a/clang/lib/Driver/ToolChains.cpp
+++ b/clang/lib/Driver/ToolChains.cpp
@@ -2455,8 +2455,7 @@ MipsLLVMToolChain::MipsLLVMToolChain(const Driver &D,
getFilePaths().push_back(computeSysRoot() + "/usr/lib" + LibSuffix);
// Use LLD by default.
- if (!Args.getLastArg(options::OPT_fuse_ld_EQ))
- Linker = GetProgramPath("lld");
+ DefaultLinker = "lld";
}
void MipsLLVMToolChain::AddClangSystemIncludeArgs(
@@ -2837,8 +2836,6 @@ NaClToolChain::NaClToolChain(const Driver &D, const llvm::Triple &Triple,
break;
}
- // Use provided linker, not system linker
- Linker = GetLinkerPath();
NaClArmMacrosPath = GetFilePath("nacl-arm-macros.s");
}
@@ -3693,8 +3690,6 @@ Linux::Linux(const Driver &D, const llvm::Triple &Triple, const ArgList &Args)
GCCInstallation.getTriple().str() + "/bin")
.str());
- Linker = GetLinkerPath();
-
Distro Distro = DetectDistro(D, Arch);
if (IsOpenSUSE(Distro) || IsUbuntu(Distro)) {
diff --git a/clang/lib/Driver/ToolChains.h b/clang/lib/Driver/ToolChains.h
index bda74d4d2cf..fc656af17a7 100644
--- a/clang/lib/Driver/ToolChains.h
+++ b/clang/lib/Driver/ToolChains.h
@@ -796,7 +796,6 @@ public:
llvm::opt::ArgStringList &CmdArgs) const override;
virtual std::string computeSysRoot() const;
- std::string Linker;
std::vector<std::string> ExtraOpts;
protected:
@@ -921,7 +920,6 @@ public:
std::string ComputeEffectiveClangTriple(const llvm::opt::ArgList &Args,
types::ID InputType) const override;
- std::string Linker;
protected:
Tool *buildLinker() const override;
diff --git a/clang/lib/Driver/Tools.cpp b/clang/lib/Driver/Tools.cpp
index c53a016be56..9efaaad5558 100644
--- a/clang/lib/Driver/Tools.cpp
+++ b/clang/lib/Driver/Tools.cpp
@@ -8500,7 +8500,8 @@ void gnutools::Linker::ConstructJob(Compilation &C, const JobAction &JA,
// handled somewhere else.
Args.ClaimAllArgs(options::OPT_w);
- if (llvm::sys::path::filename(ToolChain.Linker) == "lld") {
+ const char *Exec = Args.MakeArgString(ToolChain.GetLinkerPath());
+ if (llvm::sys::path::filename(Exec) == "lld") {
CmdArgs.push_back("-flavor");
CmdArgs.push_back("old-gnu");
CmdArgs.push_back("-target");
@@ -8686,8 +8687,7 @@ void gnutools::Linker::ConstructJob(Compilation &C, const JobAction &JA,
} else if (Args.hasArg(options::OPT_rtlib_EQ))
AddRunTimeLibs(ToolChain, D, CmdArgs, Args);
- C.addCommand(llvm::make_unique<Command>(JA, *this, ToolChain.Linker.c_str(),
- CmdArgs, Inputs));
+ C.addCommand(llvm::make_unique<Command>(JA, *this, Exec, CmdArgs, Inputs));
}
// NaCl ARM assembly (inline or standalone) can be written with a set of macros
@@ -8858,8 +8858,8 @@ void nacltools::Linker::ConstructJob(Compilation &C, const JobAction &JA,
}
}
- C.addCommand(llvm::make_unique<Command>(JA, *this, ToolChain.Linker.c_str(),
- CmdArgs, Inputs));
+ const char *Exec = Args.MakeArgString(ToolChain.GetLinkerPath());
+ C.addCommand(llvm::make_unique<Command>(JA, *this, Exec, CmdArgs, Inputs));
}
void minix::Assembler::ConstructJob(Compilation &C, const JobAction &JA,
OpenPOWER on IntegriCloud