diff options
| author | Peter Collingbourne <peter@pcc.me.uk> | 2015-11-20 20:49:39 +0000 |
|---|---|---|
| committer | Peter Collingbourne <peter@pcc.me.uk> | 2015-11-20 20:49:39 +0000 |
| commit | 39719a77d151b9070d6d5fcd53dfff2f65eea6b2 (patch) | |
| tree | 10843d9cf2a8afd0ccd869d6cd2517361c6efa7e /clang/lib/Driver | |
| parent | 0d7f89d1ac148f105adddafe3ad4e9e4102b220e (diff) | |
| download | bcm5719-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/Driver')
| -rw-r--r-- | clang/lib/Driver/ToolChain.cpp | 2 | ||||
| -rw-r--r-- | clang/lib/Driver/ToolChains.cpp | 7 | ||||
| -rw-r--r-- | clang/lib/Driver/ToolChains.h | 2 | ||||
| -rw-r--r-- | clang/lib/Driver/Tools.cpp | 10 |
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, |

