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
diff --git a/clang/lib/Driver/Tools.cpp b/clang/lib/Driver/Tools.cpp
index c53a016..9efaaad 100644
--- a/clang/lib/Driver/Tools.cpp
+++ b/clang/lib/Driver/Tools.cpp
@@ -8500,7 +8500,8 @@
// 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 @@
} 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 @@
}
}
- 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,