Tools.h revision 4e490e271ce3f0d4289b5115e000b55333c1b829
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 { 28f395528158379e7ea9f6ff4bbb791abadca15aabDaniel Dunbar class Darwin; 2902633b541b04ad5ffc1c70f4c2feeeb13e607057Daniel Dunbar} 3002633b541b04ad5ffc1c70f4c2feeeb13e607057Daniel Dunbar 31985b825eea7387be10478de0430815ed6a673326Daniel Dunbarnamespace tools { 32b1e25a1bc03292dc538d336573e0be1490223171Reid Klecknerusing llvm::opt::ArgStringList; 339c073ff462eb75ccbb1c4446e21c148f3fc618e1Daniel Dunbar 3420a9aa50f9a7d4b03f97bc67e96da1d605c309a2Daniel Dunbar /// \brief Clang compiler tool. 3592dd1915842410005c68d32c43bb3b3cf5a4a702Duncan Sands class LLVM_LIBRARY_VISIBILITY Clang : public Tool { 3627e2b983beb8b5a29869639637327725623069a8Eric Christopher public: 37dd0b3c4c72464af92e2c27dd5a67e29f91ba7b28Reid Kleckner static const char *getBaseInputName(const llvm::opt::ArgList &Args, 3866b8a6671bb5df540dd7200a5286f7ed7a72c1ccBob Wilson const InputInfoList &Inputs); 39dd0b3c4c72464af92e2c27dd5a67e29f91ba7b28Reid Kleckner static const char *getBaseInputStem(const llvm::opt::ArgList &Args, 4066b8a6671bb5df540dd7200a5286f7ed7a72c1ccBob Wilson const InputInfoList &Inputs); 41dd0b3c4c72464af92e2c27dd5a67e29f91ba7b28Reid Kleckner static const char *getDependencyFileName(const llvm::opt::ArgList &Args, 4266b8a6671bb5df540dd7200a5286f7ed7a72c1ccBob Wilson const InputInfoList &Inputs); 4366b8a6671bb5df540dd7200a5286f7ed7a72c1ccBob Wilson 4427e2b983beb8b5a29869639637327725623069a8Eric Christopher private: 45dd0b3c4c72464af92e2c27dd5a67e29f91ba7b28Reid Kleckner void AddPreprocessingOptions(Compilation &C, const JobAction &JA, 4654db68bf0e389b8aabe1a434f825a81a9c1f7db8Peter Collingbourne const Driver &D, 47dd0b3c4c72464af92e2c27dd5a67e29f91ba7b28Reid Kleckner const llvm::opt::ArgList &Args, 48dd0b3c4c72464af92e2c27dd5a67e29f91ba7b28Reid Kleckner llvm::opt::ArgStringList &CmdArgs, 49c21c485b4fb58ef5d55cf3e523263dd824a2ace4Daniel Dunbar const InputInfo &Output, 50c21c485b4fb58ef5d55cf3e523263dd824a2ace4Daniel Dunbar const InputInfoList &Inputs) const; 51c21c485b4fb58ef5d55cf3e523263dd824a2ace4Daniel Dunbar 52dd0b3c4c72464af92e2c27dd5a67e29f91ba7b28Reid Kleckner void AddARMTargetArgs(const llvm::opt::ArgList &Args, 53dd0b3c4c72464af92e2c27dd5a67e29f91ba7b28Reid Kleckner llvm::opt::ArgStringList &CmdArgs, 54fa41d6975058ceb1b8a24564f6dcec72f89f62e8Daniel Dunbar bool KernelOrKext) const; 55dd0b3c4c72464af92e2c27dd5a67e29f91ba7b28Reid Kleckner void AddMIPSTargetArgs(const llvm::opt::ArgList &Args, 56dd0b3c4c72464af92e2c27dd5a67e29f91ba7b28Reid Kleckner llvm::opt::ArgStringList &CmdArgs) const; 57dd0b3c4c72464af92e2c27dd5a67e29f91ba7b28Reid Kleckner void AddR600TargetArgs(const llvm::opt::ArgList &Args, 58dd0b3c4c72464af92e2c27dd5a67e29f91ba7b28Reid Kleckner llvm::opt::ArgStringList &CmdArgs) const; 59dd0b3c4c72464af92e2c27dd5a67e29f91ba7b28Reid Kleckner void AddSparcTargetArgs(const llvm::opt::ArgList &Args, 60dd0b3c4c72464af92e2c27dd5a67e29f91ba7b28Reid Kleckner llvm::opt::ArgStringList &CmdArgs) const; 615c92b9ab4e4dce3233ea3e400a02c443f9afd372Richard Sandiford void AddSystemZTargetArgs(const llvm::opt::ArgList &Args, 625c92b9ab4e4dce3233ea3e400a02c443f9afd372Richard Sandiford llvm::opt::ArgStringList &CmdArgs) const; 63dd0b3c4c72464af92e2c27dd5a67e29f91ba7b28Reid Kleckner void AddX86TargetArgs(const llvm::opt::ArgList &Args, 64dd0b3c4c72464af92e2c27dd5a67e29f91ba7b28Reid Kleckner llvm::opt::ArgStringList &CmdArgs) const; 65dd0b3c4c72464af92e2c27dd5a67e29f91ba7b28Reid Kleckner void AddHexagonTargetArgs(const llvm::opt::ArgList &Args, 66dd0b3c4c72464af92e2c27dd5a67e29f91ba7b28Reid Kleckner llvm::opt::ArgStringList &CmdArgs) const; 676acda16e9c194dcbd0dea64341e182bdb65d0f41Daniel Dunbar 68260611a32535c851237926bfcf78869b13c07d5bJohn McCall enum RewriteKind { RK_None, RK_Fragile, RK_NonFragile }; 69260611a32535c851237926bfcf78869b13c07d5bJohn McCall 70dd0b3c4c72464af92e2c27dd5a67e29f91ba7b28Reid Kleckner ObjCRuntime AddObjCRuntimeArgs(const llvm::opt::ArgList &args, 71dd0b3c4c72464af92e2c27dd5a67e29f91ba7b28Reid Kleckner llvm::opt::ArgStringList &cmdArgs, 72260611a32535c851237926bfcf78869b13c07d5bJohn McCall RewriteKind rewrite) const; 73260611a32535c851237926bfcf78869b13c07d5bJohn McCall 74b3574796d7cc0113e54b6516fc16e17ca09459fbHans Wennborg void AddClangCLArgs(const llvm::opt::ArgList &Args, 75b3574796d7cc0113e54b6516fc16e17ca09459fbHans Wennborg llvm::opt::ArgStringList &CmdArgs) const; 76b3574796d7cc0113e54b6516fc16e17ca09459fbHans Wennborg 779c073ff462eb75ccbb1c4446e21c148f3fc618e1Daniel Dunbar public: 783038204fd8f6ff22082dd18e4b12ed252b75a5e4Daniel Dunbar Clang(const ToolChain &TC) : Tool("clang", "clang frontend", TC) {} 799c073ff462eb75ccbb1c4446e21c148f3fc618e1Daniel Dunbar 8060a53f24b160724de0e8dd0e142009981540fd26Daniel Dunbar virtual bool hasGoodDiagnostics() const { return true; } 818767cbc475ed96397b6f08617814eeb9cab121bdDaniel Dunbar virtual bool hasIntegratedAssembler() const { return true; } 829c073ff462eb75ccbb1c4446e21c148f3fc618e1Daniel Dunbar virtual bool hasIntegratedCPP() const { return true; } 8347ac7d27c44bd64a7d0fc03d4babc196cf2b8230Daniel Dunbar 8447ac7d27c44bd64a7d0fc03d4babc196cf2b8230Daniel Dunbar virtual void ConstructJob(Compilation &C, const JobAction &JA, 8520a9aa50f9a7d4b03f97bc67e96da1d605c309a2Daniel Dunbar const InputInfo &Output, 8620a9aa50f9a7d4b03f97bc67e96da1d605c309a2Daniel Dunbar const InputInfoList &Inputs, 87dd0b3c4c72464af92e2c27dd5a67e29f91ba7b28Reid Kleckner const llvm::opt::ArgList &TCArgs, 8820a9aa50f9a7d4b03f97bc67e96da1d605c309a2Daniel Dunbar const char *LinkingOutput) const; 8920a9aa50f9a7d4b03f97bc67e96da1d605c309a2Daniel Dunbar }; 9020a9aa50f9a7d4b03f97bc67e96da1d605c309a2Daniel Dunbar 9120a9aa50f9a7d4b03f97bc67e96da1d605c309a2Daniel Dunbar /// \brief Clang integrated assembler tool. 9220a9aa50f9a7d4b03f97bc67e96da1d605c309a2Daniel Dunbar class LLVM_LIBRARY_VISIBILITY ClangAs : public Tool { 9320a9aa50f9a7d4b03f97bc67e96da1d605c309a2Daniel Dunbar public: 943038204fd8f6ff22082dd18e4b12ed252b75a5e4Daniel Dunbar ClangAs(const ToolChain &TC) : Tool("clang::as", 953038204fd8f6ff22082dd18e4b12ed252b75a5e4Daniel Dunbar "clang integrated assembler", TC) {} 9620a9aa50f9a7d4b03f97bc67e96da1d605c309a2Daniel Dunbar 9720a9aa50f9a7d4b03f97bc67e96da1d605c309a2Daniel Dunbar virtual bool hasGoodDiagnostics() const { return true; } 9820a9aa50f9a7d4b03f97bc67e96da1d605c309a2Daniel Dunbar virtual bool hasIntegratedAssembler() const { return false; } 9920a9aa50f9a7d4b03f97bc67e96da1d605c309a2Daniel Dunbar virtual bool hasIntegratedCPP() const { return false; } 10020a9aa50f9a7d4b03f97bc67e96da1d605c309a2Daniel Dunbar 10120a9aa50f9a7d4b03f97bc67e96da1d605c309a2Daniel Dunbar virtual void ConstructJob(Compilation &C, const JobAction &JA, 1021eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump const InputInfo &Output, 1031eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump const InputInfoList &Inputs, 104dd0b3c4c72464af92e2c27dd5a67e29f91ba7b28Reid Kleckner const llvm::opt::ArgList &TCArgs, 10547ac7d27c44bd64a7d0fc03d4babc196cf2b8230Daniel Dunbar const char *LinkingOutput) const; 1069c073ff462eb75ccbb1c4446e21c148f3fc618e1Daniel Dunbar }; 1079c073ff462eb75ccbb1c4446e21c148f3fc618e1Daniel Dunbar 10831b1e5437e7435879fc044afb77ff27096008e72Daniel Dunbar /// gcc - Generic GCC tool implementations. 10931b1e5437e7435879fc044afb77ff27096008e72Daniel Dunbarnamespace gcc { 11092dd1915842410005c68d32c43bb3b3cf5a4a702Duncan Sands class LLVM_LIBRARY_VISIBILITY Common : public Tool { 1119c073ff462eb75ccbb1c4446e21c148f3fc618e1Daniel Dunbar public: 1123038204fd8f6ff22082dd18e4b12ed252b75a5e4Daniel Dunbar Common(const char *Name, const char *ShortName, 1133038204fd8f6ff22082dd18e4b12ed252b75a5e4Daniel Dunbar const ToolChain &TC) : Tool(Name, ShortName, TC) {} 11447ac7d27c44bd64a7d0fc03d4babc196cf2b8230Daniel Dunbar 11547ac7d27c44bd64a7d0fc03d4babc196cf2b8230Daniel Dunbar virtual void ConstructJob(Compilation &C, const JobAction &JA, 1161eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump const InputInfo &Output, 1171eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump const InputInfoList &Inputs, 118dd0b3c4c72464af92e2c27dd5a67e29f91ba7b28Reid Kleckner const llvm::opt::ArgList &TCArgs, 11947ac7d27c44bd64a7d0fc03d4babc196cf2b8230Daniel Dunbar const char *LinkingOutput) const; 120b488c1dac8e53206f07103d794a62a3f5012c0f4Daniel Dunbar 121b488c1dac8e53206f07103d794a62a3f5012c0f4Daniel Dunbar /// RenderExtraToolArgs - Render any arguments necessary to force 122b488c1dac8e53206f07103d794a62a3f5012c0f4Daniel Dunbar /// the particular tool mode. 123dd0b3c4c72464af92e2c27dd5a67e29f91ba7b28Reid Kleckner virtual void 124dd0b3c4c72464af92e2c27dd5a67e29f91ba7b28Reid Kleckner RenderExtraToolArgs(const JobAction &JA, 125dd0b3c4c72464af92e2c27dd5a67e29f91ba7b28Reid Kleckner llvm::opt::ArgStringList &CmdArgs) const = 0; 1269c073ff462eb75ccbb1c4446e21c148f3fc618e1Daniel Dunbar }; 1279c073ff462eb75ccbb1c4446e21c148f3fc618e1Daniel Dunbar 12892dd1915842410005c68d32c43bb3b3cf5a4a702Duncan Sands class LLVM_LIBRARY_VISIBILITY Preprocess : public Common { 1299c073ff462eb75ccbb1c4446e21c148f3fc618e1Daniel Dunbar public: 1303038204fd8f6ff22082dd18e4b12ed252b75a5e4Daniel Dunbar Preprocess(const ToolChain &TC) : Common("gcc::Preprocess", 1313038204fd8f6ff22082dd18e4b12ed252b75a5e4Daniel Dunbar "gcc preprocessor", TC) {} 132b488c1dac8e53206f07103d794a62a3f5012c0f4Daniel Dunbar 13360a53f24b160724de0e8dd0e142009981540fd26Daniel Dunbar virtual bool hasGoodDiagnostics() const { return true; } 134b488c1dac8e53206f07103d794a62a3f5012c0f4Daniel Dunbar virtual bool hasIntegratedCPP() const { return false; } 135b488c1dac8e53206f07103d794a62a3f5012c0f4Daniel Dunbar 13682b51cce8cea6b6bb6175c406c2ab425c91d9dc8Daniel Dunbar virtual void RenderExtraToolArgs(const JobAction &JA, 137dd0b3c4c72464af92e2c27dd5a67e29f91ba7b28Reid Kleckner llvm::opt::ArgStringList &CmdArgs) const; 138b488c1dac8e53206f07103d794a62a3f5012c0f4Daniel Dunbar }; 139b488c1dac8e53206f07103d794a62a3f5012c0f4Daniel Dunbar 14092dd1915842410005c68d32c43bb3b3cf5a4a702Duncan Sands class LLVM_LIBRARY_VISIBILITY Precompile : public Common { 141b488c1dac8e53206f07103d794a62a3f5012c0f4Daniel Dunbar public: 1423038204fd8f6ff22082dd18e4b12ed252b75a5e4Daniel Dunbar Precompile(const ToolChain &TC) : Common("gcc::Precompile", 1433038204fd8f6ff22082dd18e4b12ed252b75a5e4Daniel Dunbar "gcc precompile", TC) {} 1449c073ff462eb75ccbb1c4446e21c148f3fc618e1Daniel Dunbar 14560a53f24b160724de0e8dd0e142009981540fd26Daniel Dunbar virtual bool hasGoodDiagnostics() const { return true; } 1469c073ff462eb75ccbb1c4446e21c148f3fc618e1Daniel Dunbar virtual bool hasIntegratedCPP() const { return true; } 14747ac7d27c44bd64a7d0fc03d4babc196cf2b8230Daniel Dunbar 14882b51cce8cea6b6bb6175c406c2ab425c91d9dc8Daniel Dunbar virtual void RenderExtraToolArgs(const JobAction &JA, 149dd0b3c4c72464af92e2c27dd5a67e29f91ba7b28Reid Kleckner llvm::opt::ArgStringList &CmdArgs) const; 1509c073ff462eb75ccbb1c4446e21c148f3fc618e1Daniel Dunbar }; 1519c073ff462eb75ccbb1c4446e21c148f3fc618e1Daniel Dunbar 15292dd1915842410005c68d32c43bb3b3cf5a4a702Duncan Sands class LLVM_LIBRARY_VISIBILITY Compile : public Common { 1539c073ff462eb75ccbb1c4446e21c148f3fc618e1Daniel Dunbar public: 1543038204fd8f6ff22082dd18e4b12ed252b75a5e4Daniel Dunbar Compile(const ToolChain &TC) : Common("gcc::Compile", 1553038204fd8f6ff22082dd18e4b12ed252b75a5e4Daniel Dunbar "gcc frontend", TC) {} 1569c073ff462eb75ccbb1c4446e21c148f3fc618e1Daniel Dunbar 15760a53f24b160724de0e8dd0e142009981540fd26Daniel Dunbar virtual bool hasGoodDiagnostics() const { return true; } 1589c073ff462eb75ccbb1c4446e21c148f3fc618e1Daniel Dunbar virtual bool hasIntegratedCPP() const { return true; } 15947ac7d27c44bd64a7d0fc03d4babc196cf2b8230Daniel Dunbar 16082b51cce8cea6b6bb6175c406c2ab425c91d9dc8Daniel Dunbar virtual void RenderExtraToolArgs(const JobAction &JA, 161dd0b3c4c72464af92e2c27dd5a67e29f91ba7b28Reid Kleckner llvm::opt::ArgStringList &CmdArgs) const; 1629c073ff462eb75ccbb1c4446e21c148f3fc618e1Daniel Dunbar }; 1639c073ff462eb75ccbb1c4446e21c148f3fc618e1Daniel Dunbar 16492dd1915842410005c68d32c43bb3b3cf5a4a702Duncan Sands class LLVM_LIBRARY_VISIBILITY Assemble : public Common { 1659c073ff462eb75ccbb1c4446e21c148f3fc618e1Daniel Dunbar public: 1663038204fd8f6ff22082dd18e4b12ed252b75a5e4Daniel Dunbar Assemble(const ToolChain &TC) : Common("gcc::Assemble", 1673038204fd8f6ff22082dd18e4b12ed252b75a5e4Daniel Dunbar "assembler (via gcc)", TC) {} 1689c073ff462eb75ccbb1c4446e21c148f3fc618e1Daniel Dunbar 1699c073ff462eb75ccbb1c4446e21c148f3fc618e1Daniel Dunbar virtual bool hasIntegratedCPP() const { return false; } 17047ac7d27c44bd64a7d0fc03d4babc196cf2b8230Daniel Dunbar 17182b51cce8cea6b6bb6175c406c2ab425c91d9dc8Daniel Dunbar virtual void RenderExtraToolArgs(const JobAction &JA, 172dd0b3c4c72464af92e2c27dd5a67e29f91ba7b28Reid Kleckner llvm::opt::ArgStringList &CmdArgs) const; 1739c073ff462eb75ccbb1c4446e21c148f3fc618e1Daniel Dunbar }; 1749c073ff462eb75ccbb1c4446e21c148f3fc618e1Daniel Dunbar 17592dd1915842410005c68d32c43bb3b3cf5a4a702Duncan Sands class LLVM_LIBRARY_VISIBILITY Link : public Common { 1769c073ff462eb75ccbb1c4446e21c148f3fc618e1Daniel Dunbar public: 1773038204fd8f6ff22082dd18e4b12ed252b75a5e4Daniel Dunbar Link(const ToolChain &TC) : Common("gcc::Link", 1783038204fd8f6ff22082dd18e4b12ed252b75a5e4Daniel Dunbar "linker (via gcc)", TC) {} 1799c073ff462eb75ccbb1c4446e21c148f3fc618e1Daniel Dunbar 1809c073ff462eb75ccbb1c4446e21c148f3fc618e1Daniel Dunbar virtual bool hasIntegratedCPP() const { return false; } 1818ba9a6244c56b19bc2a24de5d0c32ff37d50177bChad Rosier virtual bool isLinkJob() const { return true; } 18247ac7d27c44bd64a7d0fc03d4babc196cf2b8230Daniel Dunbar 18382b51cce8cea6b6bb6175c406c2ab425c91d9dc8Daniel Dunbar virtual void RenderExtraToolArgs(const JobAction &JA, 184dd0b3c4c72464af92e2c27dd5a67e29f91ba7b28Reid Kleckner llvm::opt::ArgStringList &CmdArgs) const; 1859c073ff462eb75ccbb1c4446e21c148f3fc618e1Daniel Dunbar }; 18631b1e5437e7435879fc044afb77ff27096008e72Daniel Dunbar} // end namespace gcc 1879c073ff462eb75ccbb1c4446e21c148f3fc618e1Daniel Dunbar 1889631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicumnamespace hexagon { 1899631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum // For Hexagon, we do not need to instantiate tools for PreProcess, PreCompile and Compile. 1909631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum // We simply use "clang -cc1" for those actions. 1919631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum class LLVM_LIBRARY_VISIBILITY Assemble : public Tool { 1929631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum public: 1939631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum Assemble(const ToolChain &TC) : Tool("hexagon::Assemble", 1949631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum "hexagon-as", TC) {} 1959631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum 1969631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum virtual bool hasIntegratedCPP() const { return false; } 1979631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum 1989631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum virtual void RenderExtraToolArgs(const JobAction &JA, 199dd0b3c4c72464af92e2c27dd5a67e29f91ba7b28Reid Kleckner llvm::opt::ArgStringList &CmdArgs) const; 2009631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum virtual void ConstructJob(Compilation &C, const JobAction &JA, 2019631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum const InputInfo &Output, 2029631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum const InputInfoList &Inputs, 203dd0b3c4c72464af92e2c27dd5a67e29f91ba7b28Reid Kleckner const llvm::opt::ArgList &TCArgs, 2049631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum const char *LinkingOutput) const; 2059631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum }; 2069631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum 2079631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum class LLVM_LIBRARY_VISIBILITY Link : public Tool { 2089631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum public: 2099631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum Link(const ToolChain &TC) : Tool("hexagon::Link", 2109631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum "hexagon-ld", TC) {} 2119631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum 2129631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum virtual bool hasIntegratedCPP() const { return false; } 2138ba9a6244c56b19bc2a24de5d0c32ff37d50177bChad Rosier virtual bool isLinkJob() const { return true; } 2149631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum 2159631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum virtual void RenderExtraToolArgs(const JobAction &JA, 216dd0b3c4c72464af92e2c27dd5a67e29f91ba7b28Reid Kleckner llvm::opt::ArgStringList &CmdArgs) const; 2179631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum virtual void ConstructJob(Compilation &C, const JobAction &JA, 2189631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum const InputInfo &Output, 2199631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum const InputInfoList &Inputs, 220dd0b3c4c72464af92e2c27dd5a67e29f91ba7b28Reid Kleckner const llvm::opt::ArgList &TCArgs, 2219631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum const char *LinkingOutput) const; 2229631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum }; 2239631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum} // end namespace hexagon. 2249631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum 2259631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum 226ff7488dc9a766f94daf54d81b03ab9160d0bfd88Daniel Dunbarnamespace darwin { 227cfed8283c3aeb03ddd837411467d19e250068d39Rafael Espindola llvm::Triple::ArchType getArchTypeForDarwinArchName(StringRef Str); 228cfed8283c3aeb03ddd837411467d19e250068d39Rafael Espindola 22992dd1915842410005c68d32c43bb3b3cf5a4a702Duncan Sands class LLVM_LIBRARY_VISIBILITY DarwinTool : public Tool { 23099ba9e3bd70671f3441fb974895f226a83ce0e66David Blaikie virtual void anchor(); 231fbefe6bd6f62a3361813498dc672ab0d6c0d4fd1Daniel Dunbar protected: 232dd0b3c4c72464af92e2c27dd5a67e29f91ba7b28Reid Kleckner void AddDarwinArch(const llvm::opt::ArgList &Args, 233dd0b3c4c72464af92e2c27dd5a67e29f91ba7b28Reid Kleckner llvm::opt::ArgStringList &CmdArgs) const; 234fbefe6bd6f62a3361813498dc672ab0d6c0d4fd1Daniel Dunbar 235fbefe6bd6f62a3361813498dc672ab0d6c0d4fd1Daniel Dunbar const toolchains::Darwin &getDarwinToolChain() const { 236fbefe6bd6f62a3361813498dc672ab0d6c0d4fd1Daniel Dunbar return reinterpret_cast<const toolchains::Darwin&>(getToolChain()); 237fbefe6bd6f62a3361813498dc672ab0d6c0d4fd1Daniel Dunbar } 238fbefe6bd6f62a3361813498dc672ab0d6c0d4fd1Daniel Dunbar 239fbefe6bd6f62a3361813498dc672ab0d6c0d4fd1Daniel Dunbar public: 2403038204fd8f6ff22082dd18e4b12ed252b75a5e4Daniel Dunbar DarwinTool(const char *Name, const char *ShortName, 2413038204fd8f6ff22082dd18e4b12ed252b75a5e4Daniel Dunbar const ToolChain &TC) : Tool(Name, ShortName, TC) {} 242fbefe6bd6f62a3361813498dc672ab0d6c0d4fd1Daniel Dunbar }; 243fbefe6bd6f62a3361813498dc672ab0d6c0d4fd1Daniel Dunbar 24492dd1915842410005c68d32c43bb3b3cf5a4a702Duncan Sands class LLVM_LIBRARY_VISIBILITY Assemble : public DarwinTool { 2458cac5f7e1ce63dd77ee0fb4ef68f9fa804f41ea6Daniel Dunbar public: 2463038204fd8f6ff22082dd18e4b12ed252b75a5e4Daniel Dunbar Assemble(const ToolChain &TC) : DarwinTool("darwin::Assemble", 2473038204fd8f6ff22082dd18e4b12ed252b75a5e4Daniel Dunbar "assembler", TC) {} 2488cac5f7e1ce63dd77ee0fb4ef68f9fa804f41ea6Daniel Dunbar 2498cac5f7e1ce63dd77ee0fb4ef68f9fa804f41ea6Daniel Dunbar virtual bool hasIntegratedCPP() const { return false; } 2508cac5f7e1ce63dd77ee0fb4ef68f9fa804f41ea6Daniel Dunbar 2518cac5f7e1ce63dd77ee0fb4ef68f9fa804f41ea6Daniel Dunbar virtual void ConstructJob(Compilation &C, const JobAction &JA, 2521eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump const InputInfo &Output, 2531eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump const InputInfoList &Inputs, 254dd0b3c4c72464af92e2c27dd5a67e29f91ba7b28Reid Kleckner const llvm::opt::ArgList &TCArgs, 25502633b541b04ad5ffc1c70f4c2feeeb13e607057Daniel Dunbar const char *LinkingOutput) const; 25602633b541b04ad5ffc1c70f4c2feeeb13e607057Daniel Dunbar }; 25702633b541b04ad5ffc1c70f4c2feeeb13e607057Daniel Dunbar 25892dd1915842410005c68d32c43bb3b3cf5a4a702Duncan Sands class LLVM_LIBRARY_VISIBILITY Link : public DarwinTool { 2596acf8b4f9418be93a24b493c2f8a7d32c203002dBill Wendling bool NeedsTempPath(const InputInfoList &Inputs) const; 260dd0b3c4c72464af92e2c27dd5a67e29f91ba7b28Reid Kleckner void AddLinkArgs(Compilation &C, const llvm::opt::ArgList &Args, 261dd0b3c4c72464af92e2c27dd5a67e29f91ba7b28Reid Kleckner llvm::opt::ArgStringList &CmdArgs, 262dd0b3c4c72464af92e2c27dd5a67e29f91ba7b28Reid Kleckner const InputInfoList &Inputs) const; 26302633b541b04ad5ffc1c70f4c2feeeb13e607057Daniel Dunbar 26402633b541b04ad5ffc1c70f4c2feeeb13e607057Daniel Dunbar public: 2653038204fd8f6ff22082dd18e4b12ed252b75a5e4Daniel Dunbar Link(const ToolChain &TC) : DarwinTool("darwin::Link", "linker", TC) {} 26602633b541b04ad5ffc1c70f4c2feeeb13e607057Daniel Dunbar 26702633b541b04ad5ffc1c70f4c2feeeb13e607057Daniel Dunbar virtual bool hasIntegratedCPP() const { return false; } 2688ba9a6244c56b19bc2a24de5d0c32ff37d50177bChad Rosier virtual bool isLinkJob() const { return true; } 26902633b541b04ad5ffc1c70f4c2feeeb13e607057Daniel Dunbar 27002633b541b04ad5ffc1c70f4c2feeeb13e607057Daniel Dunbar virtual void ConstructJob(Compilation &C, const JobAction &JA, 2711eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump const InputInfo &Output, 2721eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump const InputInfoList &Inputs, 273dd0b3c4c72464af92e2c27dd5a67e29f91ba7b28Reid Kleckner const llvm::opt::ArgList &TCArgs, 2748cac5f7e1ce63dd77ee0fb4ef68f9fa804f41ea6Daniel Dunbar const char *LinkingOutput) const; 2758cac5f7e1ce63dd77ee0fb4ef68f9fa804f41ea6Daniel Dunbar }; 2768cac5f7e1ce63dd77ee0fb4ef68f9fa804f41ea6Daniel Dunbar 27792dd1915842410005c68d32c43bb3b3cf5a4a702Duncan Sands class LLVM_LIBRARY_VISIBILITY Lipo : public DarwinTool { 278ff7488dc9a766f94daf54d81b03ab9160d0bfd88Daniel Dunbar public: 2793038204fd8f6ff22082dd18e4b12ed252b75a5e4Daniel Dunbar Lipo(const ToolChain &TC) : DarwinTool("darwin::Lipo", "lipo", TC) {} 280ff7488dc9a766f94daf54d81b03ab9160d0bfd88Daniel Dunbar 281ff7488dc9a766f94daf54d81b03ab9160d0bfd88Daniel Dunbar virtual bool hasIntegratedCPP() const { return false; } 282ff7488dc9a766f94daf54d81b03ab9160d0bfd88Daniel Dunbar 283ff7488dc9a766f94daf54d81b03ab9160d0bfd88Daniel Dunbar virtual void ConstructJob(Compilation &C, const JobAction &JA, 2841eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump const InputInfo &Output, 2851eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump const InputInfoList &Inputs, 286dd0b3c4c72464af92e2c27dd5a67e29f91ba7b28Reid Kleckner const llvm::opt::ArgList &TCArgs, 2876e0f25483b1a801cd1155ea89c2b725feab16332Daniel Dunbar const char *LinkingOutput) const; 2886e0f25483b1a801cd1155ea89c2b725feab16332Daniel Dunbar }; 2896e0f25483b1a801cd1155ea89c2b725feab16332Daniel Dunbar 2906e0f25483b1a801cd1155ea89c2b725feab16332Daniel Dunbar class LLVM_LIBRARY_VISIBILITY Dsymutil : public DarwinTool { 2916e0f25483b1a801cd1155ea89c2b725feab16332Daniel Dunbar public: 2926e0f25483b1a801cd1155ea89c2b725feab16332Daniel Dunbar Dsymutil(const ToolChain &TC) : DarwinTool("darwin::Dsymutil", 2936e0f25483b1a801cd1155ea89c2b725feab16332Daniel Dunbar "dsymutil", TC) {} 2946e0f25483b1a801cd1155ea89c2b725feab16332Daniel Dunbar 2956e0f25483b1a801cd1155ea89c2b725feab16332Daniel Dunbar virtual bool hasIntegratedCPP() const { return false; } 29675dbc717c21a662b7836ed34cc4e7da7b8fa33c0Chad Rosier virtual bool isDsymutilJob() const { return true; } 2976e0f25483b1a801cd1155ea89c2b725feab16332Daniel Dunbar 2986e0f25483b1a801cd1155ea89c2b725feab16332Daniel Dunbar virtual void ConstructJob(Compilation &C, const JobAction &JA, 2996e0f25483b1a801cd1155ea89c2b725feab16332Daniel Dunbar const InputInfo &Output, 3006e0f25483b1a801cd1155ea89c2b725feab16332Daniel Dunbar const InputInfoList &Inputs, 301dd0b3c4c72464af92e2c27dd5a67e29f91ba7b28Reid Kleckner const llvm::opt::ArgList &TCArgs, 302f7b8eec37c8c8012fa525c71fb29a58c9f29beefDaniel Dunbar const char *LinkingOutput) const; 303f7b8eec37c8c8012fa525c71fb29a58c9f29beefDaniel Dunbar }; 304f857186fd1995b34185d063a29b11ad4f948519fEric Christopher 305f857186fd1995b34185d063a29b11ad4f948519fEric Christopher class LLVM_LIBRARY_VISIBILITY VerifyDebug : public DarwinTool { 306f857186fd1995b34185d063a29b11ad4f948519fEric Christopher public: 307f857186fd1995b34185d063a29b11ad4f948519fEric Christopher VerifyDebug(const ToolChain &TC) : DarwinTool("darwin::VerifyDebug", 30827e2b983beb8b5a29869639637327725623069a8Eric Christopher "dwarfdump", TC) {} 309f857186fd1995b34185d063a29b11ad4f948519fEric Christopher 310f857186fd1995b34185d063a29b11ad4f948519fEric Christopher virtual bool hasIntegratedCPP() const { return false; } 311f857186fd1995b34185d063a29b11ad4f948519fEric Christopher 312f857186fd1995b34185d063a29b11ad4f948519fEric Christopher virtual void ConstructJob(Compilation &C, const JobAction &JA, 31327e2b983beb8b5a29869639637327725623069a8Eric Christopher const InputInfo &Output, 31427e2b983beb8b5a29869639637327725623069a8Eric Christopher const InputInfoList &Inputs, 315dd0b3c4c72464af92e2c27dd5a67e29f91ba7b28Reid Kleckner const llvm::opt::ArgList &TCArgs, 31627e2b983beb8b5a29869639637327725623069a8Eric Christopher const char *LinkingOutput) const; 317f857186fd1995b34185d063a29b11ad4f948519fEric Christopher }; 318f857186fd1995b34185d063a29b11ad4f948519fEric Christopher 319f7b8eec37c8c8012fa525c71fb29a58c9f29beefDaniel Dunbar} 320f7b8eec37c8c8012fa525c71fb29a58c9f29beefDaniel Dunbar 321f7b8eec37c8c8012fa525c71fb29a58c9f29beefDaniel Dunbar /// openbsd -- Directly call GNU Binutils assembler and linker 322f7b8eec37c8c8012fa525c71fb29a58c9f29beefDaniel Dunbarnamespace openbsd { 32392dd1915842410005c68d32c43bb3b3cf5a4a702Duncan Sands class LLVM_LIBRARY_VISIBILITY Assemble : public Tool { 324f7b8eec37c8c8012fa525c71fb29a58c9f29beefDaniel Dunbar public: 3253038204fd8f6ff22082dd18e4b12ed252b75a5e4Daniel Dunbar Assemble(const ToolChain &TC) : Tool("openbsd::Assemble", "assembler", 3263038204fd8f6ff22082dd18e4b12ed252b75a5e4Daniel Dunbar TC) {} 327f7b8eec37c8c8012fa525c71fb29a58c9f29beefDaniel Dunbar 328f7b8eec37c8c8012fa525c71fb29a58c9f29beefDaniel Dunbar virtual bool hasIntegratedCPP() const { return false; } 329f7b8eec37c8c8012fa525c71fb29a58c9f29beefDaniel Dunbar 330f7b8eec37c8c8012fa525c71fb29a58c9f29beefDaniel Dunbar virtual void ConstructJob(Compilation &C, const JobAction &JA, 3311eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump const InputInfo &Output, 3321eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump const InputInfoList &Inputs, 333dd0b3c4c72464af92e2c27dd5a67e29f91ba7b28Reid Kleckner const llvm::opt::ArgList &TCArgs, 334f7b8eec37c8c8012fa525c71fb29a58c9f29beefDaniel Dunbar const char *LinkingOutput) const; 335f7b8eec37c8c8012fa525c71fb29a58c9f29beefDaniel Dunbar }; 33692dd1915842410005c68d32c43bb3b3cf5a4a702Duncan Sands class LLVM_LIBRARY_VISIBILITY Link : public Tool { 337f7b8eec37c8c8012fa525c71fb29a58c9f29beefDaniel Dunbar public: 3383038204fd8f6ff22082dd18e4b12ed252b75a5e4Daniel Dunbar Link(const ToolChain &TC) : Tool("openbsd::Link", "linker", TC) {} 339f7b8eec37c8c8012fa525c71fb29a58c9f29beefDaniel Dunbar 340f7b8eec37c8c8012fa525c71fb29a58c9f29beefDaniel Dunbar virtual bool hasIntegratedCPP() const { return false; } 3418ba9a6244c56b19bc2a24de5d0c32ff37d50177bChad Rosier virtual bool isLinkJob() const { return true; } 342f7b8eec37c8c8012fa525c71fb29a58c9f29beefDaniel Dunbar 343f7b8eec37c8c8012fa525c71fb29a58c9f29beefDaniel Dunbar virtual void ConstructJob(Compilation &C, const JobAction &JA, 3441eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump const InputInfo &Output, 3451eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump const InputInfoList &Inputs, 346dd0b3c4c72464af92e2c27dd5a67e29f91ba7b28Reid Kleckner const llvm::opt::ArgList &TCArgs, 347ff7488dc9a766f94daf54d81b03ab9160d0bfd88Daniel Dunbar const char *LinkingOutput) const; 348ff7488dc9a766f94daf54d81b03ab9160d0bfd88Daniel Dunbar }; 349e7925a075f110ab21afeae084670a155dea568e3Edward O'Callaghan} // end namespace openbsd 350ff7488dc9a766f94daf54d81b03ab9160d0bfd88Daniel Dunbar 35142f74f21ece01dc8573d5377859d327fbb23b26cEli Friedman /// bitrig -- Directly call GNU Binutils assembler and linker 35242f74f21ece01dc8573d5377859d327fbb23b26cEli Friedmannamespace bitrig { 35342f74f21ece01dc8573d5377859d327fbb23b26cEli Friedman class LLVM_LIBRARY_VISIBILITY Assemble : public Tool { 35442f74f21ece01dc8573d5377859d327fbb23b26cEli Friedman public: 35542f74f21ece01dc8573d5377859d327fbb23b26cEli Friedman Assemble(const ToolChain &TC) : Tool("bitrig::Assemble", "assembler", 35642f74f21ece01dc8573d5377859d327fbb23b26cEli Friedman TC) {} 35742f74f21ece01dc8573d5377859d327fbb23b26cEli Friedman 35842f74f21ece01dc8573d5377859d327fbb23b26cEli Friedman virtual bool hasIntegratedCPP() const { return false; } 35942f74f21ece01dc8573d5377859d327fbb23b26cEli Friedman 36042f74f21ece01dc8573d5377859d327fbb23b26cEli Friedman virtual void ConstructJob(Compilation &C, const JobAction &JA, 36142f74f21ece01dc8573d5377859d327fbb23b26cEli Friedman const InputInfo &Output, 36242f74f21ece01dc8573d5377859d327fbb23b26cEli Friedman const InputInfoList &Inputs, 363dd0b3c4c72464af92e2c27dd5a67e29f91ba7b28Reid Kleckner const llvm::opt::ArgList &TCArgs, 36442f74f21ece01dc8573d5377859d327fbb23b26cEli Friedman const char *LinkingOutput) const; 36542f74f21ece01dc8573d5377859d327fbb23b26cEli Friedman }; 36642f74f21ece01dc8573d5377859d327fbb23b26cEli Friedman class LLVM_LIBRARY_VISIBILITY Link : public Tool { 36742f74f21ece01dc8573d5377859d327fbb23b26cEli Friedman public: 36842f74f21ece01dc8573d5377859d327fbb23b26cEli Friedman Link(const ToolChain &TC) : Tool("bitrig::Link", "linker", TC) {} 36942f74f21ece01dc8573d5377859d327fbb23b26cEli Friedman 37042f74f21ece01dc8573d5377859d327fbb23b26cEli Friedman virtual bool hasIntegratedCPP() const { return false; } 37142f74f21ece01dc8573d5377859d327fbb23b26cEli Friedman virtual bool isLinkJob() const { return true; } 37242f74f21ece01dc8573d5377859d327fbb23b26cEli Friedman 37342f74f21ece01dc8573d5377859d327fbb23b26cEli Friedman virtual void ConstructJob(Compilation &C, const JobAction &JA, 37442f74f21ece01dc8573d5377859d327fbb23b26cEli Friedman const InputInfo &Output, 37542f74f21ece01dc8573d5377859d327fbb23b26cEli Friedman const InputInfoList &Inputs, 376dd0b3c4c72464af92e2c27dd5a67e29f91ba7b28Reid Kleckner const llvm::opt::ArgList &TCArgs, 37742f74f21ece01dc8573d5377859d327fbb23b26cEli Friedman const char *LinkingOutput) const; 37842f74f21ece01dc8573d5377859d327fbb23b26cEli Friedman }; 37942f74f21ece01dc8573d5377859d327fbb23b26cEli Friedman} // end namespace bitrig 38042f74f21ece01dc8573d5377859d327fbb23b26cEli Friedman 38168a31d406c6dc4382c700d1199b062de2aa7e1daDaniel Dunbar /// freebsd -- Directly call GNU Binutils assembler and linker 38268a31d406c6dc4382c700d1199b062de2aa7e1daDaniel Dunbarnamespace freebsd { 38392dd1915842410005c68d32c43bb3b3cf5a4a702Duncan Sands class LLVM_LIBRARY_VISIBILITY Assemble : public Tool { 38468a31d406c6dc4382c700d1199b062de2aa7e1daDaniel Dunbar public: 3853038204fd8f6ff22082dd18e4b12ed252b75a5e4Daniel Dunbar Assemble(const ToolChain &TC) : Tool("freebsd::Assemble", "assembler", 3863038204fd8f6ff22082dd18e4b12ed252b75a5e4Daniel Dunbar TC) {} 38768a31d406c6dc4382c700d1199b062de2aa7e1daDaniel Dunbar 38868a31d406c6dc4382c700d1199b062de2aa7e1daDaniel Dunbar virtual bool hasIntegratedCPP() const { return false; } 38968a31d406c6dc4382c700d1199b062de2aa7e1daDaniel Dunbar 39068a31d406c6dc4382c700d1199b062de2aa7e1daDaniel Dunbar virtual void ConstructJob(Compilation &C, const JobAction &JA, 3911eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump const InputInfo &Output, 3921eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump const InputInfoList &Inputs, 393dd0b3c4c72464af92e2c27dd5a67e29f91ba7b28Reid Kleckner const llvm::opt::ArgList &TCArgs, 39468a31d406c6dc4382c700d1199b062de2aa7e1daDaniel Dunbar const char *LinkingOutput) const; 39568a31d406c6dc4382c700d1199b062de2aa7e1daDaniel Dunbar }; 39692dd1915842410005c68d32c43bb3b3cf5a4a702Duncan Sands class LLVM_LIBRARY_VISIBILITY Link : public Tool { 397008f54a54299eaafdaa940e2bdeaf55935ecd95aDaniel Dunbar public: 3983038204fd8f6ff22082dd18e4b12ed252b75a5e4Daniel Dunbar Link(const ToolChain &TC) : Tool("freebsd::Link", "linker", TC) {} 399008f54a54299eaafdaa940e2bdeaf55935ecd95aDaniel Dunbar 400008f54a54299eaafdaa940e2bdeaf55935ecd95aDaniel Dunbar virtual bool hasIntegratedCPP() const { return false; } 4018ba9a6244c56b19bc2a24de5d0c32ff37d50177bChad Rosier virtual bool isLinkJob() const { return true; } 402008f54a54299eaafdaa940e2bdeaf55935ecd95aDaniel Dunbar 403008f54a54299eaafdaa940e2bdeaf55935ecd95aDaniel Dunbar virtual void ConstructJob(Compilation &C, const JobAction &JA, 4041eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump const InputInfo &Output, 4051eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump const InputInfoList &Inputs, 406dd0b3c4c72464af92e2c27dd5a67e29f91ba7b28Reid Kleckner const llvm::opt::ArgList &TCArgs, 407008f54a54299eaafdaa940e2bdeaf55935ecd95aDaniel Dunbar const char *LinkingOutput) const; 408008f54a54299eaafdaa940e2bdeaf55935ecd95aDaniel Dunbar }; 409e7925a075f110ab21afeae084670a155dea568e3Edward O'Callaghan} // end namespace freebsd 410e7925a075f110ab21afeae084670a155dea568e3Edward O'Callaghan 4118e50a96b387dca7525caa8a6add31420dd82a2cdBenjamin Kramer /// netbsd -- Directly call GNU Binutils assembler and linker 4128e50a96b387dca7525caa8a6add31420dd82a2cdBenjamin Kramernamespace netbsd { 4138e50a96b387dca7525caa8a6add31420dd82a2cdBenjamin Kramer class LLVM_LIBRARY_VISIBILITY Assemble : public Tool { 414182564cd14a2105fff05fd52f5940eff96161d57Joerg Sonnenberger 4158e50a96b387dca7525caa8a6add31420dd82a2cdBenjamin Kramer public: 4161bd91374498ac78e72545f08f4daa6491f9c9d14Joerg Sonnenberger Assemble(const ToolChain &TC) 4171bd91374498ac78e72545f08f4daa6491f9c9d14Joerg Sonnenberger : Tool("netbsd::Assemble", "assembler", TC) {} 4188e50a96b387dca7525caa8a6add31420dd82a2cdBenjamin Kramer 4198e50a96b387dca7525caa8a6add31420dd82a2cdBenjamin Kramer virtual bool hasIntegratedCPP() const { return false; } 4208e50a96b387dca7525caa8a6add31420dd82a2cdBenjamin Kramer 4218e50a96b387dca7525caa8a6add31420dd82a2cdBenjamin Kramer virtual void ConstructJob(Compilation &C, const JobAction &JA, 4228e50a96b387dca7525caa8a6add31420dd82a2cdBenjamin Kramer const InputInfo &Output, 4238e50a96b387dca7525caa8a6add31420dd82a2cdBenjamin Kramer const InputInfoList &Inputs, 424dd0b3c4c72464af92e2c27dd5a67e29f91ba7b28Reid Kleckner const llvm::opt::ArgList &TCArgs, 4258e50a96b387dca7525caa8a6add31420dd82a2cdBenjamin Kramer const char *LinkingOutput) const; 4268e50a96b387dca7525caa8a6add31420dd82a2cdBenjamin Kramer }; 4278e50a96b387dca7525caa8a6add31420dd82a2cdBenjamin Kramer class LLVM_LIBRARY_VISIBILITY Link : public Tool { 428182564cd14a2105fff05fd52f5940eff96161d57Joerg Sonnenberger 4298e50a96b387dca7525caa8a6add31420dd82a2cdBenjamin Kramer public: 4301bd91374498ac78e72545f08f4daa6491f9c9d14Joerg Sonnenberger Link(const ToolChain &TC) 4311bd91374498ac78e72545f08f4daa6491f9c9d14Joerg Sonnenberger : Tool("netbsd::Link", "linker", TC) {} 4328e50a96b387dca7525caa8a6add31420dd82a2cdBenjamin Kramer 4338e50a96b387dca7525caa8a6add31420dd82a2cdBenjamin Kramer virtual bool hasIntegratedCPP() const { return false; } 4348ba9a6244c56b19bc2a24de5d0c32ff37d50177bChad Rosier virtual bool isLinkJob() const { return true; } 4358e50a96b387dca7525caa8a6add31420dd82a2cdBenjamin Kramer 4368e50a96b387dca7525caa8a6add31420dd82a2cdBenjamin Kramer virtual void ConstructJob(Compilation &C, const JobAction &JA, 4378e50a96b387dca7525caa8a6add31420dd82a2cdBenjamin Kramer const InputInfo &Output, 4388e50a96b387dca7525caa8a6add31420dd82a2cdBenjamin Kramer const InputInfoList &Inputs, 439dd0b3c4c72464af92e2c27dd5a67e29f91ba7b28Reid Kleckner const llvm::opt::ArgList &TCArgs, 4408e50a96b387dca7525caa8a6add31420dd82a2cdBenjamin Kramer const char *LinkingOutput) const; 4418e50a96b387dca7525caa8a6add31420dd82a2cdBenjamin Kramer }; 4428e50a96b387dca7525caa8a6add31420dd82a2cdBenjamin Kramer} // end namespace netbsd 4438e50a96b387dca7525caa8a6add31420dd82a2cdBenjamin Kramer 444577bb0a2335295958b3b0f88bc9cdedf6551c17fThomas Schwinge /// Directly call GNU Binutils' assembler and linker. 445577bb0a2335295958b3b0f88bc9cdedf6551c17fThomas Schwingenamespace gnutools { 446ba30bbe4e36a30a274da809a11a42f9cdc168e92Rafael Espindola class LLVM_LIBRARY_VISIBILITY Assemble : public Tool { 447ba30bbe4e36a30a274da809a11a42f9cdc168e92Rafael Espindola public: 448577bb0a2335295958b3b0f88bc9cdedf6551c17fThomas Schwinge Assemble(const ToolChain &TC) : Tool("GNU::Assemble", "assembler", TC) {} 449ba30bbe4e36a30a274da809a11a42f9cdc168e92Rafael Espindola 450ba30bbe4e36a30a274da809a11a42f9cdc168e92Rafael Espindola virtual bool hasIntegratedCPP() const { return false; } 451ba30bbe4e36a30a274da809a11a42f9cdc168e92Rafael Espindola 452ba30bbe4e36a30a274da809a11a42f9cdc168e92Rafael Espindola virtual void ConstructJob(Compilation &C, const JobAction &JA, 453ba30bbe4e36a30a274da809a11a42f9cdc168e92Rafael Espindola const InputInfo &Output, 454ba30bbe4e36a30a274da809a11a42f9cdc168e92Rafael Espindola const InputInfoList &Inputs, 455dd0b3c4c72464af92e2c27dd5a67e29f91ba7b28Reid Kleckner const llvm::opt::ArgList &TCArgs, 456ba30bbe4e36a30a274da809a11a42f9cdc168e92Rafael Espindola const char *LinkingOutput) const; 457ba30bbe4e36a30a274da809a11a42f9cdc168e92Rafael Espindola }; 458c1da981bba867681004004b2d54ec2fdf3c08913Rafael Espindola class LLVM_LIBRARY_VISIBILITY Link : public Tool { 459c1da981bba867681004004b2d54ec2fdf3c08913Rafael Espindola public: 460577bb0a2335295958b3b0f88bc9cdedf6551c17fThomas Schwinge Link(const ToolChain &TC) : Tool("GNU::Link", "linker", TC) {} 461c1da981bba867681004004b2d54ec2fdf3c08913Rafael Espindola 462c1da981bba867681004004b2d54ec2fdf3c08913Rafael Espindola virtual bool hasIntegratedCPP() const { return false; } 4638ba9a6244c56b19bc2a24de5d0c32ff37d50177bChad Rosier virtual bool isLinkJob() const { return true; } 464c1da981bba867681004004b2d54ec2fdf3c08913Rafael Espindola 465c1da981bba867681004004b2d54ec2fdf3c08913Rafael Espindola virtual void ConstructJob(Compilation &C, const JobAction &JA, 466c1da981bba867681004004b2d54ec2fdf3c08913Rafael Espindola const InputInfo &Output, 467c1da981bba867681004004b2d54ec2fdf3c08913Rafael Espindola const InputInfoList &Inputs, 468dd0b3c4c72464af92e2c27dd5a67e29f91ba7b28Reid Kleckner const llvm::opt::ArgList &TCArgs, 469c1da981bba867681004004b2d54ec2fdf3c08913Rafael Espindola const char *LinkingOutput) const; 470c1da981bba867681004004b2d54ec2fdf3c08913Rafael Espindola }; 471ba30bbe4e36a30a274da809a11a42f9cdc168e92Rafael Espindola} 47238e317d6dce161b249508686cc67eb7176958762Chris Lattner /// minix -- Directly call GNU Binutils assembler and linker 47338e317d6dce161b249508686cc67eb7176958762Chris Lattnernamespace minix { 47438e317d6dce161b249508686cc67eb7176958762Chris Lattner class LLVM_LIBRARY_VISIBILITY Assemble : public Tool { 47538e317d6dce161b249508686cc67eb7176958762Chris Lattner public: 47638e317d6dce161b249508686cc67eb7176958762Chris Lattner Assemble(const ToolChain &TC) : Tool("minix::Assemble", "assembler", 47738e317d6dce161b249508686cc67eb7176958762Chris Lattner TC) {} 47838e317d6dce161b249508686cc67eb7176958762Chris Lattner 47938e317d6dce161b249508686cc67eb7176958762Chris Lattner virtual bool hasIntegratedCPP() const { return false; } 48038e317d6dce161b249508686cc67eb7176958762Chris Lattner 48138e317d6dce161b249508686cc67eb7176958762Chris Lattner virtual void ConstructJob(Compilation &C, const JobAction &JA, 48238e317d6dce161b249508686cc67eb7176958762Chris Lattner const InputInfo &Output, 48338e317d6dce161b249508686cc67eb7176958762Chris Lattner const InputInfoList &Inputs, 484dd0b3c4c72464af92e2c27dd5a67e29f91ba7b28Reid Kleckner const llvm::opt::ArgList &TCArgs, 48538e317d6dce161b249508686cc67eb7176958762Chris Lattner const char *LinkingOutput) const; 48638e317d6dce161b249508686cc67eb7176958762Chris Lattner }; 48738e317d6dce161b249508686cc67eb7176958762Chris Lattner class LLVM_LIBRARY_VISIBILITY Link : public Tool { 48838e317d6dce161b249508686cc67eb7176958762Chris Lattner public: 48938e317d6dce161b249508686cc67eb7176958762Chris Lattner Link(const ToolChain &TC) : Tool("minix::Link", "linker", TC) {} 49038e317d6dce161b249508686cc67eb7176958762Chris Lattner 49138e317d6dce161b249508686cc67eb7176958762Chris Lattner virtual bool hasIntegratedCPP() const { return false; } 4928ba9a6244c56b19bc2a24de5d0c32ff37d50177bChad Rosier virtual bool isLinkJob() const { return true; } 49338e317d6dce161b249508686cc67eb7176958762Chris Lattner 49438e317d6dce161b249508686cc67eb7176958762Chris Lattner virtual void ConstructJob(Compilation &C, const JobAction &JA, 49538e317d6dce161b249508686cc67eb7176958762Chris Lattner const InputInfo &Output, 49638e317d6dce161b249508686cc67eb7176958762Chris Lattner const InputInfoList &Inputs, 497dd0b3c4c72464af92e2c27dd5a67e29f91ba7b28Reid Kleckner const llvm::opt::ArgList &TCArgs, 49838e317d6dce161b249508686cc67eb7176958762Chris Lattner const char *LinkingOutput) const; 49938e317d6dce161b249508686cc67eb7176958762Chris Lattner }; 50038e317d6dce161b249508686cc67eb7176958762Chris Lattner} // end namespace minix 50138e317d6dce161b249508686cc67eb7176958762Chris Lattner 50231c4690047f5f362ecf886f1586844b1aef0c4d2David Chisnall /// solaris -- Directly call Solaris assembler and linker 50331c4690047f5f362ecf886f1586844b1aef0c4d2David Chisnallnamespace solaris { 50431c4690047f5f362ecf886f1586844b1aef0c4d2David Chisnall class LLVM_LIBRARY_VISIBILITY Assemble : public Tool { 50531c4690047f5f362ecf886f1586844b1aef0c4d2David Chisnall public: 50631c4690047f5f362ecf886f1586844b1aef0c4d2David Chisnall Assemble(const ToolChain &TC) : Tool("solaris::Assemble", "assembler", 50731c4690047f5f362ecf886f1586844b1aef0c4d2David Chisnall TC) {} 50831c4690047f5f362ecf886f1586844b1aef0c4d2David Chisnall 50931c4690047f5f362ecf886f1586844b1aef0c4d2David Chisnall virtual bool hasIntegratedCPP() const { return false; } 51031c4690047f5f362ecf886f1586844b1aef0c4d2David Chisnall 51131c4690047f5f362ecf886f1586844b1aef0c4d2David Chisnall virtual void ConstructJob(Compilation &C, const JobAction &JA, 51231c4690047f5f362ecf886f1586844b1aef0c4d2David Chisnall const InputInfo &Output, 51331c4690047f5f362ecf886f1586844b1aef0c4d2David Chisnall const InputInfoList &Inputs, 514dd0b3c4c72464af92e2c27dd5a67e29f91ba7b28Reid Kleckner const llvm::opt::ArgList &TCArgs, 51531c4690047f5f362ecf886f1586844b1aef0c4d2David Chisnall const char *LinkingOutput) const; 51631c4690047f5f362ecf886f1586844b1aef0c4d2David Chisnall }; 51731c4690047f5f362ecf886f1586844b1aef0c4d2David Chisnall class LLVM_LIBRARY_VISIBILITY Link : public Tool { 51831c4690047f5f362ecf886f1586844b1aef0c4d2David Chisnall public: 51931c4690047f5f362ecf886f1586844b1aef0c4d2David Chisnall Link(const ToolChain &TC) : Tool("solaris::Link", "linker", TC) {} 52031c4690047f5f362ecf886f1586844b1aef0c4d2David Chisnall 52131c4690047f5f362ecf886f1586844b1aef0c4d2David Chisnall virtual bool hasIntegratedCPP() const { return false; } 5228ba9a6244c56b19bc2a24de5d0c32ff37d50177bChad Rosier virtual bool isLinkJob() const { return true; } 52331c4690047f5f362ecf886f1586844b1aef0c4d2David Chisnall 52431c4690047f5f362ecf886f1586844b1aef0c4d2David Chisnall virtual void ConstructJob(Compilation &C, const JobAction &JA, 52531c4690047f5f362ecf886f1586844b1aef0c4d2David Chisnall const InputInfo &Output, 52631c4690047f5f362ecf886f1586844b1aef0c4d2David Chisnall const InputInfoList &Inputs, 527dd0b3c4c72464af92e2c27dd5a67e29f91ba7b28Reid Kleckner const llvm::opt::ArgList &TCArgs, 52831c4690047f5f362ecf886f1586844b1aef0c4d2David Chisnall const char *LinkingOutput) const; 52931c4690047f5f362ecf886f1586844b1aef0c4d2David Chisnall }; 530badb6cd2007825308208e6c4275ba54e220e4e28David Chisnall} // end namespace solaris 53131c4690047f5f362ecf886f1586844b1aef0c4d2David Chisnall 532e7925a075f110ab21afeae084670a155dea568e3Edward O'Callaghan /// auroraux -- Directly call GNU Binutils assembler and linker 533e7925a075f110ab21afeae084670a155dea568e3Edward O'Callaghannamespace auroraux { 53492dd1915842410005c68d32c43bb3b3cf5a4a702Duncan Sands class LLVM_LIBRARY_VISIBILITY Assemble : public Tool { 535e7925a075f110ab21afeae084670a155dea568e3Edward O'Callaghan public: 5363038204fd8f6ff22082dd18e4b12ed252b75a5e4Daniel Dunbar Assemble(const ToolChain &TC) : Tool("auroraux::Assemble", "assembler", 5373038204fd8f6ff22082dd18e4b12ed252b75a5e4Daniel Dunbar TC) {} 538e7925a075f110ab21afeae084670a155dea568e3Edward O'Callaghan 539e7925a075f110ab21afeae084670a155dea568e3Edward O'Callaghan virtual bool hasIntegratedCPP() const { return false; } 540e7925a075f110ab21afeae084670a155dea568e3Edward O'Callaghan 541e7925a075f110ab21afeae084670a155dea568e3Edward O'Callaghan virtual void ConstructJob(Compilation &C, const JobAction &JA, 5421eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump const InputInfo &Output, 5431eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump const InputInfoList &Inputs, 544dd0b3c4c72464af92e2c27dd5a67e29f91ba7b28Reid Kleckner const llvm::opt::ArgList &TCArgs, 545e7925a075f110ab21afeae084670a155dea568e3Edward O'Callaghan const char *LinkingOutput) const; 546e7925a075f110ab21afeae084670a155dea568e3Edward O'Callaghan }; 54792dd1915842410005c68d32c43bb3b3cf5a4a702Duncan Sands class LLVM_LIBRARY_VISIBILITY Link : public Tool { 548e7925a075f110ab21afeae084670a155dea568e3Edward O'Callaghan public: 5493038204fd8f6ff22082dd18e4b12ed252b75a5e4Daniel Dunbar Link(const ToolChain &TC) : Tool("auroraux::Link", "linker", TC) {} 550e7925a075f110ab21afeae084670a155dea568e3Edward O'Callaghan 551e7925a075f110ab21afeae084670a155dea568e3Edward O'Callaghan virtual bool hasIntegratedCPP() const { return false; } 5528ba9a6244c56b19bc2a24de5d0c32ff37d50177bChad Rosier virtual bool isLinkJob() const { return true; } 553e7925a075f110ab21afeae084670a155dea568e3Edward O'Callaghan 554e7925a075f110ab21afeae084670a155dea568e3Edward O'Callaghan virtual void ConstructJob(Compilation &C, const JobAction &JA, 5551eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump const InputInfo &Output, 5561eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump const InputInfoList &Inputs, 557dd0b3c4c72464af92e2c27dd5a67e29f91ba7b28Reid Kleckner const llvm::opt::ArgList &TCArgs, 558e7925a075f110ab21afeae084670a155dea568e3Edward O'Callaghan const char *LinkingOutput) const; 559e7925a075f110ab21afeae084670a155dea568e3Edward O'Callaghan }; 560e7925a075f110ab21afeae084670a155dea568e3Edward O'Callaghan} // end namespace auroraux 56168a31d406c6dc4382c700d1199b062de2aa7e1daDaniel Dunbar 56211e1b40d759a643086f590f6ffbd9d68360bad46Daniel Dunbar /// dragonfly -- Directly call GNU Binutils assembler and linker 56311e1b40d759a643086f590f6ffbd9d68360bad46Daniel Dunbarnamespace dragonfly { 56492dd1915842410005c68d32c43bb3b3cf5a4a702Duncan Sands class LLVM_LIBRARY_VISIBILITY Assemble : public Tool { 56511e1b40d759a643086f590f6ffbd9d68360bad46Daniel Dunbar public: 5663038204fd8f6ff22082dd18e4b12ed252b75a5e4Daniel Dunbar Assemble(const ToolChain &TC) : Tool("dragonfly::Assemble", "assembler", 5673038204fd8f6ff22082dd18e4b12ed252b75a5e4Daniel Dunbar TC) {} 56811e1b40d759a643086f590f6ffbd9d68360bad46Daniel Dunbar 56911e1b40d759a643086f590f6ffbd9d68360bad46Daniel Dunbar virtual bool hasIntegratedCPP() const { return false; } 57011e1b40d759a643086f590f6ffbd9d68360bad46Daniel Dunbar 57111e1b40d759a643086f590f6ffbd9d68360bad46Daniel Dunbar virtual void ConstructJob(Compilation &C, const JobAction &JA, 5721eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump const InputInfo &Output, 5731eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump const InputInfoList &Inputs, 574dd0b3c4c72464af92e2c27dd5a67e29f91ba7b28Reid Kleckner const llvm::opt::ArgList &TCArgs, 57511e1b40d759a643086f590f6ffbd9d68360bad46Daniel Dunbar const char *LinkingOutput) const; 57611e1b40d759a643086f590f6ffbd9d68360bad46Daniel Dunbar }; 57792dd1915842410005c68d32c43bb3b3cf5a4a702Duncan Sands class LLVM_LIBRARY_VISIBILITY Link : public Tool { 57811e1b40d759a643086f590f6ffbd9d68360bad46Daniel Dunbar public: 5793038204fd8f6ff22082dd18e4b12ed252b75a5e4Daniel Dunbar Link(const ToolChain &TC) : Tool("dragonfly::Link", "linker", TC) {} 58011e1b40d759a643086f590f6ffbd9d68360bad46Daniel Dunbar 58111e1b40d759a643086f590f6ffbd9d68360bad46Daniel Dunbar virtual bool hasIntegratedCPP() const { return false; } 5828ba9a6244c56b19bc2a24de5d0c32ff37d50177bChad Rosier virtual bool isLinkJob() const { return true; } 58311e1b40d759a643086f590f6ffbd9d68360bad46Daniel Dunbar 58411e1b40d759a643086f590f6ffbd9d68360bad46Daniel Dunbar virtual void ConstructJob(Compilation &C, const JobAction &JA, 5851eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump const InputInfo &Output, 5861eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump const InputInfoList &Inputs, 587dd0b3c4c72464af92e2c27dd5a67e29f91ba7b28Reid Kleckner const llvm::opt::ArgList &TCArgs, 58811e1b40d759a643086f590f6ffbd9d68360bad46Daniel Dunbar const char *LinkingOutput) const; 58911e1b40d759a643086f590f6ffbd9d68360bad46Daniel Dunbar }; 590e7925a075f110ab21afeae084670a155dea568e3Edward O'Callaghan} // end namespace dragonfly 59111e1b40d759a643086f590f6ffbd9d68360bad46Daniel Dunbar 592ff58e3610f4e12094def69eb2d6dcb4330378d8fMichael J. Spencer /// Visual studio tools. 593ff58e3610f4e12094def69eb2d6dcb4330378d8fMichael J. Spencernamespace visualstudio { 594c8ba0a0acd30f0b56d08a3a0947f68ac01a40730Hans Wennborg class LLVM_LIBRARY_VISIBILITY Link : public Tool { 595ff58e3610f4e12094def69eb2d6dcb4330378d8fMichael J. Spencer public: 596ff58e3610f4e12094def69eb2d6dcb4330378d8fMichael J. Spencer Link(const ToolChain &TC) : Tool("visualstudio::Link", "linker", TC) {} 597ff58e3610f4e12094def69eb2d6dcb4330378d8fMichael J. Spencer 598ff58e3610f4e12094def69eb2d6dcb4330378d8fMichael J. Spencer virtual bool hasIntegratedCPP() const { return false; } 5998ba9a6244c56b19bc2a24de5d0c32ff37d50177bChad Rosier virtual bool isLinkJob() const { return true; } 600ff58e3610f4e12094def69eb2d6dcb4330378d8fMichael J. Spencer 601ff58e3610f4e12094def69eb2d6dcb4330378d8fMichael J. Spencer virtual void ConstructJob(Compilation &C, const JobAction &JA, 602ff58e3610f4e12094def69eb2d6dcb4330378d8fMichael J. Spencer const InputInfo &Output, 603ff58e3610f4e12094def69eb2d6dcb4330378d8fMichael J. Spencer const InputInfoList &Inputs, 604dd0b3c4c72464af92e2c27dd5a67e29f91ba7b28Reid Kleckner const llvm::opt::ArgList &TCArgs, 605ff58e3610f4e12094def69eb2d6dcb4330378d8fMichael J. Spencer const char *LinkingOutput) const; 606ff58e3610f4e12094def69eb2d6dcb4330378d8fMichael J. Spencer }; 607c8ba0a0acd30f0b56d08a3a0947f68ac01a40730Hans Wennborg 608c8ba0a0acd30f0b56d08a3a0947f68ac01a40730Hans Wennborg class LLVM_LIBRARY_VISIBILITY Compile : public Tool { 609c8ba0a0acd30f0b56d08a3a0947f68ac01a40730Hans Wennborg public: 610c8ba0a0acd30f0b56d08a3a0947f68ac01a40730Hans Wennborg Compile(const ToolChain &TC) : Tool("visualstudio::Compile", "compiler", TC) {} 611c8ba0a0acd30f0b56d08a3a0947f68ac01a40730Hans Wennborg 612c8ba0a0acd30f0b56d08a3a0947f68ac01a40730Hans Wennborg virtual bool hasIntegratedAssembler() const { return true; } 613c8ba0a0acd30f0b56d08a3a0947f68ac01a40730Hans Wennborg virtual bool hasIntegratedCPP() const { return true; } 614c8ba0a0acd30f0b56d08a3a0947f68ac01a40730Hans Wennborg virtual bool isLinkJob() const { return false; } 615c8ba0a0acd30f0b56d08a3a0947f68ac01a40730Hans Wennborg 616c8ba0a0acd30f0b56d08a3a0947f68ac01a40730Hans Wennborg virtual void ConstructJob(Compilation &C, const JobAction &JA, 617c8ba0a0acd30f0b56d08a3a0947f68ac01a40730Hans Wennborg const InputInfo &Output, 618c8ba0a0acd30f0b56d08a3a0947f68ac01a40730Hans Wennborg const InputInfoList &Inputs, 619c8ba0a0acd30f0b56d08a3a0947f68ac01a40730Hans Wennborg const llvm::opt::ArgList &TCArgs, 620c8ba0a0acd30f0b56d08a3a0947f68ac01a40730Hans Wennborg const char *LinkingOutput) const; 621c8ba0a0acd30f0b56d08a3a0947f68ac01a40730Hans Wennborg 622c8ba0a0acd30f0b56d08a3a0947f68ac01a40730Hans Wennborg Command *GetCommand(Compilation &C, const JobAction &JA, 623c8ba0a0acd30f0b56d08a3a0947f68ac01a40730Hans Wennborg const InputInfo &Output, 624c8ba0a0acd30f0b56d08a3a0947f68ac01a40730Hans Wennborg const InputInfoList &Inputs, 625c8ba0a0acd30f0b56d08a3a0947f68ac01a40730Hans Wennborg const llvm::opt::ArgList &TCArgs, 626c8ba0a0acd30f0b56d08a3a0947f68ac01a40730Hans Wennborg const char *LinkingOutput) const; 627c8ba0a0acd30f0b56d08a3a0947f68ac01a40730Hans Wennborg }; 628ff58e3610f4e12094def69eb2d6dcb4330378d8fMichael J. Spencer} // end namespace visualstudio 629ff58e3610f4e12094def69eb2d6dcb4330378d8fMichael J. Spencer 6304e490e271ce3f0d4289b5115e000b55333c1b829Robert Lyttonnamespace XCore { 6314e490e271ce3f0d4289b5115e000b55333c1b829Robert Lytton // For XCore, we do not need to instantiate tools for PreProcess, PreCompile and Compile. 6324e490e271ce3f0d4289b5115e000b55333c1b829Robert Lytton // We simply use "clang -cc1" for those actions. 6334e490e271ce3f0d4289b5115e000b55333c1b829Robert Lytton class LLVM_LIBRARY_VISIBILITY Assemble : public Tool { 6344e490e271ce3f0d4289b5115e000b55333c1b829Robert Lytton public: 6354e490e271ce3f0d4289b5115e000b55333c1b829Robert Lytton Assemble(const ToolChain &TC) : Tool("XCore::Assemble", 6364e490e271ce3f0d4289b5115e000b55333c1b829Robert Lytton "XCore-as", TC) {} 6374e490e271ce3f0d4289b5115e000b55333c1b829Robert Lytton 6384e490e271ce3f0d4289b5115e000b55333c1b829Robert Lytton virtual bool hasIntegratedCPP() const { return false; } 6394e490e271ce3f0d4289b5115e000b55333c1b829Robert Lytton virtual void ConstructJob(Compilation &C, const JobAction &JA, 6404e490e271ce3f0d4289b5115e000b55333c1b829Robert Lytton const InputInfo &Output, 6414e490e271ce3f0d4289b5115e000b55333c1b829Robert Lytton const InputInfoList &Inputs, 6424e490e271ce3f0d4289b5115e000b55333c1b829Robert Lytton const llvm::opt::ArgList &TCArgs, 6434e490e271ce3f0d4289b5115e000b55333c1b829Robert Lytton const char *LinkingOutput) const; 6444e490e271ce3f0d4289b5115e000b55333c1b829Robert Lytton }; 6454e490e271ce3f0d4289b5115e000b55333c1b829Robert Lytton 6464e490e271ce3f0d4289b5115e000b55333c1b829Robert Lytton class LLVM_LIBRARY_VISIBILITY Link : public Tool { 6474e490e271ce3f0d4289b5115e000b55333c1b829Robert Lytton public: 6484e490e271ce3f0d4289b5115e000b55333c1b829Robert Lytton Link(const ToolChain &TC) : Tool("XCore::Link", 6494e490e271ce3f0d4289b5115e000b55333c1b829Robert Lytton "XCore-ld", TC) {} 6504e490e271ce3f0d4289b5115e000b55333c1b829Robert Lytton 6514e490e271ce3f0d4289b5115e000b55333c1b829Robert Lytton virtual bool hasIntegratedCPP() const { return false; } 6524e490e271ce3f0d4289b5115e000b55333c1b829Robert Lytton virtual bool isLinkJob() const { return true; } 6534e490e271ce3f0d4289b5115e000b55333c1b829Robert Lytton virtual void ConstructJob(Compilation &C, const JobAction &JA, 6544e490e271ce3f0d4289b5115e000b55333c1b829Robert Lytton const InputInfo &Output, 6554e490e271ce3f0d4289b5115e000b55333c1b829Robert Lytton const InputInfoList &Inputs, 6564e490e271ce3f0d4289b5115e000b55333c1b829Robert Lytton const llvm::opt::ArgList &TCArgs, 6574e490e271ce3f0d4289b5115e000b55333c1b829Robert Lytton const char *LinkingOutput) const; 6584e490e271ce3f0d4289b5115e000b55333c1b829Robert Lytton }; 6594e490e271ce3f0d4289b5115e000b55333c1b829Robert Lytton} // end namespace XCore. 6604e490e271ce3f0d4289b5115e000b55333c1b829Robert Lytton 6614e490e271ce3f0d4289b5115e000b55333c1b829Robert Lytton 6629c073ff462eb75ccbb1c4446e21c148f3fc618e1Daniel Dunbar} // end namespace toolchains 6639c073ff462eb75ccbb1c4446e21c148f3fc618e1Daniel Dunbar} // end namespace driver 6649c073ff462eb75ccbb1c4446e21c148f3fc618e1Daniel Dunbar} // end namespace clang 6659c073ff462eb75ccbb1c4446e21c148f3fc618e1Daniel Dunbar 666e7925a075f110ab21afeae084670a155dea568e3Edward O'Callaghan#endif // CLANG_LIB_DRIVER_TOOLS_H_ 667