Tools.h revision 99ba9e3bd70671f3441fb974895f226a83ce0e66
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 { 19599ba9e3bd70671f3441fb974895f226a83ce0e66David Blaikie virtual void anchor(); 196fbefe6bd6f62a3361813498dc672ab0d6c0d4fd1Daniel Dunbar protected: 197fbefe6bd6f62a3361813498dc672ab0d6c0d4fd1Daniel Dunbar void AddDarwinArch(const ArgList &Args, ArgStringList &CmdArgs) const; 198fbefe6bd6f62a3361813498dc672ab0d6c0d4fd1Daniel Dunbar 199fbefe6bd6f62a3361813498dc672ab0d6c0d4fd1Daniel Dunbar const toolchains::Darwin &getDarwinToolChain() const { 200fbefe6bd6f62a3361813498dc672ab0d6c0d4fd1Daniel Dunbar return reinterpret_cast<const toolchains::Darwin&>(getToolChain()); 201fbefe6bd6f62a3361813498dc672ab0d6c0d4fd1Daniel Dunbar } 202fbefe6bd6f62a3361813498dc672ab0d6c0d4fd1Daniel Dunbar 203fbefe6bd6f62a3361813498dc672ab0d6c0d4fd1Daniel Dunbar public: 2043038204fd8f6ff22082dd18e4b12ed252b75a5e4Daniel Dunbar DarwinTool(const char *Name, const char *ShortName, 2053038204fd8f6ff22082dd18e4b12ed252b75a5e4Daniel Dunbar const ToolChain &TC) : Tool(Name, ShortName, TC) {} 206fbefe6bd6f62a3361813498dc672ab0d6c0d4fd1Daniel Dunbar }; 207fbefe6bd6f62a3361813498dc672ab0d6c0d4fd1Daniel Dunbar 20892dd1915842410005c68d32c43bb3b3cf5a4a702Duncan Sands class LLVM_LIBRARY_VISIBILITY CC1 : public DarwinTool { 20999ba9e3bd70671f3441fb974895f226a83ce0e66David Blaikie virtual void anchor(); 210a5a7bd0de7b6b80212095195a055a4a43f21d4b2Daniel Dunbar public: 2111eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump static const char *getBaseInputName(const ArgList &Args, 212a5a7bd0de7b6b80212095195a055a4a43f21d4b2Daniel Dunbar const InputInfoList &Input); 2131eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump static const char *getBaseInputStem(const ArgList &Args, 214a5a7bd0de7b6b80212095195a055a4a43f21d4b2Daniel Dunbar const InputInfoList &Input); 2151eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump static const char *getDependencyFileName(const ArgList &Args, 216a5a7bd0de7b6b80212095195a055a4a43f21d4b2Daniel Dunbar const InputInfoList &Inputs); 217a5a7bd0de7b6b80212095195a055a4a43f21d4b2Daniel Dunbar 21840f1265ebd42ece3e7f7917319b56012e8e2bce2Daniel Dunbar protected: 21940f1265ebd42ece3e7f7917319b56012e8e2bce2Daniel Dunbar const char *getCC1Name(types::ID Type) const; 220a3ec60e0cf2a1916f479288998d31bd980b1a306Daniel Dunbar 221a3ec60e0cf2a1916f479288998d31bd980b1a306Daniel Dunbar void AddCC1Args(const ArgList &Args, ArgStringList &CmdArgs) const; 222285f9a284704c07cd50e4597408d5f93518cd7c3Chad Rosier void RemoveCC1UnsupportedArgs(ArgStringList &CmdArgs) const; 22340f1265ebd42ece3e7f7917319b56012e8e2bce2Daniel Dunbar void AddCC1OptionsArgs(const ArgList &Args, ArgStringList &CmdArgs, 22440f1265ebd42ece3e7f7917319b56012e8e2bce2Daniel Dunbar const InputInfoList &Inputs, 225a3ec60e0cf2a1916f479288998d31bd980b1a306Daniel Dunbar const ArgStringList &OutputArgs) const; 22640f1265ebd42ece3e7f7917319b56012e8e2bce2Daniel Dunbar void AddCPPOptionsArgs(const ArgList &Args, ArgStringList &CmdArgs, 22740f1265ebd42ece3e7f7917319b56012e8e2bce2Daniel Dunbar const InputInfoList &Inputs, 228a3ec60e0cf2a1916f479288998d31bd980b1a306Daniel Dunbar const ArgStringList &OutputArgs) const; 2291eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump void AddCPPUniqueOptionsArgs(const ArgList &Args, 230a3ec60e0cf2a1916f479288998d31bd980b1a306Daniel Dunbar ArgStringList &CmdArgs, 231a3ec60e0cf2a1916f479288998d31bd980b1a306Daniel Dunbar const InputInfoList &Inputs) const; 232a3ec60e0cf2a1916f479288998d31bd980b1a306Daniel Dunbar void AddCPPArgs(const ArgList &Args, ArgStringList &CmdArgs) const; 23340f1265ebd42ece3e7f7917319b56012e8e2bce2Daniel Dunbar 23440f1265ebd42ece3e7f7917319b56012e8e2bce2Daniel Dunbar public: 2353038204fd8f6ff22082dd18e4b12ed252b75a5e4Daniel Dunbar CC1(const char *Name, const char *ShortName, 2363038204fd8f6ff22082dd18e4b12ed252b75a5e4Daniel Dunbar const ToolChain &TC) : DarwinTool(Name, ShortName, TC) {} 23740f1265ebd42ece3e7f7917319b56012e8e2bce2Daniel Dunbar 23860a53f24b160724de0e8dd0e142009981540fd26Daniel Dunbar virtual bool hasGoodDiagnostics() const { return true; } 23940f1265ebd42ece3e7f7917319b56012e8e2bce2Daniel Dunbar virtual bool hasIntegratedCPP() const { return true; } 24040f1265ebd42ece3e7f7917319b56012e8e2bce2Daniel Dunbar }; 24140f1265ebd42ece3e7f7917319b56012e8e2bce2Daniel Dunbar 24292dd1915842410005c68d32c43bb3b3cf5a4a702Duncan Sands class LLVM_LIBRARY_VISIBILITY Preprocess : public CC1 { 24340f1265ebd42ece3e7f7917319b56012e8e2bce2Daniel Dunbar public: 2443038204fd8f6ff22082dd18e4b12ed252b75a5e4Daniel Dunbar Preprocess(const ToolChain &TC) : CC1("darwin::Preprocess", 2453038204fd8f6ff22082dd18e4b12ed252b75a5e4Daniel Dunbar "gcc preprocessor", TC) {} 24640f1265ebd42ece3e7f7917319b56012e8e2bce2Daniel Dunbar 24740f1265ebd42ece3e7f7917319b56012e8e2bce2Daniel Dunbar virtual void ConstructJob(Compilation &C, const JobAction &JA, 2481eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump const InputInfo &Output, 2491eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump const InputInfoList &Inputs, 2501eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump const ArgList &TCArgs, 25140f1265ebd42ece3e7f7917319b56012e8e2bce2Daniel Dunbar const char *LinkingOutput) const; 25240f1265ebd42ece3e7f7917319b56012e8e2bce2Daniel Dunbar }; 25340f1265ebd42ece3e7f7917319b56012e8e2bce2Daniel Dunbar 25492dd1915842410005c68d32c43bb3b3cf5a4a702Duncan Sands class LLVM_LIBRARY_VISIBILITY Compile : public CC1 { 25540f1265ebd42ece3e7f7917319b56012e8e2bce2Daniel Dunbar public: 2563038204fd8f6ff22082dd18e4b12ed252b75a5e4Daniel Dunbar Compile(const ToolChain &TC) : CC1("darwin::Compile", "gcc frontend", TC) {} 25740f1265ebd42ece3e7f7917319b56012e8e2bce2Daniel Dunbar 25840f1265ebd42ece3e7f7917319b56012e8e2bce2Daniel Dunbar virtual void ConstructJob(Compilation &C, const JobAction &JA, 2591eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump const InputInfo &Output, 2601eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump const InputInfoList &Inputs, 2611eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump const ArgList &TCArgs, 26240f1265ebd42ece3e7f7917319b56012e8e2bce2Daniel Dunbar const char *LinkingOutput) const; 26340f1265ebd42ece3e7f7917319b56012e8e2bce2Daniel Dunbar }; 26440f1265ebd42ece3e7f7917319b56012e8e2bce2Daniel Dunbar 26592dd1915842410005c68d32c43bb3b3cf5a4a702Duncan Sands class LLVM_LIBRARY_VISIBILITY Assemble : public DarwinTool { 2668cac5f7e1ce63dd77ee0fb4ef68f9fa804f41ea6Daniel Dunbar public: 2673038204fd8f6ff22082dd18e4b12ed252b75a5e4Daniel Dunbar Assemble(const ToolChain &TC) : DarwinTool("darwin::Assemble", 2683038204fd8f6ff22082dd18e4b12ed252b75a5e4Daniel Dunbar "assembler", TC) {} 2698cac5f7e1ce63dd77ee0fb4ef68f9fa804f41ea6Daniel Dunbar 2708cac5f7e1ce63dd77ee0fb4ef68f9fa804f41ea6Daniel Dunbar virtual bool hasIntegratedCPP() const { return false; } 2718cac5f7e1ce63dd77ee0fb4ef68f9fa804f41ea6Daniel Dunbar 2728cac5f7e1ce63dd77ee0fb4ef68f9fa804f41ea6Daniel Dunbar virtual void ConstructJob(Compilation &C, const JobAction &JA, 2731eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump const InputInfo &Output, 2741eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump const InputInfoList &Inputs, 2751eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump const ArgList &TCArgs, 27602633b541b04ad5ffc1c70f4c2feeeb13e607057Daniel Dunbar const char *LinkingOutput) const; 27702633b541b04ad5ffc1c70f4c2feeeb13e607057Daniel Dunbar }; 27802633b541b04ad5ffc1c70f4c2feeeb13e607057Daniel Dunbar 27992dd1915842410005c68d32c43bb3b3cf5a4a702Duncan Sands class LLVM_LIBRARY_VISIBILITY Link : public DarwinTool { 280748de8eda222f087434d8bd703176b316a061341Daniel Dunbar void AddLinkArgs(Compilation &C, const ArgList &Args, 281748de8eda222f087434d8bd703176b316a061341Daniel Dunbar ArgStringList &CmdArgs) const; 28202633b541b04ad5ffc1c70f4c2feeeb13e607057Daniel Dunbar 28302633b541b04ad5ffc1c70f4c2feeeb13e607057Daniel Dunbar public: 2843038204fd8f6ff22082dd18e4b12ed252b75a5e4Daniel Dunbar Link(const ToolChain &TC) : DarwinTool("darwin::Link", "linker", TC) {} 28502633b541b04ad5ffc1c70f4c2feeeb13e607057Daniel Dunbar 28602633b541b04ad5ffc1c70f4c2feeeb13e607057Daniel Dunbar virtual bool hasIntegratedCPP() const { return false; } 28702633b541b04ad5ffc1c70f4c2feeeb13e607057Daniel Dunbar 28802633b541b04ad5ffc1c70f4c2feeeb13e607057Daniel Dunbar virtual void ConstructJob(Compilation &C, const JobAction &JA, 2891eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump const InputInfo &Output, 2901eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump const InputInfoList &Inputs, 2911eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump const ArgList &TCArgs, 2928cac5f7e1ce63dd77ee0fb4ef68f9fa804f41ea6Daniel Dunbar const char *LinkingOutput) const; 2938cac5f7e1ce63dd77ee0fb4ef68f9fa804f41ea6Daniel Dunbar }; 2948cac5f7e1ce63dd77ee0fb4ef68f9fa804f41ea6Daniel Dunbar 29592dd1915842410005c68d32c43bb3b3cf5a4a702Duncan Sands class LLVM_LIBRARY_VISIBILITY Lipo : public DarwinTool { 296ff7488dc9a766f94daf54d81b03ab9160d0bfd88Daniel Dunbar public: 2973038204fd8f6ff22082dd18e4b12ed252b75a5e4Daniel Dunbar Lipo(const ToolChain &TC) : DarwinTool("darwin::Lipo", "lipo", TC) {} 298ff7488dc9a766f94daf54d81b03ab9160d0bfd88Daniel Dunbar 299ff7488dc9a766f94daf54d81b03ab9160d0bfd88Daniel Dunbar virtual bool hasIntegratedCPP() const { return false; } 300ff7488dc9a766f94daf54d81b03ab9160d0bfd88Daniel Dunbar 301ff7488dc9a766f94daf54d81b03ab9160d0bfd88Daniel Dunbar virtual void ConstructJob(Compilation &C, const JobAction &JA, 3021eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump const InputInfo &Output, 3031eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump const InputInfoList &Inputs, 3041eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump const ArgList &TCArgs, 3056e0f25483b1a801cd1155ea89c2b725feab16332Daniel Dunbar const char *LinkingOutput) const; 3066e0f25483b1a801cd1155ea89c2b725feab16332Daniel Dunbar }; 3076e0f25483b1a801cd1155ea89c2b725feab16332Daniel Dunbar 3086e0f25483b1a801cd1155ea89c2b725feab16332Daniel Dunbar class LLVM_LIBRARY_VISIBILITY Dsymutil : public DarwinTool { 3096e0f25483b1a801cd1155ea89c2b725feab16332Daniel Dunbar public: 3106e0f25483b1a801cd1155ea89c2b725feab16332Daniel Dunbar Dsymutil(const ToolChain &TC) : DarwinTool("darwin::Dsymutil", 3116e0f25483b1a801cd1155ea89c2b725feab16332Daniel Dunbar "dsymutil", TC) {} 3126e0f25483b1a801cd1155ea89c2b725feab16332Daniel Dunbar 3136e0f25483b1a801cd1155ea89c2b725feab16332Daniel Dunbar virtual bool hasIntegratedCPP() const { return false; } 3146e0f25483b1a801cd1155ea89c2b725feab16332Daniel Dunbar 3156e0f25483b1a801cd1155ea89c2b725feab16332Daniel Dunbar virtual void ConstructJob(Compilation &C, const JobAction &JA, 3166e0f25483b1a801cd1155ea89c2b725feab16332Daniel Dunbar const InputInfo &Output, 3176e0f25483b1a801cd1155ea89c2b725feab16332Daniel Dunbar const InputInfoList &Inputs, 3186e0f25483b1a801cd1155ea89c2b725feab16332Daniel Dunbar const ArgList &TCArgs, 319f7b8eec37c8c8012fa525c71fb29a58c9f29beefDaniel Dunbar const char *LinkingOutput) const; 320f7b8eec37c8c8012fa525c71fb29a58c9f29beefDaniel Dunbar }; 321f857186fd1995b34185d063a29b11ad4f948519fEric Christopher 322f857186fd1995b34185d063a29b11ad4f948519fEric Christopher class LLVM_LIBRARY_VISIBILITY VerifyDebug : public DarwinTool { 323f857186fd1995b34185d063a29b11ad4f948519fEric Christopher public: 324f857186fd1995b34185d063a29b11ad4f948519fEric Christopher VerifyDebug(const ToolChain &TC) : DarwinTool("darwin::VerifyDebug", 325f857186fd1995b34185d063a29b11ad4f948519fEric Christopher "dwarfdump", TC) {} 326f857186fd1995b34185d063a29b11ad4f948519fEric Christopher 327f857186fd1995b34185d063a29b11ad4f948519fEric Christopher virtual bool hasIntegratedCPP() const { return false; } 328f857186fd1995b34185d063a29b11ad4f948519fEric Christopher 329f857186fd1995b34185d063a29b11ad4f948519fEric Christopher virtual void ConstructJob(Compilation &C, const JobAction &JA, 330f857186fd1995b34185d063a29b11ad4f948519fEric Christopher const InputInfo &Output, 331f857186fd1995b34185d063a29b11ad4f948519fEric Christopher const InputInfoList &Inputs, 332f857186fd1995b34185d063a29b11ad4f948519fEric Christopher const ArgList &TCArgs, 333f857186fd1995b34185d063a29b11ad4f948519fEric Christopher const char *LinkingOutput) const; 334f857186fd1995b34185d063a29b11ad4f948519fEric Christopher }; 335f857186fd1995b34185d063a29b11ad4f948519fEric Christopher 336f7b8eec37c8c8012fa525c71fb29a58c9f29beefDaniel Dunbar} 337f7b8eec37c8c8012fa525c71fb29a58c9f29beefDaniel Dunbar 338f7b8eec37c8c8012fa525c71fb29a58c9f29beefDaniel Dunbar /// openbsd -- Directly call GNU Binutils assembler and linker 339f7b8eec37c8c8012fa525c71fb29a58c9f29beefDaniel Dunbarnamespace openbsd { 34092dd1915842410005c68d32c43bb3b3cf5a4a702Duncan Sands class LLVM_LIBRARY_VISIBILITY Assemble : public Tool { 341f7b8eec37c8c8012fa525c71fb29a58c9f29beefDaniel Dunbar public: 3423038204fd8f6ff22082dd18e4b12ed252b75a5e4Daniel Dunbar Assemble(const ToolChain &TC) : Tool("openbsd::Assemble", "assembler", 3433038204fd8f6ff22082dd18e4b12ed252b75a5e4Daniel Dunbar TC) {} 344f7b8eec37c8c8012fa525c71fb29a58c9f29beefDaniel Dunbar 345f7b8eec37c8c8012fa525c71fb29a58c9f29beefDaniel Dunbar virtual bool hasIntegratedCPP() const { return false; } 346f7b8eec37c8c8012fa525c71fb29a58c9f29beefDaniel Dunbar 347f7b8eec37c8c8012fa525c71fb29a58c9f29beefDaniel Dunbar virtual void ConstructJob(Compilation &C, const JobAction &JA, 3481eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump const InputInfo &Output, 3491eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump const InputInfoList &Inputs, 3501eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump const ArgList &TCArgs, 351f7b8eec37c8c8012fa525c71fb29a58c9f29beefDaniel Dunbar const char *LinkingOutput) const; 352f7b8eec37c8c8012fa525c71fb29a58c9f29beefDaniel Dunbar }; 35392dd1915842410005c68d32c43bb3b3cf5a4a702Duncan Sands class LLVM_LIBRARY_VISIBILITY Link : public Tool { 354f7b8eec37c8c8012fa525c71fb29a58c9f29beefDaniel Dunbar public: 3553038204fd8f6ff22082dd18e4b12ed252b75a5e4Daniel Dunbar Link(const ToolChain &TC) : Tool("openbsd::Link", "linker", TC) {} 356f7b8eec37c8c8012fa525c71fb29a58c9f29beefDaniel Dunbar 357f7b8eec37c8c8012fa525c71fb29a58c9f29beefDaniel Dunbar virtual bool hasIntegratedCPP() const { return false; } 358f7b8eec37c8c8012fa525c71fb29a58c9f29beefDaniel Dunbar 359f7b8eec37c8c8012fa525c71fb29a58c9f29beefDaniel Dunbar virtual void ConstructJob(Compilation &C, const JobAction &JA, 3601eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump const InputInfo &Output, 3611eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump const InputInfoList &Inputs, 3621eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump const ArgList &TCArgs, 363ff7488dc9a766f94daf54d81b03ab9160d0bfd88Daniel Dunbar const char *LinkingOutput) const; 364ff7488dc9a766f94daf54d81b03ab9160d0bfd88Daniel Dunbar }; 365e7925a075f110ab21afeae084670a155dea568e3Edward O'Callaghan} // end namespace openbsd 366ff7488dc9a766f94daf54d81b03ab9160d0bfd88Daniel Dunbar 36768a31d406c6dc4382c700d1199b062de2aa7e1daDaniel Dunbar /// freebsd -- Directly call GNU Binutils assembler and linker 36868a31d406c6dc4382c700d1199b062de2aa7e1daDaniel Dunbarnamespace freebsd { 36992dd1915842410005c68d32c43bb3b3cf5a4a702Duncan Sands class LLVM_LIBRARY_VISIBILITY Assemble : public Tool { 37068a31d406c6dc4382c700d1199b062de2aa7e1daDaniel Dunbar public: 3713038204fd8f6ff22082dd18e4b12ed252b75a5e4Daniel Dunbar Assemble(const ToolChain &TC) : Tool("freebsd::Assemble", "assembler", 3723038204fd8f6ff22082dd18e4b12ed252b75a5e4Daniel Dunbar TC) {} 37368a31d406c6dc4382c700d1199b062de2aa7e1daDaniel Dunbar 37468a31d406c6dc4382c700d1199b062de2aa7e1daDaniel Dunbar virtual bool hasIntegratedCPP() const { return false; } 37568a31d406c6dc4382c700d1199b062de2aa7e1daDaniel Dunbar 37668a31d406c6dc4382c700d1199b062de2aa7e1daDaniel Dunbar virtual void ConstructJob(Compilation &C, const JobAction &JA, 3771eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump const InputInfo &Output, 3781eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump const InputInfoList &Inputs, 3791eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump const ArgList &TCArgs, 38068a31d406c6dc4382c700d1199b062de2aa7e1daDaniel Dunbar const char *LinkingOutput) const; 38168a31d406c6dc4382c700d1199b062de2aa7e1daDaniel Dunbar }; 38292dd1915842410005c68d32c43bb3b3cf5a4a702Duncan Sands class LLVM_LIBRARY_VISIBILITY Link : public Tool { 383008f54a54299eaafdaa940e2bdeaf55935ecd95aDaniel Dunbar public: 3843038204fd8f6ff22082dd18e4b12ed252b75a5e4Daniel Dunbar Link(const ToolChain &TC) : Tool("freebsd::Link", "linker", TC) {} 385008f54a54299eaafdaa940e2bdeaf55935ecd95aDaniel Dunbar 386008f54a54299eaafdaa940e2bdeaf55935ecd95aDaniel Dunbar virtual bool hasIntegratedCPP() const { return false; } 387008f54a54299eaafdaa940e2bdeaf55935ecd95aDaniel Dunbar 388008f54a54299eaafdaa940e2bdeaf55935ecd95aDaniel Dunbar virtual void ConstructJob(Compilation &C, const JobAction &JA, 3891eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump const InputInfo &Output, 3901eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump const InputInfoList &Inputs, 3911eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump const ArgList &TCArgs, 392008f54a54299eaafdaa940e2bdeaf55935ecd95aDaniel Dunbar const char *LinkingOutput) const; 393008f54a54299eaafdaa940e2bdeaf55935ecd95aDaniel Dunbar }; 394e7925a075f110ab21afeae084670a155dea568e3Edward O'Callaghan} // end namespace freebsd 395e7925a075f110ab21afeae084670a155dea568e3Edward O'Callaghan 3968e50a96b387dca7525caa8a6add31420dd82a2cdBenjamin Kramer /// netbsd -- Directly call GNU Binutils assembler and linker 3978e50a96b387dca7525caa8a6add31420dd82a2cdBenjamin Kramernamespace netbsd { 3988e50a96b387dca7525caa8a6add31420dd82a2cdBenjamin Kramer class LLVM_LIBRARY_VISIBILITY Assemble : public Tool { 399182564cd14a2105fff05fd52f5940eff96161d57Joerg Sonnenberger private: 400182564cd14a2105fff05fd52f5940eff96161d57Joerg Sonnenberger const llvm::Triple ToolTriple; 401182564cd14a2105fff05fd52f5940eff96161d57Joerg Sonnenberger 4028e50a96b387dca7525caa8a6add31420dd82a2cdBenjamin Kramer public: 403182564cd14a2105fff05fd52f5940eff96161d57Joerg Sonnenberger Assemble(const ToolChain &TC, const llvm::Triple &ToolTriple) 404182564cd14a2105fff05fd52f5940eff96161d57Joerg Sonnenberger : Tool("netbsd::Assemble", "assembler", TC), ToolTriple(ToolTriple) {} 4058e50a96b387dca7525caa8a6add31420dd82a2cdBenjamin Kramer 4068e50a96b387dca7525caa8a6add31420dd82a2cdBenjamin Kramer virtual bool hasIntegratedCPP() const { return false; } 4078e50a96b387dca7525caa8a6add31420dd82a2cdBenjamin Kramer 4088e50a96b387dca7525caa8a6add31420dd82a2cdBenjamin Kramer virtual void ConstructJob(Compilation &C, const JobAction &JA, 4098e50a96b387dca7525caa8a6add31420dd82a2cdBenjamin Kramer const InputInfo &Output, 4108e50a96b387dca7525caa8a6add31420dd82a2cdBenjamin Kramer const InputInfoList &Inputs, 4118e50a96b387dca7525caa8a6add31420dd82a2cdBenjamin Kramer const ArgList &TCArgs, 4128e50a96b387dca7525caa8a6add31420dd82a2cdBenjamin Kramer const char *LinkingOutput) const; 4138e50a96b387dca7525caa8a6add31420dd82a2cdBenjamin Kramer }; 4148e50a96b387dca7525caa8a6add31420dd82a2cdBenjamin Kramer class LLVM_LIBRARY_VISIBILITY Link : public Tool { 415182564cd14a2105fff05fd52f5940eff96161d57Joerg Sonnenberger private: 416182564cd14a2105fff05fd52f5940eff96161d57Joerg Sonnenberger const llvm::Triple ToolTriple; 417182564cd14a2105fff05fd52f5940eff96161d57Joerg Sonnenberger 4188e50a96b387dca7525caa8a6add31420dd82a2cdBenjamin Kramer public: 419182564cd14a2105fff05fd52f5940eff96161d57Joerg Sonnenberger Link(const ToolChain &TC, const llvm::Triple &ToolTriple) 420468eb7ddd69b5d545139fc46a3b730268c458f38Joerg Sonnenberger : Tool("netbsd::Link", "linker", TC), ToolTriple(ToolTriple) {} 4218e50a96b387dca7525caa8a6add31420dd82a2cdBenjamin Kramer 4228e50a96b387dca7525caa8a6add31420dd82a2cdBenjamin Kramer virtual bool hasIntegratedCPP() const { return false; } 4238e50a96b387dca7525caa8a6add31420dd82a2cdBenjamin Kramer 4248e50a96b387dca7525caa8a6add31420dd82a2cdBenjamin Kramer virtual void ConstructJob(Compilation &C, const JobAction &JA, 4258e50a96b387dca7525caa8a6add31420dd82a2cdBenjamin Kramer const InputInfo &Output, 4268e50a96b387dca7525caa8a6add31420dd82a2cdBenjamin Kramer const InputInfoList &Inputs, 4278e50a96b387dca7525caa8a6add31420dd82a2cdBenjamin Kramer const ArgList &TCArgs, 4288e50a96b387dca7525caa8a6add31420dd82a2cdBenjamin Kramer const char *LinkingOutput) const; 4298e50a96b387dca7525caa8a6add31420dd82a2cdBenjamin Kramer }; 4308e50a96b387dca7525caa8a6add31420dd82a2cdBenjamin Kramer} // end namespace netbsd 4318e50a96b387dca7525caa8a6add31420dd82a2cdBenjamin Kramer 432ba30bbe4e36a30a274da809a11a42f9cdc168e92Rafael Espindola /// linux -- Directly call GNU Binutils assembler and linker 433ba30bbe4e36a30a274da809a11a42f9cdc168e92Rafael Espindolanamespace linuxtools { 434ba30bbe4e36a30a274da809a11a42f9cdc168e92Rafael Espindola class LLVM_LIBRARY_VISIBILITY Assemble : public Tool { 435ba30bbe4e36a30a274da809a11a42f9cdc168e92Rafael Espindola public: 436ba30bbe4e36a30a274da809a11a42f9cdc168e92Rafael Espindola Assemble(const ToolChain &TC) : Tool("linux::Assemble", "assembler", 437ba30bbe4e36a30a274da809a11a42f9cdc168e92Rafael Espindola TC) {} 438ba30bbe4e36a30a274da809a11a42f9cdc168e92Rafael Espindola 439ba30bbe4e36a30a274da809a11a42f9cdc168e92Rafael Espindola virtual bool hasIntegratedCPP() const { return false; } 440ba30bbe4e36a30a274da809a11a42f9cdc168e92Rafael Espindola 441ba30bbe4e36a30a274da809a11a42f9cdc168e92Rafael Espindola virtual void ConstructJob(Compilation &C, const JobAction &JA, 442ba30bbe4e36a30a274da809a11a42f9cdc168e92Rafael Espindola const InputInfo &Output, 443ba30bbe4e36a30a274da809a11a42f9cdc168e92Rafael Espindola const InputInfoList &Inputs, 444ba30bbe4e36a30a274da809a11a42f9cdc168e92Rafael Espindola const ArgList &TCArgs, 445ba30bbe4e36a30a274da809a11a42f9cdc168e92Rafael Espindola const char *LinkingOutput) const; 446ba30bbe4e36a30a274da809a11a42f9cdc168e92Rafael Espindola }; 447c1da981bba867681004004b2d54ec2fdf3c08913Rafael Espindola class LLVM_LIBRARY_VISIBILITY Link : public Tool { 448c1da981bba867681004004b2d54ec2fdf3c08913Rafael Espindola public: 449c1da981bba867681004004b2d54ec2fdf3c08913Rafael Espindola Link(const ToolChain &TC) : Tool("linux::Link", "linker", TC) {} 450c1da981bba867681004004b2d54ec2fdf3c08913Rafael Espindola 451c1da981bba867681004004b2d54ec2fdf3c08913Rafael Espindola virtual bool hasIntegratedCPP() const { return false; } 452c1da981bba867681004004b2d54ec2fdf3c08913Rafael Espindola 453c1da981bba867681004004b2d54ec2fdf3c08913Rafael Espindola virtual void ConstructJob(Compilation &C, const JobAction &JA, 454c1da981bba867681004004b2d54ec2fdf3c08913Rafael Espindola const InputInfo &Output, 455c1da981bba867681004004b2d54ec2fdf3c08913Rafael Espindola const InputInfoList &Inputs, 456c1da981bba867681004004b2d54ec2fdf3c08913Rafael Espindola const ArgList &TCArgs, 457c1da981bba867681004004b2d54ec2fdf3c08913Rafael Espindola const char *LinkingOutput) const; 458c1da981bba867681004004b2d54ec2fdf3c08913Rafael Espindola }; 459ba30bbe4e36a30a274da809a11a42f9cdc168e92Rafael Espindola} 46038e317d6dce161b249508686cc67eb7176958762Chris Lattner /// minix -- Directly call GNU Binutils assembler and linker 46138e317d6dce161b249508686cc67eb7176958762Chris Lattnernamespace minix { 46238e317d6dce161b249508686cc67eb7176958762Chris Lattner class LLVM_LIBRARY_VISIBILITY Assemble : public Tool { 46338e317d6dce161b249508686cc67eb7176958762Chris Lattner public: 46438e317d6dce161b249508686cc67eb7176958762Chris Lattner Assemble(const ToolChain &TC) : Tool("minix::Assemble", "assembler", 46538e317d6dce161b249508686cc67eb7176958762Chris Lattner TC) {} 46638e317d6dce161b249508686cc67eb7176958762Chris Lattner 46738e317d6dce161b249508686cc67eb7176958762Chris Lattner virtual bool hasIntegratedCPP() const { return false; } 46838e317d6dce161b249508686cc67eb7176958762Chris Lattner 46938e317d6dce161b249508686cc67eb7176958762Chris Lattner virtual void ConstructJob(Compilation &C, const JobAction &JA, 47038e317d6dce161b249508686cc67eb7176958762Chris Lattner const InputInfo &Output, 47138e317d6dce161b249508686cc67eb7176958762Chris Lattner const InputInfoList &Inputs, 47238e317d6dce161b249508686cc67eb7176958762Chris Lattner const ArgList &TCArgs, 47338e317d6dce161b249508686cc67eb7176958762Chris Lattner const char *LinkingOutput) const; 47438e317d6dce161b249508686cc67eb7176958762Chris Lattner }; 47538e317d6dce161b249508686cc67eb7176958762Chris Lattner class LLVM_LIBRARY_VISIBILITY Link : public Tool { 47638e317d6dce161b249508686cc67eb7176958762Chris Lattner public: 47738e317d6dce161b249508686cc67eb7176958762Chris Lattner Link(const ToolChain &TC) : Tool("minix::Link", "linker", TC) {} 47838e317d6dce161b249508686cc67eb7176958762Chris Lattner 47938e317d6dce161b249508686cc67eb7176958762Chris Lattner virtual bool hasIntegratedCPP() const { return false; } 48038e317d6dce161b249508686cc67eb7176958762Chris Lattner 48138e317d6dce161b249508686cc67eb7176958762Chris Lattner virtual void ConstructJob(Compilation &C, const JobAction &JA, 48238e317d6dce161b249508686cc67eb7176958762Chris Lattner const InputInfo &Output, 48338e317d6dce161b249508686cc67eb7176958762Chris Lattner const InputInfoList &Inputs, 48438e317d6dce161b249508686cc67eb7176958762Chris Lattner const ArgList &TCArgs, 48538e317d6dce161b249508686cc67eb7176958762Chris Lattner const char *LinkingOutput) const; 48638e317d6dce161b249508686cc67eb7176958762Chris Lattner }; 48738e317d6dce161b249508686cc67eb7176958762Chris Lattner} // end namespace minix 48838e317d6dce161b249508686cc67eb7176958762Chris Lattner 489e7925a075f110ab21afeae084670a155dea568e3Edward O'Callaghan /// auroraux -- Directly call GNU Binutils assembler and linker 490e7925a075f110ab21afeae084670a155dea568e3Edward O'Callaghannamespace auroraux { 49192dd1915842410005c68d32c43bb3b3cf5a4a702Duncan Sands class LLVM_LIBRARY_VISIBILITY Assemble : public Tool { 492e7925a075f110ab21afeae084670a155dea568e3Edward O'Callaghan public: 4933038204fd8f6ff22082dd18e4b12ed252b75a5e4Daniel Dunbar Assemble(const ToolChain &TC) : Tool("auroraux::Assemble", "assembler", 4943038204fd8f6ff22082dd18e4b12ed252b75a5e4Daniel Dunbar TC) {} 495e7925a075f110ab21afeae084670a155dea568e3Edward O'Callaghan 496e7925a075f110ab21afeae084670a155dea568e3Edward O'Callaghan virtual bool hasIntegratedCPP() const { return false; } 497e7925a075f110ab21afeae084670a155dea568e3Edward O'Callaghan 498e7925a075f110ab21afeae084670a155dea568e3Edward O'Callaghan virtual void ConstructJob(Compilation &C, const JobAction &JA, 4991eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump const InputInfo &Output, 5001eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump const InputInfoList &Inputs, 5011eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump const ArgList &TCArgs, 502e7925a075f110ab21afeae084670a155dea568e3Edward O'Callaghan const char *LinkingOutput) const; 503e7925a075f110ab21afeae084670a155dea568e3Edward O'Callaghan }; 50492dd1915842410005c68d32c43bb3b3cf5a4a702Duncan Sands class LLVM_LIBRARY_VISIBILITY Link : public Tool { 505e7925a075f110ab21afeae084670a155dea568e3Edward O'Callaghan public: 5063038204fd8f6ff22082dd18e4b12ed252b75a5e4Daniel Dunbar Link(const ToolChain &TC) : Tool("auroraux::Link", "linker", TC) {} 507e7925a075f110ab21afeae084670a155dea568e3Edward O'Callaghan 508e7925a075f110ab21afeae084670a155dea568e3Edward O'Callaghan virtual bool hasIntegratedCPP() const { return false; } 509e7925a075f110ab21afeae084670a155dea568e3Edward O'Callaghan 510e7925a075f110ab21afeae084670a155dea568e3Edward O'Callaghan virtual void ConstructJob(Compilation &C, const JobAction &JA, 5111eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump const InputInfo &Output, 5121eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump const InputInfoList &Inputs, 5131eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump const ArgList &TCArgs, 514e7925a075f110ab21afeae084670a155dea568e3Edward O'Callaghan const char *LinkingOutput) const; 515e7925a075f110ab21afeae084670a155dea568e3Edward O'Callaghan }; 516e7925a075f110ab21afeae084670a155dea568e3Edward O'Callaghan} // end namespace auroraux 51768a31d406c6dc4382c700d1199b062de2aa7e1daDaniel Dunbar 51811e1b40d759a643086f590f6ffbd9d68360bad46Daniel Dunbar /// dragonfly -- Directly call GNU Binutils assembler and linker 51911e1b40d759a643086f590f6ffbd9d68360bad46Daniel Dunbarnamespace dragonfly { 52092dd1915842410005c68d32c43bb3b3cf5a4a702Duncan Sands class LLVM_LIBRARY_VISIBILITY Assemble : public Tool { 52111e1b40d759a643086f590f6ffbd9d68360bad46Daniel Dunbar public: 5223038204fd8f6ff22082dd18e4b12ed252b75a5e4Daniel Dunbar Assemble(const ToolChain &TC) : Tool("dragonfly::Assemble", "assembler", 5233038204fd8f6ff22082dd18e4b12ed252b75a5e4Daniel Dunbar TC) {} 52411e1b40d759a643086f590f6ffbd9d68360bad46Daniel Dunbar 52511e1b40d759a643086f590f6ffbd9d68360bad46Daniel Dunbar virtual bool hasIntegratedCPP() const { return false; } 52611e1b40d759a643086f590f6ffbd9d68360bad46Daniel Dunbar 52711e1b40d759a643086f590f6ffbd9d68360bad46Daniel Dunbar virtual void ConstructJob(Compilation &C, const JobAction &JA, 5281eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump const InputInfo &Output, 5291eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump const InputInfoList &Inputs, 5301eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump const ArgList &TCArgs, 53111e1b40d759a643086f590f6ffbd9d68360bad46Daniel Dunbar const char *LinkingOutput) const; 53211e1b40d759a643086f590f6ffbd9d68360bad46Daniel Dunbar }; 53392dd1915842410005c68d32c43bb3b3cf5a4a702Duncan Sands class LLVM_LIBRARY_VISIBILITY Link : public Tool { 53411e1b40d759a643086f590f6ffbd9d68360bad46Daniel Dunbar public: 5353038204fd8f6ff22082dd18e4b12ed252b75a5e4Daniel Dunbar Link(const ToolChain &TC) : Tool("dragonfly::Link", "linker", TC) {} 53611e1b40d759a643086f590f6ffbd9d68360bad46Daniel Dunbar 53711e1b40d759a643086f590f6ffbd9d68360bad46Daniel Dunbar virtual bool hasIntegratedCPP() const { return false; } 53811e1b40d759a643086f590f6ffbd9d68360bad46Daniel Dunbar 53911e1b40d759a643086f590f6ffbd9d68360bad46Daniel Dunbar virtual void ConstructJob(Compilation &C, const JobAction &JA, 5401eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump const InputInfo &Output, 5411eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump const InputInfoList &Inputs, 5421eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump const ArgList &TCArgs, 54311e1b40d759a643086f590f6ffbd9d68360bad46Daniel Dunbar const char *LinkingOutput) const; 54411e1b40d759a643086f590f6ffbd9d68360bad46Daniel Dunbar }; 545e7925a075f110ab21afeae084670a155dea568e3Edward O'Callaghan} // end namespace dragonfly 54611e1b40d759a643086f590f6ffbd9d68360bad46Daniel Dunbar 547ff58e3610f4e12094def69eb2d6dcb4330378d8fMichael J. Spencer /// Visual studio tools. 548ff58e3610f4e12094def69eb2d6dcb4330378d8fMichael J. Spencernamespace visualstudio { 549ff58e3610f4e12094def69eb2d6dcb4330378d8fMichael J. Spencer class LLVM_LIBRARY_VISIBILITY Link : public Tool { 550ff58e3610f4e12094def69eb2d6dcb4330378d8fMichael J. Spencer public: 551ff58e3610f4e12094def69eb2d6dcb4330378d8fMichael J. Spencer Link(const ToolChain &TC) : Tool("visualstudio::Link", "linker", TC) {} 552ff58e3610f4e12094def69eb2d6dcb4330378d8fMichael J. Spencer 553ff58e3610f4e12094def69eb2d6dcb4330378d8fMichael J. Spencer virtual bool hasIntegratedCPP() const { return false; } 554ff58e3610f4e12094def69eb2d6dcb4330378d8fMichael J. Spencer 555ff58e3610f4e12094def69eb2d6dcb4330378d8fMichael J. Spencer virtual void ConstructJob(Compilation &C, const JobAction &JA, 556ff58e3610f4e12094def69eb2d6dcb4330378d8fMichael J. Spencer const InputInfo &Output, 557ff58e3610f4e12094def69eb2d6dcb4330378d8fMichael J. Spencer const InputInfoList &Inputs, 558ff58e3610f4e12094def69eb2d6dcb4330378d8fMichael J. Spencer const ArgList &TCArgs, 559ff58e3610f4e12094def69eb2d6dcb4330378d8fMichael J. Spencer const char *LinkingOutput) const; 560ff58e3610f4e12094def69eb2d6dcb4330378d8fMichael J. Spencer }; 561ff58e3610f4e12094def69eb2d6dcb4330378d8fMichael J. Spencer} // end namespace visualstudio 562ff58e3610f4e12094def69eb2d6dcb4330378d8fMichael J. Spencer 5639c073ff462eb75ccbb1c4446e21c148f3fc618e1Daniel Dunbar} // end namespace toolchains 5649c073ff462eb75ccbb1c4446e21c148f3fc618e1Daniel Dunbar} // end namespace driver 5659c073ff462eb75ccbb1c4446e21c148f3fc618e1Daniel Dunbar} // end namespace clang 5669c073ff462eb75ccbb1c4446e21c148f3fc618e1Daniel Dunbar 567e7925a075f110ab21afeae084670a155dea568e3Edward O'Callaghan#endif // CLANG_LIB_DRIVER_TOOLS_H_ 568