diff options
author | Dan Gohman <dan433584@gmail.com> | 2015-12-16 23:30:41 +0000 |
---|---|---|
committer | Dan Gohman <dan433584@gmail.com> | 2015-12-16 23:30:41 +0000 |
commit | 5281686cddaa2171d46a1d3af2af3e6178e7fc17 (patch) | |
tree | f71bf89b717af6f1a36e707df7c126ea90df937d /clang/lib/Driver/Tools.cpp | |
parent | 417295381308b9af6e431d3ceb42b4770969bc96 (diff) | |
download | llvm-5281686cddaa2171d46a1d3af2af3e6178e7fc17.zip llvm-5281686cddaa2171d46a1d3af2af3e6178e7fc17.tar.gz llvm-5281686cddaa2171d46a1d3af2af3e6178e7fc17.tar.bz2 |
[WebAssembly] Initial linking support.
This begins minimal support for invoking 'ld' from clang for WebAssembly
targets.
Differential Revision: http://reviews.llvm.org/D15586
llvm-svn: 255848
Diffstat (limited to 'clang/lib/Driver/Tools.cpp')
-rw-r--r-- | clang/lib/Driver/Tools.cpp | 28 |
1 files changed, 28 insertions, 0 deletions
diff --git a/clang/lib/Driver/Tools.cpp b/clang/lib/Driver/Tools.cpp index 41a4e9a..c35aa1c 100644 --- a/clang/lib/Driver/Tools.cpp +++ b/clang/lib/Driver/Tools.cpp @@ -6439,6 +6439,34 @@ void amdgpu::Linker::ConstructJob(Compilation &C, const JobAction &JA, } // AMDGPU tools end. +wasm::Linker::Linker(const ToolChain &TC) + : GnuTool("wasm::Linker", "lld", TC) {} + +bool wasm::Linker::isLinkJob() const { + return true; +} + +bool wasm::Linker::hasIntegratedCPP() const { + return false; +} + +void wasm::Linker::ConstructJob(Compilation &C, const JobAction &JA, + const InputInfo &Output, + const InputInfoList &Inputs, + const ArgList &Args, + const char *LinkingOutput) const { + const char *Linker = Args.MakeArgString(getToolChain().GetLinkerPath()); + ArgStringList CmdArgs; + CmdArgs.push_back("-flavor"); + CmdArgs.push_back("ld"); + CmdArgs.push_back("-target"); + CmdArgs.push_back(Args.MakeArgString(getToolChain().getTripleString())); + AddLinkerInputs(getToolChain(), Inputs, Args, CmdArgs); + CmdArgs.push_back("-o"); + CmdArgs.push_back(Output.getFilename()); + C.addCommand(llvm::make_unique<Command>(JA, *this, Linker, CmdArgs, Inputs)); +} + const std::string arm::getARMArch(StringRef Arch, const llvm::Triple &Triple) { std::string MArch; if (!Arch.empty()) |