Hi arsenm, mcrosier,
This is a minimal toolchain, which sets the integrated assembler as default,
and uses lld for linking.
http://reviews.llvm.org/D10700
Files:
lib/Driver/Driver.cpp
lib/Driver/ToolChains.cpp
lib/Driver/ToolChains.h
lib/Driver/Tools.cpp
lib/Driver/Tools.h
test/Driver/amdgpu-toolchain.c
EMAIL PREFERENCES
http://reviews.llvm.org/settings/panel/emailpreferences/
Index: lib/Driver/Driver.cpp
===================================================================
--- lib/Driver/Driver.cpp
+++ lib/Driver/Driver.cpp
@@ -2065,6 +2065,9 @@
case llvm::Triple::Solaris:
TC = new toolchains::Solaris(*this, Target, Args);
break;
+ case llvm::Triple::AMDHSA:
+ TC = new toolchains::AMDGPU_TC(*this, Target, Args);
+ break;
case llvm::Triple::Win32:
switch (Target.getEnvironment()) {
default:
Index: lib/Driver/ToolChains.cpp
===================================================================
--- lib/Driver/ToolChains.cpp
+++ lib/Driver/ToolChains.cpp
@@ -2325,6 +2325,15 @@
}
// End Hexagon
+/// AMDGPU Toolchain
+AMDGPU_TC::AMDGPU_TC(const Driver &D, const llvm::Triple &Triple,
+ const ArgList &Args) : Generic_ELF(D, Triple, Args) { }
+
+Tool *AMDGPU_TC::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)
Index: lib/Driver/ToolChains.h
===================================================================
--- lib/Driver/ToolChains.h
+++ lib/Driver/ToolChains.h
@@ -723,6 +723,16 @@
static bool UsesG0(const char* smallDataThreshold);
};
+class LLVM_LIBRARY_VISIBILITY AMDGPU_TC : public Generic_ELF {
+protected:
+ Tool *buildLinker() const override;
+
+public:
+ AMDGPU_TC(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,
Index: lib/Driver/Tools.cpp
===================================================================
--- lib/Driver/Tools.cpp
+++ lib/Driver/Tools.cpp
@@ -5745,6 +5745,26 @@
}
// 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("amdgcn--");
+ 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));
+}
+// AMDGPU tools end.
+
const std::string arm::getARMArch(const ArgList &Args,
const llvm::Triple &Triple) {
std::string MArch;
Index: lib/Driver/Tools.h
===================================================================
--- lib/Driver/Tools.h
+++ lib/Driver/Tools.h
@@ -227,6 +227,21 @@
};
} // 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);
Index: test/Driver/amdgpu-toolchain.c
===================================================================
--- /dev/null
+++ test/Driver/amdgpu-toolchain.c
@@ -0,0 +1,5 @@
+// RUN: %clang -### -target amdgcn--amdhsa -x assembler -mcpu=kaveri %s 2>&1 | FileCheck -check-prefix=AS_LINK %s
+// AS_LINK-LABEL: clang
+// AS_LINK: "-cc1as"
+// AS_LINK-LABEL: lld
+// AS_LINK: "-flavor" "gnu" "-target" "amdgcn--"
_______________________________________________
cfe-commits mailing list
[email protected]
http://lists.cs.uiuc.edu/mailman/listinfo/cfe-commits