Tools.h revision 9631939f82c0eaa6fb3936a0ce58a41adfbc9011
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; 449631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum void AddHexagonTargetArgs (const ArgList &Args, ArgStringList &CmdArgs) const; 456acda16e9c194dcbd0dea64341e182bdb65d0f41Daniel Dunbar 469c073ff462eb75ccbb1c4446e21c148f3fc618e1Daniel Dunbar public: 473038204fd8f6ff22082dd18e4b12ed252b75a5e4Daniel Dunbar Clang(const ToolChain &TC) : Tool("clang", "clang frontend", TC) {} 489c073ff462eb75ccbb1c4446e21c148f3fc618e1Daniel Dunbar 4960a53f24b160724de0e8dd0e142009981540fd26Daniel Dunbar virtual bool hasGoodDiagnostics() const { return true; } 508767cbc475ed96397b6f08617814eeb9cab121bdDaniel Dunbar virtual bool hasIntegratedAssembler() const { return true; } 519c073ff462eb75ccbb1c4446e21c148f3fc618e1Daniel Dunbar virtual bool hasIntegratedCPP() const { return true; } 5247ac7d27c44bd64a7d0fc03d4babc196cf2b8230Daniel Dunbar 5347ac7d27c44bd64a7d0fc03d4babc196cf2b8230Daniel Dunbar virtual void ConstructJob(Compilation &C, const JobAction &JA, 5420a9aa50f9a7d4b03f97bc67e96da1d605c309a2Daniel Dunbar const InputInfo &Output, 5520a9aa50f9a7d4b03f97bc67e96da1d605c309a2Daniel Dunbar const InputInfoList &Inputs, 5620a9aa50f9a7d4b03f97bc67e96da1d605c309a2Daniel Dunbar const ArgList &TCArgs, 5720a9aa50f9a7d4b03f97bc67e96da1d605c309a2Daniel Dunbar const char *LinkingOutput) const; 5820a9aa50f9a7d4b03f97bc67e96da1d605c309a2Daniel Dunbar }; 5920a9aa50f9a7d4b03f97bc67e96da1d605c309a2Daniel Dunbar 6020a9aa50f9a7d4b03f97bc67e96da1d605c309a2Daniel Dunbar /// \brief Clang integrated assembler tool. 6120a9aa50f9a7d4b03f97bc67e96da1d605c309a2Daniel Dunbar class LLVM_LIBRARY_VISIBILITY ClangAs : public Tool { 6220a9aa50f9a7d4b03f97bc67e96da1d605c309a2Daniel Dunbar public: 633038204fd8f6ff22082dd18e4b12ed252b75a5e4Daniel Dunbar ClangAs(const ToolChain &TC) : Tool("clang::as", 643038204fd8f6ff22082dd18e4b12ed252b75a5e4Daniel Dunbar "clang integrated assembler", TC) {} 6520a9aa50f9a7d4b03f97bc67e96da1d605c309a2Daniel Dunbar 6620a9aa50f9a7d4b03f97bc67e96da1d605c309a2Daniel Dunbar virtual bool hasGoodDiagnostics() const { return true; } 6720a9aa50f9a7d4b03f97bc67e96da1d605c309a2Daniel Dunbar virtual bool hasIntegratedAssembler() const { return false; } 6820a9aa50f9a7d4b03f97bc67e96da1d605c309a2Daniel Dunbar virtual bool hasIntegratedCPP() const { return false; } 6920a9aa50f9a7d4b03f97bc67e96da1d605c309a2Daniel Dunbar 7020a9aa50f9a7d4b03f97bc67e96da1d605c309a2Daniel Dunbar virtual void ConstructJob(Compilation &C, const JobAction &JA, 711eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump const InputInfo &Output, 721eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump const InputInfoList &Inputs, 731eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump const ArgList &TCArgs, 7447ac7d27c44bd64a7d0fc03d4babc196cf2b8230Daniel Dunbar const char *LinkingOutput) const; 759c073ff462eb75ccbb1c4446e21c148f3fc618e1Daniel Dunbar }; 769c073ff462eb75ccbb1c4446e21c148f3fc618e1Daniel Dunbar 7731b1e5437e7435879fc044afb77ff27096008e72Daniel Dunbar /// gcc - Generic GCC tool implementations. 7831b1e5437e7435879fc044afb77ff27096008e72Daniel Dunbarnamespace gcc { 7992dd1915842410005c68d32c43bb3b3cf5a4a702Duncan Sands class LLVM_LIBRARY_VISIBILITY Common : public Tool { 809c073ff462eb75ccbb1c4446e21c148f3fc618e1Daniel Dunbar public: 813038204fd8f6ff22082dd18e4b12ed252b75a5e4Daniel Dunbar Common(const char *Name, const char *ShortName, 823038204fd8f6ff22082dd18e4b12ed252b75a5e4Daniel Dunbar const ToolChain &TC) : Tool(Name, ShortName, TC) {} 8347ac7d27c44bd64a7d0fc03d4babc196cf2b8230Daniel Dunbar 8447ac7d27c44bd64a7d0fc03d4babc196cf2b8230Daniel Dunbar virtual void ConstructJob(Compilation &C, const JobAction &JA, 851eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump const InputInfo &Output, 861eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump const InputInfoList &Inputs, 871eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump const ArgList &TCArgs, 8847ac7d27c44bd64a7d0fc03d4babc196cf2b8230Daniel Dunbar const char *LinkingOutput) const; 89b488c1dac8e53206f07103d794a62a3f5012c0f4Daniel Dunbar 90b488c1dac8e53206f07103d794a62a3f5012c0f4Daniel Dunbar /// RenderExtraToolArgs - Render any arguments necessary to force 91b488c1dac8e53206f07103d794a62a3f5012c0f4Daniel Dunbar /// the particular tool mode. 9282b51cce8cea6b6bb6175c406c2ab425c91d9dc8Daniel Dunbar virtual void RenderExtraToolArgs(const JobAction &JA, 9382b51cce8cea6b6bb6175c406c2ab425c91d9dc8Daniel Dunbar ArgStringList &CmdArgs) const = 0; 949c073ff462eb75ccbb1c4446e21c148f3fc618e1Daniel Dunbar }; 959c073ff462eb75ccbb1c4446e21c148f3fc618e1Daniel Dunbar 961eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump 9792dd1915842410005c68d32c43bb3b3cf5a4a702Duncan Sands class LLVM_LIBRARY_VISIBILITY Preprocess : public Common { 989c073ff462eb75ccbb1c4446e21c148f3fc618e1Daniel Dunbar public: 993038204fd8f6ff22082dd18e4b12ed252b75a5e4Daniel Dunbar Preprocess(const ToolChain &TC) : Common("gcc::Preprocess", 1003038204fd8f6ff22082dd18e4b12ed252b75a5e4Daniel Dunbar "gcc preprocessor", TC) {} 101b488c1dac8e53206f07103d794a62a3f5012c0f4Daniel Dunbar 10260a53f24b160724de0e8dd0e142009981540fd26Daniel Dunbar virtual bool hasGoodDiagnostics() const { return true; } 103b488c1dac8e53206f07103d794a62a3f5012c0f4Daniel Dunbar virtual bool hasIntegratedCPP() const { return false; } 104b488c1dac8e53206f07103d794a62a3f5012c0f4Daniel Dunbar 10582b51cce8cea6b6bb6175c406c2ab425c91d9dc8Daniel Dunbar virtual void RenderExtraToolArgs(const JobAction &JA, 10682b51cce8cea6b6bb6175c406c2ab425c91d9dc8Daniel Dunbar ArgStringList &CmdArgs) const; 107b488c1dac8e53206f07103d794a62a3f5012c0f4Daniel Dunbar }; 108b488c1dac8e53206f07103d794a62a3f5012c0f4Daniel Dunbar 10992dd1915842410005c68d32c43bb3b3cf5a4a702Duncan Sands class LLVM_LIBRARY_VISIBILITY Precompile : public Common { 110b488c1dac8e53206f07103d794a62a3f5012c0f4Daniel Dunbar public: 1113038204fd8f6ff22082dd18e4b12ed252b75a5e4Daniel Dunbar Precompile(const ToolChain &TC) : Common("gcc::Precompile", 1123038204fd8f6ff22082dd18e4b12ed252b75a5e4Daniel Dunbar "gcc precompile", TC) {} 1139c073ff462eb75ccbb1c4446e21c148f3fc618e1Daniel Dunbar 11460a53f24b160724de0e8dd0e142009981540fd26Daniel Dunbar virtual bool hasGoodDiagnostics() const { return true; } 1159c073ff462eb75ccbb1c4446e21c148f3fc618e1Daniel Dunbar virtual bool hasIntegratedCPP() const { return true; } 11647ac7d27c44bd64a7d0fc03d4babc196cf2b8230Daniel Dunbar 11782b51cce8cea6b6bb6175c406c2ab425c91d9dc8Daniel Dunbar virtual void RenderExtraToolArgs(const JobAction &JA, 11882b51cce8cea6b6bb6175c406c2ab425c91d9dc8Daniel Dunbar ArgStringList &CmdArgs) const; 1199c073ff462eb75ccbb1c4446e21c148f3fc618e1Daniel Dunbar }; 1209c073ff462eb75ccbb1c4446e21c148f3fc618e1Daniel Dunbar 12192dd1915842410005c68d32c43bb3b3cf5a4a702Duncan Sands class LLVM_LIBRARY_VISIBILITY Compile : public Common { 1229c073ff462eb75ccbb1c4446e21c148f3fc618e1Daniel Dunbar public: 1233038204fd8f6ff22082dd18e4b12ed252b75a5e4Daniel Dunbar Compile(const ToolChain &TC) : Common("gcc::Compile", 1243038204fd8f6ff22082dd18e4b12ed252b75a5e4Daniel Dunbar "gcc frontend", TC) {} 1259c073ff462eb75ccbb1c4446e21c148f3fc618e1Daniel Dunbar 12660a53f24b160724de0e8dd0e142009981540fd26Daniel Dunbar virtual bool hasGoodDiagnostics() const { return true; } 1279c073ff462eb75ccbb1c4446e21c148f3fc618e1Daniel Dunbar virtual bool hasIntegratedCPP() const { return true; } 12847ac7d27c44bd64a7d0fc03d4babc196cf2b8230Daniel Dunbar 12982b51cce8cea6b6bb6175c406c2ab425c91d9dc8Daniel Dunbar virtual void RenderExtraToolArgs(const JobAction &JA, 13082b51cce8cea6b6bb6175c406c2ab425c91d9dc8Daniel Dunbar ArgStringList &CmdArgs) const; 1319c073ff462eb75ccbb1c4446e21c148f3fc618e1Daniel Dunbar }; 1329c073ff462eb75ccbb1c4446e21c148f3fc618e1Daniel Dunbar 13392dd1915842410005c68d32c43bb3b3cf5a4a702Duncan Sands class LLVM_LIBRARY_VISIBILITY Assemble : public Common { 1349c073ff462eb75ccbb1c4446e21c148f3fc618e1Daniel Dunbar public: 1353038204fd8f6ff22082dd18e4b12ed252b75a5e4Daniel Dunbar Assemble(const ToolChain &TC) : Common("gcc::Assemble", 1363038204fd8f6ff22082dd18e4b12ed252b75a5e4Daniel Dunbar "assembler (via gcc)", TC) {} 1379c073ff462eb75ccbb1c4446e21c148f3fc618e1Daniel Dunbar 1389c073ff462eb75ccbb1c4446e21c148f3fc618e1Daniel Dunbar virtual bool hasIntegratedCPP() const { return false; } 13947ac7d27c44bd64a7d0fc03d4babc196cf2b8230Daniel Dunbar 14082b51cce8cea6b6bb6175c406c2ab425c91d9dc8Daniel Dunbar virtual void RenderExtraToolArgs(const JobAction &JA, 14182b51cce8cea6b6bb6175c406c2ab425c91d9dc8Daniel Dunbar ArgStringList &CmdArgs) const; 1429c073ff462eb75ccbb1c4446e21c148f3fc618e1Daniel Dunbar }; 1439c073ff462eb75ccbb1c4446e21c148f3fc618e1Daniel Dunbar 14492dd1915842410005c68d32c43bb3b3cf5a4a702Duncan Sands class LLVM_LIBRARY_VISIBILITY Link : public Common { 1459c073ff462eb75ccbb1c4446e21c148f3fc618e1Daniel Dunbar public: 1463038204fd8f6ff22082dd18e4b12ed252b75a5e4Daniel Dunbar Link(const ToolChain &TC) : Common("gcc::Link", 1473038204fd8f6ff22082dd18e4b12ed252b75a5e4Daniel Dunbar "linker (via gcc)", TC) {} 1489c073ff462eb75ccbb1c4446e21c148f3fc618e1Daniel Dunbar 1499c073ff462eb75ccbb1c4446e21c148f3fc618e1Daniel Dunbar virtual bool hasIntegratedCPP() const { return false; } 15047ac7d27c44bd64a7d0fc03d4babc196cf2b8230Daniel Dunbar 15182b51cce8cea6b6bb6175c406c2ab425c91d9dc8Daniel Dunbar virtual void RenderExtraToolArgs(const JobAction &JA, 15282b51cce8cea6b6bb6175c406c2ab425c91d9dc8Daniel Dunbar ArgStringList &CmdArgs) const; 1539c073ff462eb75ccbb1c4446e21c148f3fc618e1Daniel Dunbar }; 15431b1e5437e7435879fc044afb77ff27096008e72Daniel Dunbar} // end namespace gcc 1559c073ff462eb75ccbb1c4446e21c148f3fc618e1Daniel Dunbar 1569631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicumnamespace hexagon { 1579631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum // For Hexagon, we do not need to instantiate tools for PreProcess, PreCompile and Compile. 1589631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum // We simply use "clang -cc1" for those actions. 1599631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum class LLVM_LIBRARY_VISIBILITY Assemble : public Tool { 1609631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum public: 1619631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum Assemble(const ToolChain &TC) : Tool("hexagon::Assemble", 1629631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum "hexagon-as", TC) {} 1639631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum 1649631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum virtual bool hasIntegratedCPP() const { return false; } 1659631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum 1669631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum virtual void RenderExtraToolArgs(const JobAction &JA, 1679631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum ArgStringList &CmdArgs) const; 1689631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum virtual void ConstructJob(Compilation &C, const JobAction &JA, 1699631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum const InputInfo &Output, 1709631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum const InputInfoList &Inputs, 1719631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum const ArgList &TCArgs, 1729631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum const char *LinkingOutput) const; 1739631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum }; 1749631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum 1759631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum class LLVM_LIBRARY_VISIBILITY Link : public Tool { 1769631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum public: 1779631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum Link(const ToolChain &TC) : Tool("hexagon::Link", 1789631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum "hexagon-ld", TC) {} 1799631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum 1809631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum virtual bool hasIntegratedCPP() const { return false; } 1819631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum 1829631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum virtual void RenderExtraToolArgs(const JobAction &JA, 1839631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum ArgStringList &CmdArgs) const; 1849631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum virtual void ConstructJob(Compilation &C, const JobAction &JA, 1859631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum const InputInfo &Output, 1869631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum const InputInfoList &Inputs, 1879631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum const ArgList &TCArgs, 1889631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum const char *LinkingOutput) const; 1899631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum }; 1909631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum} // end namespace hexagon. 1919631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum 1929631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum 193ff7488dc9a766f94daf54d81b03ab9160d0bfd88Daniel Dunbarnamespace darwin { 19492dd1915842410005c68d32c43bb3b3cf5a4a702Duncan Sands class LLVM_LIBRARY_VISIBILITY DarwinTool : public Tool { 195fbefe6bd6f62a3361813498dc672ab0d6c0d4fd1Daniel Dunbar protected: 196fbefe6bd6f62a3361813498dc672ab0d6c0d4fd1Daniel Dunbar void AddDarwinArch(const ArgList &Args, ArgStringList &CmdArgs) const; 197fbefe6bd6f62a3361813498dc672ab0d6c0d4fd1Daniel Dunbar 198fbefe6bd6f62a3361813498dc672ab0d6c0d4fd1Daniel Dunbar const toolchains::Darwin &getDarwinToolChain() const { 199fbefe6bd6f62a3361813498dc672ab0d6c0d4fd1Daniel Dunbar return reinterpret_cast<const toolchains::Darwin&>(getToolChain()); 200fbefe6bd6f62a3361813498dc672ab0d6c0d4fd1Daniel Dunbar } 201fbefe6bd6f62a3361813498dc672ab0d6c0d4fd1Daniel Dunbar 202fbefe6bd6f62a3361813498dc672ab0d6c0d4fd1Daniel Dunbar public: 2033038204fd8f6ff22082dd18e4b12ed252b75a5e4Daniel Dunbar DarwinTool(const char *Name, const char *ShortName, 2043038204fd8f6ff22082dd18e4b12ed252b75a5e4Daniel Dunbar const ToolChain &TC) : Tool(Name, ShortName, TC) {} 205fbefe6bd6f62a3361813498dc672ab0d6c0d4fd1Daniel Dunbar }; 206fbefe6bd6f62a3361813498dc672ab0d6c0d4fd1Daniel Dunbar 20792dd1915842410005c68d32c43bb3b3cf5a4a702Duncan Sands class LLVM_LIBRARY_VISIBILITY CC1 : public DarwinTool { 208a5a7bd0de7b6b80212095195a055a4a43f21d4b2Daniel Dunbar public: 2091eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump static const char *getBaseInputName(const ArgList &Args, 210a5a7bd0de7b6b80212095195a055a4a43f21d4b2Daniel Dunbar const InputInfoList &Input); 2111eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump static const char *getBaseInputStem(const ArgList &Args, 212a5a7bd0de7b6b80212095195a055a4a43f21d4b2Daniel Dunbar const InputInfoList &Input); 2131eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump static const char *getDependencyFileName(const ArgList &Args, 214a5a7bd0de7b6b80212095195a055a4a43f21d4b2Daniel Dunbar const InputInfoList &Inputs); 215a5a7bd0de7b6b80212095195a055a4a43f21d4b2Daniel Dunbar 21640f1265ebd42ece3e7f7917319b56012e8e2bce2Daniel Dunbar protected: 21740f1265ebd42ece3e7f7917319b56012e8e2bce2Daniel Dunbar const char *getCC1Name(types::ID Type) const; 218a3ec60e0cf2a1916f479288998d31bd980b1a306Daniel Dunbar 219a3ec60e0cf2a1916f479288998d31bd980b1a306Daniel Dunbar void AddCC1Args(const ArgList &Args, ArgStringList &CmdArgs) const; 220285f9a284704c07cd50e4597408d5f93518cd7c3Chad Rosier void RemoveCC1UnsupportedArgs(ArgStringList &CmdArgs) const; 22140f1265ebd42ece3e7f7917319b56012e8e2bce2Daniel Dunbar void AddCC1OptionsArgs(const ArgList &Args, ArgStringList &CmdArgs, 22240f1265ebd42ece3e7f7917319b56012e8e2bce2Daniel Dunbar const InputInfoList &Inputs, 223a3ec60e0cf2a1916f479288998d31bd980b1a306Daniel Dunbar const ArgStringList &OutputArgs) const; 22440f1265ebd42ece3e7f7917319b56012e8e2bce2Daniel Dunbar void AddCPPOptionsArgs(const ArgList &Args, ArgStringList &CmdArgs, 22540f1265ebd42ece3e7f7917319b56012e8e2bce2Daniel Dunbar const InputInfoList &Inputs, 226a3ec60e0cf2a1916f479288998d31bd980b1a306Daniel Dunbar const ArgStringList &OutputArgs) const; 2271eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump void AddCPPUniqueOptionsArgs(const ArgList &Args, 228a3ec60e0cf2a1916f479288998d31bd980b1a306Daniel Dunbar ArgStringList &CmdArgs, 229a3ec60e0cf2a1916f479288998d31bd980b1a306Daniel Dunbar const InputInfoList &Inputs) const; 230a3ec60e0cf2a1916f479288998d31bd980b1a306Daniel Dunbar void AddCPPArgs(const ArgList &Args, ArgStringList &CmdArgs) const; 23140f1265ebd42ece3e7f7917319b56012e8e2bce2Daniel Dunbar 23240f1265ebd42ece3e7f7917319b56012e8e2bce2Daniel Dunbar public: 2333038204fd8f6ff22082dd18e4b12ed252b75a5e4Daniel Dunbar CC1(const char *Name, const char *ShortName, 2343038204fd8f6ff22082dd18e4b12ed252b75a5e4Daniel Dunbar const ToolChain &TC) : DarwinTool(Name, ShortName, TC) {} 23540f1265ebd42ece3e7f7917319b56012e8e2bce2Daniel Dunbar 23660a53f24b160724de0e8dd0e142009981540fd26Daniel Dunbar virtual bool hasGoodDiagnostics() const { return true; } 23740f1265ebd42ece3e7f7917319b56012e8e2bce2Daniel Dunbar virtual bool hasIntegratedCPP() const { return true; } 23840f1265ebd42ece3e7f7917319b56012e8e2bce2Daniel Dunbar }; 23940f1265ebd42ece3e7f7917319b56012e8e2bce2Daniel Dunbar 24092dd1915842410005c68d32c43bb3b3cf5a4a702Duncan Sands class LLVM_LIBRARY_VISIBILITY Preprocess : public CC1 { 24140f1265ebd42ece3e7f7917319b56012e8e2bce2Daniel Dunbar public: 2423038204fd8f6ff22082dd18e4b12ed252b75a5e4Daniel Dunbar Preprocess(const ToolChain &TC) : CC1("darwin::Preprocess", 2433038204fd8f6ff22082dd18e4b12ed252b75a5e4Daniel Dunbar "gcc preprocessor", TC) {} 24440f1265ebd42ece3e7f7917319b56012e8e2bce2Daniel Dunbar 24540f1265ebd42ece3e7f7917319b56012e8e2bce2Daniel Dunbar virtual void ConstructJob(Compilation &C, const JobAction &JA, 2461eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump const InputInfo &Output, 2471eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump const InputInfoList &Inputs, 2481eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump const ArgList &TCArgs, 24940f1265ebd42ece3e7f7917319b56012e8e2bce2Daniel Dunbar const char *LinkingOutput) const; 25040f1265ebd42ece3e7f7917319b56012e8e2bce2Daniel Dunbar }; 25140f1265ebd42ece3e7f7917319b56012e8e2bce2Daniel Dunbar 25292dd1915842410005c68d32c43bb3b3cf5a4a702Duncan Sands class LLVM_LIBRARY_VISIBILITY Compile : public CC1 { 25340f1265ebd42ece3e7f7917319b56012e8e2bce2Daniel Dunbar public: 2543038204fd8f6ff22082dd18e4b12ed252b75a5e4Daniel Dunbar Compile(const ToolChain &TC) : CC1("darwin::Compile", "gcc frontend", TC) {} 25540f1265ebd42ece3e7f7917319b56012e8e2bce2Daniel Dunbar 25640f1265ebd42ece3e7f7917319b56012e8e2bce2Daniel Dunbar virtual void ConstructJob(Compilation &C, const JobAction &JA, 2571eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump const InputInfo &Output, 2581eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump const InputInfoList &Inputs, 2591eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump const ArgList &TCArgs, 26040f1265ebd42ece3e7f7917319b56012e8e2bce2Daniel Dunbar const char *LinkingOutput) const; 26140f1265ebd42ece3e7f7917319b56012e8e2bce2Daniel Dunbar }; 26240f1265ebd42ece3e7f7917319b56012e8e2bce2Daniel Dunbar 26392dd1915842410005c68d32c43bb3b3cf5a4a702Duncan Sands class LLVM_LIBRARY_VISIBILITY Assemble : public DarwinTool { 2648cac5f7e1ce63dd77ee0fb4ef68f9fa804f41ea6Daniel Dunbar public: 2653038204fd8f6ff22082dd18e4b12ed252b75a5e4Daniel Dunbar Assemble(const ToolChain &TC) : DarwinTool("darwin::Assemble", 2663038204fd8f6ff22082dd18e4b12ed252b75a5e4Daniel Dunbar "assembler", TC) {} 2678cac5f7e1ce63dd77ee0fb4ef68f9fa804f41ea6Daniel Dunbar 2688cac5f7e1ce63dd77ee0fb4ef68f9fa804f41ea6Daniel Dunbar virtual bool hasIntegratedCPP() const { return false; } 2698cac5f7e1ce63dd77ee0fb4ef68f9fa804f41ea6Daniel Dunbar 2708cac5f7e1ce63dd77ee0fb4ef68f9fa804f41ea6Daniel Dunbar virtual void ConstructJob(Compilation &C, const JobAction &JA, 2711eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump const InputInfo &Output, 2721eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump const InputInfoList &Inputs, 2731eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump const ArgList &TCArgs, 27402633b541b04ad5ffc1c70f4c2feeeb13e607057Daniel Dunbar const char *LinkingOutput) const; 27502633b541b04ad5ffc1c70f4c2feeeb13e607057Daniel Dunbar }; 27602633b541b04ad5ffc1c70f4c2feeeb13e607057Daniel Dunbar 27792dd1915842410005c68d32c43bb3b3cf5a4a702Duncan Sands class LLVM_LIBRARY_VISIBILITY Link : public DarwinTool { 278748de8eda222f087434d8bd703176b316a061341Daniel Dunbar void AddLinkArgs(Compilation &C, const ArgList &Args, 279748de8eda222f087434d8bd703176b316a061341Daniel Dunbar ArgStringList &CmdArgs) const; 28002633b541b04ad5ffc1c70f4c2feeeb13e607057Daniel Dunbar 28102633b541b04ad5ffc1c70f4c2feeeb13e607057Daniel Dunbar public: 2823038204fd8f6ff22082dd18e4b12ed252b75a5e4Daniel Dunbar Link(const ToolChain &TC) : DarwinTool("darwin::Link", "linker", TC) {} 28302633b541b04ad5ffc1c70f4c2feeeb13e607057Daniel Dunbar 28402633b541b04ad5ffc1c70f4c2feeeb13e607057Daniel Dunbar virtual bool hasIntegratedCPP() const { return false; } 28502633b541b04ad5ffc1c70f4c2feeeb13e607057Daniel Dunbar 28602633b541b04ad5ffc1c70f4c2feeeb13e607057Daniel Dunbar virtual void ConstructJob(Compilation &C, const JobAction &JA, 2871eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump const InputInfo &Output, 2881eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump const InputInfoList &Inputs, 2891eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump const ArgList &TCArgs, 2908cac5f7e1ce63dd77ee0fb4ef68f9fa804f41ea6Daniel Dunbar const char *LinkingOutput) const; 2918cac5f7e1ce63dd77ee0fb4ef68f9fa804f41ea6Daniel Dunbar }; 2928cac5f7e1ce63dd77ee0fb4ef68f9fa804f41ea6Daniel Dunbar 29392dd1915842410005c68d32c43bb3b3cf5a4a702Duncan Sands class LLVM_LIBRARY_VISIBILITY Lipo : public DarwinTool { 294ff7488dc9a766f94daf54d81b03ab9160d0bfd88Daniel Dunbar public: 2953038204fd8f6ff22082dd18e4b12ed252b75a5e4Daniel Dunbar Lipo(const ToolChain &TC) : DarwinTool("darwin::Lipo", "lipo", TC) {} 296ff7488dc9a766f94daf54d81b03ab9160d0bfd88Daniel Dunbar 297ff7488dc9a766f94daf54d81b03ab9160d0bfd88Daniel Dunbar virtual bool hasIntegratedCPP() const { return false; } 298ff7488dc9a766f94daf54d81b03ab9160d0bfd88Daniel Dunbar 299ff7488dc9a766f94daf54d81b03ab9160d0bfd88Daniel Dunbar virtual void ConstructJob(Compilation &C, const JobAction &JA, 3001eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump const InputInfo &Output, 3011eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump const InputInfoList &Inputs, 3021eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump const ArgList &TCArgs, 3036e0f25483b1a801cd1155ea89c2b725feab16332Daniel Dunbar const char *LinkingOutput) const; 3046e0f25483b1a801cd1155ea89c2b725feab16332Daniel Dunbar }; 3056e0f25483b1a801cd1155ea89c2b725feab16332Daniel Dunbar 3066e0f25483b1a801cd1155ea89c2b725feab16332Daniel Dunbar class LLVM_LIBRARY_VISIBILITY Dsymutil : public DarwinTool { 3076e0f25483b1a801cd1155ea89c2b725feab16332Daniel Dunbar public: 3086e0f25483b1a801cd1155ea89c2b725feab16332Daniel Dunbar Dsymutil(const ToolChain &TC) : DarwinTool("darwin::Dsymutil", 3096e0f25483b1a801cd1155ea89c2b725feab16332Daniel Dunbar "dsymutil", TC) {} 3106e0f25483b1a801cd1155ea89c2b725feab16332Daniel Dunbar 3116e0f25483b1a801cd1155ea89c2b725feab16332Daniel Dunbar virtual bool hasIntegratedCPP() const { return false; } 3126e0f25483b1a801cd1155ea89c2b725feab16332Daniel Dunbar 3136e0f25483b1a801cd1155ea89c2b725feab16332Daniel Dunbar virtual void ConstructJob(Compilation &C, const JobAction &JA, 3146e0f25483b1a801cd1155ea89c2b725feab16332Daniel Dunbar const InputInfo &Output, 3156e0f25483b1a801cd1155ea89c2b725feab16332Daniel Dunbar const InputInfoList &Inputs, 3166e0f25483b1a801cd1155ea89c2b725feab16332Daniel Dunbar const ArgList &TCArgs, 317f7b8eec37c8c8012fa525c71fb29a58c9f29beefDaniel Dunbar const char *LinkingOutput) const; 318f7b8eec37c8c8012fa525c71fb29a58c9f29beefDaniel Dunbar }; 319f857186fd1995b34185d063a29b11ad4f948519fEric Christopher 320f857186fd1995b34185d063a29b11ad4f948519fEric Christopher class LLVM_LIBRARY_VISIBILITY VerifyDebug : public DarwinTool { 321f857186fd1995b34185d063a29b11ad4f948519fEric Christopher public: 322f857186fd1995b34185d063a29b11ad4f948519fEric Christopher VerifyDebug(const ToolChain &TC) : DarwinTool("darwin::VerifyDebug", 323f857186fd1995b34185d063a29b11ad4f948519fEric Christopher "dwarfdump", TC) {} 324f857186fd1995b34185d063a29b11ad4f948519fEric Christopher 325f857186fd1995b34185d063a29b11ad4f948519fEric Christopher virtual bool hasIntegratedCPP() const { return false; } 326f857186fd1995b34185d063a29b11ad4f948519fEric Christopher 327f857186fd1995b34185d063a29b11ad4f948519fEric Christopher virtual void ConstructJob(Compilation &C, const JobAction &JA, 328f857186fd1995b34185d063a29b11ad4f948519fEric Christopher const InputInfo &Output, 329f857186fd1995b34185d063a29b11ad4f948519fEric Christopher const InputInfoList &Inputs, 330f857186fd1995b34185d063a29b11ad4f948519fEric Christopher const ArgList &TCArgs, 331f857186fd1995b34185d063a29b11ad4f948519fEric Christopher const char *LinkingOutput) const; 332f857186fd1995b34185d063a29b11ad4f948519fEric Christopher }; 333f857186fd1995b34185d063a29b11ad4f948519fEric Christopher 334f7b8eec37c8c8012fa525c71fb29a58c9f29beefDaniel Dunbar} 335f7b8eec37c8c8012fa525c71fb29a58c9f29beefDaniel Dunbar 336f7b8eec37c8c8012fa525c71fb29a58c9f29beefDaniel Dunbar /// openbsd -- Directly call GNU Binutils assembler and linker 337f7b8eec37c8c8012fa525c71fb29a58c9f29beefDaniel Dunbarnamespace openbsd { 33892dd1915842410005c68d32c43bb3b3cf5a4a702Duncan Sands class LLVM_LIBRARY_VISIBILITY Assemble : public Tool { 339f7b8eec37c8c8012fa525c71fb29a58c9f29beefDaniel Dunbar public: 3403038204fd8f6ff22082dd18e4b12ed252b75a5e4Daniel Dunbar Assemble(const ToolChain &TC) : Tool("openbsd::Assemble", "assembler", 3413038204fd8f6ff22082dd18e4b12ed252b75a5e4Daniel Dunbar TC) {} 342f7b8eec37c8c8012fa525c71fb29a58c9f29beefDaniel Dunbar 343f7b8eec37c8c8012fa525c71fb29a58c9f29beefDaniel Dunbar virtual bool hasIntegratedCPP() const { return false; } 344f7b8eec37c8c8012fa525c71fb29a58c9f29beefDaniel Dunbar 345f7b8eec37c8c8012fa525c71fb29a58c9f29beefDaniel Dunbar virtual void ConstructJob(Compilation &C, const JobAction &JA, 3461eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump const InputInfo &Output, 3471eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump const InputInfoList &Inputs, 3481eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump const ArgList &TCArgs, 349f7b8eec37c8c8012fa525c71fb29a58c9f29beefDaniel Dunbar const char *LinkingOutput) const; 350f7b8eec37c8c8012fa525c71fb29a58c9f29beefDaniel Dunbar }; 35192dd1915842410005c68d32c43bb3b3cf5a4a702Duncan Sands class LLVM_LIBRARY_VISIBILITY Link : public Tool { 352f7b8eec37c8c8012fa525c71fb29a58c9f29beefDaniel Dunbar public: 3533038204fd8f6ff22082dd18e4b12ed252b75a5e4Daniel Dunbar Link(const ToolChain &TC) : Tool("openbsd::Link", "linker", TC) {} 354f7b8eec37c8c8012fa525c71fb29a58c9f29beefDaniel Dunbar 355f7b8eec37c8c8012fa525c71fb29a58c9f29beefDaniel Dunbar virtual bool hasIntegratedCPP() const { return false; } 356f7b8eec37c8c8012fa525c71fb29a58c9f29beefDaniel Dunbar 357f7b8eec37c8c8012fa525c71fb29a58c9f29beefDaniel Dunbar virtual void ConstructJob(Compilation &C, const JobAction &JA, 3581eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump const InputInfo &Output, 3591eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump const InputInfoList &Inputs, 3601eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump const ArgList &TCArgs, 361ff7488dc9a766f94daf54d81b03ab9160d0bfd88Daniel Dunbar const char *LinkingOutput) const; 362ff7488dc9a766f94daf54d81b03ab9160d0bfd88Daniel Dunbar }; 363e7925a075f110ab21afeae084670a155dea568e3Edward O'Callaghan} // end namespace openbsd 364ff7488dc9a766f94daf54d81b03ab9160d0bfd88Daniel Dunbar 36568a31d406c6dc4382c700d1199b062de2aa7e1daDaniel Dunbar /// freebsd -- Directly call GNU Binutils assembler and linker 36668a31d406c6dc4382c700d1199b062de2aa7e1daDaniel Dunbarnamespace freebsd { 36792dd1915842410005c68d32c43bb3b3cf5a4a702Duncan Sands class LLVM_LIBRARY_VISIBILITY Assemble : public Tool { 36868a31d406c6dc4382c700d1199b062de2aa7e1daDaniel Dunbar public: 3693038204fd8f6ff22082dd18e4b12ed252b75a5e4Daniel Dunbar Assemble(const ToolChain &TC) : Tool("freebsd::Assemble", "assembler", 3703038204fd8f6ff22082dd18e4b12ed252b75a5e4Daniel Dunbar TC) {} 37168a31d406c6dc4382c700d1199b062de2aa7e1daDaniel Dunbar 37268a31d406c6dc4382c700d1199b062de2aa7e1daDaniel Dunbar virtual bool hasIntegratedCPP() const { return false; } 37368a31d406c6dc4382c700d1199b062de2aa7e1daDaniel Dunbar 37468a31d406c6dc4382c700d1199b062de2aa7e1daDaniel Dunbar virtual void ConstructJob(Compilation &C, const JobAction &JA, 3751eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump const InputInfo &Output, 3761eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump const InputInfoList &Inputs, 3771eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump const ArgList &TCArgs, 37868a31d406c6dc4382c700d1199b062de2aa7e1daDaniel Dunbar const char *LinkingOutput) const; 37968a31d406c6dc4382c700d1199b062de2aa7e1daDaniel Dunbar }; 38092dd1915842410005c68d32c43bb3b3cf5a4a702Duncan Sands class LLVM_LIBRARY_VISIBILITY Link : public Tool { 381008f54a54299eaafdaa940e2bdeaf55935ecd95aDaniel Dunbar public: 3823038204fd8f6ff22082dd18e4b12ed252b75a5e4Daniel Dunbar Link(const ToolChain &TC) : Tool("freebsd::Link", "linker", TC) {} 383008f54a54299eaafdaa940e2bdeaf55935ecd95aDaniel Dunbar 384008f54a54299eaafdaa940e2bdeaf55935ecd95aDaniel Dunbar virtual bool hasIntegratedCPP() const { return false; } 385008f54a54299eaafdaa940e2bdeaf55935ecd95aDaniel Dunbar 386008f54a54299eaafdaa940e2bdeaf55935ecd95aDaniel Dunbar virtual void ConstructJob(Compilation &C, const JobAction &JA, 3871eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump const InputInfo &Output, 3881eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump const InputInfoList &Inputs, 3891eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump const ArgList &TCArgs, 390008f54a54299eaafdaa940e2bdeaf55935ecd95aDaniel Dunbar const char *LinkingOutput) const; 391008f54a54299eaafdaa940e2bdeaf55935ecd95aDaniel Dunbar }; 392e7925a075f110ab21afeae084670a155dea568e3Edward O'Callaghan} // end namespace freebsd 393e7925a075f110ab21afeae084670a155dea568e3Edward O'Callaghan 3948e50a96b387dca7525caa8a6add31420dd82a2cdBenjamin Kramer /// netbsd -- Directly call GNU Binutils assembler and linker 3958e50a96b387dca7525caa8a6add31420dd82a2cdBenjamin Kramernamespace netbsd { 3968e50a96b387dca7525caa8a6add31420dd82a2cdBenjamin Kramer class LLVM_LIBRARY_VISIBILITY Assemble : public Tool { 397182564cd14a2105fff05fd52f5940eff96161d57Joerg Sonnenberger private: 398182564cd14a2105fff05fd52f5940eff96161d57Joerg Sonnenberger const llvm::Triple ToolTriple; 399182564cd14a2105fff05fd52f5940eff96161d57Joerg Sonnenberger 4008e50a96b387dca7525caa8a6add31420dd82a2cdBenjamin Kramer public: 401182564cd14a2105fff05fd52f5940eff96161d57Joerg Sonnenberger Assemble(const ToolChain &TC, const llvm::Triple &ToolTriple) 402182564cd14a2105fff05fd52f5940eff96161d57Joerg Sonnenberger : Tool("netbsd::Assemble", "assembler", TC), ToolTriple(ToolTriple) {} 4038e50a96b387dca7525caa8a6add31420dd82a2cdBenjamin Kramer 4048e50a96b387dca7525caa8a6add31420dd82a2cdBenjamin Kramer virtual bool hasIntegratedCPP() const { return false; } 4058e50a96b387dca7525caa8a6add31420dd82a2cdBenjamin Kramer 4068e50a96b387dca7525caa8a6add31420dd82a2cdBenjamin Kramer virtual void ConstructJob(Compilation &C, const JobAction &JA, 4078e50a96b387dca7525caa8a6add31420dd82a2cdBenjamin Kramer const InputInfo &Output, 4088e50a96b387dca7525caa8a6add31420dd82a2cdBenjamin Kramer const InputInfoList &Inputs, 4098e50a96b387dca7525caa8a6add31420dd82a2cdBenjamin Kramer const ArgList &TCArgs, 4108e50a96b387dca7525caa8a6add31420dd82a2cdBenjamin Kramer const char *LinkingOutput) const; 4118e50a96b387dca7525caa8a6add31420dd82a2cdBenjamin Kramer }; 4128e50a96b387dca7525caa8a6add31420dd82a2cdBenjamin Kramer class LLVM_LIBRARY_VISIBILITY Link : public Tool { 413182564cd14a2105fff05fd52f5940eff96161d57Joerg Sonnenberger private: 414182564cd14a2105fff05fd52f5940eff96161d57Joerg Sonnenberger const llvm::Triple ToolTriple; 415182564cd14a2105fff05fd52f5940eff96161d57Joerg Sonnenberger 4168e50a96b387dca7525caa8a6add31420dd82a2cdBenjamin Kramer public: 417182564cd14a2105fff05fd52f5940eff96161d57Joerg Sonnenberger Link(const ToolChain &TC, const llvm::Triple &ToolTriple) 418468eb7ddd69b5d545139fc46a3b730268c458f38Joerg Sonnenberger : Tool("netbsd::Link", "linker", TC), ToolTriple(ToolTriple) {} 4198e50a96b387dca7525caa8a6add31420dd82a2cdBenjamin Kramer 4208e50a96b387dca7525caa8a6add31420dd82a2cdBenjamin Kramer virtual bool hasIntegratedCPP() const { return false; } 4218e50a96b387dca7525caa8a6add31420dd82a2cdBenjamin Kramer 4228e50a96b387dca7525caa8a6add31420dd82a2cdBenjamin Kramer virtual void ConstructJob(Compilation &C, const JobAction &JA, 4238e50a96b387dca7525caa8a6add31420dd82a2cdBenjamin Kramer const InputInfo &Output, 4248e50a96b387dca7525caa8a6add31420dd82a2cdBenjamin Kramer const InputInfoList &Inputs, 4258e50a96b387dca7525caa8a6add31420dd82a2cdBenjamin Kramer const ArgList &TCArgs, 4268e50a96b387dca7525caa8a6add31420dd82a2cdBenjamin Kramer const char *LinkingOutput) const; 4278e50a96b387dca7525caa8a6add31420dd82a2cdBenjamin Kramer }; 4288e50a96b387dca7525caa8a6add31420dd82a2cdBenjamin Kramer} // end namespace netbsd 4298e50a96b387dca7525caa8a6add31420dd82a2cdBenjamin Kramer 430ba30bbe4e36a30a274da809a11a42f9cdc168e92Rafael Espindola /// linux -- Directly call GNU Binutils assembler and linker 431ba30bbe4e36a30a274da809a11a42f9cdc168e92Rafael Espindolanamespace linuxtools { 432ba30bbe4e36a30a274da809a11a42f9cdc168e92Rafael Espindola class LLVM_LIBRARY_VISIBILITY Assemble : public Tool { 433ba30bbe4e36a30a274da809a11a42f9cdc168e92Rafael Espindola public: 434ba30bbe4e36a30a274da809a11a42f9cdc168e92Rafael Espindola Assemble(const ToolChain &TC) : Tool("linux::Assemble", "assembler", 435ba30bbe4e36a30a274da809a11a42f9cdc168e92Rafael Espindola TC) {} 436ba30bbe4e36a30a274da809a11a42f9cdc168e92Rafael Espindola 437ba30bbe4e36a30a274da809a11a42f9cdc168e92Rafael Espindola virtual bool hasIntegratedCPP() const { return false; } 438ba30bbe4e36a30a274da809a11a42f9cdc168e92Rafael Espindola 439ba30bbe4e36a30a274da809a11a42f9cdc168e92Rafael Espindola virtual void ConstructJob(Compilation &C, const JobAction &JA, 440ba30bbe4e36a30a274da809a11a42f9cdc168e92Rafael Espindola const InputInfo &Output, 441ba30bbe4e36a30a274da809a11a42f9cdc168e92Rafael Espindola const InputInfoList &Inputs, 442ba30bbe4e36a30a274da809a11a42f9cdc168e92Rafael Espindola const ArgList &TCArgs, 443ba30bbe4e36a30a274da809a11a42f9cdc168e92Rafael Espindola const char *LinkingOutput) const; 444ba30bbe4e36a30a274da809a11a42f9cdc168e92Rafael Espindola }; 445c1da981bba867681004004b2d54ec2fdf3c08913Rafael Espindola class LLVM_LIBRARY_VISIBILITY Link : public Tool { 446c1da981bba867681004004b2d54ec2fdf3c08913Rafael Espindola public: 447c1da981bba867681004004b2d54ec2fdf3c08913Rafael Espindola Link(const ToolChain &TC) : Tool("linux::Link", "linker", TC) {} 448c1da981bba867681004004b2d54ec2fdf3c08913Rafael Espindola 449c1da981bba867681004004b2d54ec2fdf3c08913Rafael Espindola virtual bool hasIntegratedCPP() const { return false; } 450c1da981bba867681004004b2d54ec2fdf3c08913Rafael Espindola 451c1da981bba867681004004b2d54ec2fdf3c08913Rafael Espindola virtual void ConstructJob(Compilation &C, const JobAction &JA, 452c1da981bba867681004004b2d54ec2fdf3c08913Rafael Espindola const InputInfo &Output, 453c1da981bba867681004004b2d54ec2fdf3c08913Rafael Espindola const InputInfoList &Inputs, 454c1da981bba867681004004b2d54ec2fdf3c08913Rafael Espindola const ArgList &TCArgs, 455c1da981bba867681004004b2d54ec2fdf3c08913Rafael Espindola const char *LinkingOutput) const; 456c1da981bba867681004004b2d54ec2fdf3c08913Rafael Espindola }; 457ba30bbe4e36a30a274da809a11a42f9cdc168e92Rafael Espindola} 45838e317d6dce161b249508686cc67eb7176958762Chris Lattner /// minix -- Directly call GNU Binutils assembler and linker 45938e317d6dce161b249508686cc67eb7176958762Chris Lattnernamespace minix { 46038e317d6dce161b249508686cc67eb7176958762Chris Lattner class LLVM_LIBRARY_VISIBILITY Assemble : public Tool { 46138e317d6dce161b249508686cc67eb7176958762Chris Lattner public: 46238e317d6dce161b249508686cc67eb7176958762Chris Lattner Assemble(const ToolChain &TC) : Tool("minix::Assemble", "assembler", 46338e317d6dce161b249508686cc67eb7176958762Chris Lattner TC) {} 46438e317d6dce161b249508686cc67eb7176958762Chris Lattner 46538e317d6dce161b249508686cc67eb7176958762Chris Lattner virtual bool hasIntegratedCPP() const { return false; } 46638e317d6dce161b249508686cc67eb7176958762Chris Lattner 46738e317d6dce161b249508686cc67eb7176958762Chris Lattner virtual void ConstructJob(Compilation &C, const JobAction &JA, 46838e317d6dce161b249508686cc67eb7176958762Chris Lattner const InputInfo &Output, 46938e317d6dce161b249508686cc67eb7176958762Chris Lattner const InputInfoList &Inputs, 47038e317d6dce161b249508686cc67eb7176958762Chris Lattner const ArgList &TCArgs, 47138e317d6dce161b249508686cc67eb7176958762Chris Lattner const char *LinkingOutput) const; 47238e317d6dce161b249508686cc67eb7176958762Chris Lattner }; 47338e317d6dce161b249508686cc67eb7176958762Chris Lattner class LLVM_LIBRARY_VISIBILITY Link : public Tool { 47438e317d6dce161b249508686cc67eb7176958762Chris Lattner public: 47538e317d6dce161b249508686cc67eb7176958762Chris Lattner Link(const ToolChain &TC) : Tool("minix::Link", "linker", TC) {} 47638e317d6dce161b249508686cc67eb7176958762Chris Lattner 47738e317d6dce161b249508686cc67eb7176958762Chris Lattner virtual bool hasIntegratedCPP() const { return false; } 47838e317d6dce161b249508686cc67eb7176958762Chris Lattner 47938e317d6dce161b249508686cc67eb7176958762Chris Lattner virtual void ConstructJob(Compilation &C, const JobAction &JA, 48038e317d6dce161b249508686cc67eb7176958762Chris Lattner const InputInfo &Output, 48138e317d6dce161b249508686cc67eb7176958762Chris Lattner const InputInfoList &Inputs, 48238e317d6dce161b249508686cc67eb7176958762Chris Lattner const ArgList &TCArgs, 48338e317d6dce161b249508686cc67eb7176958762Chris Lattner const char *LinkingOutput) const; 48438e317d6dce161b249508686cc67eb7176958762Chris Lattner }; 48538e317d6dce161b249508686cc67eb7176958762Chris Lattner} // end namespace minix 48638e317d6dce161b249508686cc67eb7176958762Chris Lattner 487e7925a075f110ab21afeae084670a155dea568e3Edward O'Callaghan /// auroraux -- Directly call GNU Binutils assembler and linker 488e7925a075f110ab21afeae084670a155dea568e3Edward O'Callaghannamespace auroraux { 48992dd1915842410005c68d32c43bb3b3cf5a4a702Duncan Sands class LLVM_LIBRARY_VISIBILITY Assemble : public Tool { 490e7925a075f110ab21afeae084670a155dea568e3Edward O'Callaghan public: 4913038204fd8f6ff22082dd18e4b12ed252b75a5e4Daniel Dunbar Assemble(const ToolChain &TC) : Tool("auroraux::Assemble", "assembler", 4923038204fd8f6ff22082dd18e4b12ed252b75a5e4Daniel Dunbar TC) {} 493e7925a075f110ab21afeae084670a155dea568e3Edward O'Callaghan 494e7925a075f110ab21afeae084670a155dea568e3Edward O'Callaghan virtual bool hasIntegratedCPP() const { return false; } 495e7925a075f110ab21afeae084670a155dea568e3Edward O'Callaghan 496e7925a075f110ab21afeae084670a155dea568e3Edward O'Callaghan virtual void ConstructJob(Compilation &C, const JobAction &JA, 4971eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump const InputInfo &Output, 4981eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump const InputInfoList &Inputs, 4991eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump const ArgList &TCArgs, 500e7925a075f110ab21afeae084670a155dea568e3Edward O'Callaghan const char *LinkingOutput) const; 501e7925a075f110ab21afeae084670a155dea568e3Edward O'Callaghan }; 50292dd1915842410005c68d32c43bb3b3cf5a4a702Duncan Sands class LLVM_LIBRARY_VISIBILITY Link : public Tool { 503e7925a075f110ab21afeae084670a155dea568e3Edward O'Callaghan public: 5043038204fd8f6ff22082dd18e4b12ed252b75a5e4Daniel Dunbar Link(const ToolChain &TC) : Tool("auroraux::Link", "linker", TC) {} 505e7925a075f110ab21afeae084670a155dea568e3Edward O'Callaghan 506e7925a075f110ab21afeae084670a155dea568e3Edward O'Callaghan virtual bool hasIntegratedCPP() const { return false; } 507e7925a075f110ab21afeae084670a155dea568e3Edward O'Callaghan 508e7925a075f110ab21afeae084670a155dea568e3Edward O'Callaghan virtual void ConstructJob(Compilation &C, const JobAction &JA, 5091eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump const InputInfo &Output, 5101eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump const InputInfoList &Inputs, 5111eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump const ArgList &TCArgs, 512e7925a075f110ab21afeae084670a155dea568e3Edward O'Callaghan const char *LinkingOutput) const; 513e7925a075f110ab21afeae084670a155dea568e3Edward O'Callaghan }; 514e7925a075f110ab21afeae084670a155dea568e3Edward O'Callaghan} // end namespace auroraux 51568a31d406c6dc4382c700d1199b062de2aa7e1daDaniel Dunbar 51611e1b40d759a643086f590f6ffbd9d68360bad46Daniel Dunbar /// dragonfly -- Directly call GNU Binutils assembler and linker 51711e1b40d759a643086f590f6ffbd9d68360bad46Daniel Dunbarnamespace dragonfly { 51892dd1915842410005c68d32c43bb3b3cf5a4a702Duncan Sands class LLVM_LIBRARY_VISIBILITY Assemble : public Tool { 51911e1b40d759a643086f590f6ffbd9d68360bad46Daniel Dunbar public: 5203038204fd8f6ff22082dd18e4b12ed252b75a5e4Daniel Dunbar Assemble(const ToolChain &TC) : Tool("dragonfly::Assemble", "assembler", 5213038204fd8f6ff22082dd18e4b12ed252b75a5e4Daniel Dunbar TC) {} 52211e1b40d759a643086f590f6ffbd9d68360bad46Daniel Dunbar 52311e1b40d759a643086f590f6ffbd9d68360bad46Daniel Dunbar virtual bool hasIntegratedCPP() const { return false; } 52411e1b40d759a643086f590f6ffbd9d68360bad46Daniel Dunbar 52511e1b40d759a643086f590f6ffbd9d68360bad46Daniel Dunbar virtual void ConstructJob(Compilation &C, const JobAction &JA, 5261eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump const InputInfo &Output, 5271eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump const InputInfoList &Inputs, 5281eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump const ArgList &TCArgs, 52911e1b40d759a643086f590f6ffbd9d68360bad46Daniel Dunbar const char *LinkingOutput) const; 53011e1b40d759a643086f590f6ffbd9d68360bad46Daniel Dunbar }; 53192dd1915842410005c68d32c43bb3b3cf5a4a702Duncan Sands class LLVM_LIBRARY_VISIBILITY Link : public Tool { 53211e1b40d759a643086f590f6ffbd9d68360bad46Daniel Dunbar public: 5333038204fd8f6ff22082dd18e4b12ed252b75a5e4Daniel Dunbar Link(const ToolChain &TC) : Tool("dragonfly::Link", "linker", TC) {} 53411e1b40d759a643086f590f6ffbd9d68360bad46Daniel Dunbar 53511e1b40d759a643086f590f6ffbd9d68360bad46Daniel Dunbar virtual bool hasIntegratedCPP() const { return false; } 53611e1b40d759a643086f590f6ffbd9d68360bad46Daniel Dunbar 53711e1b40d759a643086f590f6ffbd9d68360bad46Daniel Dunbar virtual void ConstructJob(Compilation &C, const JobAction &JA, 5381eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump const InputInfo &Output, 5391eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump const InputInfoList &Inputs, 5401eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump const ArgList &TCArgs, 54111e1b40d759a643086f590f6ffbd9d68360bad46Daniel Dunbar const char *LinkingOutput) const; 54211e1b40d759a643086f590f6ffbd9d68360bad46Daniel Dunbar }; 543e7925a075f110ab21afeae084670a155dea568e3Edward O'Callaghan} // end namespace dragonfly 54411e1b40d759a643086f590f6ffbd9d68360bad46Daniel Dunbar 545ff58e3610f4e12094def69eb2d6dcb4330378d8fMichael J. Spencer /// Visual studio tools. 546ff58e3610f4e12094def69eb2d6dcb4330378d8fMichael J. Spencernamespace visualstudio { 547ff58e3610f4e12094def69eb2d6dcb4330378d8fMichael J. Spencer class LLVM_LIBRARY_VISIBILITY Link : public Tool { 548ff58e3610f4e12094def69eb2d6dcb4330378d8fMichael J. Spencer public: 549ff58e3610f4e12094def69eb2d6dcb4330378d8fMichael J. Spencer Link(const ToolChain &TC) : Tool("visualstudio::Link", "linker", TC) {} 550ff58e3610f4e12094def69eb2d6dcb4330378d8fMichael J. Spencer 551ff58e3610f4e12094def69eb2d6dcb4330378d8fMichael J. Spencer virtual bool hasIntegratedCPP() const { return false; } 552ff58e3610f4e12094def69eb2d6dcb4330378d8fMichael J. Spencer 553ff58e3610f4e12094def69eb2d6dcb4330378d8fMichael J. Spencer virtual void ConstructJob(Compilation &C, const JobAction &JA, 554ff58e3610f4e12094def69eb2d6dcb4330378d8fMichael J. Spencer const InputInfo &Output, 555ff58e3610f4e12094def69eb2d6dcb4330378d8fMichael J. Spencer const InputInfoList &Inputs, 556ff58e3610f4e12094def69eb2d6dcb4330378d8fMichael J. Spencer const ArgList &TCArgs, 557ff58e3610f4e12094def69eb2d6dcb4330378d8fMichael J. Spencer const char *LinkingOutput) const; 558ff58e3610f4e12094def69eb2d6dcb4330378d8fMichael J. Spencer }; 559ff58e3610f4e12094def69eb2d6dcb4330378d8fMichael J. Spencer} // end namespace visualstudio 560ff58e3610f4e12094def69eb2d6dcb4330378d8fMichael J. Spencer 5619c073ff462eb75ccbb1c4446e21c148f3fc618e1Daniel Dunbar} // end namespace toolchains 5629c073ff462eb75ccbb1c4446e21c148f3fc618e1Daniel Dunbar} // end namespace driver 5639c073ff462eb75ccbb1c4446e21c148f3fc618e1Daniel Dunbar} // end namespace clang 5649c073ff462eb75ccbb1c4446e21c148f3fc618e1Daniel Dunbar 565e7925a075f110ab21afeae084670a155dea568e3Edward O'Callaghan#endif // CLANG_LIB_DRIVER_TOOLS_H_ 566