Tools.h revision 42f74f21ece01dc8573d5377859d327fbb23b26c
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 { 21260611a32535c851237926bfcf78869b13c07d5bJohn McCall class ObjCRuntime; 22260611a32535c851237926bfcf78869b13c07d5bJohn McCall 239c073ff462eb75ccbb1c4446e21c148f3fc618e1Daniel Dunbarnamespace driver { 24df91ef3d6c55692a0236f67b6c6b134a3bf84098Douglas Gregor class Driver; 25df91ef3d6c55692a0236f67b6c6b134a3bf84098Douglas Gregor 2602633b541b04ad5ffc1c70f4c2feeeb13e607057Daniel Dunbarnamespace toolchains { 27f395528158379e7ea9f6ff4bbb791abadca15aabDaniel Dunbar class Darwin; 2802633b541b04ad5ffc1c70f4c2feeeb13e607057Daniel Dunbar} 2902633b541b04ad5ffc1c70f4c2feeeb13e607057Daniel Dunbar 30985b825eea7387be10478de0430815ed6a673326Daniel Dunbarnamespace tools { 319c073ff462eb75ccbb1c4446e21c148f3fc618e1Daniel Dunbar 3220a9aa50f9a7d4b03f97bc67e96da1d605c309a2Daniel Dunbar /// \brief Clang compiler tool. 3392dd1915842410005c68d32c43bb3b3cf5a4a702Duncan Sands class LLVM_LIBRARY_VISIBILITY Clang : public Tool { 3454db68bf0e389b8aabe1a434f825a81a9c1f7db8Peter Collingbourne void AddPreprocessingOptions(Compilation &C, 3554db68bf0e389b8aabe1a434f825a81a9c1f7db8Peter Collingbourne const Driver &D, 36df91ef3d6c55692a0236f67b6c6b134a3bf84098Douglas Gregor const ArgList &Args, 37c21c485b4fb58ef5d55cf3e523263dd824a2ace4Daniel Dunbar ArgStringList &CmdArgs, 38c21c485b4fb58ef5d55cf3e523263dd824a2ace4Daniel Dunbar const InputInfo &Output, 39c21c485b4fb58ef5d55cf3e523263dd824a2ace4Daniel Dunbar const InputInfoList &Inputs) const; 40c21c485b4fb58ef5d55cf3e523263dd824a2ace4Daniel Dunbar 41fa41d6975058ceb1b8a24564f6dcec72f89f62e8Daniel Dunbar void AddARMTargetArgs(const ArgList &Args, ArgStringList &CmdArgs, 42fa41d6975058ceb1b8a24564f6dcec72f89f62e8Daniel Dunbar bool KernelOrKext) const; 43ed734737d5af31906e30e537d4a41c760ddcfc59Eric Christopher void AddMIPSTargetArgs(const ArgList &Args, ArgStringList &CmdArgs) const; 4402a84277864e5476b12c0ec687ed09f0b2922471Hal Finkel void AddPPCTargetArgs(const ArgList &Args, ArgStringList &CmdArgs) const; 459284d215022457ba867080a713f08f026d89ea17Bruno Cardoso Lopes void AddSparcTargetArgs(const ArgList &Args, ArgStringList &CmdArgs) const; 466acda16e9c194dcbd0dea64341e182bdb65d0f41Daniel Dunbar void AddX86TargetArgs(const ArgList &Args, ArgStringList &CmdArgs) const; 479631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum void AddHexagonTargetArgs (const ArgList &Args, ArgStringList &CmdArgs) const; 486acda16e9c194dcbd0dea64341e182bdb65d0f41Daniel Dunbar 49260611a32535c851237926bfcf78869b13c07d5bJohn McCall enum RewriteKind { RK_None, RK_Fragile, RK_NonFragile }; 50260611a32535c851237926bfcf78869b13c07d5bJohn McCall 51260611a32535c851237926bfcf78869b13c07d5bJohn McCall ObjCRuntime AddObjCRuntimeArgs(const ArgList &args, ArgStringList &cmdArgs, 52260611a32535c851237926bfcf78869b13c07d5bJohn McCall RewriteKind rewrite) const; 53260611a32535c851237926bfcf78869b13c07d5bJohn McCall 549c073ff462eb75ccbb1c4446e21c148f3fc618e1Daniel Dunbar public: 553038204fd8f6ff22082dd18e4b12ed252b75a5e4Daniel Dunbar Clang(const ToolChain &TC) : Tool("clang", "clang frontend", TC) {} 569c073ff462eb75ccbb1c4446e21c148f3fc618e1Daniel Dunbar 5760a53f24b160724de0e8dd0e142009981540fd26Daniel Dunbar virtual bool hasGoodDiagnostics() const { return true; } 588767cbc475ed96397b6f08617814eeb9cab121bdDaniel Dunbar virtual bool hasIntegratedAssembler() const { return true; } 599c073ff462eb75ccbb1c4446e21c148f3fc618e1Daniel Dunbar virtual bool hasIntegratedCPP() const { return true; } 6047ac7d27c44bd64a7d0fc03d4babc196cf2b8230Daniel Dunbar 6147ac7d27c44bd64a7d0fc03d4babc196cf2b8230Daniel Dunbar virtual void ConstructJob(Compilation &C, const JobAction &JA, 6220a9aa50f9a7d4b03f97bc67e96da1d605c309a2Daniel Dunbar const InputInfo &Output, 6320a9aa50f9a7d4b03f97bc67e96da1d605c309a2Daniel Dunbar const InputInfoList &Inputs, 6420a9aa50f9a7d4b03f97bc67e96da1d605c309a2Daniel Dunbar const ArgList &TCArgs, 6520a9aa50f9a7d4b03f97bc67e96da1d605c309a2Daniel Dunbar const char *LinkingOutput) const; 6620a9aa50f9a7d4b03f97bc67e96da1d605c309a2Daniel Dunbar }; 6720a9aa50f9a7d4b03f97bc67e96da1d605c309a2Daniel Dunbar 6820a9aa50f9a7d4b03f97bc67e96da1d605c309a2Daniel Dunbar /// \brief Clang integrated assembler tool. 6920a9aa50f9a7d4b03f97bc67e96da1d605c309a2Daniel Dunbar class LLVM_LIBRARY_VISIBILITY ClangAs : public Tool { 70fc30829694e62040c14f329f5491724fe7476241Jim Grosbach void AddARMTargetArgs(const ArgList &Args, ArgStringList &CmdArgs) const; 7120a9aa50f9a7d4b03f97bc67e96da1d605c309a2Daniel Dunbar public: 723038204fd8f6ff22082dd18e4b12ed252b75a5e4Daniel Dunbar ClangAs(const ToolChain &TC) : Tool("clang::as", 733038204fd8f6ff22082dd18e4b12ed252b75a5e4Daniel Dunbar "clang integrated assembler", TC) {} 7420a9aa50f9a7d4b03f97bc67e96da1d605c309a2Daniel Dunbar 7520a9aa50f9a7d4b03f97bc67e96da1d605c309a2Daniel Dunbar virtual bool hasGoodDiagnostics() const { return true; } 7620a9aa50f9a7d4b03f97bc67e96da1d605c309a2Daniel Dunbar virtual bool hasIntegratedAssembler() const { return false; } 7720a9aa50f9a7d4b03f97bc67e96da1d605c309a2Daniel Dunbar virtual bool hasIntegratedCPP() const { return false; } 7820a9aa50f9a7d4b03f97bc67e96da1d605c309a2Daniel Dunbar 7920a9aa50f9a7d4b03f97bc67e96da1d605c309a2Daniel Dunbar virtual void ConstructJob(Compilation &C, const JobAction &JA, 801eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump const InputInfo &Output, 811eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump const InputInfoList &Inputs, 821eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump const ArgList &TCArgs, 8347ac7d27c44bd64a7d0fc03d4babc196cf2b8230Daniel Dunbar const char *LinkingOutput) const; 849c073ff462eb75ccbb1c4446e21c148f3fc618e1Daniel Dunbar }; 859c073ff462eb75ccbb1c4446e21c148f3fc618e1Daniel Dunbar 8631b1e5437e7435879fc044afb77ff27096008e72Daniel Dunbar /// gcc - Generic GCC tool implementations. 8731b1e5437e7435879fc044afb77ff27096008e72Daniel Dunbarnamespace gcc { 8892dd1915842410005c68d32c43bb3b3cf5a4a702Duncan Sands class LLVM_LIBRARY_VISIBILITY Common : public Tool { 899c073ff462eb75ccbb1c4446e21c148f3fc618e1Daniel Dunbar public: 903038204fd8f6ff22082dd18e4b12ed252b75a5e4Daniel Dunbar Common(const char *Name, const char *ShortName, 913038204fd8f6ff22082dd18e4b12ed252b75a5e4Daniel Dunbar const ToolChain &TC) : Tool(Name, ShortName, TC) {} 9247ac7d27c44bd64a7d0fc03d4babc196cf2b8230Daniel Dunbar 9347ac7d27c44bd64a7d0fc03d4babc196cf2b8230Daniel Dunbar virtual void ConstructJob(Compilation &C, const JobAction &JA, 941eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump const InputInfo &Output, 951eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump const InputInfoList &Inputs, 961eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump const ArgList &TCArgs, 9747ac7d27c44bd64a7d0fc03d4babc196cf2b8230Daniel Dunbar const char *LinkingOutput) const; 98b488c1dac8e53206f07103d794a62a3f5012c0f4Daniel Dunbar 99b488c1dac8e53206f07103d794a62a3f5012c0f4Daniel Dunbar /// RenderExtraToolArgs - Render any arguments necessary to force 100b488c1dac8e53206f07103d794a62a3f5012c0f4Daniel Dunbar /// the particular tool mode. 10182b51cce8cea6b6bb6175c406c2ab425c91d9dc8Daniel Dunbar virtual void RenderExtraToolArgs(const JobAction &JA, 10282b51cce8cea6b6bb6175c406c2ab425c91d9dc8Daniel Dunbar ArgStringList &CmdArgs) const = 0; 1039c073ff462eb75ccbb1c4446e21c148f3fc618e1Daniel Dunbar }; 1049c073ff462eb75ccbb1c4446e21c148f3fc618e1Daniel Dunbar 1051eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump 10692dd1915842410005c68d32c43bb3b3cf5a4a702Duncan Sands class LLVM_LIBRARY_VISIBILITY Preprocess : public Common { 1079c073ff462eb75ccbb1c4446e21c148f3fc618e1Daniel Dunbar public: 1083038204fd8f6ff22082dd18e4b12ed252b75a5e4Daniel Dunbar Preprocess(const ToolChain &TC) : Common("gcc::Preprocess", 1093038204fd8f6ff22082dd18e4b12ed252b75a5e4Daniel Dunbar "gcc preprocessor", TC) {} 110b488c1dac8e53206f07103d794a62a3f5012c0f4Daniel Dunbar 11160a53f24b160724de0e8dd0e142009981540fd26Daniel Dunbar virtual bool hasGoodDiagnostics() const { return true; } 112b488c1dac8e53206f07103d794a62a3f5012c0f4Daniel Dunbar virtual bool hasIntegratedCPP() const { return false; } 113b488c1dac8e53206f07103d794a62a3f5012c0f4Daniel Dunbar 11482b51cce8cea6b6bb6175c406c2ab425c91d9dc8Daniel Dunbar virtual void RenderExtraToolArgs(const JobAction &JA, 11582b51cce8cea6b6bb6175c406c2ab425c91d9dc8Daniel Dunbar ArgStringList &CmdArgs) const; 116b488c1dac8e53206f07103d794a62a3f5012c0f4Daniel Dunbar }; 117b488c1dac8e53206f07103d794a62a3f5012c0f4Daniel Dunbar 11892dd1915842410005c68d32c43bb3b3cf5a4a702Duncan Sands class LLVM_LIBRARY_VISIBILITY Precompile : public Common { 119b488c1dac8e53206f07103d794a62a3f5012c0f4Daniel Dunbar public: 1203038204fd8f6ff22082dd18e4b12ed252b75a5e4Daniel Dunbar Precompile(const ToolChain &TC) : Common("gcc::Precompile", 1213038204fd8f6ff22082dd18e4b12ed252b75a5e4Daniel Dunbar "gcc precompile", TC) {} 1229c073ff462eb75ccbb1c4446e21c148f3fc618e1Daniel Dunbar 12360a53f24b160724de0e8dd0e142009981540fd26Daniel Dunbar virtual bool hasGoodDiagnostics() const { return true; } 1249c073ff462eb75ccbb1c4446e21c148f3fc618e1Daniel Dunbar virtual bool hasIntegratedCPP() const { return true; } 12547ac7d27c44bd64a7d0fc03d4babc196cf2b8230Daniel Dunbar 12682b51cce8cea6b6bb6175c406c2ab425c91d9dc8Daniel Dunbar virtual void RenderExtraToolArgs(const JobAction &JA, 12782b51cce8cea6b6bb6175c406c2ab425c91d9dc8Daniel Dunbar ArgStringList &CmdArgs) const; 1289c073ff462eb75ccbb1c4446e21c148f3fc618e1Daniel Dunbar }; 1299c073ff462eb75ccbb1c4446e21c148f3fc618e1Daniel Dunbar 13092dd1915842410005c68d32c43bb3b3cf5a4a702Duncan Sands class LLVM_LIBRARY_VISIBILITY Compile : public Common { 1319c073ff462eb75ccbb1c4446e21c148f3fc618e1Daniel Dunbar public: 1323038204fd8f6ff22082dd18e4b12ed252b75a5e4Daniel Dunbar Compile(const ToolChain &TC) : Common("gcc::Compile", 1333038204fd8f6ff22082dd18e4b12ed252b75a5e4Daniel Dunbar "gcc frontend", TC) {} 1349c073ff462eb75ccbb1c4446e21c148f3fc618e1Daniel Dunbar 13560a53f24b160724de0e8dd0e142009981540fd26Daniel Dunbar virtual bool hasGoodDiagnostics() const { return true; } 1369c073ff462eb75ccbb1c4446e21c148f3fc618e1Daniel Dunbar virtual bool hasIntegratedCPP() const { return true; } 13747ac7d27c44bd64a7d0fc03d4babc196cf2b8230Daniel Dunbar 13882b51cce8cea6b6bb6175c406c2ab425c91d9dc8Daniel Dunbar virtual void RenderExtraToolArgs(const JobAction &JA, 13982b51cce8cea6b6bb6175c406c2ab425c91d9dc8Daniel Dunbar ArgStringList &CmdArgs) const; 1409c073ff462eb75ccbb1c4446e21c148f3fc618e1Daniel Dunbar }; 1419c073ff462eb75ccbb1c4446e21c148f3fc618e1Daniel Dunbar 14292dd1915842410005c68d32c43bb3b3cf5a4a702Duncan Sands class LLVM_LIBRARY_VISIBILITY Assemble : public Common { 1439c073ff462eb75ccbb1c4446e21c148f3fc618e1Daniel Dunbar public: 1443038204fd8f6ff22082dd18e4b12ed252b75a5e4Daniel Dunbar Assemble(const ToolChain &TC) : Common("gcc::Assemble", 1453038204fd8f6ff22082dd18e4b12ed252b75a5e4Daniel Dunbar "assembler (via gcc)", TC) {} 1469c073ff462eb75ccbb1c4446e21c148f3fc618e1Daniel Dunbar 1479c073ff462eb75ccbb1c4446e21c148f3fc618e1Daniel Dunbar virtual bool hasIntegratedCPP() const { return false; } 14847ac7d27c44bd64a7d0fc03d4babc196cf2b8230Daniel Dunbar 14982b51cce8cea6b6bb6175c406c2ab425c91d9dc8Daniel Dunbar virtual void RenderExtraToolArgs(const JobAction &JA, 15082b51cce8cea6b6bb6175c406c2ab425c91d9dc8Daniel Dunbar ArgStringList &CmdArgs) const; 1519c073ff462eb75ccbb1c4446e21c148f3fc618e1Daniel Dunbar }; 1529c073ff462eb75ccbb1c4446e21c148f3fc618e1Daniel Dunbar 15392dd1915842410005c68d32c43bb3b3cf5a4a702Duncan Sands class LLVM_LIBRARY_VISIBILITY Link : public Common { 1549c073ff462eb75ccbb1c4446e21c148f3fc618e1Daniel Dunbar public: 1553038204fd8f6ff22082dd18e4b12ed252b75a5e4Daniel Dunbar Link(const ToolChain &TC) : Common("gcc::Link", 1563038204fd8f6ff22082dd18e4b12ed252b75a5e4Daniel Dunbar "linker (via gcc)", TC) {} 1579c073ff462eb75ccbb1c4446e21c148f3fc618e1Daniel Dunbar 1589c073ff462eb75ccbb1c4446e21c148f3fc618e1Daniel Dunbar virtual bool hasIntegratedCPP() const { return false; } 1598ba9a6244c56b19bc2a24de5d0c32ff37d50177bChad Rosier virtual bool isLinkJob() const { return true; } 16047ac7d27c44bd64a7d0fc03d4babc196cf2b8230Daniel Dunbar 16182b51cce8cea6b6bb6175c406c2ab425c91d9dc8Daniel Dunbar virtual void RenderExtraToolArgs(const JobAction &JA, 16282b51cce8cea6b6bb6175c406c2ab425c91d9dc8Daniel Dunbar ArgStringList &CmdArgs) const; 1639c073ff462eb75ccbb1c4446e21c148f3fc618e1Daniel Dunbar }; 16431b1e5437e7435879fc044afb77ff27096008e72Daniel Dunbar} // end namespace gcc 1659c073ff462eb75ccbb1c4446e21c148f3fc618e1Daniel Dunbar 1669631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicumnamespace hexagon { 1679631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum // For Hexagon, we do not need to instantiate tools for PreProcess, PreCompile and Compile. 1689631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum // We simply use "clang -cc1" for those actions. 1699631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum class LLVM_LIBRARY_VISIBILITY Assemble : public Tool { 1709631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum public: 1719631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum Assemble(const ToolChain &TC) : Tool("hexagon::Assemble", 1729631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum "hexagon-as", TC) {} 1739631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum 1749631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum virtual bool hasIntegratedCPP() const { return false; } 1759631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum 1769631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum virtual void RenderExtraToolArgs(const JobAction &JA, 1779631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum ArgStringList &CmdArgs) const; 1789631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum virtual void ConstructJob(Compilation &C, const JobAction &JA, 1799631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum const InputInfo &Output, 1809631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum const InputInfoList &Inputs, 1819631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum const ArgList &TCArgs, 1829631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum const char *LinkingOutput) const; 1839631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum }; 1849631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum 1859631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum class LLVM_LIBRARY_VISIBILITY Link : public Tool { 1869631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum public: 1879631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum Link(const ToolChain &TC) : Tool("hexagon::Link", 1889631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum "hexagon-ld", TC) {} 1899631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum 1909631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum virtual bool hasIntegratedCPP() const { return false; } 1918ba9a6244c56b19bc2a24de5d0c32ff37d50177bChad Rosier virtual bool isLinkJob() const { return true; } 1929631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum 1939631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum virtual void RenderExtraToolArgs(const JobAction &JA, 1949631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum ArgStringList &CmdArgs) const; 1959631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum virtual void ConstructJob(Compilation &C, const JobAction &JA, 1969631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum const InputInfo &Output, 1979631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum const InputInfoList &Inputs, 1989631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum const ArgList &TCArgs, 1999631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum const char *LinkingOutput) const; 2009631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum }; 2019631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum} // end namespace hexagon. 2029631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum 2039631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum 204ff7488dc9a766f94daf54d81b03ab9160d0bfd88Daniel Dunbarnamespace darwin { 20592dd1915842410005c68d32c43bb3b3cf5a4a702Duncan Sands class LLVM_LIBRARY_VISIBILITY DarwinTool : public Tool { 20699ba9e3bd70671f3441fb974895f226a83ce0e66David Blaikie virtual void anchor(); 207fbefe6bd6f62a3361813498dc672ab0d6c0d4fd1Daniel Dunbar protected: 208fbefe6bd6f62a3361813498dc672ab0d6c0d4fd1Daniel Dunbar void AddDarwinArch(const ArgList &Args, ArgStringList &CmdArgs) const; 209fbefe6bd6f62a3361813498dc672ab0d6c0d4fd1Daniel Dunbar 210fbefe6bd6f62a3361813498dc672ab0d6c0d4fd1Daniel Dunbar const toolchains::Darwin &getDarwinToolChain() const { 211fbefe6bd6f62a3361813498dc672ab0d6c0d4fd1Daniel Dunbar return reinterpret_cast<const toolchains::Darwin&>(getToolChain()); 212fbefe6bd6f62a3361813498dc672ab0d6c0d4fd1Daniel Dunbar } 213fbefe6bd6f62a3361813498dc672ab0d6c0d4fd1Daniel Dunbar 214fbefe6bd6f62a3361813498dc672ab0d6c0d4fd1Daniel Dunbar public: 2153038204fd8f6ff22082dd18e4b12ed252b75a5e4Daniel Dunbar DarwinTool(const char *Name, const char *ShortName, 2163038204fd8f6ff22082dd18e4b12ed252b75a5e4Daniel Dunbar const ToolChain &TC) : Tool(Name, ShortName, TC) {} 217fbefe6bd6f62a3361813498dc672ab0d6c0d4fd1Daniel Dunbar }; 218fbefe6bd6f62a3361813498dc672ab0d6c0d4fd1Daniel Dunbar 21992dd1915842410005c68d32c43bb3b3cf5a4a702Duncan Sands class LLVM_LIBRARY_VISIBILITY CC1 : public DarwinTool { 22099ba9e3bd70671f3441fb974895f226a83ce0e66David Blaikie virtual void anchor(); 221a5a7bd0de7b6b80212095195a055a4a43f21d4b2Daniel Dunbar public: 2221eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump static const char *getBaseInputName(const ArgList &Args, 223a5a7bd0de7b6b80212095195a055a4a43f21d4b2Daniel Dunbar const InputInfoList &Input); 2241eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump static const char *getBaseInputStem(const ArgList &Args, 225a5a7bd0de7b6b80212095195a055a4a43f21d4b2Daniel Dunbar const InputInfoList &Input); 2261eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump static const char *getDependencyFileName(const ArgList &Args, 227a5a7bd0de7b6b80212095195a055a4a43f21d4b2Daniel Dunbar const InputInfoList &Inputs); 228a5a7bd0de7b6b80212095195a055a4a43f21d4b2Daniel Dunbar 22940f1265ebd42ece3e7f7917319b56012e8e2bce2Daniel Dunbar protected: 23040f1265ebd42ece3e7f7917319b56012e8e2bce2Daniel Dunbar const char *getCC1Name(types::ID Type) const; 231a3ec60e0cf2a1916f479288998d31bd980b1a306Daniel Dunbar 232a3ec60e0cf2a1916f479288998d31bd980b1a306Daniel Dunbar void AddCC1Args(const ArgList &Args, ArgStringList &CmdArgs) const; 233285f9a284704c07cd50e4597408d5f93518cd7c3Chad Rosier void RemoveCC1UnsupportedArgs(ArgStringList &CmdArgs) const; 23440f1265ebd42ece3e7f7917319b56012e8e2bce2Daniel Dunbar void AddCC1OptionsArgs(const ArgList &Args, ArgStringList &CmdArgs, 23540f1265ebd42ece3e7f7917319b56012e8e2bce2Daniel Dunbar const InputInfoList &Inputs, 236a3ec60e0cf2a1916f479288998d31bd980b1a306Daniel Dunbar const ArgStringList &OutputArgs) const; 23740f1265ebd42ece3e7f7917319b56012e8e2bce2Daniel Dunbar void AddCPPOptionsArgs(const ArgList &Args, ArgStringList &CmdArgs, 23840f1265ebd42ece3e7f7917319b56012e8e2bce2Daniel Dunbar const InputInfoList &Inputs, 239a3ec60e0cf2a1916f479288998d31bd980b1a306Daniel Dunbar const ArgStringList &OutputArgs) const; 2401eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump void AddCPPUniqueOptionsArgs(const ArgList &Args, 241a3ec60e0cf2a1916f479288998d31bd980b1a306Daniel Dunbar ArgStringList &CmdArgs, 242a3ec60e0cf2a1916f479288998d31bd980b1a306Daniel Dunbar const InputInfoList &Inputs) const; 243a3ec60e0cf2a1916f479288998d31bd980b1a306Daniel Dunbar void AddCPPArgs(const ArgList &Args, ArgStringList &CmdArgs) const; 24440f1265ebd42ece3e7f7917319b56012e8e2bce2Daniel Dunbar 24540f1265ebd42ece3e7f7917319b56012e8e2bce2Daniel Dunbar public: 2463038204fd8f6ff22082dd18e4b12ed252b75a5e4Daniel Dunbar CC1(const char *Name, const char *ShortName, 2473038204fd8f6ff22082dd18e4b12ed252b75a5e4Daniel Dunbar const ToolChain &TC) : DarwinTool(Name, ShortName, TC) {} 24840f1265ebd42ece3e7f7917319b56012e8e2bce2Daniel Dunbar 24960a53f24b160724de0e8dd0e142009981540fd26Daniel Dunbar virtual bool hasGoodDiagnostics() const { return true; } 25040f1265ebd42ece3e7f7917319b56012e8e2bce2Daniel Dunbar virtual bool hasIntegratedCPP() const { return true; } 25140f1265ebd42ece3e7f7917319b56012e8e2bce2Daniel Dunbar }; 25240f1265ebd42ece3e7f7917319b56012e8e2bce2Daniel Dunbar 25392dd1915842410005c68d32c43bb3b3cf5a4a702Duncan Sands class LLVM_LIBRARY_VISIBILITY Preprocess : public CC1 { 25440f1265ebd42ece3e7f7917319b56012e8e2bce2Daniel Dunbar public: 2553038204fd8f6ff22082dd18e4b12ed252b75a5e4Daniel Dunbar Preprocess(const ToolChain &TC) : CC1("darwin::Preprocess", 2563038204fd8f6ff22082dd18e4b12ed252b75a5e4Daniel Dunbar "gcc preprocessor", 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 Compile : public CC1 { 26640f1265ebd42ece3e7f7917319b56012e8e2bce2Daniel Dunbar public: 2673038204fd8f6ff22082dd18e4b12ed252b75a5e4Daniel Dunbar Compile(const ToolChain &TC) : CC1("darwin::Compile", "gcc frontend", TC) {} 26840f1265ebd42ece3e7f7917319b56012e8e2bce2Daniel Dunbar 26940f1265ebd42ece3e7f7917319b56012e8e2bce2Daniel Dunbar virtual void ConstructJob(Compilation &C, const JobAction &JA, 2701eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump const InputInfo &Output, 2711eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump const InputInfoList &Inputs, 2721eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump const ArgList &TCArgs, 27340f1265ebd42ece3e7f7917319b56012e8e2bce2Daniel Dunbar const char *LinkingOutput) const; 27440f1265ebd42ece3e7f7917319b56012e8e2bce2Daniel Dunbar }; 27540f1265ebd42ece3e7f7917319b56012e8e2bce2Daniel Dunbar 27692dd1915842410005c68d32c43bb3b3cf5a4a702Duncan Sands class LLVM_LIBRARY_VISIBILITY Assemble : public DarwinTool { 2778cac5f7e1ce63dd77ee0fb4ef68f9fa804f41ea6Daniel Dunbar public: 2783038204fd8f6ff22082dd18e4b12ed252b75a5e4Daniel Dunbar Assemble(const ToolChain &TC) : DarwinTool("darwin::Assemble", 2793038204fd8f6ff22082dd18e4b12ed252b75a5e4Daniel Dunbar "assembler", TC) {} 2808cac5f7e1ce63dd77ee0fb4ef68f9fa804f41ea6Daniel Dunbar 2818cac5f7e1ce63dd77ee0fb4ef68f9fa804f41ea6Daniel Dunbar virtual bool hasIntegratedCPP() const { return false; } 2828cac5f7e1ce63dd77ee0fb4ef68f9fa804f41ea6Daniel Dunbar 2838cac5f7e1ce63dd77ee0fb4ef68f9fa804f41ea6Daniel Dunbar virtual void ConstructJob(Compilation &C, const JobAction &JA, 2841eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump const InputInfo &Output, 2851eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump const InputInfoList &Inputs, 2861eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump const ArgList &TCArgs, 28702633b541b04ad5ffc1c70f4c2feeeb13e607057Daniel Dunbar const char *LinkingOutput) const; 28802633b541b04ad5ffc1c70f4c2feeeb13e607057Daniel Dunbar }; 28902633b541b04ad5ffc1c70f4c2feeeb13e607057Daniel Dunbar 29092dd1915842410005c68d32c43bb3b3cf5a4a702Duncan Sands class LLVM_LIBRARY_VISIBILITY Link : public DarwinTool { 291748de8eda222f087434d8bd703176b316a061341Daniel Dunbar void AddLinkArgs(Compilation &C, const ArgList &Args, 292748de8eda222f087434d8bd703176b316a061341Daniel Dunbar ArgStringList &CmdArgs) const; 29302633b541b04ad5ffc1c70f4c2feeeb13e607057Daniel Dunbar 29402633b541b04ad5ffc1c70f4c2feeeb13e607057Daniel Dunbar public: 2953038204fd8f6ff22082dd18e4b12ed252b75a5e4Daniel Dunbar Link(const ToolChain &TC) : DarwinTool("darwin::Link", "linker", TC) {} 29602633b541b04ad5ffc1c70f4c2feeeb13e607057Daniel Dunbar 29702633b541b04ad5ffc1c70f4c2feeeb13e607057Daniel Dunbar virtual bool hasIntegratedCPP() const { return false; } 2988ba9a6244c56b19bc2a24de5d0c32ff37d50177bChad Rosier virtual bool isLinkJob() const { return true; } 29902633b541b04ad5ffc1c70f4c2feeeb13e607057Daniel Dunbar 30002633b541b04ad5ffc1c70f4c2feeeb13e607057Daniel Dunbar virtual void ConstructJob(Compilation &C, const JobAction &JA, 3011eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump const InputInfo &Output, 3021eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump const InputInfoList &Inputs, 3031eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump const ArgList &TCArgs, 3048cac5f7e1ce63dd77ee0fb4ef68f9fa804f41ea6Daniel Dunbar const char *LinkingOutput) const; 3058cac5f7e1ce63dd77ee0fb4ef68f9fa804f41ea6Daniel Dunbar }; 3068cac5f7e1ce63dd77ee0fb4ef68f9fa804f41ea6Daniel Dunbar 30792dd1915842410005c68d32c43bb3b3cf5a4a702Duncan Sands class LLVM_LIBRARY_VISIBILITY Lipo : public DarwinTool { 308ff7488dc9a766f94daf54d81b03ab9160d0bfd88Daniel Dunbar public: 3093038204fd8f6ff22082dd18e4b12ed252b75a5e4Daniel Dunbar Lipo(const ToolChain &TC) : DarwinTool("darwin::Lipo", "lipo", TC) {} 310ff7488dc9a766f94daf54d81b03ab9160d0bfd88Daniel Dunbar 311ff7488dc9a766f94daf54d81b03ab9160d0bfd88Daniel Dunbar virtual bool hasIntegratedCPP() const { return false; } 312ff7488dc9a766f94daf54d81b03ab9160d0bfd88Daniel Dunbar 313ff7488dc9a766f94daf54d81b03ab9160d0bfd88Daniel Dunbar virtual void ConstructJob(Compilation &C, const JobAction &JA, 3141eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump const InputInfo &Output, 3151eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump const InputInfoList &Inputs, 3161eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump const ArgList &TCArgs, 3176e0f25483b1a801cd1155ea89c2b725feab16332Daniel Dunbar const char *LinkingOutput) const; 3186e0f25483b1a801cd1155ea89c2b725feab16332Daniel Dunbar }; 3196e0f25483b1a801cd1155ea89c2b725feab16332Daniel Dunbar 3206e0f25483b1a801cd1155ea89c2b725feab16332Daniel Dunbar class LLVM_LIBRARY_VISIBILITY Dsymutil : public DarwinTool { 3216e0f25483b1a801cd1155ea89c2b725feab16332Daniel Dunbar public: 3226e0f25483b1a801cd1155ea89c2b725feab16332Daniel Dunbar Dsymutil(const ToolChain &TC) : DarwinTool("darwin::Dsymutil", 3236e0f25483b1a801cd1155ea89c2b725feab16332Daniel Dunbar "dsymutil", TC) {} 3246e0f25483b1a801cd1155ea89c2b725feab16332Daniel Dunbar 3256e0f25483b1a801cd1155ea89c2b725feab16332Daniel Dunbar virtual bool hasIntegratedCPP() const { return false; } 3266e0f25483b1a801cd1155ea89c2b725feab16332Daniel Dunbar 3276e0f25483b1a801cd1155ea89c2b725feab16332Daniel Dunbar virtual void ConstructJob(Compilation &C, const JobAction &JA, 3286e0f25483b1a801cd1155ea89c2b725feab16332Daniel Dunbar const InputInfo &Output, 3296e0f25483b1a801cd1155ea89c2b725feab16332Daniel Dunbar const InputInfoList &Inputs, 3306e0f25483b1a801cd1155ea89c2b725feab16332Daniel Dunbar const ArgList &TCArgs, 331f7b8eec37c8c8012fa525c71fb29a58c9f29beefDaniel Dunbar const char *LinkingOutput) const; 332f7b8eec37c8c8012fa525c71fb29a58c9f29beefDaniel Dunbar }; 333f857186fd1995b34185d063a29b11ad4f948519fEric Christopher 334f857186fd1995b34185d063a29b11ad4f948519fEric Christopher class LLVM_LIBRARY_VISIBILITY VerifyDebug : public DarwinTool { 335f857186fd1995b34185d063a29b11ad4f948519fEric Christopher public: 336f857186fd1995b34185d063a29b11ad4f948519fEric Christopher VerifyDebug(const ToolChain &TC) : DarwinTool("darwin::VerifyDebug", 337f857186fd1995b34185d063a29b11ad4f948519fEric Christopher "dwarfdump", TC) {} 338f857186fd1995b34185d063a29b11ad4f948519fEric Christopher 339f857186fd1995b34185d063a29b11ad4f948519fEric Christopher virtual bool hasIntegratedCPP() const { return false; } 340f857186fd1995b34185d063a29b11ad4f948519fEric Christopher 341f857186fd1995b34185d063a29b11ad4f948519fEric Christopher virtual void ConstructJob(Compilation &C, const JobAction &JA, 342f857186fd1995b34185d063a29b11ad4f948519fEric Christopher const InputInfo &Output, 343f857186fd1995b34185d063a29b11ad4f948519fEric Christopher const InputInfoList &Inputs, 344f857186fd1995b34185d063a29b11ad4f948519fEric Christopher const ArgList &TCArgs, 345f857186fd1995b34185d063a29b11ad4f948519fEric Christopher const char *LinkingOutput) const; 346f857186fd1995b34185d063a29b11ad4f948519fEric Christopher }; 347f857186fd1995b34185d063a29b11ad4f948519fEric Christopher 348f7b8eec37c8c8012fa525c71fb29a58c9f29beefDaniel Dunbar} 349f7b8eec37c8c8012fa525c71fb29a58c9f29beefDaniel Dunbar 350f7b8eec37c8c8012fa525c71fb29a58c9f29beefDaniel Dunbar /// openbsd -- Directly call GNU Binutils assembler and linker 351f7b8eec37c8c8012fa525c71fb29a58c9f29beefDaniel Dunbarnamespace openbsd { 35292dd1915842410005c68d32c43bb3b3cf5a4a702Duncan Sands class LLVM_LIBRARY_VISIBILITY Assemble : public Tool { 353f7b8eec37c8c8012fa525c71fb29a58c9f29beefDaniel Dunbar public: 3543038204fd8f6ff22082dd18e4b12ed252b75a5e4Daniel Dunbar Assemble(const ToolChain &TC) : Tool("openbsd::Assemble", "assembler", 3553038204fd8f6ff22082dd18e4b12ed252b75a5e4Daniel Dunbar 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, 363f7b8eec37c8c8012fa525c71fb29a58c9f29beefDaniel Dunbar const char *LinkingOutput) const; 364f7b8eec37c8c8012fa525c71fb29a58c9f29beefDaniel Dunbar }; 36592dd1915842410005c68d32c43bb3b3cf5a4a702Duncan Sands class LLVM_LIBRARY_VISIBILITY Link : public Tool { 366f7b8eec37c8c8012fa525c71fb29a58c9f29beefDaniel Dunbar public: 3673038204fd8f6ff22082dd18e4b12ed252b75a5e4Daniel Dunbar Link(const ToolChain &TC) : Tool("openbsd::Link", "linker", TC) {} 368f7b8eec37c8c8012fa525c71fb29a58c9f29beefDaniel Dunbar 369f7b8eec37c8c8012fa525c71fb29a58c9f29beefDaniel Dunbar virtual bool hasIntegratedCPP() const { return false; } 3708ba9a6244c56b19bc2a24de5d0c32ff37d50177bChad Rosier virtual bool isLinkJob() const { return true; } 371f7b8eec37c8c8012fa525c71fb29a58c9f29beefDaniel Dunbar 372f7b8eec37c8c8012fa525c71fb29a58c9f29beefDaniel Dunbar virtual void ConstructJob(Compilation &C, const JobAction &JA, 3731eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump const InputInfo &Output, 3741eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump const InputInfoList &Inputs, 3751eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump const ArgList &TCArgs, 376ff7488dc9a766f94daf54d81b03ab9160d0bfd88Daniel Dunbar const char *LinkingOutput) const; 377ff7488dc9a766f94daf54d81b03ab9160d0bfd88Daniel Dunbar }; 378e7925a075f110ab21afeae084670a155dea568e3Edward O'Callaghan} // end namespace openbsd 379ff7488dc9a766f94daf54d81b03ab9160d0bfd88Daniel Dunbar 38042f74f21ece01dc8573d5377859d327fbb23b26cEli Friedman /// bitrig -- Directly call GNU Binutils assembler and linker 38142f74f21ece01dc8573d5377859d327fbb23b26cEli Friedmannamespace bitrig { 38242f74f21ece01dc8573d5377859d327fbb23b26cEli Friedman class LLVM_LIBRARY_VISIBILITY Assemble : public Tool { 38342f74f21ece01dc8573d5377859d327fbb23b26cEli Friedman public: 38442f74f21ece01dc8573d5377859d327fbb23b26cEli Friedman Assemble(const ToolChain &TC) : Tool("bitrig::Assemble", "assembler", 38542f74f21ece01dc8573d5377859d327fbb23b26cEli Friedman TC) {} 38642f74f21ece01dc8573d5377859d327fbb23b26cEli Friedman 38742f74f21ece01dc8573d5377859d327fbb23b26cEli Friedman virtual bool hasIntegratedCPP() const { return false; } 38842f74f21ece01dc8573d5377859d327fbb23b26cEli Friedman 38942f74f21ece01dc8573d5377859d327fbb23b26cEli Friedman virtual void ConstructJob(Compilation &C, const JobAction &JA, 39042f74f21ece01dc8573d5377859d327fbb23b26cEli Friedman const InputInfo &Output, 39142f74f21ece01dc8573d5377859d327fbb23b26cEli Friedman const InputInfoList &Inputs, 39242f74f21ece01dc8573d5377859d327fbb23b26cEli Friedman const ArgList &TCArgs, 39342f74f21ece01dc8573d5377859d327fbb23b26cEli Friedman const char *LinkingOutput) const; 39442f74f21ece01dc8573d5377859d327fbb23b26cEli Friedman }; 39542f74f21ece01dc8573d5377859d327fbb23b26cEli Friedman class LLVM_LIBRARY_VISIBILITY Link : public Tool { 39642f74f21ece01dc8573d5377859d327fbb23b26cEli Friedman public: 39742f74f21ece01dc8573d5377859d327fbb23b26cEli Friedman Link(const ToolChain &TC) : Tool("bitrig::Link", "linker", TC) {} 39842f74f21ece01dc8573d5377859d327fbb23b26cEli Friedman 39942f74f21ece01dc8573d5377859d327fbb23b26cEli Friedman virtual bool hasIntegratedCPP() const { return false; } 40042f74f21ece01dc8573d5377859d327fbb23b26cEli Friedman virtual bool isLinkJob() const { return true; } 40142f74f21ece01dc8573d5377859d327fbb23b26cEli Friedman 40242f74f21ece01dc8573d5377859d327fbb23b26cEli Friedman virtual void ConstructJob(Compilation &C, const JobAction &JA, 40342f74f21ece01dc8573d5377859d327fbb23b26cEli Friedman const InputInfo &Output, 40442f74f21ece01dc8573d5377859d327fbb23b26cEli Friedman const InputInfoList &Inputs, 40542f74f21ece01dc8573d5377859d327fbb23b26cEli Friedman const ArgList &TCArgs, 40642f74f21ece01dc8573d5377859d327fbb23b26cEli Friedman const char *LinkingOutput) const; 40742f74f21ece01dc8573d5377859d327fbb23b26cEli Friedman }; 40842f74f21ece01dc8573d5377859d327fbb23b26cEli Friedman} // end namespace bitrig 40942f74f21ece01dc8573d5377859d327fbb23b26cEli Friedman 41068a31d406c6dc4382c700d1199b062de2aa7e1daDaniel Dunbar /// freebsd -- Directly call GNU Binutils assembler and linker 41168a31d406c6dc4382c700d1199b062de2aa7e1daDaniel Dunbarnamespace freebsd { 41292dd1915842410005c68d32c43bb3b3cf5a4a702Duncan Sands class LLVM_LIBRARY_VISIBILITY Assemble : public Tool { 41368a31d406c6dc4382c700d1199b062de2aa7e1daDaniel Dunbar public: 4143038204fd8f6ff22082dd18e4b12ed252b75a5e4Daniel Dunbar Assemble(const ToolChain &TC) : Tool("freebsd::Assemble", "assembler", 4153038204fd8f6ff22082dd18e4b12ed252b75a5e4Daniel Dunbar TC) {} 41668a31d406c6dc4382c700d1199b062de2aa7e1daDaniel Dunbar 41768a31d406c6dc4382c700d1199b062de2aa7e1daDaniel Dunbar virtual bool hasIntegratedCPP() const { return false; } 41868a31d406c6dc4382c700d1199b062de2aa7e1daDaniel Dunbar 41968a31d406c6dc4382c700d1199b062de2aa7e1daDaniel Dunbar virtual void ConstructJob(Compilation &C, const JobAction &JA, 4201eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump const InputInfo &Output, 4211eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump const InputInfoList &Inputs, 4221eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump const ArgList &TCArgs, 42368a31d406c6dc4382c700d1199b062de2aa7e1daDaniel Dunbar const char *LinkingOutput) const; 42468a31d406c6dc4382c700d1199b062de2aa7e1daDaniel Dunbar }; 42592dd1915842410005c68d32c43bb3b3cf5a4a702Duncan Sands class LLVM_LIBRARY_VISIBILITY Link : public Tool { 426008f54a54299eaafdaa940e2bdeaf55935ecd95aDaniel Dunbar public: 4273038204fd8f6ff22082dd18e4b12ed252b75a5e4Daniel Dunbar Link(const ToolChain &TC) : Tool("freebsd::Link", "linker", TC) {} 428008f54a54299eaafdaa940e2bdeaf55935ecd95aDaniel Dunbar 429008f54a54299eaafdaa940e2bdeaf55935ecd95aDaniel Dunbar virtual bool hasIntegratedCPP() const { return false; } 4308ba9a6244c56b19bc2a24de5d0c32ff37d50177bChad Rosier virtual bool isLinkJob() const { return true; } 431008f54a54299eaafdaa940e2bdeaf55935ecd95aDaniel Dunbar 432008f54a54299eaafdaa940e2bdeaf55935ecd95aDaniel Dunbar virtual void ConstructJob(Compilation &C, const JobAction &JA, 4331eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump const InputInfo &Output, 4341eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump const InputInfoList &Inputs, 4351eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump const ArgList &TCArgs, 436008f54a54299eaafdaa940e2bdeaf55935ecd95aDaniel Dunbar const char *LinkingOutput) const; 437008f54a54299eaafdaa940e2bdeaf55935ecd95aDaniel Dunbar }; 438e7925a075f110ab21afeae084670a155dea568e3Edward O'Callaghan} // end namespace freebsd 439e7925a075f110ab21afeae084670a155dea568e3Edward O'Callaghan 4408e50a96b387dca7525caa8a6add31420dd82a2cdBenjamin Kramer /// netbsd -- Directly call GNU Binutils assembler and linker 4418e50a96b387dca7525caa8a6add31420dd82a2cdBenjamin Kramernamespace netbsd { 4428e50a96b387dca7525caa8a6add31420dd82a2cdBenjamin Kramer class LLVM_LIBRARY_VISIBILITY Assemble : public Tool { 443182564cd14a2105fff05fd52f5940eff96161d57Joerg Sonnenberger 4448e50a96b387dca7525caa8a6add31420dd82a2cdBenjamin Kramer public: 4451bd91374498ac78e72545f08f4daa6491f9c9d14Joerg Sonnenberger Assemble(const ToolChain &TC) 4461bd91374498ac78e72545f08f4daa6491f9c9d14Joerg Sonnenberger : Tool("netbsd::Assemble", "assembler", TC) {} 4478e50a96b387dca7525caa8a6add31420dd82a2cdBenjamin Kramer 4488e50a96b387dca7525caa8a6add31420dd82a2cdBenjamin Kramer virtual bool hasIntegratedCPP() const { return false; } 4498e50a96b387dca7525caa8a6add31420dd82a2cdBenjamin Kramer 4508e50a96b387dca7525caa8a6add31420dd82a2cdBenjamin Kramer virtual void ConstructJob(Compilation &C, const JobAction &JA, 4518e50a96b387dca7525caa8a6add31420dd82a2cdBenjamin Kramer const InputInfo &Output, 4528e50a96b387dca7525caa8a6add31420dd82a2cdBenjamin Kramer const InputInfoList &Inputs, 4538e50a96b387dca7525caa8a6add31420dd82a2cdBenjamin Kramer const ArgList &TCArgs, 4548e50a96b387dca7525caa8a6add31420dd82a2cdBenjamin Kramer const char *LinkingOutput) const; 4558e50a96b387dca7525caa8a6add31420dd82a2cdBenjamin Kramer }; 4568e50a96b387dca7525caa8a6add31420dd82a2cdBenjamin Kramer class LLVM_LIBRARY_VISIBILITY Link : public Tool { 457182564cd14a2105fff05fd52f5940eff96161d57Joerg Sonnenberger 4588e50a96b387dca7525caa8a6add31420dd82a2cdBenjamin Kramer public: 4591bd91374498ac78e72545f08f4daa6491f9c9d14Joerg Sonnenberger Link(const ToolChain &TC) 4601bd91374498ac78e72545f08f4daa6491f9c9d14Joerg Sonnenberger : Tool("netbsd::Link", "linker", TC) {} 4618e50a96b387dca7525caa8a6add31420dd82a2cdBenjamin Kramer 4628e50a96b387dca7525caa8a6add31420dd82a2cdBenjamin Kramer virtual bool hasIntegratedCPP() const { return false; } 4638ba9a6244c56b19bc2a24de5d0c32ff37d50177bChad Rosier virtual bool isLinkJob() const { return true; } 4648e50a96b387dca7525caa8a6add31420dd82a2cdBenjamin Kramer 4658e50a96b387dca7525caa8a6add31420dd82a2cdBenjamin Kramer virtual void ConstructJob(Compilation &C, const JobAction &JA, 4668e50a96b387dca7525caa8a6add31420dd82a2cdBenjamin Kramer const InputInfo &Output, 4678e50a96b387dca7525caa8a6add31420dd82a2cdBenjamin Kramer const InputInfoList &Inputs, 4688e50a96b387dca7525caa8a6add31420dd82a2cdBenjamin Kramer const ArgList &TCArgs, 4698e50a96b387dca7525caa8a6add31420dd82a2cdBenjamin Kramer const char *LinkingOutput) const; 4708e50a96b387dca7525caa8a6add31420dd82a2cdBenjamin Kramer }; 4718e50a96b387dca7525caa8a6add31420dd82a2cdBenjamin Kramer} // end namespace netbsd 4728e50a96b387dca7525caa8a6add31420dd82a2cdBenjamin Kramer 473ba30bbe4e36a30a274da809a11a42f9cdc168e92Rafael Espindola /// linux -- Directly call GNU Binutils assembler and linker 474ba30bbe4e36a30a274da809a11a42f9cdc168e92Rafael Espindolanamespace linuxtools { 475ba30bbe4e36a30a274da809a11a42f9cdc168e92Rafael Espindola class LLVM_LIBRARY_VISIBILITY Assemble : public Tool { 476ba30bbe4e36a30a274da809a11a42f9cdc168e92Rafael Espindola public: 477ba30bbe4e36a30a274da809a11a42f9cdc168e92Rafael Espindola Assemble(const ToolChain &TC) : Tool("linux::Assemble", "assembler", 478ba30bbe4e36a30a274da809a11a42f9cdc168e92Rafael Espindola TC) {} 479ba30bbe4e36a30a274da809a11a42f9cdc168e92Rafael Espindola 480ba30bbe4e36a30a274da809a11a42f9cdc168e92Rafael Espindola virtual bool hasIntegratedCPP() const { return false; } 481ba30bbe4e36a30a274da809a11a42f9cdc168e92Rafael Espindola 482ba30bbe4e36a30a274da809a11a42f9cdc168e92Rafael Espindola virtual void ConstructJob(Compilation &C, const JobAction &JA, 483ba30bbe4e36a30a274da809a11a42f9cdc168e92Rafael Espindola const InputInfo &Output, 484ba30bbe4e36a30a274da809a11a42f9cdc168e92Rafael Espindola const InputInfoList &Inputs, 485ba30bbe4e36a30a274da809a11a42f9cdc168e92Rafael Espindola const ArgList &TCArgs, 486ba30bbe4e36a30a274da809a11a42f9cdc168e92Rafael Espindola const char *LinkingOutput) const; 487ba30bbe4e36a30a274da809a11a42f9cdc168e92Rafael Espindola }; 488c1da981bba867681004004b2d54ec2fdf3c08913Rafael Espindola class LLVM_LIBRARY_VISIBILITY Link : public Tool { 489c1da981bba867681004004b2d54ec2fdf3c08913Rafael Espindola public: 490c1da981bba867681004004b2d54ec2fdf3c08913Rafael Espindola Link(const ToolChain &TC) : Tool("linux::Link", "linker", TC) {} 491c1da981bba867681004004b2d54ec2fdf3c08913Rafael Espindola 492c1da981bba867681004004b2d54ec2fdf3c08913Rafael Espindola virtual bool hasIntegratedCPP() const { return false; } 4938ba9a6244c56b19bc2a24de5d0c32ff37d50177bChad Rosier virtual bool isLinkJob() const { return true; } 494c1da981bba867681004004b2d54ec2fdf3c08913Rafael Espindola 495c1da981bba867681004004b2d54ec2fdf3c08913Rafael Espindola virtual void ConstructJob(Compilation &C, const JobAction &JA, 496c1da981bba867681004004b2d54ec2fdf3c08913Rafael Espindola const InputInfo &Output, 497c1da981bba867681004004b2d54ec2fdf3c08913Rafael Espindola const InputInfoList &Inputs, 498c1da981bba867681004004b2d54ec2fdf3c08913Rafael Espindola const ArgList &TCArgs, 499c1da981bba867681004004b2d54ec2fdf3c08913Rafael Espindola const char *LinkingOutput) const; 500c1da981bba867681004004b2d54ec2fdf3c08913Rafael Espindola }; 501ba30bbe4e36a30a274da809a11a42f9cdc168e92Rafael Espindola} 50238e317d6dce161b249508686cc67eb7176958762Chris Lattner /// minix -- Directly call GNU Binutils assembler and linker 50338e317d6dce161b249508686cc67eb7176958762Chris Lattnernamespace minix { 50438e317d6dce161b249508686cc67eb7176958762Chris Lattner class LLVM_LIBRARY_VISIBILITY Assemble : public Tool { 50538e317d6dce161b249508686cc67eb7176958762Chris Lattner public: 50638e317d6dce161b249508686cc67eb7176958762Chris Lattner Assemble(const ToolChain &TC) : Tool("minix::Assemble", "assembler", 50738e317d6dce161b249508686cc67eb7176958762Chris Lattner TC) {} 50838e317d6dce161b249508686cc67eb7176958762Chris Lattner 50938e317d6dce161b249508686cc67eb7176958762Chris Lattner virtual bool hasIntegratedCPP() const { return false; } 51038e317d6dce161b249508686cc67eb7176958762Chris Lattner 51138e317d6dce161b249508686cc67eb7176958762Chris Lattner virtual void ConstructJob(Compilation &C, const JobAction &JA, 51238e317d6dce161b249508686cc67eb7176958762Chris Lattner const InputInfo &Output, 51338e317d6dce161b249508686cc67eb7176958762Chris Lattner const InputInfoList &Inputs, 51438e317d6dce161b249508686cc67eb7176958762Chris Lattner const ArgList &TCArgs, 51538e317d6dce161b249508686cc67eb7176958762Chris Lattner const char *LinkingOutput) const; 51638e317d6dce161b249508686cc67eb7176958762Chris Lattner }; 51738e317d6dce161b249508686cc67eb7176958762Chris Lattner class LLVM_LIBRARY_VISIBILITY Link : public Tool { 51838e317d6dce161b249508686cc67eb7176958762Chris Lattner public: 51938e317d6dce161b249508686cc67eb7176958762Chris Lattner Link(const ToolChain &TC) : Tool("minix::Link", "linker", TC) {} 52038e317d6dce161b249508686cc67eb7176958762Chris Lattner 52138e317d6dce161b249508686cc67eb7176958762Chris Lattner virtual bool hasIntegratedCPP() const { return false; } 5228ba9a6244c56b19bc2a24de5d0c32ff37d50177bChad Rosier virtual bool isLinkJob() const { return true; } 52338e317d6dce161b249508686cc67eb7176958762Chris Lattner 52438e317d6dce161b249508686cc67eb7176958762Chris Lattner virtual void ConstructJob(Compilation &C, const JobAction &JA, 52538e317d6dce161b249508686cc67eb7176958762Chris Lattner const InputInfo &Output, 52638e317d6dce161b249508686cc67eb7176958762Chris Lattner const InputInfoList &Inputs, 52738e317d6dce161b249508686cc67eb7176958762Chris Lattner const ArgList &TCArgs, 52838e317d6dce161b249508686cc67eb7176958762Chris Lattner const char *LinkingOutput) const; 52938e317d6dce161b249508686cc67eb7176958762Chris Lattner }; 53038e317d6dce161b249508686cc67eb7176958762Chris Lattner} // end namespace minix 53138e317d6dce161b249508686cc67eb7176958762Chris Lattner 53231c4690047f5f362ecf886f1586844b1aef0c4d2David Chisnall /// solaris -- Directly call Solaris assembler and linker 53331c4690047f5f362ecf886f1586844b1aef0c4d2David Chisnallnamespace solaris { 53431c4690047f5f362ecf886f1586844b1aef0c4d2David Chisnall class LLVM_LIBRARY_VISIBILITY Assemble : public Tool { 53531c4690047f5f362ecf886f1586844b1aef0c4d2David Chisnall public: 53631c4690047f5f362ecf886f1586844b1aef0c4d2David Chisnall Assemble(const ToolChain &TC) : Tool("solaris::Assemble", "assembler", 53731c4690047f5f362ecf886f1586844b1aef0c4d2David Chisnall TC) {} 53831c4690047f5f362ecf886f1586844b1aef0c4d2David Chisnall 53931c4690047f5f362ecf886f1586844b1aef0c4d2David Chisnall virtual bool hasIntegratedCPP() const { return false; } 54031c4690047f5f362ecf886f1586844b1aef0c4d2David Chisnall 54131c4690047f5f362ecf886f1586844b1aef0c4d2David Chisnall virtual void ConstructJob(Compilation &C, const JobAction &JA, 54231c4690047f5f362ecf886f1586844b1aef0c4d2David Chisnall const InputInfo &Output, 54331c4690047f5f362ecf886f1586844b1aef0c4d2David Chisnall const InputInfoList &Inputs, 54431c4690047f5f362ecf886f1586844b1aef0c4d2David Chisnall const ArgList &TCArgs, 54531c4690047f5f362ecf886f1586844b1aef0c4d2David Chisnall const char *LinkingOutput) const; 54631c4690047f5f362ecf886f1586844b1aef0c4d2David Chisnall }; 54731c4690047f5f362ecf886f1586844b1aef0c4d2David Chisnall class LLVM_LIBRARY_VISIBILITY Link : public Tool { 54831c4690047f5f362ecf886f1586844b1aef0c4d2David Chisnall public: 54931c4690047f5f362ecf886f1586844b1aef0c4d2David Chisnall Link(const ToolChain &TC) : Tool("solaris::Link", "linker", TC) {} 55031c4690047f5f362ecf886f1586844b1aef0c4d2David Chisnall 55131c4690047f5f362ecf886f1586844b1aef0c4d2David Chisnall virtual bool hasIntegratedCPP() const { return false; } 5528ba9a6244c56b19bc2a24de5d0c32ff37d50177bChad Rosier virtual bool isLinkJob() const { return true; } 55331c4690047f5f362ecf886f1586844b1aef0c4d2David Chisnall 55431c4690047f5f362ecf886f1586844b1aef0c4d2David Chisnall virtual void ConstructJob(Compilation &C, const JobAction &JA, 55531c4690047f5f362ecf886f1586844b1aef0c4d2David Chisnall const InputInfo &Output, 55631c4690047f5f362ecf886f1586844b1aef0c4d2David Chisnall const InputInfoList &Inputs, 55731c4690047f5f362ecf886f1586844b1aef0c4d2David Chisnall const ArgList &TCArgs, 55831c4690047f5f362ecf886f1586844b1aef0c4d2David Chisnall const char *LinkingOutput) const; 55931c4690047f5f362ecf886f1586844b1aef0c4d2David Chisnall }; 560badb6cd2007825308208e6c4275ba54e220e4e28David Chisnall} // end namespace solaris 56131c4690047f5f362ecf886f1586844b1aef0c4d2David Chisnall 562e7925a075f110ab21afeae084670a155dea568e3Edward O'Callaghan /// auroraux -- Directly call GNU Binutils assembler and linker 563e7925a075f110ab21afeae084670a155dea568e3Edward O'Callaghannamespace auroraux { 56492dd1915842410005c68d32c43bb3b3cf5a4a702Duncan Sands class LLVM_LIBRARY_VISIBILITY Assemble : public Tool { 565e7925a075f110ab21afeae084670a155dea568e3Edward O'Callaghan public: 5663038204fd8f6ff22082dd18e4b12ed252b75a5e4Daniel Dunbar Assemble(const ToolChain &TC) : Tool("auroraux::Assemble", "assembler", 5673038204fd8f6ff22082dd18e4b12ed252b75a5e4Daniel Dunbar TC) {} 568e7925a075f110ab21afeae084670a155dea568e3Edward O'Callaghan 569e7925a075f110ab21afeae084670a155dea568e3Edward O'Callaghan virtual bool hasIntegratedCPP() const { return false; } 570e7925a075f110ab21afeae084670a155dea568e3Edward O'Callaghan 571e7925a075f110ab21afeae084670a155dea568e3Edward O'Callaghan virtual void ConstructJob(Compilation &C, const JobAction &JA, 5721eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump const InputInfo &Output, 5731eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump const InputInfoList &Inputs, 5741eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump const ArgList &TCArgs, 575e7925a075f110ab21afeae084670a155dea568e3Edward O'Callaghan const char *LinkingOutput) const; 576e7925a075f110ab21afeae084670a155dea568e3Edward O'Callaghan }; 57792dd1915842410005c68d32c43bb3b3cf5a4a702Duncan Sands class LLVM_LIBRARY_VISIBILITY Link : public Tool { 578e7925a075f110ab21afeae084670a155dea568e3Edward O'Callaghan public: 5793038204fd8f6ff22082dd18e4b12ed252b75a5e4Daniel Dunbar Link(const ToolChain &TC) : Tool("auroraux::Link", "linker", TC) {} 580e7925a075f110ab21afeae084670a155dea568e3Edward O'Callaghan 581e7925a075f110ab21afeae084670a155dea568e3Edward O'Callaghan virtual bool hasIntegratedCPP() const { return false; } 5828ba9a6244c56b19bc2a24de5d0c32ff37d50177bChad Rosier virtual bool isLinkJob() const { return true; } 583e7925a075f110ab21afeae084670a155dea568e3Edward O'Callaghan 584e7925a075f110ab21afeae084670a155dea568e3Edward O'Callaghan virtual void ConstructJob(Compilation &C, const JobAction &JA, 5851eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump const InputInfo &Output, 5861eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump const InputInfoList &Inputs, 5871eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump const ArgList &TCArgs, 588e7925a075f110ab21afeae084670a155dea568e3Edward O'Callaghan const char *LinkingOutput) const; 589e7925a075f110ab21afeae084670a155dea568e3Edward O'Callaghan }; 590e7925a075f110ab21afeae084670a155dea568e3Edward O'Callaghan} // end namespace auroraux 59168a31d406c6dc4382c700d1199b062de2aa7e1daDaniel Dunbar 59211e1b40d759a643086f590f6ffbd9d68360bad46Daniel Dunbar /// dragonfly -- Directly call GNU Binutils assembler and linker 59311e1b40d759a643086f590f6ffbd9d68360bad46Daniel Dunbarnamespace dragonfly { 59492dd1915842410005c68d32c43bb3b3cf5a4a702Duncan Sands class LLVM_LIBRARY_VISIBILITY Assemble : public Tool { 59511e1b40d759a643086f590f6ffbd9d68360bad46Daniel Dunbar public: 5963038204fd8f6ff22082dd18e4b12ed252b75a5e4Daniel Dunbar Assemble(const ToolChain &TC) : Tool("dragonfly::Assemble", "assembler", 5973038204fd8f6ff22082dd18e4b12ed252b75a5e4Daniel Dunbar TC) {} 59811e1b40d759a643086f590f6ffbd9d68360bad46Daniel Dunbar 59911e1b40d759a643086f590f6ffbd9d68360bad46Daniel Dunbar virtual bool hasIntegratedCPP() const { return false; } 60011e1b40d759a643086f590f6ffbd9d68360bad46Daniel Dunbar 60111e1b40d759a643086f590f6ffbd9d68360bad46Daniel Dunbar virtual void ConstructJob(Compilation &C, const JobAction &JA, 6021eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump const InputInfo &Output, 6031eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump const InputInfoList &Inputs, 6041eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump const ArgList &TCArgs, 60511e1b40d759a643086f590f6ffbd9d68360bad46Daniel Dunbar const char *LinkingOutput) const; 60611e1b40d759a643086f590f6ffbd9d68360bad46Daniel Dunbar }; 60792dd1915842410005c68d32c43bb3b3cf5a4a702Duncan Sands class LLVM_LIBRARY_VISIBILITY Link : public Tool { 60811e1b40d759a643086f590f6ffbd9d68360bad46Daniel Dunbar public: 6093038204fd8f6ff22082dd18e4b12ed252b75a5e4Daniel Dunbar Link(const ToolChain &TC) : Tool("dragonfly::Link", "linker", TC) {} 61011e1b40d759a643086f590f6ffbd9d68360bad46Daniel Dunbar 61111e1b40d759a643086f590f6ffbd9d68360bad46Daniel Dunbar virtual bool hasIntegratedCPP() const { return false; } 6128ba9a6244c56b19bc2a24de5d0c32ff37d50177bChad Rosier virtual bool isLinkJob() const { return true; } 61311e1b40d759a643086f590f6ffbd9d68360bad46Daniel Dunbar 61411e1b40d759a643086f590f6ffbd9d68360bad46Daniel Dunbar virtual void ConstructJob(Compilation &C, const JobAction &JA, 6151eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump const InputInfo &Output, 6161eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump const InputInfoList &Inputs, 6171eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump const ArgList &TCArgs, 61811e1b40d759a643086f590f6ffbd9d68360bad46Daniel Dunbar const char *LinkingOutput) const; 61911e1b40d759a643086f590f6ffbd9d68360bad46Daniel Dunbar }; 620e7925a075f110ab21afeae084670a155dea568e3Edward O'Callaghan} // end namespace dragonfly 62111e1b40d759a643086f590f6ffbd9d68360bad46Daniel Dunbar 622ff58e3610f4e12094def69eb2d6dcb4330378d8fMichael J. Spencer /// Visual studio tools. 623ff58e3610f4e12094def69eb2d6dcb4330378d8fMichael J. Spencernamespace visualstudio { 624ff58e3610f4e12094def69eb2d6dcb4330378d8fMichael J. Spencer class LLVM_LIBRARY_VISIBILITY Link : public Tool { 625ff58e3610f4e12094def69eb2d6dcb4330378d8fMichael J. Spencer public: 626ff58e3610f4e12094def69eb2d6dcb4330378d8fMichael J. Spencer Link(const ToolChain &TC) : Tool("visualstudio::Link", "linker", TC) {} 627ff58e3610f4e12094def69eb2d6dcb4330378d8fMichael J. Spencer 628ff58e3610f4e12094def69eb2d6dcb4330378d8fMichael J. Spencer virtual bool hasIntegratedCPP() const { return false; } 6298ba9a6244c56b19bc2a24de5d0c32ff37d50177bChad Rosier virtual bool isLinkJob() const { return true; } 630ff58e3610f4e12094def69eb2d6dcb4330378d8fMichael J. Spencer 631ff58e3610f4e12094def69eb2d6dcb4330378d8fMichael J. Spencer virtual void ConstructJob(Compilation &C, const JobAction &JA, 632ff58e3610f4e12094def69eb2d6dcb4330378d8fMichael J. Spencer const InputInfo &Output, 633ff58e3610f4e12094def69eb2d6dcb4330378d8fMichael J. Spencer const InputInfoList &Inputs, 634ff58e3610f4e12094def69eb2d6dcb4330378d8fMichael J. Spencer const ArgList &TCArgs, 635ff58e3610f4e12094def69eb2d6dcb4330378d8fMichael J. Spencer const char *LinkingOutput) const; 636ff58e3610f4e12094def69eb2d6dcb4330378d8fMichael J. Spencer }; 637ff58e3610f4e12094def69eb2d6dcb4330378d8fMichael J. Spencer} // end namespace visualstudio 638ff58e3610f4e12094def69eb2d6dcb4330378d8fMichael J. Spencer 6399c073ff462eb75ccbb1c4446e21c148f3fc618e1Daniel Dunbar} // end namespace toolchains 6409c073ff462eb75ccbb1c4446e21c148f3fc618e1Daniel Dunbar} // end namespace driver 6419c073ff462eb75ccbb1c4446e21c148f3fc618e1Daniel Dunbar} // end namespace clang 6429c073ff462eb75ccbb1c4446e21c148f3fc618e1Daniel Dunbar 643e7925a075f110ab21afeae084670a155dea568e3Edward O'Callaghan#endif // CLANG_LIB_DRIVER_TOOLS_H_ 644