diff options
author | Sam Clegg <sbc@chromium.org> | 2019-03-28 17:45:18 +0000 |
---|---|---|
committer | Sam Clegg <sbc@chromium.org> | 2019-03-28 17:45:18 +0000 |
commit | fc5ddeeab30fd89fe012719019cd83658d6c11e4 (patch) | |
tree | da59c470b7e23dc64e069099d25318b40c8262c4 /clang/lib/Driver/ToolChains/WebAssembly.cpp | |
parent | f28825bc06f9896bdc231a73c263bb840e24ac4a (diff) | |
download | bcm5719-llvm-fc5ddeeab30fd89fe012719019cd83658d6c11e4.tar.gz bcm5719-llvm-fc5ddeeab30fd89fe012719019cd83658d6c11e4.zip |
[WebAssembly] Reland of rL356953 (4dcf3acce6)
The previous patch was missing GetProgramPath() in the return value
of getLinkerPath().
See https://reviews.llvm.org/D59743
llvm-svn: 357195
Diffstat (limited to 'clang/lib/Driver/ToolChains/WebAssembly.cpp')
-rw-r--r-- | clang/lib/Driver/ToolChains/WebAssembly.cpp | 23 |
1 files changed, 22 insertions, 1 deletions
diff --git a/clang/lib/Driver/ToolChains/WebAssembly.cpp b/clang/lib/Driver/ToolChains/WebAssembly.cpp index b69588d4c1e..657f686f8ae 100644 --- a/clang/lib/Driver/ToolChains/WebAssembly.cpp +++ b/clang/lib/Driver/ToolChains/WebAssembly.cpp @@ -12,6 +12,8 @@ #include "clang/Driver/Driver.h" #include "clang/Driver/DriverDiagnostic.h" #include "clang/Driver/Options.h" +#include "llvm/Support/FileSystem.h" +#include "llvm/Support/Path.h" #include "llvm/Option/ArgList.h" using namespace clang::driver; @@ -36,6 +38,25 @@ bool wasm::Linker::isLinkJob() const { return true; } bool wasm::Linker::hasIntegratedCPP() const { return false; } +std::string wasm::Linker::getLinkerPath(const ArgList &Args) const { + const ToolChain &ToolChain = getToolChain(); + if (const Arg* A = Args.getLastArg(options::OPT_fuse_ld_EQ)) { + StringRef UseLinker = A->getValue(); + if (!UseLinker.empty()) { + if (llvm::sys::path::is_absolute(UseLinker) && + llvm::sys::fs::can_execute(UseLinker)) + return UseLinker; + + // Accept 'lld', and 'ld' as aliases for the default linker + if (UseLinker != "lld" && UseLinker != "ld") + ToolChain.getDriver().Diag(diag::err_drv_invalid_linker_name) + << A->getAsString(Args); + } + } + + return ToolChain.GetProgramPath(ToolChain.getDefaultLinker()); +} + void wasm::Linker::ConstructJob(Compilation &C, const JobAction &JA, const InputInfo &Output, const InputInfoList &Inputs, @@ -43,7 +64,7 @@ void wasm::Linker::ConstructJob(Compilation &C, const JobAction &JA, const char *LinkingOutput) const { const ToolChain &ToolChain = getToolChain(); - const char *Linker = Args.MakeArgString(ToolChain.GetLinkerPath()); + const char *Linker = Args.MakeArgString(getLinkerPath(Args)); ArgStringList CmdArgs; if (Args.hasArg(options::OPT_s)) |