diff options
| author | Tom Stellard <thomas.stellard@amd.com> | 2015-07-18 01:49:05 +0000 |
|---|---|---|
| committer | Tom Stellard <thomas.stellard@amd.com> | 2015-07-18 01:49:05 +0000 |
| commit | 8fa3309796ec8ede7ff2006cbcab17d3e93f93c9 (patch) | |
| tree | 82a2ccc0102967c82a1f4aa88e7c3e39231ec7bb /clang/lib/Driver | |
| parent | 7842c3fceadaa1fcef7c91c59d822a572a17c8e2 (diff) | |
| download | bcm5719-llvm-8fa3309796ec8ede7ff2006cbcab17d3e93f93c9.tar.gz bcm5719-llvm-8fa3309796ec8ede7ff2006cbcab17d3e93f93c9.zip | |
Driver: Add AMDGPU toolchain
Summary:
This is a minimal toolchain, which sets the integrated assembler as default,
and uses lld for linking.
Reviewers: arsenm, mcrosier
Subscribers: cfe-commits
Differential Revision: http://reviews.llvm.org/D10700
llvm-svn: 242601
Diffstat (limited to 'clang/lib/Driver')
| -rw-r--r-- | clang/lib/Driver/Driver.cpp | 3 | ||||
| -rw-r--r-- | clang/lib/Driver/ToolChains.cpp | 10 | ||||
| -rw-r--r-- | clang/lib/Driver/ToolChains.h | 10 | ||||
| -rw-r--r-- | clang/lib/Driver/Tools.cpp | 20 | ||||
| -rw-r--r-- | clang/lib/Driver/Tools.h | 15 |
5 files changed, 58 insertions, 0 deletions
diff --git a/clang/lib/Driver/Driver.cpp b/clang/lib/Driver/Driver.cpp index 180c412bd79..d7a5ee9139a 100644 --- a/clang/lib/Driver/Driver.cpp +++ b/clang/lib/Driver/Driver.cpp @@ -2195,6 +2195,9 @@ const ToolChain &Driver::getToolChain(const ArgList &Args, case llvm::Triple::Solaris: TC = new toolchains::Solaris(*this, Target, Args); break; + case llvm::Triple::AMDHSA: + TC = new toolchains::AMDGPUToolChain(*this, Target, Args); + break; case llvm::Triple::Win32: switch (Target.getEnvironment()) { default: diff --git a/clang/lib/Driver/ToolChains.cpp b/clang/lib/Driver/ToolChains.cpp index 15e36a1e6ce..685a51a6302 100644 --- a/clang/lib/Driver/ToolChains.cpp +++ b/clang/lib/Driver/ToolChains.cpp @@ -2293,6 +2293,16 @@ StringRef Hexagon_TC::GetTargetCPU(const ArgList &Args) { } // End Hexagon +/// AMDGPU Toolchain +AMDGPUToolChain::AMDGPUToolChain(const Driver &D, const llvm::Triple &Triple, + const ArgList &Args) + : Generic_ELF(D, Triple, Args) { } + +Tool *AMDGPUToolChain::buildLinker() const { + return new tools::amdgpu::Linker(*this); +} +// End AMDGPU + /// NaCl Toolchain NaCl_TC::NaCl_TC(const Driver &D, const llvm::Triple &Triple, const ArgList &Args) diff --git a/clang/lib/Driver/ToolChains.h b/clang/lib/Driver/ToolChains.h index 327ff9b13b1..56a94ab685a 100644 --- a/clang/lib/Driver/ToolChains.h +++ b/clang/lib/Driver/ToolChains.h @@ -742,6 +742,16 @@ public: static bool UsesG0(const char *smallDataThreshold); }; +class LLVM_LIBRARY_VISIBILITY AMDGPUToolChain : public Generic_ELF { +protected: + Tool *buildLinker() const override; + +public: + AMDGPUToolChain(const Driver &D, const llvm::Triple &Triple, + const llvm::opt::ArgList &Args); + bool IsIntegratedAssemblerDefault() const override { return true; } +}; + class LLVM_LIBRARY_VISIBILITY NaCl_TC : public Generic_ELF { public: NaCl_TC(const Driver &D, const llvm::Triple &Triple, diff --git a/clang/lib/Driver/Tools.cpp b/clang/lib/Driver/Tools.cpp index 40643ccb67e..6dc25b5a1f9 100644 --- a/clang/lib/Driver/Tools.cpp +++ b/clang/lib/Driver/Tools.cpp @@ -5777,6 +5777,26 @@ void hexagon::Linker::ConstructJob(Compilation &C, const JobAction &JA, } // Hexagon tools end. +void amdgpu::Linker::ConstructJob(Compilation &C, const JobAction &JA, + const InputInfo &Output, + const InputInfoList &Inputs, + const ArgList &Args, + const char *LinkingOutput) const { + + std::string Linker = getToolChain().GetProgramPath(getShortName()); + ArgStringList CmdArgs; + CmdArgs.push_back("-flavor"); + CmdArgs.push_back("gnu"); + CmdArgs.push_back("-target"); + CmdArgs.push_back(getToolChain().getTripleString().c_str()); + AddLinkerInputs(getToolChain(), Inputs, Args, CmdArgs); + CmdArgs.push_back("-o"); + CmdArgs.push_back(Output.getFilename()); + C.addCommand(llvm::make_unique<Command>(JA, *this, Args.MakeArgString(Linker), + CmdArgs, Inputs)); +} +// AMDGPU tools end. + const std::string arm::getARMArch(const ArgList &Args, const llvm::Triple &Triple) { std::string MArch; diff --git a/clang/lib/Driver/Tools.h b/clang/lib/Driver/Tools.h index a7302452277..4f816a0ba97 100644 --- a/clang/lib/Driver/Tools.h +++ b/clang/lib/Driver/Tools.h @@ -224,6 +224,21 @@ public: }; } // end namespace hexagon. +namespace amdgpu { + +class LLVM_LIBRARY_VISIBILITY Linker : public GnuTool { +public: + Linker(const ToolChain &TC) : GnuTool("amdgpu::Linker", "lld", TC) {} + bool isLinkJob() const override { return true; } + bool hasIntegratedCPP() const override { return false; } + void ConstructJob(Compilation &C, const JobAction &JA, + const InputInfo &Output, const InputInfoList &Inputs, + const llvm::opt::ArgList &TCArgs, + const char *LinkingOutput) const override; +}; + +} // end namespace amdgpu + namespace arm { std::string getARMTargetCPU(const llvm::opt::ArgList &Args, const llvm::Triple &Triple); |

