19c073ff462eb75ccbb1c4446e21c148f3fc618e1Daniel Dunbar//===--- Tools.h - Tool Implementations -------------------------*- C++ -*-===// 29c073ff462eb75ccbb1c4446e21c148f3fc618e1Daniel Dunbar// 39c073ff462eb75ccbb1c4446e21c148f3fc618e1Daniel Dunbar// The LLVM Compiler Infrastructure 49c073ff462eb75ccbb1c4446e21c148f3fc618e1Daniel Dunbar// 59c073ff462eb75ccbb1c4446e21c148f3fc618e1Daniel Dunbar// This file is distributed under the University of Illinois Open Source 69c073ff462eb75ccbb1c4446e21c148f3fc618e1Daniel Dunbar// License. See LICENSE.TXT for details. 79c073ff462eb75ccbb1c4446e21c148f3fc618e1Daniel Dunbar// 89c073ff462eb75ccbb1c4446e21c148f3fc618e1Daniel Dunbar//===----------------------------------------------------------------------===// 99c073ff462eb75ccbb1c4446e21c148f3fc618e1Daniel Dunbar 109c073ff462eb75ccbb1c4446e21c148f3fc618e1Daniel Dunbar#ifndef CLANG_LIB_DRIVER_TOOLS_H_ 119c073ff462eb75ccbb1c4446e21c148f3fc618e1Daniel Dunbar#define CLANG_LIB_DRIVER_TOOLS_H_ 129c073ff462eb75ccbb1c4446e21c148f3fc618e1Daniel Dunbar 139c073ff462eb75ccbb1c4446e21c148f3fc618e1Daniel Dunbar#include "clang/Driver/Tool.h" 1440f1265ebd42ece3e7f7917319b56012e8e2bce2Daniel Dunbar#include "clang/Driver/Types.h" 15b488c1dac8e53206f07103d794a62a3f5012c0f4Daniel Dunbar#include "clang/Driver/Util.h" 16182564cd14a2105fff05fd52f5940eff96161d57Joerg Sonnenberger#include "llvm/ADT/Triple.h" 17b1e25a1bc03292dc538d336573e0be1490223171Reid Kleckner#include "llvm/Option/Option.h" 189c073ff462eb75ccbb1c4446e21c148f3fc618e1Daniel Dunbar#include "llvm/Support/Compiler.h" 199c073ff462eb75ccbb1c4446e21c148f3fc618e1Daniel Dunbar 209c073ff462eb75ccbb1c4446e21c148f3fc618e1Daniel Dunbarnamespace clang { 21260611a32535c851237926bfcf78869b13c07d5bJohn McCall class ObjCRuntime; 22260611a32535c851237926bfcf78869b13c07d5bJohn McCall 239c073ff462eb75ccbb1c4446e21c148f3fc618e1Daniel Dunbarnamespace driver { 24c8ba0a0acd30f0b56d08a3a0947f68ac01a40730Hans Wennborg class Command; 25df91ef3d6c55692a0236f67b6c6b134a3bf84098Douglas Gregor class Driver; 26df91ef3d6c55692a0236f67b6c6b134a3bf84098Douglas Gregor 2702633b541b04ad5ffc1c70f4c2feeeb13e607057Daniel Dunbarnamespace toolchains { 28651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines class MachO; 2902633b541b04ad5ffc1c70f4c2feeeb13e607057Daniel Dunbar} 3002633b541b04ad5ffc1c70f4c2feeeb13e607057Daniel Dunbar 31985b825eea7387be10478de0430815ed6a673326Daniel Dunbarnamespace tools { 32ef8225444452a1486bd721f3285301fe84643b00Stephen Hines 33ef8225444452a1486bd721f3285301fe84643b00Stephen Hinesnamespace visualstudio { 34ef8225444452a1486bd721f3285301fe84643b00Stephen Hines class Compile; 35ef8225444452a1486bd721f3285301fe84643b00Stephen Hines} 36ef8225444452a1486bd721f3285301fe84643b00Stephen Hines 37b1e25a1bc03292dc538d336573e0be1490223171Reid Klecknerusing llvm::opt::ArgStringList; 389c073ff462eb75ccbb1c4446e21c148f3fc618e1Daniel Dunbar 3920a9aa50f9a7d4b03f97bc67e96da1d605c309a2Daniel Dunbar /// \brief Clang compiler tool. 4092dd1915842410005c68d32c43bb3b3cf5a4a702Duncan Sands class LLVM_LIBRARY_VISIBILITY Clang : public Tool { 4127e2b983beb8b5a29869639637327725623069a8Eric Christopher public: 42dd0b3c4c72464af92e2c27dd5a67e29f91ba7b28Reid Kleckner static const char *getBaseInputName(const llvm::opt::ArgList &Args, 4366b8a6671bb5df540dd7200a5286f7ed7a72c1ccBob Wilson const InputInfoList &Inputs); 44dd0b3c4c72464af92e2c27dd5a67e29f91ba7b28Reid Kleckner static const char *getBaseInputStem(const llvm::opt::ArgList &Args, 4566b8a6671bb5df540dd7200a5286f7ed7a72c1ccBob Wilson const InputInfoList &Inputs); 46dd0b3c4c72464af92e2c27dd5a67e29f91ba7b28Reid Kleckner static const char *getDependencyFileName(const llvm::opt::ArgList &Args, 4766b8a6671bb5df540dd7200a5286f7ed7a72c1ccBob Wilson const InputInfoList &Inputs); 4866b8a6671bb5df540dd7200a5286f7ed7a72c1ccBob Wilson 4927e2b983beb8b5a29869639637327725623069a8Eric Christopher private: 50dd0b3c4c72464af92e2c27dd5a67e29f91ba7b28Reid Kleckner void AddPreprocessingOptions(Compilation &C, const JobAction &JA, 5154db68bf0e389b8aabe1a434f825a81a9c1f7db8Peter Collingbourne const Driver &D, 52dd0b3c4c72464af92e2c27dd5a67e29f91ba7b28Reid Kleckner const llvm::opt::ArgList &Args, 53dd0b3c4c72464af92e2c27dd5a67e29f91ba7b28Reid Kleckner llvm::opt::ArgStringList &CmdArgs, 54c21c485b4fb58ef5d55cf3e523263dd824a2ace4Daniel Dunbar const InputInfo &Output, 55c21c485b4fb58ef5d55cf3e523263dd824a2ace4Daniel Dunbar const InputInfoList &Inputs) const; 56c21c485b4fb58ef5d55cf3e523263dd824a2ace4Daniel Dunbar 573bb1b5c953fc38d4b87525258cf27b7c908988b1Amara Emerson void AddAArch64TargetArgs(const llvm::opt::ArgList &Args, 583bb1b5c953fc38d4b87525258cf27b7c908988b1Amara Emerson llvm::opt::ArgStringList &CmdArgs) const; 59dd0b3c4c72464af92e2c27dd5a67e29f91ba7b28Reid Kleckner void AddARMTargetArgs(const llvm::opt::ArgList &Args, 60dd0b3c4c72464af92e2c27dd5a67e29f91ba7b28Reid Kleckner llvm::opt::ArgStringList &CmdArgs, 61fa41d6975058ceb1b8a24564f6dcec72f89f62e8Daniel Dunbar bool KernelOrKext) const; 62651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines void AddARM64TargetArgs(const llvm::opt::ArgList &Args, 63651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines llvm::opt::ArgStringList &CmdArgs) const; 64dd0b3c4c72464af92e2c27dd5a67e29f91ba7b28Reid Kleckner void AddMIPSTargetArgs(const llvm::opt::ArgList &Args, 65dd0b3c4c72464af92e2c27dd5a67e29f91ba7b28Reid Kleckner llvm::opt::ArgStringList &CmdArgs) const; 66dd0b3c4c72464af92e2c27dd5a67e29f91ba7b28Reid Kleckner void AddR600TargetArgs(const llvm::opt::ArgList &Args, 67dd0b3c4c72464af92e2c27dd5a67e29f91ba7b28Reid Kleckner llvm::opt::ArgStringList &CmdArgs) const; 68dd0b3c4c72464af92e2c27dd5a67e29f91ba7b28Reid Kleckner void AddSparcTargetArgs(const llvm::opt::ArgList &Args, 69dd0b3c4c72464af92e2c27dd5a67e29f91ba7b28Reid Kleckner llvm::opt::ArgStringList &CmdArgs) const; 705c92b9ab4e4dce3233ea3e400a02c443f9afd372Richard Sandiford void AddSystemZTargetArgs(const llvm::opt::ArgList &Args, 715c92b9ab4e4dce3233ea3e400a02c443f9afd372Richard Sandiford llvm::opt::ArgStringList &CmdArgs) const; 72dd0b3c4c72464af92e2c27dd5a67e29f91ba7b28Reid Kleckner void AddX86TargetArgs(const llvm::opt::ArgList &Args, 73dd0b3c4c72464af92e2c27dd5a67e29f91ba7b28Reid Kleckner llvm::opt::ArgStringList &CmdArgs) const; 74dd0b3c4c72464af92e2c27dd5a67e29f91ba7b28Reid Kleckner void AddHexagonTargetArgs(const llvm::opt::ArgList &Args, 75dd0b3c4c72464af92e2c27dd5a67e29f91ba7b28Reid Kleckner llvm::opt::ArgStringList &CmdArgs) const; 766acda16e9c194dcbd0dea64341e182bdb65d0f41Daniel Dunbar 77260611a32535c851237926bfcf78869b13c07d5bJohn McCall enum RewriteKind { RK_None, RK_Fragile, RK_NonFragile }; 78260611a32535c851237926bfcf78869b13c07d5bJohn McCall 79dd0b3c4c72464af92e2c27dd5a67e29f91ba7b28Reid Kleckner ObjCRuntime AddObjCRuntimeArgs(const llvm::opt::ArgList &args, 80dd0b3c4c72464af92e2c27dd5a67e29f91ba7b28Reid Kleckner llvm::opt::ArgStringList &cmdArgs, 81260611a32535c851237926bfcf78869b13c07d5bJohn McCall RewriteKind rewrite) const; 82260611a32535c851237926bfcf78869b13c07d5bJohn McCall 83b3574796d7cc0113e54b6516fc16e17ca09459fbHans Wennborg void AddClangCLArgs(const llvm::opt::ArgList &Args, 84b3574796d7cc0113e54b6516fc16e17ca09459fbHans Wennborg llvm::opt::ArgStringList &CmdArgs) const; 85b3574796d7cc0113e54b6516fc16e17ca09459fbHans Wennborg 86ef8225444452a1486bd721f3285301fe84643b00Stephen Hines visualstudio::Compile *getCLFallback() const; 87ef8225444452a1486bd721f3285301fe84643b00Stephen Hines 88ef8225444452a1486bd721f3285301fe84643b00Stephen Hines mutable std::unique_ptr<visualstudio::Compile> CLFallback; 89ef8225444452a1486bd721f3285301fe84643b00Stephen Hines 909c073ff462eb75ccbb1c4446e21c148f3fc618e1Daniel Dunbar public: 913038204fd8f6ff22082dd18e4b12ed252b75a5e4Daniel Dunbar Clang(const ToolChain &TC) : Tool("clang", "clang frontend", TC) {} 929c073ff462eb75ccbb1c4446e21c148f3fc618e1Daniel Dunbar 93651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines bool hasGoodDiagnostics() const override { return true; } 94651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines bool hasIntegratedAssembler() const override { return true; } 95651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines bool hasIntegratedCPP() const override { return true; } 9647ac7d27c44bd64a7d0fc03d4babc196cf2b8230Daniel Dunbar 97651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines void ConstructJob(Compilation &C, const JobAction &JA, 98651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines const InputInfo &Output, const InputInfoList &Inputs, 99651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines const llvm::opt::ArgList &TCArgs, 100651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines const char *LinkingOutput) const override; 10120a9aa50f9a7d4b03f97bc67e96da1d605c309a2Daniel Dunbar }; 10220a9aa50f9a7d4b03f97bc67e96da1d605c309a2Daniel Dunbar 10320a9aa50f9a7d4b03f97bc67e96da1d605c309a2Daniel Dunbar /// \brief Clang integrated assembler tool. 10420a9aa50f9a7d4b03f97bc67e96da1d605c309a2Daniel Dunbar class LLVM_LIBRARY_VISIBILITY ClangAs : public Tool { 10520a9aa50f9a7d4b03f97bc67e96da1d605c309a2Daniel Dunbar public: 1063038204fd8f6ff22082dd18e4b12ed252b75a5e4Daniel Dunbar ClangAs(const ToolChain &TC) : Tool("clang::as", 1073038204fd8f6ff22082dd18e4b12ed252b75a5e4Daniel Dunbar "clang integrated assembler", TC) {} 10820a9aa50f9a7d4b03f97bc67e96da1d605c309a2Daniel Dunbar 109651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines bool hasGoodDiagnostics() const override { return true; } 110651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines bool hasIntegratedAssembler() const override { return false; } 111651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines bool hasIntegratedCPP() const override { return false; } 11220a9aa50f9a7d4b03f97bc67e96da1d605c309a2Daniel Dunbar 113651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines void ConstructJob(Compilation &C, const JobAction &JA, 114651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines const InputInfo &Output, const InputInfoList &Inputs, 115651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines const llvm::opt::ArgList &TCArgs, 116651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines const char *LinkingOutput) const override; 1179c073ff462eb75ccbb1c4446e21c148f3fc618e1Daniel Dunbar }; 1189c073ff462eb75ccbb1c4446e21c148f3fc618e1Daniel Dunbar 11931b1e5437e7435879fc044afb77ff27096008e72Daniel Dunbar /// gcc - Generic GCC tool implementations. 12031b1e5437e7435879fc044afb77ff27096008e72Daniel Dunbarnamespace gcc { 12192dd1915842410005c68d32c43bb3b3cf5a4a702Duncan Sands class LLVM_LIBRARY_VISIBILITY Common : public Tool { 1229c073ff462eb75ccbb1c4446e21c148f3fc618e1Daniel Dunbar public: 1233038204fd8f6ff22082dd18e4b12ed252b75a5e4Daniel Dunbar Common(const char *Name, const char *ShortName, 1243038204fd8f6ff22082dd18e4b12ed252b75a5e4Daniel Dunbar const ToolChain &TC) : Tool(Name, ShortName, TC) {} 12547ac7d27c44bd64a7d0fc03d4babc196cf2b8230Daniel Dunbar 126651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines void ConstructJob(Compilation &C, const JobAction &JA, 127651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines const InputInfo &Output, 128651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines const InputInfoList &Inputs, 129651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines const llvm::opt::ArgList &TCArgs, 130651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines const char *LinkingOutput) const override; 131b488c1dac8e53206f07103d794a62a3f5012c0f4Daniel Dunbar 132b488c1dac8e53206f07103d794a62a3f5012c0f4Daniel Dunbar /// RenderExtraToolArgs - Render any arguments necessary to force 133b488c1dac8e53206f07103d794a62a3f5012c0f4Daniel Dunbar /// the particular tool mode. 134dd0b3c4c72464af92e2c27dd5a67e29f91ba7b28Reid Kleckner virtual void 135dd0b3c4c72464af92e2c27dd5a67e29f91ba7b28Reid Kleckner RenderExtraToolArgs(const JobAction &JA, 136dd0b3c4c72464af92e2c27dd5a67e29f91ba7b28Reid Kleckner llvm::opt::ArgStringList &CmdArgs) const = 0; 1379c073ff462eb75ccbb1c4446e21c148f3fc618e1Daniel Dunbar }; 1389c073ff462eb75ccbb1c4446e21c148f3fc618e1Daniel Dunbar 13992dd1915842410005c68d32c43bb3b3cf5a4a702Duncan Sands class LLVM_LIBRARY_VISIBILITY Preprocess : public Common { 1409c073ff462eb75ccbb1c4446e21c148f3fc618e1Daniel Dunbar public: 1413038204fd8f6ff22082dd18e4b12ed252b75a5e4Daniel Dunbar Preprocess(const ToolChain &TC) : Common("gcc::Preprocess", 1423038204fd8f6ff22082dd18e4b12ed252b75a5e4Daniel Dunbar "gcc preprocessor", TC) {} 143b488c1dac8e53206f07103d794a62a3f5012c0f4Daniel Dunbar 144651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines bool hasGoodDiagnostics() const override { return true; } 145651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines bool hasIntegratedCPP() const override { return false; } 14647ac7d27c44bd64a7d0fc03d4babc196cf2b8230Daniel Dunbar 147651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines void RenderExtraToolArgs(const JobAction &JA, 148651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines llvm::opt::ArgStringList &CmdArgs) const override; 1499c073ff462eb75ccbb1c4446e21c148f3fc618e1Daniel Dunbar }; 1509c073ff462eb75ccbb1c4446e21c148f3fc618e1Daniel Dunbar 15192dd1915842410005c68d32c43bb3b3cf5a4a702Duncan Sands class LLVM_LIBRARY_VISIBILITY Compile : public Common { 1529c073ff462eb75ccbb1c4446e21c148f3fc618e1Daniel Dunbar public: 1533038204fd8f6ff22082dd18e4b12ed252b75a5e4Daniel Dunbar Compile(const ToolChain &TC) : Common("gcc::Compile", 1543038204fd8f6ff22082dd18e4b12ed252b75a5e4Daniel Dunbar "gcc frontend", TC) {} 1559c073ff462eb75ccbb1c4446e21c148f3fc618e1Daniel Dunbar 156651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines bool hasGoodDiagnostics() const override { return true; } 157651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines bool hasIntegratedCPP() const override { return true; } 15847ac7d27c44bd64a7d0fc03d4babc196cf2b8230Daniel Dunbar 159651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines void RenderExtraToolArgs(const JobAction &JA, 160651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines llvm::opt::ArgStringList &CmdArgs) const override; 1619c073ff462eb75ccbb1c4446e21c148f3fc618e1Daniel Dunbar }; 1629c073ff462eb75ccbb1c4446e21c148f3fc618e1Daniel Dunbar 16392dd1915842410005c68d32c43bb3b3cf5a4a702Duncan Sands class LLVM_LIBRARY_VISIBILITY Link : public Common { 1649c073ff462eb75ccbb1c4446e21c148f3fc618e1Daniel Dunbar public: 1653038204fd8f6ff22082dd18e4b12ed252b75a5e4Daniel Dunbar Link(const ToolChain &TC) : Common("gcc::Link", 1663038204fd8f6ff22082dd18e4b12ed252b75a5e4Daniel Dunbar "linker (via gcc)", TC) {} 1679c073ff462eb75ccbb1c4446e21c148f3fc618e1Daniel Dunbar 168651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines bool hasIntegratedCPP() const override { return false; } 169651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines bool isLinkJob() const override { return true; } 17047ac7d27c44bd64a7d0fc03d4babc196cf2b8230Daniel Dunbar 171651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines void RenderExtraToolArgs(const JobAction &JA, 172651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines llvm::opt::ArgStringList &CmdArgs) const override; 1739c073ff462eb75ccbb1c4446e21c148f3fc618e1Daniel Dunbar }; 17431b1e5437e7435879fc044afb77ff27096008e72Daniel Dunbar} // end namespace gcc 1759c073ff462eb75ccbb1c4446e21c148f3fc618e1Daniel Dunbar 1769631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicumnamespace hexagon { 1779631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum // For Hexagon, we do not need to instantiate tools for PreProcess, PreCompile and Compile. 1789631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum // We simply use "clang -cc1" for those actions. 1799631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum class LLVM_LIBRARY_VISIBILITY Assemble : public Tool { 1809631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum public: 1819631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum Assemble(const ToolChain &TC) : Tool("hexagon::Assemble", 1829631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum "hexagon-as", TC) {} 1839631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum 184651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines bool hasIntegratedCPP() const override { return false; } 1859631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum 186651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines void RenderExtraToolArgs(const JobAction &JA, 187651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines llvm::opt::ArgStringList &CmdArgs) const; 188651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines void ConstructJob(Compilation &C, const JobAction &JA, 189651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines const InputInfo &Output, const InputInfoList &Inputs, 190651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines const llvm::opt::ArgList &TCArgs, 191651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines const char *LinkingOutput) const override; 1929631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum }; 1939631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum 1949631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum class LLVM_LIBRARY_VISIBILITY Link : public Tool { 1959631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum public: 1969631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum Link(const ToolChain &TC) : Tool("hexagon::Link", 1979631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum "hexagon-ld", TC) {} 1989631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum 199651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines bool hasIntegratedCPP() const override { return false; } 200651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines bool isLinkJob() const override { return true; } 2019631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum 2029631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum virtual void RenderExtraToolArgs(const JobAction &JA, 203dd0b3c4c72464af92e2c27dd5a67e29f91ba7b28Reid Kleckner llvm::opt::ArgStringList &CmdArgs) const; 204651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines void ConstructJob(Compilation &C, const JobAction &JA, 205651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines const InputInfo &Output, const InputInfoList &Inputs, 206651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines const llvm::opt::ArgList &TCArgs, 207651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines const char *LinkingOutput) const override; 2089631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum }; 2099631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum} // end namespace hexagon. 2109631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum 211651f13cea278ec967336033dd032faef0e9fc2ecStephen Hinesnamespace arm { 212651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines StringRef getARMTargetCPU(const llvm::opt::ArgList &Args, 213651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines const llvm::Triple &Triple); 214651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines const char* getARMCPUForMArch(const llvm::opt::ArgList &Args, 215651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines const llvm::Triple &Triple); 216651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines const char* getLLVMArchSuffixForARM(StringRef CPU); 217651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines} 218651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines 219651f13cea278ec967336033dd032faef0e9fc2ecStephen Hinesnamespace mips { 220651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines bool hasMipsAbiArg(const llvm::opt::ArgList &Args, const char *Value); 221ef8225444452a1486bd721f3285301fe84643b00Stephen Hines bool isNaN2008(const llvm::opt::ArgList &Args, const llvm::Triple &Triple); 222651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines} 2239631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum 224ff7488dc9a766f94daf54d81b03ab9160d0bfd88Daniel Dunbarnamespace darwin { 225651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines llvm::Triple::ArchType getArchTypeForMachOArchName(StringRef Str); 226651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines void setTripleTypeForMachOArchName(llvm::Triple &T, StringRef Str); 227cfed8283c3aeb03ddd837411467d19e250068d39Rafael Espindola 228651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines class LLVM_LIBRARY_VISIBILITY MachOTool : public Tool { 22999ba9e3bd70671f3441fb974895f226a83ce0e66David Blaikie virtual void anchor(); 230fbefe6bd6f62a3361813498dc672ab0d6c0d4fd1Daniel Dunbar protected: 231651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines void AddMachOArch(const llvm::opt::ArgList &Args, 232dd0b3c4c72464af92e2c27dd5a67e29f91ba7b28Reid Kleckner llvm::opt::ArgStringList &CmdArgs) const; 233fbefe6bd6f62a3361813498dc672ab0d6c0d4fd1Daniel Dunbar 234651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines const toolchains::MachO &getMachOToolChain() const { 235651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines return reinterpret_cast<const toolchains::MachO&>(getToolChain()); 236fbefe6bd6f62a3361813498dc672ab0d6c0d4fd1Daniel Dunbar } 237fbefe6bd6f62a3361813498dc672ab0d6c0d4fd1Daniel Dunbar 238fbefe6bd6f62a3361813498dc672ab0d6c0d4fd1Daniel Dunbar public: 239651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines MachOTool(const char *Name, const char *ShortName, 2403038204fd8f6ff22082dd18e4b12ed252b75a5e4Daniel Dunbar const ToolChain &TC) : Tool(Name, ShortName, TC) {} 241fbefe6bd6f62a3361813498dc672ab0d6c0d4fd1Daniel Dunbar }; 242fbefe6bd6f62a3361813498dc672ab0d6c0d4fd1Daniel Dunbar 243651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines class LLVM_LIBRARY_VISIBILITY Assemble : public MachOTool { 2448cac5f7e1ce63dd77ee0fb4ef68f9fa804f41ea6Daniel Dunbar public: 245651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines Assemble(const ToolChain &TC) : MachOTool("darwin::Assemble", 246651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines "assembler", TC) {} 2478cac5f7e1ce63dd77ee0fb4ef68f9fa804f41ea6Daniel Dunbar 248651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines bool hasIntegratedCPP() const override { return false; } 2498cac5f7e1ce63dd77ee0fb4ef68f9fa804f41ea6Daniel Dunbar 250651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines void ConstructJob(Compilation &C, const JobAction &JA, 251651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines const InputInfo &Output, const InputInfoList &Inputs, 252651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines const llvm::opt::ArgList &TCArgs, 253651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines const char *LinkingOutput) const override; 25402633b541b04ad5ffc1c70f4c2feeeb13e607057Daniel Dunbar }; 25502633b541b04ad5ffc1c70f4c2feeeb13e607057Daniel Dunbar 256651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines class LLVM_LIBRARY_VISIBILITY Link : public MachOTool { 2576acf8b4f9418be93a24b493c2f8a7d32c203002dBill Wendling bool NeedsTempPath(const InputInfoList &Inputs) const; 258dd0b3c4c72464af92e2c27dd5a67e29f91ba7b28Reid Kleckner void AddLinkArgs(Compilation &C, const llvm::opt::ArgList &Args, 259dd0b3c4c72464af92e2c27dd5a67e29f91ba7b28Reid Kleckner llvm::opt::ArgStringList &CmdArgs, 260dd0b3c4c72464af92e2c27dd5a67e29f91ba7b28Reid Kleckner const InputInfoList &Inputs) const; 26102633b541b04ad5ffc1c70f4c2feeeb13e607057Daniel Dunbar 26202633b541b04ad5ffc1c70f4c2feeeb13e607057Daniel Dunbar public: 263651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines Link(const ToolChain &TC) : MachOTool("darwin::Link", "linker", TC) {} 26402633b541b04ad5ffc1c70f4c2feeeb13e607057Daniel Dunbar 265651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines bool hasIntegratedCPP() const override { return false; } 266651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines bool isLinkJob() const override { return true; } 26702633b541b04ad5ffc1c70f4c2feeeb13e607057Daniel Dunbar 268651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines void ConstructJob(Compilation &C, const JobAction &JA, 269651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines const InputInfo &Output, const InputInfoList &Inputs, 270651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines const llvm::opt::ArgList &TCArgs, 271651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines const char *LinkingOutput) const override; 2728cac5f7e1ce63dd77ee0fb4ef68f9fa804f41ea6Daniel Dunbar }; 2738cac5f7e1ce63dd77ee0fb4ef68f9fa804f41ea6Daniel Dunbar 274651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines class LLVM_LIBRARY_VISIBILITY Lipo : public MachOTool { 275ff7488dc9a766f94daf54d81b03ab9160d0bfd88Daniel Dunbar public: 276651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines Lipo(const ToolChain &TC) : MachOTool("darwin::Lipo", "lipo", TC) {} 277ff7488dc9a766f94daf54d81b03ab9160d0bfd88Daniel Dunbar 278651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines bool hasIntegratedCPP() const override { return false; } 279ff7488dc9a766f94daf54d81b03ab9160d0bfd88Daniel Dunbar 280651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines void ConstructJob(Compilation &C, const JobAction &JA, 281651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines const InputInfo &Output, const InputInfoList &Inputs, 282651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines const llvm::opt::ArgList &TCArgs, 283651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines const char *LinkingOutput) const override; 2846e0f25483b1a801cd1155ea89c2b725feab16332Daniel Dunbar }; 2856e0f25483b1a801cd1155ea89c2b725feab16332Daniel Dunbar 286651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines class LLVM_LIBRARY_VISIBILITY Dsymutil : public MachOTool { 2876e0f25483b1a801cd1155ea89c2b725feab16332Daniel Dunbar public: 288651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines Dsymutil(const ToolChain &TC) : MachOTool("darwin::Dsymutil", 289651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines "dsymutil", TC) {} 2906e0f25483b1a801cd1155ea89c2b725feab16332Daniel Dunbar 291651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines bool hasIntegratedCPP() const override { return false; } 292651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines bool isDsymutilJob() const override { return true; } 2936e0f25483b1a801cd1155ea89c2b725feab16332Daniel Dunbar 294651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines void ConstructJob(Compilation &C, const JobAction &JA, 295651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines const InputInfo &Output, 296651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines const InputInfoList &Inputs, 297651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines const llvm::opt::ArgList &TCArgs, 298651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines const char *LinkingOutput) const override; 299f7b8eec37c8c8012fa525c71fb29a58c9f29beefDaniel Dunbar }; 300f857186fd1995b34185d063a29b11ad4f948519fEric Christopher 301651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines class LLVM_LIBRARY_VISIBILITY VerifyDebug : public MachOTool { 302f857186fd1995b34185d063a29b11ad4f948519fEric Christopher public: 303651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines VerifyDebug(const ToolChain &TC) : MachOTool("darwin::VerifyDebug", 304651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines "dwarfdump", TC) {} 305f857186fd1995b34185d063a29b11ad4f948519fEric Christopher 306651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines bool hasIntegratedCPP() const override { return false; } 307f857186fd1995b34185d063a29b11ad4f948519fEric Christopher 308651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines void ConstructJob(Compilation &C, const JobAction &JA, 309651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines const InputInfo &Output, const InputInfoList &Inputs, 310651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines const llvm::opt::ArgList &TCArgs, 311651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines const char *LinkingOutput) const override; 312f857186fd1995b34185d063a29b11ad4f948519fEric Christopher }; 313f857186fd1995b34185d063a29b11ad4f948519fEric Christopher 314f7b8eec37c8c8012fa525c71fb29a58c9f29beefDaniel Dunbar} 315f7b8eec37c8c8012fa525c71fb29a58c9f29beefDaniel Dunbar 316f7b8eec37c8c8012fa525c71fb29a58c9f29beefDaniel Dunbar /// openbsd -- Directly call GNU Binutils assembler and linker 317f7b8eec37c8c8012fa525c71fb29a58c9f29beefDaniel Dunbarnamespace openbsd { 31892dd1915842410005c68d32c43bb3b3cf5a4a702Duncan Sands class LLVM_LIBRARY_VISIBILITY Assemble : public Tool { 319f7b8eec37c8c8012fa525c71fb29a58c9f29beefDaniel Dunbar public: 3203038204fd8f6ff22082dd18e4b12ed252b75a5e4Daniel Dunbar Assemble(const ToolChain &TC) : Tool("openbsd::Assemble", "assembler", 3213038204fd8f6ff22082dd18e4b12ed252b75a5e4Daniel Dunbar TC) {} 322f7b8eec37c8c8012fa525c71fb29a58c9f29beefDaniel Dunbar 323651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines bool hasIntegratedCPP() const override { return false; } 324f7b8eec37c8c8012fa525c71fb29a58c9f29beefDaniel Dunbar 325651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines void ConstructJob(Compilation &C, const JobAction &JA, 326651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines const InputInfo &Output, 327651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines const InputInfoList &Inputs, 328651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines const llvm::opt::ArgList &TCArgs, 329651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines const char *LinkingOutput) const override; 330f7b8eec37c8c8012fa525c71fb29a58c9f29beefDaniel Dunbar }; 33192dd1915842410005c68d32c43bb3b3cf5a4a702Duncan Sands class LLVM_LIBRARY_VISIBILITY Link : public Tool { 332f7b8eec37c8c8012fa525c71fb29a58c9f29beefDaniel Dunbar public: 3333038204fd8f6ff22082dd18e4b12ed252b75a5e4Daniel Dunbar Link(const ToolChain &TC) : Tool("openbsd::Link", "linker", TC) {} 334f7b8eec37c8c8012fa525c71fb29a58c9f29beefDaniel Dunbar 335651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines bool hasIntegratedCPP() const override { return false; } 336651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines bool isLinkJob() const override { return true; } 337f7b8eec37c8c8012fa525c71fb29a58c9f29beefDaniel Dunbar 338651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines void ConstructJob(Compilation &C, const JobAction &JA, 339651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines const InputInfo &Output, const InputInfoList &Inputs, 340651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines const llvm::opt::ArgList &TCArgs, 341651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines const char *LinkingOutput) const override; 342ff7488dc9a766f94daf54d81b03ab9160d0bfd88Daniel Dunbar }; 343e7925a075f110ab21afeae084670a155dea568e3Edward O'Callaghan} // end namespace openbsd 344ff7488dc9a766f94daf54d81b03ab9160d0bfd88Daniel Dunbar 34542f74f21ece01dc8573d5377859d327fbb23b26cEli Friedman /// bitrig -- Directly call GNU Binutils assembler and linker 34642f74f21ece01dc8573d5377859d327fbb23b26cEli Friedmannamespace bitrig { 34742f74f21ece01dc8573d5377859d327fbb23b26cEli Friedman class LLVM_LIBRARY_VISIBILITY Assemble : public Tool { 34842f74f21ece01dc8573d5377859d327fbb23b26cEli Friedman public: 34942f74f21ece01dc8573d5377859d327fbb23b26cEli Friedman Assemble(const ToolChain &TC) : Tool("bitrig::Assemble", "assembler", 35042f74f21ece01dc8573d5377859d327fbb23b26cEli Friedman TC) {} 35142f74f21ece01dc8573d5377859d327fbb23b26cEli Friedman 352651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines bool hasIntegratedCPP() const override { return false; } 35342f74f21ece01dc8573d5377859d327fbb23b26cEli Friedman 354651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines void ConstructJob(Compilation &C, const JobAction &JA, 355651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines const InputInfo &Output, const InputInfoList &Inputs, 356651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines const llvm::opt::ArgList &TCArgs, 357651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines const char *LinkingOutput) const override; 35842f74f21ece01dc8573d5377859d327fbb23b26cEli Friedman }; 35942f74f21ece01dc8573d5377859d327fbb23b26cEli Friedman class LLVM_LIBRARY_VISIBILITY Link : public Tool { 36042f74f21ece01dc8573d5377859d327fbb23b26cEli Friedman public: 36142f74f21ece01dc8573d5377859d327fbb23b26cEli Friedman Link(const ToolChain &TC) : Tool("bitrig::Link", "linker", TC) {} 36242f74f21ece01dc8573d5377859d327fbb23b26cEli Friedman 363651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines bool hasIntegratedCPP() const override { return false; } 364651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines bool isLinkJob() const override { return true; } 36542f74f21ece01dc8573d5377859d327fbb23b26cEli Friedman 366651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines void ConstructJob(Compilation &C, const JobAction &JA, 367651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines const InputInfo &Output, const InputInfoList &Inputs, 368651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines const llvm::opt::ArgList &TCArgs, 369651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines const char *LinkingOutput) const override; 37042f74f21ece01dc8573d5377859d327fbb23b26cEli Friedman }; 37142f74f21ece01dc8573d5377859d327fbb23b26cEli Friedman} // end namespace bitrig 37242f74f21ece01dc8573d5377859d327fbb23b26cEli Friedman 37368a31d406c6dc4382c700d1199b062de2aa7e1daDaniel Dunbar /// freebsd -- Directly call GNU Binutils assembler and linker 37468a31d406c6dc4382c700d1199b062de2aa7e1daDaniel Dunbarnamespace freebsd { 37592dd1915842410005c68d32c43bb3b3cf5a4a702Duncan Sands class LLVM_LIBRARY_VISIBILITY Assemble : public Tool { 37668a31d406c6dc4382c700d1199b062de2aa7e1daDaniel Dunbar public: 3773038204fd8f6ff22082dd18e4b12ed252b75a5e4Daniel Dunbar Assemble(const ToolChain &TC) : Tool("freebsd::Assemble", "assembler", 3783038204fd8f6ff22082dd18e4b12ed252b75a5e4Daniel Dunbar TC) {} 37968a31d406c6dc4382c700d1199b062de2aa7e1daDaniel Dunbar 380651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines bool hasIntegratedCPP() const override { return false; } 38168a31d406c6dc4382c700d1199b062de2aa7e1daDaniel Dunbar 382651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines void ConstructJob(Compilation &C, const JobAction &JA, 383651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines const InputInfo &Output, const InputInfoList &Inputs, 384651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines const llvm::opt::ArgList &TCArgs, 385651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines const char *LinkingOutput) const override; 38668a31d406c6dc4382c700d1199b062de2aa7e1daDaniel Dunbar }; 38792dd1915842410005c68d32c43bb3b3cf5a4a702Duncan Sands class LLVM_LIBRARY_VISIBILITY Link : public Tool { 388008f54a54299eaafdaa940e2bdeaf55935ecd95aDaniel Dunbar public: 3893038204fd8f6ff22082dd18e4b12ed252b75a5e4Daniel Dunbar Link(const ToolChain &TC) : Tool("freebsd::Link", "linker", TC) {} 390008f54a54299eaafdaa940e2bdeaf55935ecd95aDaniel Dunbar 391651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines bool hasIntegratedCPP() const override { return false; } 392651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines bool isLinkJob() const override { return true; } 393008f54a54299eaafdaa940e2bdeaf55935ecd95aDaniel Dunbar 394651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines void ConstructJob(Compilation &C, const JobAction &JA, 395651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines const InputInfo &Output, const InputInfoList &Inputs, 396651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines const llvm::opt::ArgList &TCArgs, 397651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines const char *LinkingOutput) const override; 398008f54a54299eaafdaa940e2bdeaf55935ecd95aDaniel Dunbar }; 399e7925a075f110ab21afeae084670a155dea568e3Edward O'Callaghan} // end namespace freebsd 400e7925a075f110ab21afeae084670a155dea568e3Edward O'Callaghan 4018e50a96b387dca7525caa8a6add31420dd82a2cdBenjamin Kramer /// netbsd -- Directly call GNU Binutils assembler and linker 4028e50a96b387dca7525caa8a6add31420dd82a2cdBenjamin Kramernamespace netbsd { 4038e50a96b387dca7525caa8a6add31420dd82a2cdBenjamin Kramer class LLVM_LIBRARY_VISIBILITY Assemble : public Tool { 404182564cd14a2105fff05fd52f5940eff96161d57Joerg Sonnenberger 4058e50a96b387dca7525caa8a6add31420dd82a2cdBenjamin Kramer public: 4061bd91374498ac78e72545f08f4daa6491f9c9d14Joerg Sonnenberger Assemble(const ToolChain &TC) 4071bd91374498ac78e72545f08f4daa6491f9c9d14Joerg Sonnenberger : Tool("netbsd::Assemble", "assembler", TC) {} 4088e50a96b387dca7525caa8a6add31420dd82a2cdBenjamin Kramer 409651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines bool hasIntegratedCPP() const override { return false; } 4108e50a96b387dca7525caa8a6add31420dd82a2cdBenjamin Kramer 411651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines void ConstructJob(Compilation &C, const JobAction &JA, 412651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines const InputInfo &Output, const InputInfoList &Inputs, 413651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines const llvm::opt::ArgList &TCArgs, 414651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines const char *LinkingOutput) const override; 4158e50a96b387dca7525caa8a6add31420dd82a2cdBenjamin Kramer }; 4168e50a96b387dca7525caa8a6add31420dd82a2cdBenjamin Kramer class LLVM_LIBRARY_VISIBILITY Link : public Tool { 417182564cd14a2105fff05fd52f5940eff96161d57Joerg Sonnenberger 4188e50a96b387dca7525caa8a6add31420dd82a2cdBenjamin Kramer public: 4191bd91374498ac78e72545f08f4daa6491f9c9d14Joerg Sonnenberger Link(const ToolChain &TC) 4201bd91374498ac78e72545f08f4daa6491f9c9d14Joerg Sonnenberger : Tool("netbsd::Link", "linker", TC) {} 4218e50a96b387dca7525caa8a6add31420dd82a2cdBenjamin Kramer 422651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines bool hasIntegratedCPP() const override { return false; } 423651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines bool isLinkJob() const override { return true; } 4248e50a96b387dca7525caa8a6add31420dd82a2cdBenjamin Kramer 425651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines void ConstructJob(Compilation &C, const JobAction &JA, 426651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines const InputInfo &Output, const InputInfoList &Inputs, 427651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines const llvm::opt::ArgList &TCArgs, 428651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines const char *LinkingOutput) const override; 4298e50a96b387dca7525caa8a6add31420dd82a2cdBenjamin Kramer }; 4308e50a96b387dca7525caa8a6add31420dd82a2cdBenjamin Kramer} // end namespace netbsd 4318e50a96b387dca7525caa8a6add31420dd82a2cdBenjamin Kramer 432577bb0a2335295958b3b0f88bc9cdedf6551c17fThomas Schwinge /// Directly call GNU Binutils' assembler and linker. 433577bb0a2335295958b3b0f88bc9cdedf6551c17fThomas Schwingenamespace gnutools { 434ba30bbe4e36a30a274da809a11a42f9cdc168e92Rafael Espindola class LLVM_LIBRARY_VISIBILITY Assemble : public Tool { 435ba30bbe4e36a30a274da809a11a42f9cdc168e92Rafael Espindola public: 436577bb0a2335295958b3b0f88bc9cdedf6551c17fThomas Schwinge Assemble(const ToolChain &TC) : Tool("GNU::Assemble", "assembler", TC) {} 437ba30bbe4e36a30a274da809a11a42f9cdc168e92Rafael Espindola 438651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines bool hasIntegratedCPP() const override { return false; } 439ba30bbe4e36a30a274da809a11a42f9cdc168e92Rafael Espindola 440651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines void ConstructJob(Compilation &C, const JobAction &JA, 441651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines const InputInfo &Output, 442651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines const InputInfoList &Inputs, 443651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines const llvm::opt::ArgList &TCArgs, 444651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines const char *LinkingOutput) const override; 445ba30bbe4e36a30a274da809a11a42f9cdc168e92Rafael Espindola }; 446c1da981bba867681004004b2d54ec2fdf3c08913Rafael Espindola class LLVM_LIBRARY_VISIBILITY Link : public Tool { 447c1da981bba867681004004b2d54ec2fdf3c08913Rafael Espindola public: 448577bb0a2335295958b3b0f88bc9cdedf6551c17fThomas Schwinge Link(const ToolChain &TC) : Tool("GNU::Link", "linker", TC) {} 449c1da981bba867681004004b2d54ec2fdf3c08913Rafael Espindola 450651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines bool hasIntegratedCPP() const override { return false; } 451651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines bool isLinkJob() const override { return true; } 452c1da981bba867681004004b2d54ec2fdf3c08913Rafael Espindola 453651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines void ConstructJob(Compilation &C, const JobAction &JA, 454651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines const InputInfo &Output, 455651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines const InputInfoList &Inputs, 456651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines const llvm::opt::ArgList &TCArgs, 457651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines const char *LinkingOutput) const override; 458c1da981bba867681004004b2d54ec2fdf3c08913Rafael Espindola }; 459ba30bbe4e36a30a274da809a11a42f9cdc168e92Rafael Espindola} 46038e317d6dce161b249508686cc67eb7176958762Chris Lattner /// minix -- Directly call GNU Binutils assembler and linker 46138e317d6dce161b249508686cc67eb7176958762Chris Lattnernamespace minix { 46238e317d6dce161b249508686cc67eb7176958762Chris Lattner class LLVM_LIBRARY_VISIBILITY Assemble : public Tool { 46338e317d6dce161b249508686cc67eb7176958762Chris Lattner public: 46438e317d6dce161b249508686cc67eb7176958762Chris Lattner Assemble(const ToolChain &TC) : Tool("minix::Assemble", "assembler", 46538e317d6dce161b249508686cc67eb7176958762Chris Lattner TC) {} 46638e317d6dce161b249508686cc67eb7176958762Chris Lattner 467651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines bool hasIntegratedCPP() const override { return false; } 46838e317d6dce161b249508686cc67eb7176958762Chris Lattner 469651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines void ConstructJob(Compilation &C, const JobAction &JA, 470651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines const InputInfo &Output, 471651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines const InputInfoList &Inputs, 472651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines const llvm::opt::ArgList &TCArgs, 473651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines const char *LinkingOutput) const override; 47438e317d6dce161b249508686cc67eb7176958762Chris Lattner }; 47538e317d6dce161b249508686cc67eb7176958762Chris Lattner class LLVM_LIBRARY_VISIBILITY Link : public Tool { 47638e317d6dce161b249508686cc67eb7176958762Chris Lattner public: 47738e317d6dce161b249508686cc67eb7176958762Chris Lattner Link(const ToolChain &TC) : Tool("minix::Link", "linker", TC) {} 47838e317d6dce161b249508686cc67eb7176958762Chris Lattner 479651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines bool hasIntegratedCPP() const override { return false; } 480651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines bool isLinkJob() const override { return true; } 48138e317d6dce161b249508686cc67eb7176958762Chris Lattner 482651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines void ConstructJob(Compilation &C, const JobAction &JA, 483651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines const InputInfo &Output, 484651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines const InputInfoList &Inputs, 485651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines const llvm::opt::ArgList &TCArgs, 486651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines const char *LinkingOutput) const override; 48738e317d6dce161b249508686cc67eb7176958762Chris Lattner }; 48838e317d6dce161b249508686cc67eb7176958762Chris Lattner} // end namespace minix 48938e317d6dce161b249508686cc67eb7176958762Chris Lattner 49031c4690047f5f362ecf886f1586844b1aef0c4d2David Chisnall /// solaris -- Directly call Solaris assembler and linker 49131c4690047f5f362ecf886f1586844b1aef0c4d2David Chisnallnamespace solaris { 49231c4690047f5f362ecf886f1586844b1aef0c4d2David Chisnall class LLVM_LIBRARY_VISIBILITY Assemble : public Tool { 49331c4690047f5f362ecf886f1586844b1aef0c4d2David Chisnall public: 49431c4690047f5f362ecf886f1586844b1aef0c4d2David Chisnall Assemble(const ToolChain &TC) : Tool("solaris::Assemble", "assembler", 49531c4690047f5f362ecf886f1586844b1aef0c4d2David Chisnall TC) {} 49631c4690047f5f362ecf886f1586844b1aef0c4d2David Chisnall 497651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines bool hasIntegratedCPP() const override { return false; } 49831c4690047f5f362ecf886f1586844b1aef0c4d2David Chisnall 499651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines void ConstructJob(Compilation &C, const JobAction &JA, 500651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines const InputInfo &Output, const InputInfoList &Inputs, 501651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines const llvm::opt::ArgList &TCArgs, 502651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines const char *LinkingOutput) const override; 50331c4690047f5f362ecf886f1586844b1aef0c4d2David Chisnall }; 50431c4690047f5f362ecf886f1586844b1aef0c4d2David Chisnall class LLVM_LIBRARY_VISIBILITY Link : public Tool { 50531c4690047f5f362ecf886f1586844b1aef0c4d2David Chisnall public: 50631c4690047f5f362ecf886f1586844b1aef0c4d2David Chisnall Link(const ToolChain &TC) : Tool("solaris::Link", "linker", TC) {} 50731c4690047f5f362ecf886f1586844b1aef0c4d2David Chisnall 508651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines bool hasIntegratedCPP() const override { return false; } 509651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines bool isLinkJob() const override { return true; } 51031c4690047f5f362ecf886f1586844b1aef0c4d2David Chisnall 511651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines void ConstructJob(Compilation &C, const JobAction &JA, 512651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines const InputInfo &Output, const InputInfoList &Inputs, 513651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines const llvm::opt::ArgList &TCArgs, 514651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines const char *LinkingOutput) const override; 51531c4690047f5f362ecf886f1586844b1aef0c4d2David Chisnall }; 516badb6cd2007825308208e6c4275ba54e220e4e28David Chisnall} // end namespace solaris 51731c4690047f5f362ecf886f1586844b1aef0c4d2David Chisnall 518e7925a075f110ab21afeae084670a155dea568e3Edward O'Callaghan /// auroraux -- Directly call GNU Binutils assembler and linker 519e7925a075f110ab21afeae084670a155dea568e3Edward O'Callaghannamespace auroraux { 52092dd1915842410005c68d32c43bb3b3cf5a4a702Duncan Sands class LLVM_LIBRARY_VISIBILITY Assemble : public Tool { 521e7925a075f110ab21afeae084670a155dea568e3Edward O'Callaghan public: 5223038204fd8f6ff22082dd18e4b12ed252b75a5e4Daniel Dunbar Assemble(const ToolChain &TC) : Tool("auroraux::Assemble", "assembler", 5233038204fd8f6ff22082dd18e4b12ed252b75a5e4Daniel Dunbar TC) {} 524e7925a075f110ab21afeae084670a155dea568e3Edward O'Callaghan 525651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines bool hasIntegratedCPP() const override { return false; } 526e7925a075f110ab21afeae084670a155dea568e3Edward O'Callaghan 527651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines void ConstructJob(Compilation &C, const JobAction &JA, 528651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines const InputInfo &Output, const InputInfoList &Inputs, 529651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines const llvm::opt::ArgList &TCArgs, 530651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines const char *LinkingOutput) const override; 531e7925a075f110ab21afeae084670a155dea568e3Edward O'Callaghan }; 53292dd1915842410005c68d32c43bb3b3cf5a4a702Duncan Sands class LLVM_LIBRARY_VISIBILITY Link : public Tool { 533e7925a075f110ab21afeae084670a155dea568e3Edward O'Callaghan public: 5343038204fd8f6ff22082dd18e4b12ed252b75a5e4Daniel Dunbar Link(const ToolChain &TC) : Tool("auroraux::Link", "linker", TC) {} 535e7925a075f110ab21afeae084670a155dea568e3Edward O'Callaghan 536651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines bool hasIntegratedCPP() const override { return false; } 537651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines bool isLinkJob() const override { return true; } 538e7925a075f110ab21afeae084670a155dea568e3Edward O'Callaghan 539651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines void ConstructJob(Compilation &C, const JobAction &JA, 540651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines const InputInfo &Output, const InputInfoList &Inputs, 541651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines const llvm::opt::ArgList &TCArgs, 542651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines const char *LinkingOutput) const override; 543e7925a075f110ab21afeae084670a155dea568e3Edward O'Callaghan }; 544e7925a075f110ab21afeae084670a155dea568e3Edward O'Callaghan} // end namespace auroraux 54568a31d406c6dc4382c700d1199b062de2aa7e1daDaniel Dunbar 54611e1b40d759a643086f590f6ffbd9d68360bad46Daniel Dunbar /// dragonfly -- Directly call GNU Binutils assembler and linker 54711e1b40d759a643086f590f6ffbd9d68360bad46Daniel Dunbarnamespace dragonfly { 54892dd1915842410005c68d32c43bb3b3cf5a4a702Duncan Sands class LLVM_LIBRARY_VISIBILITY Assemble : public Tool { 54911e1b40d759a643086f590f6ffbd9d68360bad46Daniel Dunbar public: 5503038204fd8f6ff22082dd18e4b12ed252b75a5e4Daniel Dunbar Assemble(const ToolChain &TC) : Tool("dragonfly::Assemble", "assembler", 5513038204fd8f6ff22082dd18e4b12ed252b75a5e4Daniel Dunbar TC) {} 55211e1b40d759a643086f590f6ffbd9d68360bad46Daniel Dunbar 553651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines bool hasIntegratedCPP() const override { return false; } 55411e1b40d759a643086f590f6ffbd9d68360bad46Daniel Dunbar 555651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines void ConstructJob(Compilation &C, const JobAction &JA, 556651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines const InputInfo &Output, const InputInfoList &Inputs, 557651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines const llvm::opt::ArgList &TCArgs, 558651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines const char *LinkingOutput) const override; 55911e1b40d759a643086f590f6ffbd9d68360bad46Daniel Dunbar }; 56092dd1915842410005c68d32c43bb3b3cf5a4a702Duncan Sands class LLVM_LIBRARY_VISIBILITY Link : public Tool { 56111e1b40d759a643086f590f6ffbd9d68360bad46Daniel Dunbar public: 5623038204fd8f6ff22082dd18e4b12ed252b75a5e4Daniel Dunbar Link(const ToolChain &TC) : Tool("dragonfly::Link", "linker", TC) {} 56311e1b40d759a643086f590f6ffbd9d68360bad46Daniel Dunbar 564651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines bool hasIntegratedCPP() const override { return false; } 565651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines bool isLinkJob() const override { return true; } 56611e1b40d759a643086f590f6ffbd9d68360bad46Daniel Dunbar 567651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines void ConstructJob(Compilation &C, const JobAction &JA, 568651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines const InputInfo &Output, 569651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines const InputInfoList &Inputs, 570651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines const llvm::opt::ArgList &TCArgs, 571651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines const char *LinkingOutput) const override; 57211e1b40d759a643086f590f6ffbd9d68360bad46Daniel Dunbar }; 573e7925a075f110ab21afeae084670a155dea568e3Edward O'Callaghan} // end namespace dragonfly 57411e1b40d759a643086f590f6ffbd9d68360bad46Daniel Dunbar 575ef8225444452a1486bd721f3285301fe84643b00Stephen Hines/// Visual studio tools. 576ff58e3610f4e12094def69eb2d6dcb4330378d8fMichael J. Spencernamespace visualstudio { 577c8ba0a0acd30f0b56d08a3a0947f68ac01a40730Hans Wennborg class LLVM_LIBRARY_VISIBILITY Link : public Tool { 578ff58e3610f4e12094def69eb2d6dcb4330378d8fMichael J. Spencer public: 579ff58e3610f4e12094def69eb2d6dcb4330378d8fMichael J. Spencer Link(const ToolChain &TC) : Tool("visualstudio::Link", "linker", TC) {} 580ff58e3610f4e12094def69eb2d6dcb4330378d8fMichael J. Spencer 581651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines bool hasIntegratedCPP() const override { return false; } 582651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines bool isLinkJob() const override { return true; } 583ff58e3610f4e12094def69eb2d6dcb4330378d8fMichael J. Spencer 584651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines void ConstructJob(Compilation &C, const JobAction &JA, 585651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines const InputInfo &Output, const InputInfoList &Inputs, 586651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines const llvm::opt::ArgList &TCArgs, 587651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines const char *LinkingOutput) const override; 588ff58e3610f4e12094def69eb2d6dcb4330378d8fMichael J. Spencer }; 589c8ba0a0acd30f0b56d08a3a0947f68ac01a40730Hans Wennborg 590c8ba0a0acd30f0b56d08a3a0947f68ac01a40730Hans Wennborg class LLVM_LIBRARY_VISIBILITY Compile : public Tool { 591c8ba0a0acd30f0b56d08a3a0947f68ac01a40730Hans Wennborg public: 592c8ba0a0acd30f0b56d08a3a0947f68ac01a40730Hans Wennborg Compile(const ToolChain &TC) : Tool("visualstudio::Compile", "compiler", TC) {} 593c8ba0a0acd30f0b56d08a3a0947f68ac01a40730Hans Wennborg 594651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines bool hasIntegratedAssembler() const override { return true; } 595651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines bool hasIntegratedCPP() const override { return true; } 596651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines bool isLinkJob() const override { return false; } 597c8ba0a0acd30f0b56d08a3a0947f68ac01a40730Hans Wennborg 598651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines void ConstructJob(Compilation &C, const JobAction &JA, 599651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines const InputInfo &Output, const InputInfoList &Inputs, 600651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines const llvm::opt::ArgList &TCArgs, 601651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines const char *LinkingOutput) const override; 602c8ba0a0acd30f0b56d08a3a0947f68ac01a40730Hans Wennborg 603c8ba0a0acd30f0b56d08a3a0947f68ac01a40730Hans Wennborg Command *GetCommand(Compilation &C, const JobAction &JA, 604c8ba0a0acd30f0b56d08a3a0947f68ac01a40730Hans Wennborg const InputInfo &Output, 605c8ba0a0acd30f0b56d08a3a0947f68ac01a40730Hans Wennborg const InputInfoList &Inputs, 606c8ba0a0acd30f0b56d08a3a0947f68ac01a40730Hans Wennborg const llvm::opt::ArgList &TCArgs, 607c8ba0a0acd30f0b56d08a3a0947f68ac01a40730Hans Wennborg const char *LinkingOutput) const; 608c8ba0a0acd30f0b56d08a3a0947f68ac01a40730Hans Wennborg }; 609ff58e3610f4e12094def69eb2d6dcb4330378d8fMichael J. Spencer} // end namespace visualstudio 610ff58e3610f4e12094def69eb2d6dcb4330378d8fMichael J. Spencer 611651f13cea278ec967336033dd032faef0e9fc2ecStephen Hinesnamespace arm { 612651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines StringRef getARMFloatABI(const Driver &D, const llvm::opt::ArgList &Args, 613651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines const llvm::Triple &Triple); 614651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines} 6154e490e271ce3f0d4289b5115e000b55333c1b829Robert Lyttonnamespace XCore { 6164e490e271ce3f0d4289b5115e000b55333c1b829Robert Lytton // For XCore, we do not need to instantiate tools for PreProcess, PreCompile and Compile. 6174e490e271ce3f0d4289b5115e000b55333c1b829Robert Lytton // We simply use "clang -cc1" for those actions. 6184e490e271ce3f0d4289b5115e000b55333c1b829Robert Lytton class LLVM_LIBRARY_VISIBILITY Assemble : public Tool { 6194e490e271ce3f0d4289b5115e000b55333c1b829Robert Lytton public: 6204e490e271ce3f0d4289b5115e000b55333c1b829Robert Lytton Assemble(const ToolChain &TC) : Tool("XCore::Assemble", 6214e490e271ce3f0d4289b5115e000b55333c1b829Robert Lytton "XCore-as", TC) {} 6224e490e271ce3f0d4289b5115e000b55333c1b829Robert Lytton 623651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines bool hasIntegratedCPP() const override { return false; } 624651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines void ConstructJob(Compilation &C, const JobAction &JA, 625651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines const InputInfo &Output, const InputInfoList &Inputs, 626651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines const llvm::opt::ArgList &TCArgs, 627651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines const char *LinkingOutput) const override; 6284e490e271ce3f0d4289b5115e000b55333c1b829Robert Lytton }; 6294e490e271ce3f0d4289b5115e000b55333c1b829Robert Lytton 6304e490e271ce3f0d4289b5115e000b55333c1b829Robert Lytton class LLVM_LIBRARY_VISIBILITY Link : public Tool { 6314e490e271ce3f0d4289b5115e000b55333c1b829Robert Lytton public: 6324e490e271ce3f0d4289b5115e000b55333c1b829Robert Lytton Link(const ToolChain &TC) : Tool("XCore::Link", 6334e490e271ce3f0d4289b5115e000b55333c1b829Robert Lytton "XCore-ld", TC) {} 6344e490e271ce3f0d4289b5115e000b55333c1b829Robert Lytton 635651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines bool hasIntegratedCPP() const override { return false; } 636651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines bool isLinkJob() const override { return true; } 637651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines void ConstructJob(Compilation &C, const JobAction &JA, 638651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines const InputInfo &Output, const InputInfoList &Inputs, 639651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines const llvm::opt::ArgList &TCArgs, 640651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines const char *LinkingOutput) const override; 6414e490e271ce3f0d4289b5115e000b55333c1b829Robert Lytton }; 6424e490e271ce3f0d4289b5115e000b55333c1b829Robert Lytton} // end namespace XCore. 6434e490e271ce3f0d4289b5115e000b55333c1b829Robert Lytton 6444e490e271ce3f0d4289b5115e000b55333c1b829Robert Lytton 6459c073ff462eb75ccbb1c4446e21c148f3fc618e1Daniel Dunbar} // end namespace toolchains 6469c073ff462eb75ccbb1c4446e21c148f3fc618e1Daniel Dunbar} // end namespace driver 6479c073ff462eb75ccbb1c4446e21c148f3fc618e1Daniel Dunbar} // end namespace clang 6489c073ff462eb75ccbb1c4446e21c148f3fc618e1Daniel Dunbar 649e7925a075f110ab21afeae084670a155dea568e3Edward O'Callaghan#endif // CLANG_LIB_DRIVER_TOOLS_H_ 650