Tools.h revision 54db68bf0e389b8aabe1a434f825a81a9c1f7db8
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" 169c073ff462eb75ccbb1c4446e21c148f3fc618e1Daniel Dunbar 17182564cd14a2105fff05fd52f5940eff96161d57Joerg Sonnenberger#include "llvm/ADT/Triple.h" 189c073ff462eb75ccbb1c4446e21c148f3fc618e1Daniel Dunbar#include "llvm/Support/Compiler.h" 199c073ff462eb75ccbb1c4446e21c148f3fc618e1Daniel Dunbar 209c073ff462eb75ccbb1c4446e21c148f3fc618e1Daniel Dunbarnamespace clang { 219c073ff462eb75ccbb1c4446e21c148f3fc618e1Daniel Dunbarnamespace driver { 22df91ef3d6c55692a0236f67b6c6b134a3bf84098Douglas Gregor class Driver; 23df91ef3d6c55692a0236f67b6c6b134a3bf84098Douglas Gregor 2402633b541b04ad5ffc1c70f4c2feeeb13e607057Daniel Dunbarnamespace toolchains { 25f395528158379e7ea9f6ff4bbb791abadca15aabDaniel Dunbar class Darwin; 2602633b541b04ad5ffc1c70f4c2feeeb13e607057Daniel Dunbar} 2702633b541b04ad5ffc1c70f4c2feeeb13e607057Daniel Dunbar 28985b825eea7387be10478de0430815ed6a673326Daniel Dunbarnamespace tools { 299c073ff462eb75ccbb1c4446e21c148f3fc618e1Daniel Dunbar 3020a9aa50f9a7d4b03f97bc67e96da1d605c309a2Daniel Dunbar /// \brief Clang compiler tool. 3192dd1915842410005c68d32c43bb3b3cf5a4a702Duncan Sands class LLVM_LIBRARY_VISIBILITY Clang : public Tool { 3254db68bf0e389b8aabe1a434f825a81a9c1f7db8Peter Collingbourne void AddPreprocessingOptions(Compilation &C, 3354db68bf0e389b8aabe1a434f825a81a9c1f7db8Peter Collingbourne const Driver &D, 34df91ef3d6c55692a0236f67b6c6b134a3bf84098Douglas Gregor const ArgList &Args, 35c21c485b4fb58ef5d55cf3e523263dd824a2ace4Daniel Dunbar ArgStringList &CmdArgs, 36c21c485b4fb58ef5d55cf3e523263dd824a2ace4Daniel Dunbar const InputInfo &Output, 37c21c485b4fb58ef5d55cf3e523263dd824a2ace4Daniel Dunbar const InputInfoList &Inputs) const; 38c21c485b4fb58ef5d55cf3e523263dd824a2ace4Daniel Dunbar 39fa41d6975058ceb1b8a24564f6dcec72f89f62e8Daniel Dunbar void AddARMTargetArgs(const ArgList &Args, ArgStringList &CmdArgs, 40fa41d6975058ceb1b8a24564f6dcec72f89f62e8Daniel Dunbar bool KernelOrKext) const; 41ed734737d5af31906e30e537d4a41c760ddcfc59Eric Christopher void AddMIPSTargetArgs(const ArgList &Args, ArgStringList &CmdArgs) const; 429284d215022457ba867080a713f08f026d89ea17Bruno Cardoso Lopes void AddSparcTargetArgs(const ArgList &Args, ArgStringList &CmdArgs) const; 436acda16e9c194dcbd0dea64341e182bdb65d0f41Daniel Dunbar void AddX86TargetArgs(const ArgList &Args, ArgStringList &CmdArgs) const; 446acda16e9c194dcbd0dea64341e182bdb65d0f41Daniel Dunbar 459c073ff462eb75ccbb1c4446e21c148f3fc618e1Daniel Dunbar public: 463038204fd8f6ff22082dd18e4b12ed252b75a5e4Daniel Dunbar Clang(const ToolChain &TC) : Tool("clang", "clang frontend", TC) {} 479c073ff462eb75ccbb1c4446e21c148f3fc618e1Daniel Dunbar 4860a53f24b160724de0e8dd0e142009981540fd26Daniel Dunbar virtual bool hasGoodDiagnostics() const { return true; } 498767cbc475ed96397b6f08617814eeb9cab121bdDaniel Dunbar virtual bool hasIntegratedAssembler() const { return true; } 509c073ff462eb75ccbb1c4446e21c148f3fc618e1Daniel Dunbar virtual bool hasIntegratedCPP() const { return true; } 5147ac7d27c44bd64a7d0fc03d4babc196cf2b8230Daniel Dunbar 5247ac7d27c44bd64a7d0fc03d4babc196cf2b8230Daniel Dunbar virtual void ConstructJob(Compilation &C, const JobAction &JA, 5320a9aa50f9a7d4b03f97bc67e96da1d605c309a2Daniel Dunbar const InputInfo &Output, 5420a9aa50f9a7d4b03f97bc67e96da1d605c309a2Daniel Dunbar const InputInfoList &Inputs, 5520a9aa50f9a7d4b03f97bc67e96da1d605c309a2Daniel Dunbar const ArgList &TCArgs, 5620a9aa50f9a7d4b03f97bc67e96da1d605c309a2Daniel Dunbar const char *LinkingOutput) const; 5720a9aa50f9a7d4b03f97bc67e96da1d605c309a2Daniel Dunbar }; 5820a9aa50f9a7d4b03f97bc67e96da1d605c309a2Daniel Dunbar 5920a9aa50f9a7d4b03f97bc67e96da1d605c309a2Daniel Dunbar /// \brief Clang integrated assembler tool. 6020a9aa50f9a7d4b03f97bc67e96da1d605c309a2Daniel Dunbar class LLVM_LIBRARY_VISIBILITY ClangAs : public Tool { 6120a9aa50f9a7d4b03f97bc67e96da1d605c309a2Daniel Dunbar public: 623038204fd8f6ff22082dd18e4b12ed252b75a5e4Daniel Dunbar ClangAs(const ToolChain &TC) : Tool("clang::as", 633038204fd8f6ff22082dd18e4b12ed252b75a5e4Daniel Dunbar "clang integrated assembler", TC) {} 6420a9aa50f9a7d4b03f97bc67e96da1d605c309a2Daniel Dunbar 6520a9aa50f9a7d4b03f97bc67e96da1d605c309a2Daniel Dunbar virtual bool hasGoodDiagnostics() const { return true; } 6620a9aa50f9a7d4b03f97bc67e96da1d605c309a2Daniel Dunbar virtual bool hasIntegratedAssembler() const { return false; } 6720a9aa50f9a7d4b03f97bc67e96da1d605c309a2Daniel Dunbar virtual bool hasIntegratedCPP() const { return false; } 6820a9aa50f9a7d4b03f97bc67e96da1d605c309a2Daniel Dunbar 6920a9aa50f9a7d4b03f97bc67e96da1d605c309a2Daniel Dunbar virtual void ConstructJob(Compilation &C, const JobAction &JA, 701eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump const InputInfo &Output, 711eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump const InputInfoList &Inputs, 721eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump const ArgList &TCArgs, 7347ac7d27c44bd64a7d0fc03d4babc196cf2b8230Daniel Dunbar const char *LinkingOutput) const; 749c073ff462eb75ccbb1c4446e21c148f3fc618e1Daniel Dunbar }; 759c073ff462eb75ccbb1c4446e21c148f3fc618e1Daniel Dunbar 7631b1e5437e7435879fc044afb77ff27096008e72Daniel Dunbar /// gcc - Generic GCC tool implementations. 7731b1e5437e7435879fc044afb77ff27096008e72Daniel Dunbarnamespace gcc { 7892dd1915842410005c68d32c43bb3b3cf5a4a702Duncan Sands class LLVM_LIBRARY_VISIBILITY Common : public Tool { 799c073ff462eb75ccbb1c4446e21c148f3fc618e1Daniel Dunbar public: 803038204fd8f6ff22082dd18e4b12ed252b75a5e4Daniel Dunbar Common(const char *Name, const char *ShortName, 813038204fd8f6ff22082dd18e4b12ed252b75a5e4Daniel Dunbar const ToolChain &TC) : Tool(Name, ShortName, TC) {} 8247ac7d27c44bd64a7d0fc03d4babc196cf2b8230Daniel Dunbar 8347ac7d27c44bd64a7d0fc03d4babc196cf2b8230Daniel Dunbar virtual void ConstructJob(Compilation &C, const JobAction &JA, 841eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump const InputInfo &Output, 851eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump const InputInfoList &Inputs, 861eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump const ArgList &TCArgs, 8747ac7d27c44bd64a7d0fc03d4babc196cf2b8230Daniel Dunbar const char *LinkingOutput) const; 88b488c1dac8e53206f07103d794a62a3f5012c0f4Daniel Dunbar 89b488c1dac8e53206f07103d794a62a3f5012c0f4Daniel Dunbar /// RenderExtraToolArgs - Render any arguments necessary to force 90b488c1dac8e53206f07103d794a62a3f5012c0f4Daniel Dunbar /// the particular tool mode. 9182b51cce8cea6b6bb6175c406c2ab425c91d9dc8Daniel Dunbar virtual void RenderExtraToolArgs(const JobAction &JA, 9282b51cce8cea6b6bb6175c406c2ab425c91d9dc8Daniel Dunbar ArgStringList &CmdArgs) const = 0; 939c073ff462eb75ccbb1c4446e21c148f3fc618e1Daniel Dunbar }; 949c073ff462eb75ccbb1c4446e21c148f3fc618e1Daniel Dunbar 951eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump 9692dd1915842410005c68d32c43bb3b3cf5a4a702Duncan Sands class LLVM_LIBRARY_VISIBILITY Preprocess : public Common { 979c073ff462eb75ccbb1c4446e21c148f3fc618e1Daniel Dunbar public: 983038204fd8f6ff22082dd18e4b12ed252b75a5e4Daniel Dunbar Preprocess(const ToolChain &TC) : Common("gcc::Preprocess", 993038204fd8f6ff22082dd18e4b12ed252b75a5e4Daniel Dunbar "gcc preprocessor", TC) {} 100b488c1dac8e53206f07103d794a62a3f5012c0f4Daniel Dunbar 10160a53f24b160724de0e8dd0e142009981540fd26Daniel Dunbar virtual bool hasGoodDiagnostics() const { return true; } 102b488c1dac8e53206f07103d794a62a3f5012c0f4Daniel Dunbar virtual bool hasIntegratedCPP() const { return false; } 103b488c1dac8e53206f07103d794a62a3f5012c0f4Daniel Dunbar 10482b51cce8cea6b6bb6175c406c2ab425c91d9dc8Daniel Dunbar virtual void RenderExtraToolArgs(const JobAction &JA, 10582b51cce8cea6b6bb6175c406c2ab425c91d9dc8Daniel Dunbar ArgStringList &CmdArgs) const; 106b488c1dac8e53206f07103d794a62a3f5012c0f4Daniel Dunbar }; 107b488c1dac8e53206f07103d794a62a3f5012c0f4Daniel Dunbar 10892dd1915842410005c68d32c43bb3b3cf5a4a702Duncan Sands class LLVM_LIBRARY_VISIBILITY Precompile : public Common { 109b488c1dac8e53206f07103d794a62a3f5012c0f4Daniel Dunbar public: 1103038204fd8f6ff22082dd18e4b12ed252b75a5e4Daniel Dunbar Precompile(const ToolChain &TC) : Common("gcc::Precompile", 1113038204fd8f6ff22082dd18e4b12ed252b75a5e4Daniel Dunbar "gcc precompile", TC) {} 1129c073ff462eb75ccbb1c4446e21c148f3fc618e1Daniel Dunbar 11360a53f24b160724de0e8dd0e142009981540fd26Daniel Dunbar virtual bool hasGoodDiagnostics() const { return true; } 1149c073ff462eb75ccbb1c4446e21c148f3fc618e1Daniel Dunbar virtual bool hasIntegratedCPP() const { return true; } 11547ac7d27c44bd64a7d0fc03d4babc196cf2b8230Daniel Dunbar 11682b51cce8cea6b6bb6175c406c2ab425c91d9dc8Daniel Dunbar virtual void RenderExtraToolArgs(const JobAction &JA, 11782b51cce8cea6b6bb6175c406c2ab425c91d9dc8Daniel Dunbar ArgStringList &CmdArgs) const; 1189c073ff462eb75ccbb1c4446e21c148f3fc618e1Daniel Dunbar }; 1199c073ff462eb75ccbb1c4446e21c148f3fc618e1Daniel Dunbar 12092dd1915842410005c68d32c43bb3b3cf5a4a702Duncan Sands class LLVM_LIBRARY_VISIBILITY Compile : public Common { 1219c073ff462eb75ccbb1c4446e21c148f3fc618e1Daniel Dunbar public: 1223038204fd8f6ff22082dd18e4b12ed252b75a5e4Daniel Dunbar Compile(const ToolChain &TC) : Common("gcc::Compile", 1233038204fd8f6ff22082dd18e4b12ed252b75a5e4Daniel Dunbar "gcc frontend", TC) {} 1249c073ff462eb75ccbb1c4446e21c148f3fc618e1Daniel Dunbar 12560a53f24b160724de0e8dd0e142009981540fd26Daniel Dunbar virtual bool hasGoodDiagnostics() const { return true; } 1269c073ff462eb75ccbb1c4446e21c148f3fc618e1Daniel Dunbar virtual bool hasIntegratedCPP() const { return true; } 12747ac7d27c44bd64a7d0fc03d4babc196cf2b8230Daniel Dunbar 12882b51cce8cea6b6bb6175c406c2ab425c91d9dc8Daniel Dunbar virtual void RenderExtraToolArgs(const JobAction &JA, 12982b51cce8cea6b6bb6175c406c2ab425c91d9dc8Daniel Dunbar ArgStringList &CmdArgs) const; 1309c073ff462eb75ccbb1c4446e21c148f3fc618e1Daniel Dunbar }; 1319c073ff462eb75ccbb1c4446e21c148f3fc618e1Daniel Dunbar 13292dd1915842410005c68d32c43bb3b3cf5a4a702Duncan Sands class LLVM_LIBRARY_VISIBILITY Assemble : public Common { 1339c073ff462eb75ccbb1c4446e21c148f3fc618e1Daniel Dunbar public: 1343038204fd8f6ff22082dd18e4b12ed252b75a5e4Daniel Dunbar Assemble(const ToolChain &TC) : Common("gcc::Assemble", 1353038204fd8f6ff22082dd18e4b12ed252b75a5e4Daniel Dunbar "assembler (via gcc)", TC) {} 1369c073ff462eb75ccbb1c4446e21c148f3fc618e1Daniel Dunbar 1379c073ff462eb75ccbb1c4446e21c148f3fc618e1Daniel Dunbar virtual bool hasIntegratedCPP() const { return false; } 13847ac7d27c44bd64a7d0fc03d4babc196cf2b8230Daniel Dunbar 13982b51cce8cea6b6bb6175c406c2ab425c91d9dc8Daniel Dunbar virtual void RenderExtraToolArgs(const JobAction &JA, 14082b51cce8cea6b6bb6175c406c2ab425c91d9dc8Daniel Dunbar ArgStringList &CmdArgs) const; 1419c073ff462eb75ccbb1c4446e21c148f3fc618e1Daniel Dunbar }; 1429c073ff462eb75ccbb1c4446e21c148f3fc618e1Daniel Dunbar 14392dd1915842410005c68d32c43bb3b3cf5a4a702Duncan Sands class LLVM_LIBRARY_VISIBILITY Link : public Common { 1449c073ff462eb75ccbb1c4446e21c148f3fc618e1Daniel Dunbar public: 1453038204fd8f6ff22082dd18e4b12ed252b75a5e4Daniel Dunbar Link(const ToolChain &TC) : Common("gcc::Link", 1463038204fd8f6ff22082dd18e4b12ed252b75a5e4Daniel Dunbar "linker (via gcc)", TC) {} 1479c073ff462eb75ccbb1c4446e21c148f3fc618e1Daniel Dunbar 1489c073ff462eb75ccbb1c4446e21c148f3fc618e1Daniel Dunbar virtual bool hasIntegratedCPP() const { return false; } 14947ac7d27c44bd64a7d0fc03d4babc196cf2b8230Daniel Dunbar 15082b51cce8cea6b6bb6175c406c2ab425c91d9dc8Daniel Dunbar virtual void RenderExtraToolArgs(const JobAction &JA, 15182b51cce8cea6b6bb6175c406c2ab425c91d9dc8Daniel Dunbar ArgStringList &CmdArgs) const; 1529c073ff462eb75ccbb1c4446e21c148f3fc618e1Daniel Dunbar }; 15331b1e5437e7435879fc044afb77ff27096008e72Daniel Dunbar} // end namespace gcc 1549c073ff462eb75ccbb1c4446e21c148f3fc618e1Daniel Dunbar 155ff7488dc9a766f94daf54d81b03ab9160d0bfd88Daniel Dunbarnamespace darwin { 15692dd1915842410005c68d32c43bb3b3cf5a4a702Duncan Sands class LLVM_LIBRARY_VISIBILITY DarwinTool : public Tool { 157fbefe6bd6f62a3361813498dc672ab0d6c0d4fd1Daniel Dunbar protected: 158fbefe6bd6f62a3361813498dc672ab0d6c0d4fd1Daniel Dunbar void AddDarwinArch(const ArgList &Args, ArgStringList &CmdArgs) const; 159fbefe6bd6f62a3361813498dc672ab0d6c0d4fd1Daniel Dunbar 160fbefe6bd6f62a3361813498dc672ab0d6c0d4fd1Daniel Dunbar const toolchains::Darwin &getDarwinToolChain() const { 161fbefe6bd6f62a3361813498dc672ab0d6c0d4fd1Daniel Dunbar return reinterpret_cast<const toolchains::Darwin&>(getToolChain()); 162fbefe6bd6f62a3361813498dc672ab0d6c0d4fd1Daniel Dunbar } 163fbefe6bd6f62a3361813498dc672ab0d6c0d4fd1Daniel Dunbar 164fbefe6bd6f62a3361813498dc672ab0d6c0d4fd1Daniel Dunbar public: 1653038204fd8f6ff22082dd18e4b12ed252b75a5e4Daniel Dunbar DarwinTool(const char *Name, const char *ShortName, 1663038204fd8f6ff22082dd18e4b12ed252b75a5e4Daniel Dunbar const ToolChain &TC) : Tool(Name, ShortName, TC) {} 167fbefe6bd6f62a3361813498dc672ab0d6c0d4fd1Daniel Dunbar }; 168fbefe6bd6f62a3361813498dc672ab0d6c0d4fd1Daniel Dunbar 16992dd1915842410005c68d32c43bb3b3cf5a4a702Duncan Sands class LLVM_LIBRARY_VISIBILITY CC1 : public DarwinTool { 170a5a7bd0de7b6b80212095195a055a4a43f21d4b2Daniel Dunbar public: 1711eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump static const char *getBaseInputName(const ArgList &Args, 172a5a7bd0de7b6b80212095195a055a4a43f21d4b2Daniel Dunbar const InputInfoList &Input); 1731eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump static const char *getBaseInputStem(const ArgList &Args, 174a5a7bd0de7b6b80212095195a055a4a43f21d4b2Daniel Dunbar const InputInfoList &Input); 1751eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump static const char *getDependencyFileName(const ArgList &Args, 176a5a7bd0de7b6b80212095195a055a4a43f21d4b2Daniel Dunbar const InputInfoList &Inputs); 177a5a7bd0de7b6b80212095195a055a4a43f21d4b2Daniel Dunbar 17840f1265ebd42ece3e7f7917319b56012e8e2bce2Daniel Dunbar protected: 17940f1265ebd42ece3e7f7917319b56012e8e2bce2Daniel Dunbar const char *getCC1Name(types::ID Type) const; 180a3ec60e0cf2a1916f479288998d31bd980b1a306Daniel Dunbar 181a3ec60e0cf2a1916f479288998d31bd980b1a306Daniel Dunbar void AddCC1Args(const ArgList &Args, ArgStringList &CmdArgs) const; 182285f9a284704c07cd50e4597408d5f93518cd7c3Chad Rosier void RemoveCC1UnsupportedArgs(ArgStringList &CmdArgs) const; 18340f1265ebd42ece3e7f7917319b56012e8e2bce2Daniel Dunbar void AddCC1OptionsArgs(const ArgList &Args, ArgStringList &CmdArgs, 18440f1265ebd42ece3e7f7917319b56012e8e2bce2Daniel Dunbar const InputInfoList &Inputs, 185a3ec60e0cf2a1916f479288998d31bd980b1a306Daniel Dunbar const ArgStringList &OutputArgs) const; 18640f1265ebd42ece3e7f7917319b56012e8e2bce2Daniel Dunbar void AddCPPOptionsArgs(const ArgList &Args, ArgStringList &CmdArgs, 18740f1265ebd42ece3e7f7917319b56012e8e2bce2Daniel Dunbar const InputInfoList &Inputs, 188a3ec60e0cf2a1916f479288998d31bd980b1a306Daniel Dunbar const ArgStringList &OutputArgs) const; 1891eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump void AddCPPUniqueOptionsArgs(const ArgList &Args, 190a3ec60e0cf2a1916f479288998d31bd980b1a306Daniel Dunbar ArgStringList &CmdArgs, 191a3ec60e0cf2a1916f479288998d31bd980b1a306Daniel Dunbar const InputInfoList &Inputs) const; 192a3ec60e0cf2a1916f479288998d31bd980b1a306Daniel Dunbar void AddCPPArgs(const ArgList &Args, ArgStringList &CmdArgs) const; 19340f1265ebd42ece3e7f7917319b56012e8e2bce2Daniel Dunbar 19440f1265ebd42ece3e7f7917319b56012e8e2bce2Daniel Dunbar public: 1953038204fd8f6ff22082dd18e4b12ed252b75a5e4Daniel Dunbar CC1(const char *Name, const char *ShortName, 1963038204fd8f6ff22082dd18e4b12ed252b75a5e4Daniel Dunbar const ToolChain &TC) : DarwinTool(Name, ShortName, TC) {} 19740f1265ebd42ece3e7f7917319b56012e8e2bce2Daniel Dunbar 19860a53f24b160724de0e8dd0e142009981540fd26Daniel Dunbar virtual bool hasGoodDiagnostics() const { return true; } 19940f1265ebd42ece3e7f7917319b56012e8e2bce2Daniel Dunbar virtual bool hasIntegratedCPP() const { return true; } 20040f1265ebd42ece3e7f7917319b56012e8e2bce2Daniel Dunbar }; 20140f1265ebd42ece3e7f7917319b56012e8e2bce2Daniel Dunbar 20292dd1915842410005c68d32c43bb3b3cf5a4a702Duncan Sands class LLVM_LIBRARY_VISIBILITY Preprocess : public CC1 { 20340f1265ebd42ece3e7f7917319b56012e8e2bce2Daniel Dunbar public: 2043038204fd8f6ff22082dd18e4b12ed252b75a5e4Daniel Dunbar Preprocess(const ToolChain &TC) : CC1("darwin::Preprocess", 2053038204fd8f6ff22082dd18e4b12ed252b75a5e4Daniel Dunbar "gcc preprocessor", TC) {} 20640f1265ebd42ece3e7f7917319b56012e8e2bce2Daniel Dunbar 20740f1265ebd42ece3e7f7917319b56012e8e2bce2Daniel Dunbar virtual void ConstructJob(Compilation &C, const JobAction &JA, 2081eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump const InputInfo &Output, 2091eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump const InputInfoList &Inputs, 2101eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump const ArgList &TCArgs, 21140f1265ebd42ece3e7f7917319b56012e8e2bce2Daniel Dunbar const char *LinkingOutput) const; 21240f1265ebd42ece3e7f7917319b56012e8e2bce2Daniel Dunbar }; 21340f1265ebd42ece3e7f7917319b56012e8e2bce2Daniel Dunbar 21492dd1915842410005c68d32c43bb3b3cf5a4a702Duncan Sands class LLVM_LIBRARY_VISIBILITY Compile : public CC1 { 21540f1265ebd42ece3e7f7917319b56012e8e2bce2Daniel Dunbar public: 2163038204fd8f6ff22082dd18e4b12ed252b75a5e4Daniel Dunbar Compile(const ToolChain &TC) : CC1("darwin::Compile", "gcc frontend", TC) {} 21740f1265ebd42ece3e7f7917319b56012e8e2bce2Daniel Dunbar 21840f1265ebd42ece3e7f7917319b56012e8e2bce2Daniel Dunbar virtual void ConstructJob(Compilation &C, const JobAction &JA, 2191eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump const InputInfo &Output, 2201eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump const InputInfoList &Inputs, 2211eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump const ArgList &TCArgs, 22240f1265ebd42ece3e7f7917319b56012e8e2bce2Daniel Dunbar const char *LinkingOutput) const; 22340f1265ebd42ece3e7f7917319b56012e8e2bce2Daniel Dunbar }; 22440f1265ebd42ece3e7f7917319b56012e8e2bce2Daniel Dunbar 22592dd1915842410005c68d32c43bb3b3cf5a4a702Duncan Sands class LLVM_LIBRARY_VISIBILITY Assemble : public DarwinTool { 2268cac5f7e1ce63dd77ee0fb4ef68f9fa804f41ea6Daniel Dunbar public: 2273038204fd8f6ff22082dd18e4b12ed252b75a5e4Daniel Dunbar Assemble(const ToolChain &TC) : DarwinTool("darwin::Assemble", 2283038204fd8f6ff22082dd18e4b12ed252b75a5e4Daniel Dunbar "assembler", TC) {} 2298cac5f7e1ce63dd77ee0fb4ef68f9fa804f41ea6Daniel Dunbar 2308cac5f7e1ce63dd77ee0fb4ef68f9fa804f41ea6Daniel Dunbar virtual bool hasIntegratedCPP() const { return false; } 2318cac5f7e1ce63dd77ee0fb4ef68f9fa804f41ea6Daniel Dunbar 2328cac5f7e1ce63dd77ee0fb4ef68f9fa804f41ea6Daniel Dunbar virtual void ConstructJob(Compilation &C, const JobAction &JA, 2331eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump const InputInfo &Output, 2341eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump const InputInfoList &Inputs, 2351eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump const ArgList &TCArgs, 23602633b541b04ad5ffc1c70f4c2feeeb13e607057Daniel Dunbar const char *LinkingOutput) const; 23702633b541b04ad5ffc1c70f4c2feeeb13e607057Daniel Dunbar }; 23802633b541b04ad5ffc1c70f4c2feeeb13e607057Daniel Dunbar 23992dd1915842410005c68d32c43bb3b3cf5a4a702Duncan Sands class LLVM_LIBRARY_VISIBILITY Link : public DarwinTool { 240748de8eda222f087434d8bd703176b316a061341Daniel Dunbar void AddLinkArgs(Compilation &C, const ArgList &Args, 241748de8eda222f087434d8bd703176b316a061341Daniel Dunbar ArgStringList &CmdArgs) const; 24202633b541b04ad5ffc1c70f4c2feeeb13e607057Daniel Dunbar 24302633b541b04ad5ffc1c70f4c2feeeb13e607057Daniel Dunbar public: 2443038204fd8f6ff22082dd18e4b12ed252b75a5e4Daniel Dunbar Link(const ToolChain &TC) : DarwinTool("darwin::Link", "linker", TC) {} 24502633b541b04ad5ffc1c70f4c2feeeb13e607057Daniel Dunbar 24602633b541b04ad5ffc1c70f4c2feeeb13e607057Daniel Dunbar virtual bool hasIntegratedCPP() const { return false; } 24702633b541b04ad5ffc1c70f4c2feeeb13e607057Daniel Dunbar 24802633b541b04ad5ffc1c70f4c2feeeb13e607057Daniel Dunbar virtual void ConstructJob(Compilation &C, const JobAction &JA, 2491eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump const InputInfo &Output, 2501eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump const InputInfoList &Inputs, 2511eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump const ArgList &TCArgs, 2528cac5f7e1ce63dd77ee0fb4ef68f9fa804f41ea6Daniel Dunbar const char *LinkingOutput) const; 2538cac5f7e1ce63dd77ee0fb4ef68f9fa804f41ea6Daniel Dunbar }; 2548cac5f7e1ce63dd77ee0fb4ef68f9fa804f41ea6Daniel Dunbar 25592dd1915842410005c68d32c43bb3b3cf5a4a702Duncan Sands class LLVM_LIBRARY_VISIBILITY Lipo : public DarwinTool { 256ff7488dc9a766f94daf54d81b03ab9160d0bfd88Daniel Dunbar public: 2573038204fd8f6ff22082dd18e4b12ed252b75a5e4Daniel Dunbar Lipo(const ToolChain &TC) : DarwinTool("darwin::Lipo", "lipo", TC) {} 258ff7488dc9a766f94daf54d81b03ab9160d0bfd88Daniel Dunbar 259ff7488dc9a766f94daf54d81b03ab9160d0bfd88Daniel Dunbar virtual bool hasIntegratedCPP() const { return false; } 260ff7488dc9a766f94daf54d81b03ab9160d0bfd88Daniel Dunbar 261ff7488dc9a766f94daf54d81b03ab9160d0bfd88Daniel Dunbar virtual void ConstructJob(Compilation &C, const JobAction &JA, 2621eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump const InputInfo &Output, 2631eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump const InputInfoList &Inputs, 2641eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump const ArgList &TCArgs, 2656e0f25483b1a801cd1155ea89c2b725feab16332Daniel Dunbar const char *LinkingOutput) const; 2666e0f25483b1a801cd1155ea89c2b725feab16332Daniel Dunbar }; 2676e0f25483b1a801cd1155ea89c2b725feab16332Daniel Dunbar 2686e0f25483b1a801cd1155ea89c2b725feab16332Daniel Dunbar class LLVM_LIBRARY_VISIBILITY Dsymutil : public DarwinTool { 2696e0f25483b1a801cd1155ea89c2b725feab16332Daniel Dunbar public: 2706e0f25483b1a801cd1155ea89c2b725feab16332Daniel Dunbar Dsymutil(const ToolChain &TC) : DarwinTool("darwin::Dsymutil", 2716e0f25483b1a801cd1155ea89c2b725feab16332Daniel Dunbar "dsymutil", TC) {} 2726e0f25483b1a801cd1155ea89c2b725feab16332Daniel Dunbar 2736e0f25483b1a801cd1155ea89c2b725feab16332Daniel Dunbar virtual bool hasIntegratedCPP() const { return false; } 2746e0f25483b1a801cd1155ea89c2b725feab16332Daniel Dunbar 2756e0f25483b1a801cd1155ea89c2b725feab16332Daniel Dunbar virtual void ConstructJob(Compilation &C, const JobAction &JA, 2766e0f25483b1a801cd1155ea89c2b725feab16332Daniel Dunbar const InputInfo &Output, 2776e0f25483b1a801cd1155ea89c2b725feab16332Daniel Dunbar const InputInfoList &Inputs, 2786e0f25483b1a801cd1155ea89c2b725feab16332Daniel Dunbar const ArgList &TCArgs, 279f7b8eec37c8c8012fa525c71fb29a58c9f29beefDaniel Dunbar const char *LinkingOutput) const; 280f7b8eec37c8c8012fa525c71fb29a58c9f29beefDaniel Dunbar }; 281f857186fd1995b34185d063a29b11ad4f948519fEric Christopher 282f857186fd1995b34185d063a29b11ad4f948519fEric Christopher class LLVM_LIBRARY_VISIBILITY VerifyDebug : public DarwinTool { 283f857186fd1995b34185d063a29b11ad4f948519fEric Christopher public: 284f857186fd1995b34185d063a29b11ad4f948519fEric Christopher VerifyDebug(const ToolChain &TC) : DarwinTool("darwin::VerifyDebug", 285f857186fd1995b34185d063a29b11ad4f948519fEric Christopher "dwarfdump", TC) {} 286f857186fd1995b34185d063a29b11ad4f948519fEric Christopher 287f857186fd1995b34185d063a29b11ad4f948519fEric Christopher virtual bool hasIntegratedCPP() const { return false; } 288f857186fd1995b34185d063a29b11ad4f948519fEric Christopher 289f857186fd1995b34185d063a29b11ad4f948519fEric Christopher virtual void ConstructJob(Compilation &C, const JobAction &JA, 290f857186fd1995b34185d063a29b11ad4f948519fEric Christopher const InputInfo &Output, 291f857186fd1995b34185d063a29b11ad4f948519fEric Christopher const InputInfoList &Inputs, 292f857186fd1995b34185d063a29b11ad4f948519fEric Christopher const ArgList &TCArgs, 293f857186fd1995b34185d063a29b11ad4f948519fEric Christopher const char *LinkingOutput) const; 294f857186fd1995b34185d063a29b11ad4f948519fEric Christopher }; 295f857186fd1995b34185d063a29b11ad4f948519fEric Christopher 296f7b8eec37c8c8012fa525c71fb29a58c9f29beefDaniel Dunbar} 297f7b8eec37c8c8012fa525c71fb29a58c9f29beefDaniel Dunbar 298f7b8eec37c8c8012fa525c71fb29a58c9f29beefDaniel Dunbar /// openbsd -- Directly call GNU Binutils assembler and linker 299f7b8eec37c8c8012fa525c71fb29a58c9f29beefDaniel Dunbarnamespace openbsd { 30092dd1915842410005c68d32c43bb3b3cf5a4a702Duncan Sands class LLVM_LIBRARY_VISIBILITY Assemble : public Tool { 301f7b8eec37c8c8012fa525c71fb29a58c9f29beefDaniel Dunbar public: 3023038204fd8f6ff22082dd18e4b12ed252b75a5e4Daniel Dunbar Assemble(const ToolChain &TC) : Tool("openbsd::Assemble", "assembler", 3033038204fd8f6ff22082dd18e4b12ed252b75a5e4Daniel Dunbar TC) {} 304f7b8eec37c8c8012fa525c71fb29a58c9f29beefDaniel Dunbar 305f7b8eec37c8c8012fa525c71fb29a58c9f29beefDaniel Dunbar virtual bool hasIntegratedCPP() const { return false; } 306f7b8eec37c8c8012fa525c71fb29a58c9f29beefDaniel Dunbar 307f7b8eec37c8c8012fa525c71fb29a58c9f29beefDaniel Dunbar virtual void ConstructJob(Compilation &C, const JobAction &JA, 3081eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump const InputInfo &Output, 3091eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump const InputInfoList &Inputs, 3101eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump const ArgList &TCArgs, 311f7b8eec37c8c8012fa525c71fb29a58c9f29beefDaniel Dunbar const char *LinkingOutput) const; 312f7b8eec37c8c8012fa525c71fb29a58c9f29beefDaniel Dunbar }; 31392dd1915842410005c68d32c43bb3b3cf5a4a702Duncan Sands class LLVM_LIBRARY_VISIBILITY Link : public Tool { 314f7b8eec37c8c8012fa525c71fb29a58c9f29beefDaniel Dunbar public: 3153038204fd8f6ff22082dd18e4b12ed252b75a5e4Daniel Dunbar Link(const ToolChain &TC) : Tool("openbsd::Link", "linker", TC) {} 316f7b8eec37c8c8012fa525c71fb29a58c9f29beefDaniel Dunbar 317f7b8eec37c8c8012fa525c71fb29a58c9f29beefDaniel Dunbar virtual bool hasIntegratedCPP() const { return false; } 318f7b8eec37c8c8012fa525c71fb29a58c9f29beefDaniel Dunbar 319f7b8eec37c8c8012fa525c71fb29a58c9f29beefDaniel Dunbar virtual void ConstructJob(Compilation &C, const JobAction &JA, 3201eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump const InputInfo &Output, 3211eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump const InputInfoList &Inputs, 3221eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump const ArgList &TCArgs, 323ff7488dc9a766f94daf54d81b03ab9160d0bfd88Daniel Dunbar const char *LinkingOutput) const; 324ff7488dc9a766f94daf54d81b03ab9160d0bfd88Daniel Dunbar }; 325e7925a075f110ab21afeae084670a155dea568e3Edward O'Callaghan} // end namespace openbsd 326ff7488dc9a766f94daf54d81b03ab9160d0bfd88Daniel Dunbar 32768a31d406c6dc4382c700d1199b062de2aa7e1daDaniel Dunbar /// freebsd -- Directly call GNU Binutils assembler and linker 32868a31d406c6dc4382c700d1199b062de2aa7e1daDaniel Dunbarnamespace freebsd { 32992dd1915842410005c68d32c43bb3b3cf5a4a702Duncan Sands class LLVM_LIBRARY_VISIBILITY Assemble : public Tool { 33068a31d406c6dc4382c700d1199b062de2aa7e1daDaniel Dunbar public: 3313038204fd8f6ff22082dd18e4b12ed252b75a5e4Daniel Dunbar Assemble(const ToolChain &TC) : Tool("freebsd::Assemble", "assembler", 3323038204fd8f6ff22082dd18e4b12ed252b75a5e4Daniel Dunbar TC) {} 33368a31d406c6dc4382c700d1199b062de2aa7e1daDaniel Dunbar 33468a31d406c6dc4382c700d1199b062de2aa7e1daDaniel Dunbar virtual bool hasIntegratedCPP() const { return false; } 33568a31d406c6dc4382c700d1199b062de2aa7e1daDaniel Dunbar 33668a31d406c6dc4382c700d1199b062de2aa7e1daDaniel Dunbar virtual void ConstructJob(Compilation &C, const JobAction &JA, 3371eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump const InputInfo &Output, 3381eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump const InputInfoList &Inputs, 3391eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump const ArgList &TCArgs, 34068a31d406c6dc4382c700d1199b062de2aa7e1daDaniel Dunbar const char *LinkingOutput) const; 34168a31d406c6dc4382c700d1199b062de2aa7e1daDaniel Dunbar }; 34292dd1915842410005c68d32c43bb3b3cf5a4a702Duncan Sands class LLVM_LIBRARY_VISIBILITY Link : public Tool { 343008f54a54299eaafdaa940e2bdeaf55935ecd95aDaniel Dunbar public: 3443038204fd8f6ff22082dd18e4b12ed252b75a5e4Daniel Dunbar Link(const ToolChain &TC) : Tool("freebsd::Link", "linker", TC) {} 345008f54a54299eaafdaa940e2bdeaf55935ecd95aDaniel Dunbar 346008f54a54299eaafdaa940e2bdeaf55935ecd95aDaniel Dunbar virtual bool hasIntegratedCPP() const { return false; } 347008f54a54299eaafdaa940e2bdeaf55935ecd95aDaniel Dunbar 348008f54a54299eaafdaa940e2bdeaf55935ecd95aDaniel Dunbar virtual void ConstructJob(Compilation &C, const JobAction &JA, 3491eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump const InputInfo &Output, 3501eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump const InputInfoList &Inputs, 3511eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump const ArgList &TCArgs, 352008f54a54299eaafdaa940e2bdeaf55935ecd95aDaniel Dunbar const char *LinkingOutput) const; 353008f54a54299eaafdaa940e2bdeaf55935ecd95aDaniel Dunbar }; 354e7925a075f110ab21afeae084670a155dea568e3Edward O'Callaghan} // end namespace freebsd 355e7925a075f110ab21afeae084670a155dea568e3Edward O'Callaghan 3568e50a96b387dca7525caa8a6add31420dd82a2cdBenjamin Kramer /// netbsd -- Directly call GNU Binutils assembler and linker 3578e50a96b387dca7525caa8a6add31420dd82a2cdBenjamin Kramernamespace netbsd { 3588e50a96b387dca7525caa8a6add31420dd82a2cdBenjamin Kramer class LLVM_LIBRARY_VISIBILITY Assemble : public Tool { 359182564cd14a2105fff05fd52f5940eff96161d57Joerg Sonnenberger private: 360182564cd14a2105fff05fd52f5940eff96161d57Joerg Sonnenberger const llvm::Triple ToolTriple; 361182564cd14a2105fff05fd52f5940eff96161d57Joerg Sonnenberger 3628e50a96b387dca7525caa8a6add31420dd82a2cdBenjamin Kramer public: 363182564cd14a2105fff05fd52f5940eff96161d57Joerg Sonnenberger Assemble(const ToolChain &TC, const llvm::Triple &ToolTriple) 364182564cd14a2105fff05fd52f5940eff96161d57Joerg Sonnenberger : Tool("netbsd::Assemble", "assembler", TC), ToolTriple(ToolTriple) {} 3658e50a96b387dca7525caa8a6add31420dd82a2cdBenjamin Kramer 3668e50a96b387dca7525caa8a6add31420dd82a2cdBenjamin Kramer virtual bool hasIntegratedCPP() const { return false; } 3678e50a96b387dca7525caa8a6add31420dd82a2cdBenjamin Kramer 3688e50a96b387dca7525caa8a6add31420dd82a2cdBenjamin Kramer virtual void ConstructJob(Compilation &C, const JobAction &JA, 3698e50a96b387dca7525caa8a6add31420dd82a2cdBenjamin Kramer const InputInfo &Output, 3708e50a96b387dca7525caa8a6add31420dd82a2cdBenjamin Kramer const InputInfoList &Inputs, 3718e50a96b387dca7525caa8a6add31420dd82a2cdBenjamin Kramer const ArgList &TCArgs, 3728e50a96b387dca7525caa8a6add31420dd82a2cdBenjamin Kramer const char *LinkingOutput) const; 3738e50a96b387dca7525caa8a6add31420dd82a2cdBenjamin Kramer }; 3748e50a96b387dca7525caa8a6add31420dd82a2cdBenjamin Kramer class LLVM_LIBRARY_VISIBILITY Link : public Tool { 375182564cd14a2105fff05fd52f5940eff96161d57Joerg Sonnenberger private: 376182564cd14a2105fff05fd52f5940eff96161d57Joerg Sonnenberger const llvm::Triple ToolTriple; 377182564cd14a2105fff05fd52f5940eff96161d57Joerg Sonnenberger 3788e50a96b387dca7525caa8a6add31420dd82a2cdBenjamin Kramer public: 379182564cd14a2105fff05fd52f5940eff96161d57Joerg Sonnenberger Link(const ToolChain &TC, const llvm::Triple &ToolTriple) 380468eb7ddd69b5d545139fc46a3b730268c458f38Joerg Sonnenberger : Tool("netbsd::Link", "linker", TC), ToolTriple(ToolTriple) {} 3818e50a96b387dca7525caa8a6add31420dd82a2cdBenjamin Kramer 3828e50a96b387dca7525caa8a6add31420dd82a2cdBenjamin Kramer virtual bool hasIntegratedCPP() const { return false; } 3838e50a96b387dca7525caa8a6add31420dd82a2cdBenjamin Kramer 3848e50a96b387dca7525caa8a6add31420dd82a2cdBenjamin Kramer virtual void ConstructJob(Compilation &C, const JobAction &JA, 3858e50a96b387dca7525caa8a6add31420dd82a2cdBenjamin Kramer const InputInfo &Output, 3868e50a96b387dca7525caa8a6add31420dd82a2cdBenjamin Kramer const InputInfoList &Inputs, 3878e50a96b387dca7525caa8a6add31420dd82a2cdBenjamin Kramer const ArgList &TCArgs, 3888e50a96b387dca7525caa8a6add31420dd82a2cdBenjamin Kramer const char *LinkingOutput) const; 3898e50a96b387dca7525caa8a6add31420dd82a2cdBenjamin Kramer }; 3908e50a96b387dca7525caa8a6add31420dd82a2cdBenjamin Kramer} // end namespace netbsd 3918e50a96b387dca7525caa8a6add31420dd82a2cdBenjamin Kramer 392ba30bbe4e36a30a274da809a11a42f9cdc168e92Rafael Espindola /// linux -- Directly call GNU Binutils assembler and linker 393ba30bbe4e36a30a274da809a11a42f9cdc168e92Rafael Espindolanamespace linuxtools { 394ba30bbe4e36a30a274da809a11a42f9cdc168e92Rafael Espindola class LLVM_LIBRARY_VISIBILITY Assemble : public Tool { 395ba30bbe4e36a30a274da809a11a42f9cdc168e92Rafael Espindola public: 396ba30bbe4e36a30a274da809a11a42f9cdc168e92Rafael Espindola Assemble(const ToolChain &TC) : Tool("linux::Assemble", "assembler", 397ba30bbe4e36a30a274da809a11a42f9cdc168e92Rafael Espindola TC) {} 398ba30bbe4e36a30a274da809a11a42f9cdc168e92Rafael Espindola 399ba30bbe4e36a30a274da809a11a42f9cdc168e92Rafael Espindola virtual bool hasIntegratedCPP() const { return false; } 400ba30bbe4e36a30a274da809a11a42f9cdc168e92Rafael Espindola 401ba30bbe4e36a30a274da809a11a42f9cdc168e92Rafael Espindola virtual void ConstructJob(Compilation &C, const JobAction &JA, 402ba30bbe4e36a30a274da809a11a42f9cdc168e92Rafael Espindola const InputInfo &Output, 403ba30bbe4e36a30a274da809a11a42f9cdc168e92Rafael Espindola const InputInfoList &Inputs, 404ba30bbe4e36a30a274da809a11a42f9cdc168e92Rafael Espindola const ArgList &TCArgs, 405ba30bbe4e36a30a274da809a11a42f9cdc168e92Rafael Espindola const char *LinkingOutput) const; 406ba30bbe4e36a30a274da809a11a42f9cdc168e92Rafael Espindola }; 407c1da981bba867681004004b2d54ec2fdf3c08913Rafael Espindola class LLVM_LIBRARY_VISIBILITY Link : public Tool { 408c1da981bba867681004004b2d54ec2fdf3c08913Rafael Espindola public: 409c1da981bba867681004004b2d54ec2fdf3c08913Rafael Espindola Link(const ToolChain &TC) : Tool("linux::Link", "linker", TC) {} 410c1da981bba867681004004b2d54ec2fdf3c08913Rafael Espindola 411c1da981bba867681004004b2d54ec2fdf3c08913Rafael Espindola virtual bool hasIntegratedCPP() const { return false; } 412c1da981bba867681004004b2d54ec2fdf3c08913Rafael Espindola 413c1da981bba867681004004b2d54ec2fdf3c08913Rafael Espindola virtual void ConstructJob(Compilation &C, const JobAction &JA, 414c1da981bba867681004004b2d54ec2fdf3c08913Rafael Espindola const InputInfo &Output, 415c1da981bba867681004004b2d54ec2fdf3c08913Rafael Espindola const InputInfoList &Inputs, 416c1da981bba867681004004b2d54ec2fdf3c08913Rafael Espindola const ArgList &TCArgs, 417c1da981bba867681004004b2d54ec2fdf3c08913Rafael Espindola const char *LinkingOutput) const; 418c1da981bba867681004004b2d54ec2fdf3c08913Rafael Espindola }; 419ba30bbe4e36a30a274da809a11a42f9cdc168e92Rafael Espindola} 42038e317d6dce161b249508686cc67eb7176958762Chris Lattner /// minix -- Directly call GNU Binutils assembler and linker 42138e317d6dce161b249508686cc67eb7176958762Chris Lattnernamespace minix { 42238e317d6dce161b249508686cc67eb7176958762Chris Lattner class LLVM_LIBRARY_VISIBILITY Assemble : public Tool { 42338e317d6dce161b249508686cc67eb7176958762Chris Lattner public: 42438e317d6dce161b249508686cc67eb7176958762Chris Lattner Assemble(const ToolChain &TC) : Tool("minix::Assemble", "assembler", 42538e317d6dce161b249508686cc67eb7176958762Chris Lattner TC) {} 42638e317d6dce161b249508686cc67eb7176958762Chris Lattner 42738e317d6dce161b249508686cc67eb7176958762Chris Lattner virtual bool hasIntegratedCPP() const { return false; } 42838e317d6dce161b249508686cc67eb7176958762Chris Lattner 42938e317d6dce161b249508686cc67eb7176958762Chris Lattner virtual void ConstructJob(Compilation &C, const JobAction &JA, 43038e317d6dce161b249508686cc67eb7176958762Chris Lattner const InputInfo &Output, 43138e317d6dce161b249508686cc67eb7176958762Chris Lattner const InputInfoList &Inputs, 43238e317d6dce161b249508686cc67eb7176958762Chris Lattner const ArgList &TCArgs, 43338e317d6dce161b249508686cc67eb7176958762Chris Lattner const char *LinkingOutput) const; 43438e317d6dce161b249508686cc67eb7176958762Chris Lattner }; 43538e317d6dce161b249508686cc67eb7176958762Chris Lattner class LLVM_LIBRARY_VISIBILITY Link : public Tool { 43638e317d6dce161b249508686cc67eb7176958762Chris Lattner public: 43738e317d6dce161b249508686cc67eb7176958762Chris Lattner Link(const ToolChain &TC) : Tool("minix::Link", "linker", TC) {} 43838e317d6dce161b249508686cc67eb7176958762Chris Lattner 43938e317d6dce161b249508686cc67eb7176958762Chris Lattner virtual bool hasIntegratedCPP() const { return false; } 44038e317d6dce161b249508686cc67eb7176958762Chris Lattner 44138e317d6dce161b249508686cc67eb7176958762Chris Lattner virtual void ConstructJob(Compilation &C, const JobAction &JA, 44238e317d6dce161b249508686cc67eb7176958762Chris Lattner const InputInfo &Output, 44338e317d6dce161b249508686cc67eb7176958762Chris Lattner const InputInfoList &Inputs, 44438e317d6dce161b249508686cc67eb7176958762Chris Lattner const ArgList &TCArgs, 44538e317d6dce161b249508686cc67eb7176958762Chris Lattner const char *LinkingOutput) const; 44638e317d6dce161b249508686cc67eb7176958762Chris Lattner }; 44738e317d6dce161b249508686cc67eb7176958762Chris Lattner} // end namespace minix 44838e317d6dce161b249508686cc67eb7176958762Chris Lattner 449e7925a075f110ab21afeae084670a155dea568e3Edward O'Callaghan /// auroraux -- Directly call GNU Binutils assembler and linker 450e7925a075f110ab21afeae084670a155dea568e3Edward O'Callaghannamespace auroraux { 45192dd1915842410005c68d32c43bb3b3cf5a4a702Duncan Sands class LLVM_LIBRARY_VISIBILITY Assemble : public Tool { 452e7925a075f110ab21afeae084670a155dea568e3Edward O'Callaghan public: 4533038204fd8f6ff22082dd18e4b12ed252b75a5e4Daniel Dunbar Assemble(const ToolChain &TC) : Tool("auroraux::Assemble", "assembler", 4543038204fd8f6ff22082dd18e4b12ed252b75a5e4Daniel Dunbar TC) {} 455e7925a075f110ab21afeae084670a155dea568e3Edward O'Callaghan 456e7925a075f110ab21afeae084670a155dea568e3Edward O'Callaghan virtual bool hasIntegratedCPP() const { return false; } 457e7925a075f110ab21afeae084670a155dea568e3Edward O'Callaghan 458e7925a075f110ab21afeae084670a155dea568e3Edward O'Callaghan virtual void ConstructJob(Compilation &C, const JobAction &JA, 4591eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump const InputInfo &Output, 4601eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump const InputInfoList &Inputs, 4611eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump const ArgList &TCArgs, 462e7925a075f110ab21afeae084670a155dea568e3Edward O'Callaghan const char *LinkingOutput) const; 463e7925a075f110ab21afeae084670a155dea568e3Edward O'Callaghan }; 46492dd1915842410005c68d32c43bb3b3cf5a4a702Duncan Sands class LLVM_LIBRARY_VISIBILITY Link : public Tool { 465e7925a075f110ab21afeae084670a155dea568e3Edward O'Callaghan public: 4663038204fd8f6ff22082dd18e4b12ed252b75a5e4Daniel Dunbar Link(const ToolChain &TC) : Tool("auroraux::Link", "linker", TC) {} 467e7925a075f110ab21afeae084670a155dea568e3Edward O'Callaghan 468e7925a075f110ab21afeae084670a155dea568e3Edward O'Callaghan virtual bool hasIntegratedCPP() const { return false; } 469e7925a075f110ab21afeae084670a155dea568e3Edward O'Callaghan 470e7925a075f110ab21afeae084670a155dea568e3Edward O'Callaghan virtual void ConstructJob(Compilation &C, const JobAction &JA, 4711eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump const InputInfo &Output, 4721eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump const InputInfoList &Inputs, 4731eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump const ArgList &TCArgs, 474e7925a075f110ab21afeae084670a155dea568e3Edward O'Callaghan const char *LinkingOutput) const; 475e7925a075f110ab21afeae084670a155dea568e3Edward O'Callaghan }; 476e7925a075f110ab21afeae084670a155dea568e3Edward O'Callaghan} // end namespace auroraux 47768a31d406c6dc4382c700d1199b062de2aa7e1daDaniel Dunbar 47811e1b40d759a643086f590f6ffbd9d68360bad46Daniel Dunbar /// dragonfly -- Directly call GNU Binutils assembler and linker 47911e1b40d759a643086f590f6ffbd9d68360bad46Daniel Dunbarnamespace dragonfly { 48092dd1915842410005c68d32c43bb3b3cf5a4a702Duncan Sands class LLVM_LIBRARY_VISIBILITY Assemble : public Tool { 48111e1b40d759a643086f590f6ffbd9d68360bad46Daniel Dunbar public: 4823038204fd8f6ff22082dd18e4b12ed252b75a5e4Daniel Dunbar Assemble(const ToolChain &TC) : Tool("dragonfly::Assemble", "assembler", 4833038204fd8f6ff22082dd18e4b12ed252b75a5e4Daniel Dunbar TC) {} 48411e1b40d759a643086f590f6ffbd9d68360bad46Daniel Dunbar 48511e1b40d759a643086f590f6ffbd9d68360bad46Daniel Dunbar virtual bool hasIntegratedCPP() const { return false; } 48611e1b40d759a643086f590f6ffbd9d68360bad46Daniel Dunbar 48711e1b40d759a643086f590f6ffbd9d68360bad46Daniel Dunbar virtual void ConstructJob(Compilation &C, const JobAction &JA, 4881eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump const InputInfo &Output, 4891eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump const InputInfoList &Inputs, 4901eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump const ArgList &TCArgs, 49111e1b40d759a643086f590f6ffbd9d68360bad46Daniel Dunbar const char *LinkingOutput) const; 49211e1b40d759a643086f590f6ffbd9d68360bad46Daniel Dunbar }; 49392dd1915842410005c68d32c43bb3b3cf5a4a702Duncan Sands class LLVM_LIBRARY_VISIBILITY Link : public Tool { 49411e1b40d759a643086f590f6ffbd9d68360bad46Daniel Dunbar public: 4953038204fd8f6ff22082dd18e4b12ed252b75a5e4Daniel Dunbar Link(const ToolChain &TC) : Tool("dragonfly::Link", "linker", TC) {} 49611e1b40d759a643086f590f6ffbd9d68360bad46Daniel Dunbar 49711e1b40d759a643086f590f6ffbd9d68360bad46Daniel Dunbar virtual bool hasIntegratedCPP() const { return false; } 49811e1b40d759a643086f590f6ffbd9d68360bad46Daniel Dunbar 49911e1b40d759a643086f590f6ffbd9d68360bad46Daniel Dunbar virtual void ConstructJob(Compilation &C, const JobAction &JA, 5001eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump const InputInfo &Output, 5011eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump const InputInfoList &Inputs, 5021eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump const ArgList &TCArgs, 50311e1b40d759a643086f590f6ffbd9d68360bad46Daniel Dunbar const char *LinkingOutput) const; 50411e1b40d759a643086f590f6ffbd9d68360bad46Daniel Dunbar }; 505e7925a075f110ab21afeae084670a155dea568e3Edward O'Callaghan} // end namespace dragonfly 50611e1b40d759a643086f590f6ffbd9d68360bad46Daniel Dunbar 507ff58e3610f4e12094def69eb2d6dcb4330378d8fMichael J. Spencer /// Visual studio tools. 508ff58e3610f4e12094def69eb2d6dcb4330378d8fMichael J. Spencernamespace visualstudio { 509ff58e3610f4e12094def69eb2d6dcb4330378d8fMichael J. Spencer class LLVM_LIBRARY_VISIBILITY Link : public Tool { 510ff58e3610f4e12094def69eb2d6dcb4330378d8fMichael J. Spencer public: 511ff58e3610f4e12094def69eb2d6dcb4330378d8fMichael J. Spencer Link(const ToolChain &TC) : Tool("visualstudio::Link", "linker", TC) {} 512ff58e3610f4e12094def69eb2d6dcb4330378d8fMichael J. Spencer 513ff58e3610f4e12094def69eb2d6dcb4330378d8fMichael J. Spencer virtual bool hasIntegratedCPP() const { return false; } 514ff58e3610f4e12094def69eb2d6dcb4330378d8fMichael J. Spencer 515ff58e3610f4e12094def69eb2d6dcb4330378d8fMichael J. Spencer virtual void ConstructJob(Compilation &C, const JobAction &JA, 516ff58e3610f4e12094def69eb2d6dcb4330378d8fMichael J. Spencer const InputInfo &Output, 517ff58e3610f4e12094def69eb2d6dcb4330378d8fMichael J. Spencer const InputInfoList &Inputs, 518ff58e3610f4e12094def69eb2d6dcb4330378d8fMichael J. Spencer const ArgList &TCArgs, 519ff58e3610f4e12094def69eb2d6dcb4330378d8fMichael J. Spencer const char *LinkingOutput) const; 520ff58e3610f4e12094def69eb2d6dcb4330378d8fMichael J. Spencer }; 521ff58e3610f4e12094def69eb2d6dcb4330378d8fMichael J. Spencer} // end namespace visualstudio 522ff58e3610f4e12094def69eb2d6dcb4330378d8fMichael J. Spencer 5239c073ff462eb75ccbb1c4446e21c148f3fc618e1Daniel Dunbar} // end namespace toolchains 5249c073ff462eb75ccbb1c4446e21c148f3fc618e1Daniel Dunbar} // end namespace driver 5259c073ff462eb75ccbb1c4446e21c148f3fc618e1Daniel Dunbar} // end namespace clang 5269c073ff462eb75ccbb1c4446e21c148f3fc618e1Daniel Dunbar 527e7925a075f110ab21afeae084670a155dea568e3Edward O'Callaghan#endif // CLANG_LIB_DRIVER_TOOLS_H_ 528