Tools.h revision f857186fd1995b34185d063a29b11ad4f948519f
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 { 32df91ef3d6c55692a0236f67b6c6b134a3bf84098Douglas Gregor void AddPreprocessingOptions(const Driver &D, 33df91ef3d6c55692a0236f67b6c6b134a3bf84098Douglas Gregor const ArgList &Args, 34c21c485b4fb58ef5d55cf3e523263dd824a2ace4Daniel Dunbar ArgStringList &CmdArgs, 35c21c485b4fb58ef5d55cf3e523263dd824a2ace4Daniel Dunbar const InputInfo &Output, 36c21c485b4fb58ef5d55cf3e523263dd824a2ace4Daniel Dunbar const InputInfoList &Inputs) const; 37c21c485b4fb58ef5d55cf3e523263dd824a2ace4Daniel Dunbar 38fa41d6975058ceb1b8a24564f6dcec72f89f62e8Daniel Dunbar void AddARMTargetArgs(const ArgList &Args, ArgStringList &CmdArgs, 39fa41d6975058ceb1b8a24564f6dcec72f89f62e8Daniel Dunbar bool KernelOrKext) const; 40ed734737d5af31906e30e537d4a41c760ddcfc59Eric Christopher void AddMIPSTargetArgs(const ArgList &Args, ArgStringList &CmdArgs) const; 419284d215022457ba867080a713f08f026d89ea17Bruno Cardoso Lopes void AddSparcTargetArgs(const ArgList &Args, ArgStringList &CmdArgs) const; 426acda16e9c194dcbd0dea64341e182bdb65d0f41Daniel Dunbar void AddX86TargetArgs(const ArgList &Args, ArgStringList &CmdArgs) const; 436acda16e9c194dcbd0dea64341e182bdb65d0f41Daniel Dunbar 449c073ff462eb75ccbb1c4446e21c148f3fc618e1Daniel Dunbar public: 453038204fd8f6ff22082dd18e4b12ed252b75a5e4Daniel Dunbar Clang(const ToolChain &TC) : Tool("clang", "clang frontend", TC) {} 469c073ff462eb75ccbb1c4446e21c148f3fc618e1Daniel Dunbar 4760a53f24b160724de0e8dd0e142009981540fd26Daniel Dunbar virtual bool hasGoodDiagnostics() const { return true; } 488767cbc475ed96397b6f08617814eeb9cab121bdDaniel Dunbar virtual bool hasIntegratedAssembler() const { return true; } 499c073ff462eb75ccbb1c4446e21c148f3fc618e1Daniel Dunbar virtual bool hasIntegratedCPP() const { return true; } 5047ac7d27c44bd64a7d0fc03d4babc196cf2b8230Daniel Dunbar 5147ac7d27c44bd64a7d0fc03d4babc196cf2b8230Daniel Dunbar virtual void ConstructJob(Compilation &C, const JobAction &JA, 5220a9aa50f9a7d4b03f97bc67e96da1d605c309a2Daniel Dunbar const InputInfo &Output, 5320a9aa50f9a7d4b03f97bc67e96da1d605c309a2Daniel Dunbar const InputInfoList &Inputs, 5420a9aa50f9a7d4b03f97bc67e96da1d605c309a2Daniel Dunbar const ArgList &TCArgs, 5520a9aa50f9a7d4b03f97bc67e96da1d605c309a2Daniel Dunbar const char *LinkingOutput) const; 5620a9aa50f9a7d4b03f97bc67e96da1d605c309a2Daniel Dunbar }; 5720a9aa50f9a7d4b03f97bc67e96da1d605c309a2Daniel Dunbar 5820a9aa50f9a7d4b03f97bc67e96da1d605c309a2Daniel Dunbar /// \brief Clang integrated assembler tool. 5920a9aa50f9a7d4b03f97bc67e96da1d605c309a2Daniel Dunbar class LLVM_LIBRARY_VISIBILITY ClangAs : public Tool { 6020a9aa50f9a7d4b03f97bc67e96da1d605c309a2Daniel Dunbar public: 613038204fd8f6ff22082dd18e4b12ed252b75a5e4Daniel Dunbar ClangAs(const ToolChain &TC) : Tool("clang::as", 623038204fd8f6ff22082dd18e4b12ed252b75a5e4Daniel Dunbar "clang integrated assembler", TC) {} 6320a9aa50f9a7d4b03f97bc67e96da1d605c309a2Daniel Dunbar 6420a9aa50f9a7d4b03f97bc67e96da1d605c309a2Daniel Dunbar virtual bool hasGoodDiagnostics() const { return true; } 6520a9aa50f9a7d4b03f97bc67e96da1d605c309a2Daniel Dunbar virtual bool hasIntegratedAssembler() const { return false; } 6620a9aa50f9a7d4b03f97bc67e96da1d605c309a2Daniel Dunbar virtual bool hasIntegratedCPP() const { return false; } 6720a9aa50f9a7d4b03f97bc67e96da1d605c309a2Daniel Dunbar 6820a9aa50f9a7d4b03f97bc67e96da1d605c309a2Daniel Dunbar virtual void ConstructJob(Compilation &C, const JobAction &JA, 691eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump const InputInfo &Output, 701eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump const InputInfoList &Inputs, 711eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump const ArgList &TCArgs, 7247ac7d27c44bd64a7d0fc03d4babc196cf2b8230Daniel Dunbar const char *LinkingOutput) const; 739c073ff462eb75ccbb1c4446e21c148f3fc618e1Daniel Dunbar }; 749c073ff462eb75ccbb1c4446e21c148f3fc618e1Daniel Dunbar 7531b1e5437e7435879fc044afb77ff27096008e72Daniel Dunbar /// gcc - Generic GCC tool implementations. 7631b1e5437e7435879fc044afb77ff27096008e72Daniel Dunbarnamespace gcc { 7792dd1915842410005c68d32c43bb3b3cf5a4a702Duncan Sands class LLVM_LIBRARY_VISIBILITY Common : public Tool { 789c073ff462eb75ccbb1c4446e21c148f3fc618e1Daniel Dunbar public: 793038204fd8f6ff22082dd18e4b12ed252b75a5e4Daniel Dunbar Common(const char *Name, const char *ShortName, 803038204fd8f6ff22082dd18e4b12ed252b75a5e4Daniel Dunbar const ToolChain &TC) : Tool(Name, ShortName, TC) {} 8147ac7d27c44bd64a7d0fc03d4babc196cf2b8230Daniel Dunbar 8247ac7d27c44bd64a7d0fc03d4babc196cf2b8230Daniel Dunbar virtual void ConstructJob(Compilation &C, const JobAction &JA, 831eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump const InputInfo &Output, 841eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump const InputInfoList &Inputs, 851eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump const ArgList &TCArgs, 8647ac7d27c44bd64a7d0fc03d4babc196cf2b8230Daniel Dunbar const char *LinkingOutput) const; 87b488c1dac8e53206f07103d794a62a3f5012c0f4Daniel Dunbar 88b488c1dac8e53206f07103d794a62a3f5012c0f4Daniel Dunbar /// RenderExtraToolArgs - Render any arguments necessary to force 89b488c1dac8e53206f07103d794a62a3f5012c0f4Daniel Dunbar /// the particular tool mode. 9082b51cce8cea6b6bb6175c406c2ab425c91d9dc8Daniel Dunbar virtual void RenderExtraToolArgs(const JobAction &JA, 9182b51cce8cea6b6bb6175c406c2ab425c91d9dc8Daniel Dunbar ArgStringList &CmdArgs) const = 0; 929c073ff462eb75ccbb1c4446e21c148f3fc618e1Daniel Dunbar }; 939c073ff462eb75ccbb1c4446e21c148f3fc618e1Daniel Dunbar 941eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump 9592dd1915842410005c68d32c43bb3b3cf5a4a702Duncan Sands class LLVM_LIBRARY_VISIBILITY Preprocess : public Common { 969c073ff462eb75ccbb1c4446e21c148f3fc618e1Daniel Dunbar public: 973038204fd8f6ff22082dd18e4b12ed252b75a5e4Daniel Dunbar Preprocess(const ToolChain &TC) : Common("gcc::Preprocess", 983038204fd8f6ff22082dd18e4b12ed252b75a5e4Daniel Dunbar "gcc preprocessor", TC) {} 99b488c1dac8e53206f07103d794a62a3f5012c0f4Daniel Dunbar 10060a53f24b160724de0e8dd0e142009981540fd26Daniel Dunbar virtual bool hasGoodDiagnostics() const { return true; } 101b488c1dac8e53206f07103d794a62a3f5012c0f4Daniel Dunbar virtual bool hasIntegratedCPP() const { return false; } 102b488c1dac8e53206f07103d794a62a3f5012c0f4Daniel Dunbar 10382b51cce8cea6b6bb6175c406c2ab425c91d9dc8Daniel Dunbar virtual void RenderExtraToolArgs(const JobAction &JA, 10482b51cce8cea6b6bb6175c406c2ab425c91d9dc8Daniel Dunbar ArgStringList &CmdArgs) const; 105b488c1dac8e53206f07103d794a62a3f5012c0f4Daniel Dunbar }; 106b488c1dac8e53206f07103d794a62a3f5012c0f4Daniel Dunbar 10792dd1915842410005c68d32c43bb3b3cf5a4a702Duncan Sands class LLVM_LIBRARY_VISIBILITY Precompile : public Common { 108b488c1dac8e53206f07103d794a62a3f5012c0f4Daniel Dunbar public: 1093038204fd8f6ff22082dd18e4b12ed252b75a5e4Daniel Dunbar Precompile(const ToolChain &TC) : Common("gcc::Precompile", 1103038204fd8f6ff22082dd18e4b12ed252b75a5e4Daniel Dunbar "gcc precompile", TC) {} 1119c073ff462eb75ccbb1c4446e21c148f3fc618e1Daniel Dunbar 11260a53f24b160724de0e8dd0e142009981540fd26Daniel Dunbar virtual bool hasGoodDiagnostics() const { return true; } 1139c073ff462eb75ccbb1c4446e21c148f3fc618e1Daniel Dunbar virtual bool hasIntegratedCPP() const { return true; } 11447ac7d27c44bd64a7d0fc03d4babc196cf2b8230Daniel Dunbar 11582b51cce8cea6b6bb6175c406c2ab425c91d9dc8Daniel Dunbar virtual void RenderExtraToolArgs(const JobAction &JA, 11682b51cce8cea6b6bb6175c406c2ab425c91d9dc8Daniel Dunbar ArgStringList &CmdArgs) const; 1179c073ff462eb75ccbb1c4446e21c148f3fc618e1Daniel Dunbar }; 1189c073ff462eb75ccbb1c4446e21c148f3fc618e1Daniel Dunbar 11992dd1915842410005c68d32c43bb3b3cf5a4a702Duncan Sands class LLVM_LIBRARY_VISIBILITY Compile : public Common { 1209c073ff462eb75ccbb1c4446e21c148f3fc618e1Daniel Dunbar public: 1213038204fd8f6ff22082dd18e4b12ed252b75a5e4Daniel Dunbar Compile(const ToolChain &TC) : Common("gcc::Compile", 1223038204fd8f6ff22082dd18e4b12ed252b75a5e4Daniel Dunbar "gcc frontend", TC) {} 1239c073ff462eb75ccbb1c4446e21c148f3fc618e1Daniel Dunbar 12460a53f24b160724de0e8dd0e142009981540fd26Daniel Dunbar virtual bool hasGoodDiagnostics() const { return true; } 1259c073ff462eb75ccbb1c4446e21c148f3fc618e1Daniel Dunbar virtual bool hasIntegratedCPP() const { return true; } 12647ac7d27c44bd64a7d0fc03d4babc196cf2b8230Daniel Dunbar 12782b51cce8cea6b6bb6175c406c2ab425c91d9dc8Daniel Dunbar virtual void RenderExtraToolArgs(const JobAction &JA, 12882b51cce8cea6b6bb6175c406c2ab425c91d9dc8Daniel Dunbar ArgStringList &CmdArgs) const; 1299c073ff462eb75ccbb1c4446e21c148f3fc618e1Daniel Dunbar }; 1309c073ff462eb75ccbb1c4446e21c148f3fc618e1Daniel Dunbar 13192dd1915842410005c68d32c43bb3b3cf5a4a702Duncan Sands class LLVM_LIBRARY_VISIBILITY Assemble : public Common { 1329c073ff462eb75ccbb1c4446e21c148f3fc618e1Daniel Dunbar public: 1333038204fd8f6ff22082dd18e4b12ed252b75a5e4Daniel Dunbar Assemble(const ToolChain &TC) : Common("gcc::Assemble", 1343038204fd8f6ff22082dd18e4b12ed252b75a5e4Daniel Dunbar "assembler (via gcc)", TC) {} 1359c073ff462eb75ccbb1c4446e21c148f3fc618e1Daniel Dunbar 1369c073ff462eb75ccbb1c4446e21c148f3fc618e1Daniel Dunbar virtual bool hasIntegratedCPP() const { return false; } 13747ac7d27c44bd64a7d0fc03d4babc196cf2b8230Daniel Dunbar 13882b51cce8cea6b6bb6175c406c2ab425c91d9dc8Daniel Dunbar virtual void RenderExtraToolArgs(const JobAction &JA, 13982b51cce8cea6b6bb6175c406c2ab425c91d9dc8Daniel Dunbar ArgStringList &CmdArgs) const; 1409c073ff462eb75ccbb1c4446e21c148f3fc618e1Daniel Dunbar }; 1419c073ff462eb75ccbb1c4446e21c148f3fc618e1Daniel Dunbar 14292dd1915842410005c68d32c43bb3b3cf5a4a702Duncan Sands class LLVM_LIBRARY_VISIBILITY Link : public Common { 1439c073ff462eb75ccbb1c4446e21c148f3fc618e1Daniel Dunbar public: 1443038204fd8f6ff22082dd18e4b12ed252b75a5e4Daniel Dunbar Link(const ToolChain &TC) : Common("gcc::Link", 1453038204fd8f6ff22082dd18e4b12ed252b75a5e4Daniel Dunbar "linker (via gcc)", TC) {} 1469c073ff462eb75ccbb1c4446e21c148f3fc618e1Daniel Dunbar 1479c073ff462eb75ccbb1c4446e21c148f3fc618e1Daniel Dunbar virtual bool hasIntegratedCPP() const { return false; } 14847ac7d27c44bd64a7d0fc03d4babc196cf2b8230Daniel Dunbar 14982b51cce8cea6b6bb6175c406c2ab425c91d9dc8Daniel Dunbar virtual void RenderExtraToolArgs(const JobAction &JA, 15082b51cce8cea6b6bb6175c406c2ab425c91d9dc8Daniel Dunbar ArgStringList &CmdArgs) const; 1519c073ff462eb75ccbb1c4446e21c148f3fc618e1Daniel Dunbar }; 15231b1e5437e7435879fc044afb77ff27096008e72Daniel Dunbar} // end namespace gcc 1539c073ff462eb75ccbb1c4446e21c148f3fc618e1Daniel Dunbar 154ff7488dc9a766f94daf54d81b03ab9160d0bfd88Daniel Dunbarnamespace darwin { 15592dd1915842410005c68d32c43bb3b3cf5a4a702Duncan Sands class LLVM_LIBRARY_VISIBILITY DarwinTool : public Tool { 156fbefe6bd6f62a3361813498dc672ab0d6c0d4fd1Daniel Dunbar protected: 157fbefe6bd6f62a3361813498dc672ab0d6c0d4fd1Daniel Dunbar void AddDarwinArch(const ArgList &Args, ArgStringList &CmdArgs) const; 158fbefe6bd6f62a3361813498dc672ab0d6c0d4fd1Daniel Dunbar 159fbefe6bd6f62a3361813498dc672ab0d6c0d4fd1Daniel Dunbar const toolchains::Darwin &getDarwinToolChain() const { 160fbefe6bd6f62a3361813498dc672ab0d6c0d4fd1Daniel Dunbar return reinterpret_cast<const toolchains::Darwin&>(getToolChain()); 161fbefe6bd6f62a3361813498dc672ab0d6c0d4fd1Daniel Dunbar } 162fbefe6bd6f62a3361813498dc672ab0d6c0d4fd1Daniel Dunbar 163fbefe6bd6f62a3361813498dc672ab0d6c0d4fd1Daniel Dunbar public: 1643038204fd8f6ff22082dd18e4b12ed252b75a5e4Daniel Dunbar DarwinTool(const char *Name, const char *ShortName, 1653038204fd8f6ff22082dd18e4b12ed252b75a5e4Daniel Dunbar const ToolChain &TC) : Tool(Name, ShortName, TC) {} 166fbefe6bd6f62a3361813498dc672ab0d6c0d4fd1Daniel Dunbar }; 167fbefe6bd6f62a3361813498dc672ab0d6c0d4fd1Daniel Dunbar 16892dd1915842410005c68d32c43bb3b3cf5a4a702Duncan Sands class LLVM_LIBRARY_VISIBILITY CC1 : public DarwinTool { 169a5a7bd0de7b6b80212095195a055a4a43f21d4b2Daniel Dunbar public: 1701eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump static const char *getBaseInputName(const ArgList &Args, 171a5a7bd0de7b6b80212095195a055a4a43f21d4b2Daniel Dunbar const InputInfoList &Input); 1721eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump static const char *getBaseInputStem(const ArgList &Args, 173a5a7bd0de7b6b80212095195a055a4a43f21d4b2Daniel Dunbar const InputInfoList &Input); 1741eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump static const char *getDependencyFileName(const ArgList &Args, 175a5a7bd0de7b6b80212095195a055a4a43f21d4b2Daniel Dunbar const InputInfoList &Inputs); 176a5a7bd0de7b6b80212095195a055a4a43f21d4b2Daniel Dunbar 17740f1265ebd42ece3e7f7917319b56012e8e2bce2Daniel Dunbar protected: 17840f1265ebd42ece3e7f7917319b56012e8e2bce2Daniel Dunbar const char *getCC1Name(types::ID Type) const; 179a3ec60e0cf2a1916f479288998d31bd980b1a306Daniel Dunbar 180a3ec60e0cf2a1916f479288998d31bd980b1a306Daniel Dunbar void AddCC1Args(const ArgList &Args, ArgStringList &CmdArgs) const; 181285f9a284704c07cd50e4597408d5f93518cd7c3Chad Rosier void RemoveCC1UnsupportedArgs(ArgStringList &CmdArgs) const; 18240f1265ebd42ece3e7f7917319b56012e8e2bce2Daniel Dunbar void AddCC1OptionsArgs(const ArgList &Args, ArgStringList &CmdArgs, 18340f1265ebd42ece3e7f7917319b56012e8e2bce2Daniel Dunbar const InputInfoList &Inputs, 184a3ec60e0cf2a1916f479288998d31bd980b1a306Daniel Dunbar const ArgStringList &OutputArgs) const; 18540f1265ebd42ece3e7f7917319b56012e8e2bce2Daniel Dunbar void AddCPPOptionsArgs(const ArgList &Args, ArgStringList &CmdArgs, 18640f1265ebd42ece3e7f7917319b56012e8e2bce2Daniel Dunbar const InputInfoList &Inputs, 187a3ec60e0cf2a1916f479288998d31bd980b1a306Daniel Dunbar const ArgStringList &OutputArgs) const; 1881eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump void AddCPPUniqueOptionsArgs(const ArgList &Args, 189a3ec60e0cf2a1916f479288998d31bd980b1a306Daniel Dunbar ArgStringList &CmdArgs, 190a3ec60e0cf2a1916f479288998d31bd980b1a306Daniel Dunbar const InputInfoList &Inputs) const; 191a3ec60e0cf2a1916f479288998d31bd980b1a306Daniel Dunbar void AddCPPArgs(const ArgList &Args, ArgStringList &CmdArgs) const; 19240f1265ebd42ece3e7f7917319b56012e8e2bce2Daniel Dunbar 19340f1265ebd42ece3e7f7917319b56012e8e2bce2Daniel Dunbar public: 1943038204fd8f6ff22082dd18e4b12ed252b75a5e4Daniel Dunbar CC1(const char *Name, const char *ShortName, 1953038204fd8f6ff22082dd18e4b12ed252b75a5e4Daniel Dunbar const ToolChain &TC) : DarwinTool(Name, ShortName, TC) {} 19640f1265ebd42ece3e7f7917319b56012e8e2bce2Daniel Dunbar 19760a53f24b160724de0e8dd0e142009981540fd26Daniel Dunbar virtual bool hasGoodDiagnostics() const { return true; } 19840f1265ebd42ece3e7f7917319b56012e8e2bce2Daniel Dunbar virtual bool hasIntegratedCPP() const { return true; } 19940f1265ebd42ece3e7f7917319b56012e8e2bce2Daniel Dunbar }; 20040f1265ebd42ece3e7f7917319b56012e8e2bce2Daniel Dunbar 20192dd1915842410005c68d32c43bb3b3cf5a4a702Duncan Sands class LLVM_LIBRARY_VISIBILITY Preprocess : public CC1 { 20240f1265ebd42ece3e7f7917319b56012e8e2bce2Daniel Dunbar public: 2033038204fd8f6ff22082dd18e4b12ed252b75a5e4Daniel Dunbar Preprocess(const ToolChain &TC) : CC1("darwin::Preprocess", 2043038204fd8f6ff22082dd18e4b12ed252b75a5e4Daniel Dunbar "gcc preprocessor", TC) {} 20540f1265ebd42ece3e7f7917319b56012e8e2bce2Daniel Dunbar 20640f1265ebd42ece3e7f7917319b56012e8e2bce2Daniel Dunbar virtual void ConstructJob(Compilation &C, const JobAction &JA, 2071eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump const InputInfo &Output, 2081eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump const InputInfoList &Inputs, 2091eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump const ArgList &TCArgs, 21040f1265ebd42ece3e7f7917319b56012e8e2bce2Daniel Dunbar const char *LinkingOutput) const; 21140f1265ebd42ece3e7f7917319b56012e8e2bce2Daniel Dunbar }; 21240f1265ebd42ece3e7f7917319b56012e8e2bce2Daniel Dunbar 21392dd1915842410005c68d32c43bb3b3cf5a4a702Duncan Sands class LLVM_LIBRARY_VISIBILITY Compile : public CC1 { 21440f1265ebd42ece3e7f7917319b56012e8e2bce2Daniel Dunbar public: 2153038204fd8f6ff22082dd18e4b12ed252b75a5e4Daniel Dunbar Compile(const ToolChain &TC) : CC1("darwin::Compile", "gcc frontend", TC) {} 21640f1265ebd42ece3e7f7917319b56012e8e2bce2Daniel Dunbar 21740f1265ebd42ece3e7f7917319b56012e8e2bce2Daniel Dunbar virtual void ConstructJob(Compilation &C, const JobAction &JA, 2181eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump const InputInfo &Output, 2191eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump const InputInfoList &Inputs, 2201eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump const ArgList &TCArgs, 22140f1265ebd42ece3e7f7917319b56012e8e2bce2Daniel Dunbar const char *LinkingOutput) const; 22240f1265ebd42ece3e7f7917319b56012e8e2bce2Daniel Dunbar }; 22340f1265ebd42ece3e7f7917319b56012e8e2bce2Daniel Dunbar 22492dd1915842410005c68d32c43bb3b3cf5a4a702Duncan Sands class LLVM_LIBRARY_VISIBILITY Assemble : public DarwinTool { 2258cac5f7e1ce63dd77ee0fb4ef68f9fa804f41ea6Daniel Dunbar public: 2263038204fd8f6ff22082dd18e4b12ed252b75a5e4Daniel Dunbar Assemble(const ToolChain &TC) : DarwinTool("darwin::Assemble", 2273038204fd8f6ff22082dd18e4b12ed252b75a5e4Daniel Dunbar "assembler", TC) {} 2288cac5f7e1ce63dd77ee0fb4ef68f9fa804f41ea6Daniel Dunbar 2298cac5f7e1ce63dd77ee0fb4ef68f9fa804f41ea6Daniel Dunbar virtual bool hasIntegratedCPP() const { return false; } 2308cac5f7e1ce63dd77ee0fb4ef68f9fa804f41ea6Daniel Dunbar 2318cac5f7e1ce63dd77ee0fb4ef68f9fa804f41ea6Daniel Dunbar virtual void ConstructJob(Compilation &C, const JobAction &JA, 2321eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump const InputInfo &Output, 2331eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump const InputInfoList &Inputs, 2341eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump const ArgList &TCArgs, 23502633b541b04ad5ffc1c70f4c2feeeb13e607057Daniel Dunbar const char *LinkingOutput) const; 23602633b541b04ad5ffc1c70f4c2feeeb13e607057Daniel Dunbar }; 23702633b541b04ad5ffc1c70f4c2feeeb13e607057Daniel Dunbar 23892dd1915842410005c68d32c43bb3b3cf5a4a702Duncan Sands class LLVM_LIBRARY_VISIBILITY Link : public DarwinTool { 239748de8eda222f087434d8bd703176b316a061341Daniel Dunbar void AddLinkArgs(Compilation &C, const ArgList &Args, 240748de8eda222f087434d8bd703176b316a061341Daniel Dunbar ArgStringList &CmdArgs) const; 24102633b541b04ad5ffc1c70f4c2feeeb13e607057Daniel Dunbar 24202633b541b04ad5ffc1c70f4c2feeeb13e607057Daniel Dunbar public: 2433038204fd8f6ff22082dd18e4b12ed252b75a5e4Daniel Dunbar Link(const ToolChain &TC) : DarwinTool("darwin::Link", "linker", TC) {} 24402633b541b04ad5ffc1c70f4c2feeeb13e607057Daniel Dunbar 24502633b541b04ad5ffc1c70f4c2feeeb13e607057Daniel Dunbar virtual bool hasIntegratedCPP() const { return false; } 24602633b541b04ad5ffc1c70f4c2feeeb13e607057Daniel Dunbar 24702633b541b04ad5ffc1c70f4c2feeeb13e607057Daniel Dunbar virtual void ConstructJob(Compilation &C, const JobAction &JA, 2481eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump const InputInfo &Output, 2491eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump const InputInfoList &Inputs, 2501eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump const ArgList &TCArgs, 2518cac5f7e1ce63dd77ee0fb4ef68f9fa804f41ea6Daniel Dunbar const char *LinkingOutput) const; 2528cac5f7e1ce63dd77ee0fb4ef68f9fa804f41ea6Daniel Dunbar }; 2538cac5f7e1ce63dd77ee0fb4ef68f9fa804f41ea6Daniel Dunbar 25492dd1915842410005c68d32c43bb3b3cf5a4a702Duncan Sands class LLVM_LIBRARY_VISIBILITY Lipo : public DarwinTool { 255ff7488dc9a766f94daf54d81b03ab9160d0bfd88Daniel Dunbar public: 2563038204fd8f6ff22082dd18e4b12ed252b75a5e4Daniel Dunbar Lipo(const ToolChain &TC) : DarwinTool("darwin::Lipo", "lipo", TC) {} 257ff7488dc9a766f94daf54d81b03ab9160d0bfd88Daniel Dunbar 258ff7488dc9a766f94daf54d81b03ab9160d0bfd88Daniel Dunbar virtual bool hasIntegratedCPP() const { return false; } 259ff7488dc9a766f94daf54d81b03ab9160d0bfd88Daniel Dunbar 260ff7488dc9a766f94daf54d81b03ab9160d0bfd88Daniel Dunbar virtual void ConstructJob(Compilation &C, const JobAction &JA, 2611eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump const InputInfo &Output, 2621eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump const InputInfoList &Inputs, 2631eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump const ArgList &TCArgs, 2646e0f25483b1a801cd1155ea89c2b725feab16332Daniel Dunbar const char *LinkingOutput) const; 2656e0f25483b1a801cd1155ea89c2b725feab16332Daniel Dunbar }; 2666e0f25483b1a801cd1155ea89c2b725feab16332Daniel Dunbar 2676e0f25483b1a801cd1155ea89c2b725feab16332Daniel Dunbar class LLVM_LIBRARY_VISIBILITY Dsymutil : public DarwinTool { 2686e0f25483b1a801cd1155ea89c2b725feab16332Daniel Dunbar public: 2696e0f25483b1a801cd1155ea89c2b725feab16332Daniel Dunbar Dsymutil(const ToolChain &TC) : DarwinTool("darwin::Dsymutil", 2706e0f25483b1a801cd1155ea89c2b725feab16332Daniel Dunbar "dsymutil", TC) {} 2716e0f25483b1a801cd1155ea89c2b725feab16332Daniel Dunbar 2726e0f25483b1a801cd1155ea89c2b725feab16332Daniel Dunbar virtual bool hasIntegratedCPP() const { return false; } 2736e0f25483b1a801cd1155ea89c2b725feab16332Daniel Dunbar 2746e0f25483b1a801cd1155ea89c2b725feab16332Daniel Dunbar virtual void ConstructJob(Compilation &C, const JobAction &JA, 2756e0f25483b1a801cd1155ea89c2b725feab16332Daniel Dunbar const InputInfo &Output, 2766e0f25483b1a801cd1155ea89c2b725feab16332Daniel Dunbar const InputInfoList &Inputs, 2776e0f25483b1a801cd1155ea89c2b725feab16332Daniel Dunbar const ArgList &TCArgs, 278f7b8eec37c8c8012fa525c71fb29a58c9f29beefDaniel Dunbar const char *LinkingOutput) const; 279f7b8eec37c8c8012fa525c71fb29a58c9f29beefDaniel Dunbar }; 280f857186fd1995b34185d063a29b11ad4f948519fEric Christopher 281f857186fd1995b34185d063a29b11ad4f948519fEric Christopher class LLVM_LIBRARY_VISIBILITY VerifyDebug : public DarwinTool { 282f857186fd1995b34185d063a29b11ad4f948519fEric Christopher public: 283f857186fd1995b34185d063a29b11ad4f948519fEric Christopher VerifyDebug(const ToolChain &TC) : DarwinTool("darwin::VerifyDebug", 284f857186fd1995b34185d063a29b11ad4f948519fEric Christopher "dwarfdump", TC) {} 285f857186fd1995b34185d063a29b11ad4f948519fEric Christopher 286f857186fd1995b34185d063a29b11ad4f948519fEric Christopher virtual bool hasIntegratedCPP() const { return false; } 287f857186fd1995b34185d063a29b11ad4f948519fEric Christopher 288f857186fd1995b34185d063a29b11ad4f948519fEric Christopher virtual void ConstructJob(Compilation &C, const JobAction &JA, 289f857186fd1995b34185d063a29b11ad4f948519fEric Christopher const InputInfo &Output, 290f857186fd1995b34185d063a29b11ad4f948519fEric Christopher const InputInfoList &Inputs, 291f857186fd1995b34185d063a29b11ad4f948519fEric Christopher const ArgList &TCArgs, 292f857186fd1995b34185d063a29b11ad4f948519fEric Christopher const char *LinkingOutput) const; 293f857186fd1995b34185d063a29b11ad4f948519fEric Christopher }; 294f857186fd1995b34185d063a29b11ad4f948519fEric Christopher 295f7b8eec37c8c8012fa525c71fb29a58c9f29beefDaniel Dunbar} 296f7b8eec37c8c8012fa525c71fb29a58c9f29beefDaniel Dunbar 297f7b8eec37c8c8012fa525c71fb29a58c9f29beefDaniel Dunbar /// openbsd -- Directly call GNU Binutils assembler and linker 298f7b8eec37c8c8012fa525c71fb29a58c9f29beefDaniel Dunbarnamespace openbsd { 29992dd1915842410005c68d32c43bb3b3cf5a4a702Duncan Sands class LLVM_LIBRARY_VISIBILITY Assemble : public Tool { 300f7b8eec37c8c8012fa525c71fb29a58c9f29beefDaniel Dunbar public: 3013038204fd8f6ff22082dd18e4b12ed252b75a5e4Daniel Dunbar Assemble(const ToolChain &TC) : Tool("openbsd::Assemble", "assembler", 3023038204fd8f6ff22082dd18e4b12ed252b75a5e4Daniel Dunbar TC) {} 303f7b8eec37c8c8012fa525c71fb29a58c9f29beefDaniel Dunbar 304f7b8eec37c8c8012fa525c71fb29a58c9f29beefDaniel Dunbar virtual bool hasIntegratedCPP() const { return false; } 305f7b8eec37c8c8012fa525c71fb29a58c9f29beefDaniel Dunbar 306f7b8eec37c8c8012fa525c71fb29a58c9f29beefDaniel Dunbar virtual void ConstructJob(Compilation &C, const JobAction &JA, 3071eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump const InputInfo &Output, 3081eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump const InputInfoList &Inputs, 3091eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump const ArgList &TCArgs, 310f7b8eec37c8c8012fa525c71fb29a58c9f29beefDaniel Dunbar const char *LinkingOutput) const; 311f7b8eec37c8c8012fa525c71fb29a58c9f29beefDaniel Dunbar }; 31292dd1915842410005c68d32c43bb3b3cf5a4a702Duncan Sands class LLVM_LIBRARY_VISIBILITY Link : public Tool { 313f7b8eec37c8c8012fa525c71fb29a58c9f29beefDaniel Dunbar public: 3143038204fd8f6ff22082dd18e4b12ed252b75a5e4Daniel Dunbar Link(const ToolChain &TC) : Tool("openbsd::Link", "linker", TC) {} 315f7b8eec37c8c8012fa525c71fb29a58c9f29beefDaniel Dunbar 316f7b8eec37c8c8012fa525c71fb29a58c9f29beefDaniel Dunbar virtual bool hasIntegratedCPP() const { return false; } 317f7b8eec37c8c8012fa525c71fb29a58c9f29beefDaniel Dunbar 318f7b8eec37c8c8012fa525c71fb29a58c9f29beefDaniel Dunbar virtual void ConstructJob(Compilation &C, const JobAction &JA, 3191eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump const InputInfo &Output, 3201eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump const InputInfoList &Inputs, 3211eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump const ArgList &TCArgs, 322ff7488dc9a766f94daf54d81b03ab9160d0bfd88Daniel Dunbar const char *LinkingOutput) const; 323ff7488dc9a766f94daf54d81b03ab9160d0bfd88Daniel Dunbar }; 324e7925a075f110ab21afeae084670a155dea568e3Edward O'Callaghan} // end namespace openbsd 325ff7488dc9a766f94daf54d81b03ab9160d0bfd88Daniel Dunbar 32668a31d406c6dc4382c700d1199b062de2aa7e1daDaniel Dunbar /// freebsd -- Directly call GNU Binutils assembler and linker 32768a31d406c6dc4382c700d1199b062de2aa7e1daDaniel Dunbarnamespace freebsd { 32892dd1915842410005c68d32c43bb3b3cf5a4a702Duncan Sands class LLVM_LIBRARY_VISIBILITY Assemble : public Tool { 32968a31d406c6dc4382c700d1199b062de2aa7e1daDaniel Dunbar public: 3303038204fd8f6ff22082dd18e4b12ed252b75a5e4Daniel Dunbar Assemble(const ToolChain &TC) : Tool("freebsd::Assemble", "assembler", 3313038204fd8f6ff22082dd18e4b12ed252b75a5e4Daniel Dunbar TC) {} 33268a31d406c6dc4382c700d1199b062de2aa7e1daDaniel Dunbar 33368a31d406c6dc4382c700d1199b062de2aa7e1daDaniel Dunbar virtual bool hasIntegratedCPP() const { return false; } 33468a31d406c6dc4382c700d1199b062de2aa7e1daDaniel Dunbar 33568a31d406c6dc4382c700d1199b062de2aa7e1daDaniel Dunbar virtual void ConstructJob(Compilation &C, const JobAction &JA, 3361eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump const InputInfo &Output, 3371eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump const InputInfoList &Inputs, 3381eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump const ArgList &TCArgs, 33968a31d406c6dc4382c700d1199b062de2aa7e1daDaniel Dunbar const char *LinkingOutput) const; 34068a31d406c6dc4382c700d1199b062de2aa7e1daDaniel Dunbar }; 34192dd1915842410005c68d32c43bb3b3cf5a4a702Duncan Sands class LLVM_LIBRARY_VISIBILITY Link : public Tool { 342008f54a54299eaafdaa940e2bdeaf55935ecd95aDaniel Dunbar public: 3433038204fd8f6ff22082dd18e4b12ed252b75a5e4Daniel Dunbar Link(const ToolChain &TC) : Tool("freebsd::Link", "linker", TC) {} 344008f54a54299eaafdaa940e2bdeaf55935ecd95aDaniel Dunbar 345008f54a54299eaafdaa940e2bdeaf55935ecd95aDaniel Dunbar virtual bool hasIntegratedCPP() const { return false; } 346008f54a54299eaafdaa940e2bdeaf55935ecd95aDaniel Dunbar 347008f54a54299eaafdaa940e2bdeaf55935ecd95aDaniel Dunbar virtual void ConstructJob(Compilation &C, const JobAction &JA, 3481eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump const InputInfo &Output, 3491eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump const InputInfoList &Inputs, 3501eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump const ArgList &TCArgs, 351008f54a54299eaafdaa940e2bdeaf55935ecd95aDaniel Dunbar const char *LinkingOutput) const; 352008f54a54299eaafdaa940e2bdeaf55935ecd95aDaniel Dunbar }; 353e7925a075f110ab21afeae084670a155dea568e3Edward O'Callaghan} // end namespace freebsd 354e7925a075f110ab21afeae084670a155dea568e3Edward O'Callaghan 3558e50a96b387dca7525caa8a6add31420dd82a2cdBenjamin Kramer /// netbsd -- Directly call GNU Binutils assembler and linker 3568e50a96b387dca7525caa8a6add31420dd82a2cdBenjamin Kramernamespace netbsd { 3578e50a96b387dca7525caa8a6add31420dd82a2cdBenjamin Kramer class LLVM_LIBRARY_VISIBILITY Assemble : public Tool { 358182564cd14a2105fff05fd52f5940eff96161d57Joerg Sonnenberger private: 359182564cd14a2105fff05fd52f5940eff96161d57Joerg Sonnenberger const llvm::Triple ToolTriple; 360182564cd14a2105fff05fd52f5940eff96161d57Joerg Sonnenberger 3618e50a96b387dca7525caa8a6add31420dd82a2cdBenjamin Kramer public: 362182564cd14a2105fff05fd52f5940eff96161d57Joerg Sonnenberger Assemble(const ToolChain &TC, const llvm::Triple &ToolTriple) 363182564cd14a2105fff05fd52f5940eff96161d57Joerg Sonnenberger : Tool("netbsd::Assemble", "assembler", TC), ToolTriple(ToolTriple) {} 3648e50a96b387dca7525caa8a6add31420dd82a2cdBenjamin Kramer 3658e50a96b387dca7525caa8a6add31420dd82a2cdBenjamin Kramer virtual bool hasIntegratedCPP() const { return false; } 3668e50a96b387dca7525caa8a6add31420dd82a2cdBenjamin Kramer 3678e50a96b387dca7525caa8a6add31420dd82a2cdBenjamin Kramer virtual void ConstructJob(Compilation &C, const JobAction &JA, 3688e50a96b387dca7525caa8a6add31420dd82a2cdBenjamin Kramer const InputInfo &Output, 3698e50a96b387dca7525caa8a6add31420dd82a2cdBenjamin Kramer const InputInfoList &Inputs, 3708e50a96b387dca7525caa8a6add31420dd82a2cdBenjamin Kramer const ArgList &TCArgs, 3718e50a96b387dca7525caa8a6add31420dd82a2cdBenjamin Kramer const char *LinkingOutput) const; 3728e50a96b387dca7525caa8a6add31420dd82a2cdBenjamin Kramer }; 3738e50a96b387dca7525caa8a6add31420dd82a2cdBenjamin Kramer class LLVM_LIBRARY_VISIBILITY Link : public Tool { 374182564cd14a2105fff05fd52f5940eff96161d57Joerg Sonnenberger private: 375182564cd14a2105fff05fd52f5940eff96161d57Joerg Sonnenberger const llvm::Triple ToolTriple; 376182564cd14a2105fff05fd52f5940eff96161d57Joerg Sonnenberger 3778e50a96b387dca7525caa8a6add31420dd82a2cdBenjamin Kramer public: 378182564cd14a2105fff05fd52f5940eff96161d57Joerg Sonnenberger Link(const ToolChain &TC, const llvm::Triple &ToolTriple) 379468eb7ddd69b5d545139fc46a3b730268c458f38Joerg Sonnenberger : Tool("netbsd::Link", "linker", TC), ToolTriple(ToolTriple) {} 3808e50a96b387dca7525caa8a6add31420dd82a2cdBenjamin Kramer 3818e50a96b387dca7525caa8a6add31420dd82a2cdBenjamin Kramer virtual bool hasIntegratedCPP() const { return false; } 3828e50a96b387dca7525caa8a6add31420dd82a2cdBenjamin Kramer 3838e50a96b387dca7525caa8a6add31420dd82a2cdBenjamin Kramer virtual void ConstructJob(Compilation &C, const JobAction &JA, 3848e50a96b387dca7525caa8a6add31420dd82a2cdBenjamin Kramer const InputInfo &Output, 3858e50a96b387dca7525caa8a6add31420dd82a2cdBenjamin Kramer const InputInfoList &Inputs, 3868e50a96b387dca7525caa8a6add31420dd82a2cdBenjamin Kramer const ArgList &TCArgs, 3878e50a96b387dca7525caa8a6add31420dd82a2cdBenjamin Kramer const char *LinkingOutput) const; 3888e50a96b387dca7525caa8a6add31420dd82a2cdBenjamin Kramer }; 3898e50a96b387dca7525caa8a6add31420dd82a2cdBenjamin Kramer} // end namespace netbsd 3908e50a96b387dca7525caa8a6add31420dd82a2cdBenjamin Kramer 391ba30bbe4e36a30a274da809a11a42f9cdc168e92Rafael Espindola /// linux -- Directly call GNU Binutils assembler and linker 392ba30bbe4e36a30a274da809a11a42f9cdc168e92Rafael Espindolanamespace linuxtools { 393ba30bbe4e36a30a274da809a11a42f9cdc168e92Rafael Espindola class LLVM_LIBRARY_VISIBILITY Assemble : public Tool { 394ba30bbe4e36a30a274da809a11a42f9cdc168e92Rafael Espindola public: 395ba30bbe4e36a30a274da809a11a42f9cdc168e92Rafael Espindola Assemble(const ToolChain &TC) : Tool("linux::Assemble", "assembler", 396ba30bbe4e36a30a274da809a11a42f9cdc168e92Rafael Espindola TC) {} 397ba30bbe4e36a30a274da809a11a42f9cdc168e92Rafael Espindola 398ba30bbe4e36a30a274da809a11a42f9cdc168e92Rafael Espindola virtual bool hasIntegratedCPP() const { return false; } 399ba30bbe4e36a30a274da809a11a42f9cdc168e92Rafael Espindola 400ba30bbe4e36a30a274da809a11a42f9cdc168e92Rafael Espindola virtual void ConstructJob(Compilation &C, const JobAction &JA, 401ba30bbe4e36a30a274da809a11a42f9cdc168e92Rafael Espindola const InputInfo &Output, 402ba30bbe4e36a30a274da809a11a42f9cdc168e92Rafael Espindola const InputInfoList &Inputs, 403ba30bbe4e36a30a274da809a11a42f9cdc168e92Rafael Espindola const ArgList &TCArgs, 404ba30bbe4e36a30a274da809a11a42f9cdc168e92Rafael Espindola const char *LinkingOutput) const; 405ba30bbe4e36a30a274da809a11a42f9cdc168e92Rafael Espindola }; 406c1da981bba867681004004b2d54ec2fdf3c08913Rafael Espindola class LLVM_LIBRARY_VISIBILITY Link : public Tool { 407c1da981bba867681004004b2d54ec2fdf3c08913Rafael Espindola public: 408c1da981bba867681004004b2d54ec2fdf3c08913Rafael Espindola Link(const ToolChain &TC) : Tool("linux::Link", "linker", TC) {} 409c1da981bba867681004004b2d54ec2fdf3c08913Rafael Espindola 410c1da981bba867681004004b2d54ec2fdf3c08913Rafael Espindola virtual bool hasIntegratedCPP() const { return false; } 411c1da981bba867681004004b2d54ec2fdf3c08913Rafael Espindola 412c1da981bba867681004004b2d54ec2fdf3c08913Rafael Espindola virtual void ConstructJob(Compilation &C, const JobAction &JA, 413c1da981bba867681004004b2d54ec2fdf3c08913Rafael Espindola const InputInfo &Output, 414c1da981bba867681004004b2d54ec2fdf3c08913Rafael Espindola const InputInfoList &Inputs, 415c1da981bba867681004004b2d54ec2fdf3c08913Rafael Espindola const ArgList &TCArgs, 416c1da981bba867681004004b2d54ec2fdf3c08913Rafael Espindola const char *LinkingOutput) const; 417c1da981bba867681004004b2d54ec2fdf3c08913Rafael Espindola }; 418ba30bbe4e36a30a274da809a11a42f9cdc168e92Rafael Espindola} 41938e317d6dce161b249508686cc67eb7176958762Chris Lattner /// minix -- Directly call GNU Binutils assembler and linker 42038e317d6dce161b249508686cc67eb7176958762Chris Lattnernamespace minix { 42138e317d6dce161b249508686cc67eb7176958762Chris Lattner class LLVM_LIBRARY_VISIBILITY Assemble : public Tool { 42238e317d6dce161b249508686cc67eb7176958762Chris Lattner public: 42338e317d6dce161b249508686cc67eb7176958762Chris Lattner Assemble(const ToolChain &TC) : Tool("minix::Assemble", "assembler", 42438e317d6dce161b249508686cc67eb7176958762Chris Lattner TC) {} 42538e317d6dce161b249508686cc67eb7176958762Chris Lattner 42638e317d6dce161b249508686cc67eb7176958762Chris Lattner virtual bool hasIntegratedCPP() const { return false; } 42738e317d6dce161b249508686cc67eb7176958762Chris Lattner 42838e317d6dce161b249508686cc67eb7176958762Chris Lattner virtual void ConstructJob(Compilation &C, const JobAction &JA, 42938e317d6dce161b249508686cc67eb7176958762Chris Lattner const InputInfo &Output, 43038e317d6dce161b249508686cc67eb7176958762Chris Lattner const InputInfoList &Inputs, 43138e317d6dce161b249508686cc67eb7176958762Chris Lattner const ArgList &TCArgs, 43238e317d6dce161b249508686cc67eb7176958762Chris Lattner const char *LinkingOutput) const; 43338e317d6dce161b249508686cc67eb7176958762Chris Lattner }; 43438e317d6dce161b249508686cc67eb7176958762Chris Lattner class LLVM_LIBRARY_VISIBILITY Link : public Tool { 43538e317d6dce161b249508686cc67eb7176958762Chris Lattner public: 43638e317d6dce161b249508686cc67eb7176958762Chris Lattner Link(const ToolChain &TC) : Tool("minix::Link", "linker", TC) {} 43738e317d6dce161b249508686cc67eb7176958762Chris Lattner 43838e317d6dce161b249508686cc67eb7176958762Chris Lattner virtual bool hasIntegratedCPP() const { return false; } 43938e317d6dce161b249508686cc67eb7176958762Chris Lattner 44038e317d6dce161b249508686cc67eb7176958762Chris Lattner virtual void ConstructJob(Compilation &C, const JobAction &JA, 44138e317d6dce161b249508686cc67eb7176958762Chris Lattner const InputInfo &Output, 44238e317d6dce161b249508686cc67eb7176958762Chris Lattner const InputInfoList &Inputs, 44338e317d6dce161b249508686cc67eb7176958762Chris Lattner const ArgList &TCArgs, 44438e317d6dce161b249508686cc67eb7176958762Chris Lattner const char *LinkingOutput) const; 44538e317d6dce161b249508686cc67eb7176958762Chris Lattner }; 44638e317d6dce161b249508686cc67eb7176958762Chris Lattner} // end namespace minix 44738e317d6dce161b249508686cc67eb7176958762Chris Lattner 448e7925a075f110ab21afeae084670a155dea568e3Edward O'Callaghan /// auroraux -- Directly call GNU Binutils assembler and linker 449e7925a075f110ab21afeae084670a155dea568e3Edward O'Callaghannamespace auroraux { 45092dd1915842410005c68d32c43bb3b3cf5a4a702Duncan Sands class LLVM_LIBRARY_VISIBILITY Assemble : public Tool { 451e7925a075f110ab21afeae084670a155dea568e3Edward O'Callaghan public: 4523038204fd8f6ff22082dd18e4b12ed252b75a5e4Daniel Dunbar Assemble(const ToolChain &TC) : Tool("auroraux::Assemble", "assembler", 4533038204fd8f6ff22082dd18e4b12ed252b75a5e4Daniel Dunbar TC) {} 454e7925a075f110ab21afeae084670a155dea568e3Edward O'Callaghan 455e7925a075f110ab21afeae084670a155dea568e3Edward O'Callaghan virtual bool hasIntegratedCPP() const { return false; } 456e7925a075f110ab21afeae084670a155dea568e3Edward O'Callaghan 457e7925a075f110ab21afeae084670a155dea568e3Edward O'Callaghan virtual void ConstructJob(Compilation &C, const JobAction &JA, 4581eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump const InputInfo &Output, 4591eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump const InputInfoList &Inputs, 4601eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump const ArgList &TCArgs, 461e7925a075f110ab21afeae084670a155dea568e3Edward O'Callaghan const char *LinkingOutput) const; 462e7925a075f110ab21afeae084670a155dea568e3Edward O'Callaghan }; 46392dd1915842410005c68d32c43bb3b3cf5a4a702Duncan Sands class LLVM_LIBRARY_VISIBILITY Link : public Tool { 464e7925a075f110ab21afeae084670a155dea568e3Edward O'Callaghan public: 4653038204fd8f6ff22082dd18e4b12ed252b75a5e4Daniel Dunbar Link(const ToolChain &TC) : Tool("auroraux::Link", "linker", TC) {} 466e7925a075f110ab21afeae084670a155dea568e3Edward O'Callaghan 467e7925a075f110ab21afeae084670a155dea568e3Edward O'Callaghan virtual bool hasIntegratedCPP() const { return false; } 468e7925a075f110ab21afeae084670a155dea568e3Edward O'Callaghan 469e7925a075f110ab21afeae084670a155dea568e3Edward O'Callaghan virtual void ConstructJob(Compilation &C, const JobAction &JA, 4701eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump const InputInfo &Output, 4711eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump const InputInfoList &Inputs, 4721eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump const ArgList &TCArgs, 473e7925a075f110ab21afeae084670a155dea568e3Edward O'Callaghan const char *LinkingOutput) const; 474e7925a075f110ab21afeae084670a155dea568e3Edward O'Callaghan }; 475e7925a075f110ab21afeae084670a155dea568e3Edward O'Callaghan} // end namespace auroraux 47668a31d406c6dc4382c700d1199b062de2aa7e1daDaniel Dunbar 47711e1b40d759a643086f590f6ffbd9d68360bad46Daniel Dunbar /// dragonfly -- Directly call GNU Binutils assembler and linker 47811e1b40d759a643086f590f6ffbd9d68360bad46Daniel Dunbarnamespace dragonfly { 47992dd1915842410005c68d32c43bb3b3cf5a4a702Duncan Sands class LLVM_LIBRARY_VISIBILITY Assemble : public Tool { 48011e1b40d759a643086f590f6ffbd9d68360bad46Daniel Dunbar public: 4813038204fd8f6ff22082dd18e4b12ed252b75a5e4Daniel Dunbar Assemble(const ToolChain &TC) : Tool("dragonfly::Assemble", "assembler", 4823038204fd8f6ff22082dd18e4b12ed252b75a5e4Daniel Dunbar TC) {} 48311e1b40d759a643086f590f6ffbd9d68360bad46Daniel Dunbar 48411e1b40d759a643086f590f6ffbd9d68360bad46Daniel Dunbar virtual bool hasIntegratedCPP() const { return false; } 48511e1b40d759a643086f590f6ffbd9d68360bad46Daniel Dunbar 48611e1b40d759a643086f590f6ffbd9d68360bad46Daniel Dunbar virtual void ConstructJob(Compilation &C, const JobAction &JA, 4871eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump const InputInfo &Output, 4881eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump const InputInfoList &Inputs, 4891eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump const ArgList &TCArgs, 49011e1b40d759a643086f590f6ffbd9d68360bad46Daniel Dunbar const char *LinkingOutput) const; 49111e1b40d759a643086f590f6ffbd9d68360bad46Daniel Dunbar }; 49292dd1915842410005c68d32c43bb3b3cf5a4a702Duncan Sands class LLVM_LIBRARY_VISIBILITY Link : public Tool { 49311e1b40d759a643086f590f6ffbd9d68360bad46Daniel Dunbar public: 4943038204fd8f6ff22082dd18e4b12ed252b75a5e4Daniel Dunbar Link(const ToolChain &TC) : Tool("dragonfly::Link", "linker", TC) {} 49511e1b40d759a643086f590f6ffbd9d68360bad46Daniel Dunbar 49611e1b40d759a643086f590f6ffbd9d68360bad46Daniel Dunbar virtual bool hasIntegratedCPP() const { return false; } 49711e1b40d759a643086f590f6ffbd9d68360bad46Daniel Dunbar 49811e1b40d759a643086f590f6ffbd9d68360bad46Daniel Dunbar virtual void ConstructJob(Compilation &C, const JobAction &JA, 4991eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump const InputInfo &Output, 5001eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump const InputInfoList &Inputs, 5011eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump const ArgList &TCArgs, 50211e1b40d759a643086f590f6ffbd9d68360bad46Daniel Dunbar const char *LinkingOutput) const; 50311e1b40d759a643086f590f6ffbd9d68360bad46Daniel Dunbar }; 504e7925a075f110ab21afeae084670a155dea568e3Edward O'Callaghan} // end namespace dragonfly 50511e1b40d759a643086f590f6ffbd9d68360bad46Daniel Dunbar 506ff58e3610f4e12094def69eb2d6dcb4330378d8fMichael J. Spencer /// Visual studio tools. 507ff58e3610f4e12094def69eb2d6dcb4330378d8fMichael J. Spencernamespace visualstudio { 508ff58e3610f4e12094def69eb2d6dcb4330378d8fMichael J. Spencer class LLVM_LIBRARY_VISIBILITY Link : public Tool { 509ff58e3610f4e12094def69eb2d6dcb4330378d8fMichael J. Spencer public: 510ff58e3610f4e12094def69eb2d6dcb4330378d8fMichael J. Spencer Link(const ToolChain &TC) : Tool("visualstudio::Link", "linker", TC) {} 511ff58e3610f4e12094def69eb2d6dcb4330378d8fMichael J. Spencer 512ff58e3610f4e12094def69eb2d6dcb4330378d8fMichael J. Spencer virtual bool hasIntegratedCPP() const { return false; } 513ff58e3610f4e12094def69eb2d6dcb4330378d8fMichael J. Spencer 514ff58e3610f4e12094def69eb2d6dcb4330378d8fMichael J. Spencer virtual void ConstructJob(Compilation &C, const JobAction &JA, 515ff58e3610f4e12094def69eb2d6dcb4330378d8fMichael J. Spencer const InputInfo &Output, 516ff58e3610f4e12094def69eb2d6dcb4330378d8fMichael J. Spencer const InputInfoList &Inputs, 517ff58e3610f4e12094def69eb2d6dcb4330378d8fMichael J. Spencer const ArgList &TCArgs, 518ff58e3610f4e12094def69eb2d6dcb4330378d8fMichael J. Spencer const char *LinkingOutput) const; 519ff58e3610f4e12094def69eb2d6dcb4330378d8fMichael J. Spencer }; 520ff58e3610f4e12094def69eb2d6dcb4330378d8fMichael J. Spencer} // end namespace visualstudio 521ff58e3610f4e12094def69eb2d6dcb4330378d8fMichael J. Spencer 5229c073ff462eb75ccbb1c4446e21c148f3fc618e1Daniel Dunbar} // end namespace toolchains 5239c073ff462eb75ccbb1c4446e21c148f3fc618e1Daniel Dunbar} // end namespace driver 5249c073ff462eb75ccbb1c4446e21c148f3fc618e1Daniel Dunbar} // end namespace clang 5259c073ff462eb75ccbb1c4446e21c148f3fc618e1Daniel Dunbar 526e7925a075f110ab21afeae084670a155dea568e3Edward O'Callaghan#endif // CLANG_LIB_DRIVER_TOOLS_H_ 527