Tools.h revision dd0b3c4c72464af92e2c27dd5a67e29f91ba7b28
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" 16182564cd14a2105fff05fd52f5940eff96161d57Joerg Sonnenberger#include "llvm/ADT/Triple.h" 17b1e25a1bc03292dc538d336573e0be1490223171Reid Kleckner#include "llvm/Option/Option.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 { 31b1e25a1bc03292dc538d336573e0be1490223171Reid Klecknerusing llvm::opt::ArgStringList; 329c073ff462eb75ccbb1c4446e21c148f3fc618e1Daniel Dunbar 3320a9aa50f9a7d4b03f97bc67e96da1d605c309a2Daniel Dunbar /// \brief Clang compiler tool. 3492dd1915842410005c68d32c43bb3b3cf5a4a702Duncan Sands class LLVM_LIBRARY_VISIBILITY Clang : public Tool { 3527e2b983beb8b5a29869639637327725623069a8Eric Christopher public: 36dd0b3c4c72464af92e2c27dd5a67e29f91ba7b28Reid Kleckner static const char *getBaseInputName(const llvm::opt::ArgList &Args, 3766b8a6671bb5df540dd7200a5286f7ed7a72c1ccBob Wilson const InputInfoList &Inputs); 38dd0b3c4c72464af92e2c27dd5a67e29f91ba7b28Reid Kleckner static const char *getBaseInputStem(const llvm::opt::ArgList &Args, 3966b8a6671bb5df540dd7200a5286f7ed7a72c1ccBob Wilson const InputInfoList &Inputs); 40dd0b3c4c72464af92e2c27dd5a67e29f91ba7b28Reid Kleckner static const char *getDependencyFileName(const llvm::opt::ArgList &Args, 4166b8a6671bb5df540dd7200a5286f7ed7a72c1ccBob Wilson const InputInfoList &Inputs); 4266b8a6671bb5df540dd7200a5286f7ed7a72c1ccBob Wilson 4327e2b983beb8b5a29869639637327725623069a8Eric Christopher private: 44dd0b3c4c72464af92e2c27dd5a67e29f91ba7b28Reid Kleckner void AddPreprocessingOptions(Compilation &C, const JobAction &JA, 4554db68bf0e389b8aabe1a434f825a81a9c1f7db8Peter Collingbourne const Driver &D, 46dd0b3c4c72464af92e2c27dd5a67e29f91ba7b28Reid Kleckner const llvm::opt::ArgList &Args, 47dd0b3c4c72464af92e2c27dd5a67e29f91ba7b28Reid Kleckner llvm::opt::ArgStringList &CmdArgs, 48c21c485b4fb58ef5d55cf3e523263dd824a2ace4Daniel Dunbar const InputInfo &Output, 49c21c485b4fb58ef5d55cf3e523263dd824a2ace4Daniel Dunbar const InputInfoList &Inputs) const; 50c21c485b4fb58ef5d55cf3e523263dd824a2ace4Daniel Dunbar 51dd0b3c4c72464af92e2c27dd5a67e29f91ba7b28Reid Kleckner void AddARMTargetArgs(const llvm::opt::ArgList &Args, 52dd0b3c4c72464af92e2c27dd5a67e29f91ba7b28Reid Kleckner llvm::opt::ArgStringList &CmdArgs, 53fa41d6975058ceb1b8a24564f6dcec72f89f62e8Daniel Dunbar bool KernelOrKext) const; 54dd0b3c4c72464af92e2c27dd5a67e29f91ba7b28Reid Kleckner void AddMIPSTargetArgs(const llvm::opt::ArgList &Args, 55dd0b3c4c72464af92e2c27dd5a67e29f91ba7b28Reid Kleckner llvm::opt::ArgStringList &CmdArgs) const; 56dd0b3c4c72464af92e2c27dd5a67e29f91ba7b28Reid Kleckner void AddPPCTargetArgs(const llvm::opt::ArgList &Args, 57dd0b3c4c72464af92e2c27dd5a67e29f91ba7b28Reid Kleckner llvm::opt::ArgStringList &CmdArgs) const; 58dd0b3c4c72464af92e2c27dd5a67e29f91ba7b28Reid Kleckner void AddR600TargetArgs(const llvm::opt::ArgList &Args, 59dd0b3c4c72464af92e2c27dd5a67e29f91ba7b28Reid Kleckner llvm::opt::ArgStringList &CmdArgs) const; 60dd0b3c4c72464af92e2c27dd5a67e29f91ba7b28Reid Kleckner void AddSparcTargetArgs(const llvm::opt::ArgList &Args, 61dd0b3c4c72464af92e2c27dd5a67e29f91ba7b28Reid Kleckner llvm::opt::ArgStringList &CmdArgs) const; 62dd0b3c4c72464af92e2c27dd5a67e29f91ba7b28Reid Kleckner void AddX86TargetArgs(const llvm::opt::ArgList &Args, 63dd0b3c4c72464af92e2c27dd5a67e29f91ba7b28Reid Kleckner llvm::opt::ArgStringList &CmdArgs) const; 64dd0b3c4c72464af92e2c27dd5a67e29f91ba7b28Reid Kleckner void AddHexagonTargetArgs(const llvm::opt::ArgList &Args, 65dd0b3c4c72464af92e2c27dd5a67e29f91ba7b28Reid Kleckner llvm::opt::ArgStringList &CmdArgs) const; 666acda16e9c194dcbd0dea64341e182bdb65d0f41Daniel Dunbar 67260611a32535c851237926bfcf78869b13c07d5bJohn McCall enum RewriteKind { RK_None, RK_Fragile, RK_NonFragile }; 68260611a32535c851237926bfcf78869b13c07d5bJohn McCall 69dd0b3c4c72464af92e2c27dd5a67e29f91ba7b28Reid Kleckner ObjCRuntime AddObjCRuntimeArgs(const llvm::opt::ArgList &args, 70dd0b3c4c72464af92e2c27dd5a67e29f91ba7b28Reid Kleckner llvm::opt::ArgStringList &cmdArgs, 71260611a32535c851237926bfcf78869b13c07d5bJohn McCall RewriteKind rewrite) const; 72260611a32535c851237926bfcf78869b13c07d5bJohn McCall 739c073ff462eb75ccbb1c4446e21c148f3fc618e1Daniel Dunbar public: 743038204fd8f6ff22082dd18e4b12ed252b75a5e4Daniel Dunbar Clang(const ToolChain &TC) : Tool("clang", "clang frontend", TC) {} 759c073ff462eb75ccbb1c4446e21c148f3fc618e1Daniel Dunbar 7660a53f24b160724de0e8dd0e142009981540fd26Daniel Dunbar virtual bool hasGoodDiagnostics() const { return true; } 778767cbc475ed96397b6f08617814eeb9cab121bdDaniel Dunbar virtual bool hasIntegratedAssembler() const { return true; } 789c073ff462eb75ccbb1c4446e21c148f3fc618e1Daniel Dunbar virtual bool hasIntegratedCPP() const { return true; } 7947ac7d27c44bd64a7d0fc03d4babc196cf2b8230Daniel Dunbar 8047ac7d27c44bd64a7d0fc03d4babc196cf2b8230Daniel Dunbar virtual void ConstructJob(Compilation &C, const JobAction &JA, 8120a9aa50f9a7d4b03f97bc67e96da1d605c309a2Daniel Dunbar const InputInfo &Output, 8220a9aa50f9a7d4b03f97bc67e96da1d605c309a2Daniel Dunbar const InputInfoList &Inputs, 83dd0b3c4c72464af92e2c27dd5a67e29f91ba7b28Reid Kleckner const llvm::opt::ArgList &TCArgs, 8420a9aa50f9a7d4b03f97bc67e96da1d605c309a2Daniel Dunbar const char *LinkingOutput) const; 8520a9aa50f9a7d4b03f97bc67e96da1d605c309a2Daniel Dunbar }; 8620a9aa50f9a7d4b03f97bc67e96da1d605c309a2Daniel Dunbar 8720a9aa50f9a7d4b03f97bc67e96da1d605c309a2Daniel Dunbar /// \brief Clang integrated assembler tool. 8820a9aa50f9a7d4b03f97bc67e96da1d605c309a2Daniel Dunbar class LLVM_LIBRARY_VISIBILITY ClangAs : public Tool { 89dd0b3c4c72464af92e2c27dd5a67e29f91ba7b28Reid Kleckner void AddARMTargetArgs(const llvm::opt::ArgList &Args, 90dd0b3c4c72464af92e2c27dd5a67e29f91ba7b28Reid Kleckner llvm::opt::ArgStringList &CmdArgs) const; 91dd0b3c4c72464af92e2c27dd5a67e29f91ba7b28Reid Kleckner void AddX86TargetArgs(const llvm::opt::ArgList &Args, 92dd0b3c4c72464af92e2c27dd5a67e29f91ba7b28Reid Kleckner llvm::opt::ArgStringList &CmdArgs) const; 93dd0b3c4c72464af92e2c27dd5a67e29f91ba7b28Reid Kleckner 9420a9aa50f9a7d4b03f97bc67e96da1d605c309a2Daniel Dunbar public: 953038204fd8f6ff22082dd18e4b12ed252b75a5e4Daniel Dunbar ClangAs(const ToolChain &TC) : Tool("clang::as", 963038204fd8f6ff22082dd18e4b12ed252b75a5e4Daniel Dunbar "clang integrated assembler", TC) {} 9720a9aa50f9a7d4b03f97bc67e96da1d605c309a2Daniel Dunbar 9820a9aa50f9a7d4b03f97bc67e96da1d605c309a2Daniel Dunbar virtual bool hasGoodDiagnostics() const { return true; } 9920a9aa50f9a7d4b03f97bc67e96da1d605c309a2Daniel Dunbar virtual bool hasIntegratedAssembler() const { return false; } 10020a9aa50f9a7d4b03f97bc67e96da1d605c309a2Daniel Dunbar virtual bool hasIntegratedCPP() const { return false; } 10120a9aa50f9a7d4b03f97bc67e96da1d605c309a2Daniel Dunbar 10220a9aa50f9a7d4b03f97bc67e96da1d605c309a2Daniel Dunbar virtual void ConstructJob(Compilation &C, const JobAction &JA, 1031eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump const InputInfo &Output, 1041eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump const InputInfoList &Inputs, 105dd0b3c4c72464af92e2c27dd5a67e29f91ba7b28Reid Kleckner const llvm::opt::ArgList &TCArgs, 10647ac7d27c44bd64a7d0fc03d4babc196cf2b8230Daniel Dunbar const char *LinkingOutput) const; 1079c073ff462eb75ccbb1c4446e21c148f3fc618e1Daniel Dunbar }; 1089c073ff462eb75ccbb1c4446e21c148f3fc618e1Daniel Dunbar 10931b1e5437e7435879fc044afb77ff27096008e72Daniel Dunbar /// gcc - Generic GCC tool implementations. 11031b1e5437e7435879fc044afb77ff27096008e72Daniel Dunbarnamespace gcc { 11192dd1915842410005c68d32c43bb3b3cf5a4a702Duncan Sands class LLVM_LIBRARY_VISIBILITY Common : public Tool { 1129c073ff462eb75ccbb1c4446e21c148f3fc618e1Daniel Dunbar public: 1133038204fd8f6ff22082dd18e4b12ed252b75a5e4Daniel Dunbar Common(const char *Name, const char *ShortName, 1143038204fd8f6ff22082dd18e4b12ed252b75a5e4Daniel Dunbar const ToolChain &TC) : Tool(Name, ShortName, TC) {} 11547ac7d27c44bd64a7d0fc03d4babc196cf2b8230Daniel Dunbar 11647ac7d27c44bd64a7d0fc03d4babc196cf2b8230Daniel Dunbar virtual void ConstructJob(Compilation &C, const JobAction &JA, 1171eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump const InputInfo &Output, 1181eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump const InputInfoList &Inputs, 119dd0b3c4c72464af92e2c27dd5a67e29f91ba7b28Reid Kleckner const llvm::opt::ArgList &TCArgs, 12047ac7d27c44bd64a7d0fc03d4babc196cf2b8230Daniel Dunbar const char *LinkingOutput) const; 121b488c1dac8e53206f07103d794a62a3f5012c0f4Daniel Dunbar 122b488c1dac8e53206f07103d794a62a3f5012c0f4Daniel Dunbar /// RenderExtraToolArgs - Render any arguments necessary to force 123b488c1dac8e53206f07103d794a62a3f5012c0f4Daniel Dunbar /// the particular tool mode. 124dd0b3c4c72464af92e2c27dd5a67e29f91ba7b28Reid Kleckner virtual void 125dd0b3c4c72464af92e2c27dd5a67e29f91ba7b28Reid Kleckner RenderExtraToolArgs(const JobAction &JA, 126dd0b3c4c72464af92e2c27dd5a67e29f91ba7b28Reid Kleckner llvm::opt::ArgStringList &CmdArgs) const = 0; 1279c073ff462eb75ccbb1c4446e21c148f3fc618e1Daniel Dunbar }; 1289c073ff462eb75ccbb1c4446e21c148f3fc618e1Daniel Dunbar 12992dd1915842410005c68d32c43bb3b3cf5a4a702Duncan Sands class LLVM_LIBRARY_VISIBILITY Preprocess : public Common { 1309c073ff462eb75ccbb1c4446e21c148f3fc618e1Daniel Dunbar public: 1313038204fd8f6ff22082dd18e4b12ed252b75a5e4Daniel Dunbar Preprocess(const ToolChain &TC) : Common("gcc::Preprocess", 1323038204fd8f6ff22082dd18e4b12ed252b75a5e4Daniel Dunbar "gcc preprocessor", TC) {} 133b488c1dac8e53206f07103d794a62a3f5012c0f4Daniel Dunbar 13460a53f24b160724de0e8dd0e142009981540fd26Daniel Dunbar virtual bool hasGoodDiagnostics() const { return true; } 135b488c1dac8e53206f07103d794a62a3f5012c0f4Daniel Dunbar virtual bool hasIntegratedCPP() const { return false; } 136b488c1dac8e53206f07103d794a62a3f5012c0f4Daniel Dunbar 13782b51cce8cea6b6bb6175c406c2ab425c91d9dc8Daniel Dunbar virtual void RenderExtraToolArgs(const JobAction &JA, 138dd0b3c4c72464af92e2c27dd5a67e29f91ba7b28Reid Kleckner llvm::opt::ArgStringList &CmdArgs) const; 139b488c1dac8e53206f07103d794a62a3f5012c0f4Daniel Dunbar }; 140b488c1dac8e53206f07103d794a62a3f5012c0f4Daniel Dunbar 14192dd1915842410005c68d32c43bb3b3cf5a4a702Duncan Sands class LLVM_LIBRARY_VISIBILITY Precompile : public Common { 142b488c1dac8e53206f07103d794a62a3f5012c0f4Daniel Dunbar public: 1433038204fd8f6ff22082dd18e4b12ed252b75a5e4Daniel Dunbar Precompile(const ToolChain &TC) : Common("gcc::Precompile", 1443038204fd8f6ff22082dd18e4b12ed252b75a5e4Daniel Dunbar "gcc precompile", TC) {} 1459c073ff462eb75ccbb1c4446e21c148f3fc618e1Daniel Dunbar 14660a53f24b160724de0e8dd0e142009981540fd26Daniel Dunbar virtual bool hasGoodDiagnostics() const { return true; } 1479c073ff462eb75ccbb1c4446e21c148f3fc618e1Daniel Dunbar virtual bool hasIntegratedCPP() const { return true; } 14847ac7d27c44bd64a7d0fc03d4babc196cf2b8230Daniel Dunbar 14982b51cce8cea6b6bb6175c406c2ab425c91d9dc8Daniel Dunbar virtual void RenderExtraToolArgs(const JobAction &JA, 150dd0b3c4c72464af92e2c27dd5a67e29f91ba7b28Reid Kleckner llvm::opt::ArgStringList &CmdArgs) const; 1519c073ff462eb75ccbb1c4446e21c148f3fc618e1Daniel Dunbar }; 1529c073ff462eb75ccbb1c4446e21c148f3fc618e1Daniel Dunbar 15392dd1915842410005c68d32c43bb3b3cf5a4a702Duncan Sands class LLVM_LIBRARY_VISIBILITY Compile : public Common { 1549c073ff462eb75ccbb1c4446e21c148f3fc618e1Daniel Dunbar public: 1553038204fd8f6ff22082dd18e4b12ed252b75a5e4Daniel Dunbar Compile(const ToolChain &TC) : Common("gcc::Compile", 1563038204fd8f6ff22082dd18e4b12ed252b75a5e4Daniel Dunbar "gcc frontend", TC) {} 1579c073ff462eb75ccbb1c4446e21c148f3fc618e1Daniel Dunbar 15860a53f24b160724de0e8dd0e142009981540fd26Daniel Dunbar virtual bool hasGoodDiagnostics() const { return true; } 1599c073ff462eb75ccbb1c4446e21c148f3fc618e1Daniel Dunbar virtual bool hasIntegratedCPP() const { return true; } 16047ac7d27c44bd64a7d0fc03d4babc196cf2b8230Daniel Dunbar 16182b51cce8cea6b6bb6175c406c2ab425c91d9dc8Daniel Dunbar virtual void RenderExtraToolArgs(const JobAction &JA, 162dd0b3c4c72464af92e2c27dd5a67e29f91ba7b28Reid Kleckner llvm::opt::ArgStringList &CmdArgs) const; 1639c073ff462eb75ccbb1c4446e21c148f3fc618e1Daniel Dunbar }; 1649c073ff462eb75ccbb1c4446e21c148f3fc618e1Daniel Dunbar 16592dd1915842410005c68d32c43bb3b3cf5a4a702Duncan Sands class LLVM_LIBRARY_VISIBILITY Assemble : public Common { 1669c073ff462eb75ccbb1c4446e21c148f3fc618e1Daniel Dunbar public: 1673038204fd8f6ff22082dd18e4b12ed252b75a5e4Daniel Dunbar Assemble(const ToolChain &TC) : Common("gcc::Assemble", 1683038204fd8f6ff22082dd18e4b12ed252b75a5e4Daniel Dunbar "assembler (via gcc)", TC) {} 1699c073ff462eb75ccbb1c4446e21c148f3fc618e1Daniel Dunbar 1709c073ff462eb75ccbb1c4446e21c148f3fc618e1Daniel Dunbar virtual bool hasIntegratedCPP() const { return false; } 17147ac7d27c44bd64a7d0fc03d4babc196cf2b8230Daniel Dunbar 17282b51cce8cea6b6bb6175c406c2ab425c91d9dc8Daniel Dunbar virtual void RenderExtraToolArgs(const JobAction &JA, 173dd0b3c4c72464af92e2c27dd5a67e29f91ba7b28Reid Kleckner llvm::opt::ArgStringList &CmdArgs) const; 1749c073ff462eb75ccbb1c4446e21c148f3fc618e1Daniel Dunbar }; 1759c073ff462eb75ccbb1c4446e21c148f3fc618e1Daniel Dunbar 17692dd1915842410005c68d32c43bb3b3cf5a4a702Duncan Sands class LLVM_LIBRARY_VISIBILITY Link : public Common { 1779c073ff462eb75ccbb1c4446e21c148f3fc618e1Daniel Dunbar public: 1783038204fd8f6ff22082dd18e4b12ed252b75a5e4Daniel Dunbar Link(const ToolChain &TC) : Common("gcc::Link", 1793038204fd8f6ff22082dd18e4b12ed252b75a5e4Daniel Dunbar "linker (via gcc)", TC) {} 1809c073ff462eb75ccbb1c4446e21c148f3fc618e1Daniel Dunbar 1819c073ff462eb75ccbb1c4446e21c148f3fc618e1Daniel Dunbar virtual bool hasIntegratedCPP() const { return false; } 1828ba9a6244c56b19bc2a24de5d0c32ff37d50177bChad Rosier virtual bool isLinkJob() const { return true; } 18347ac7d27c44bd64a7d0fc03d4babc196cf2b8230Daniel Dunbar 18482b51cce8cea6b6bb6175c406c2ab425c91d9dc8Daniel Dunbar virtual void RenderExtraToolArgs(const JobAction &JA, 185dd0b3c4c72464af92e2c27dd5a67e29f91ba7b28Reid Kleckner llvm::opt::ArgStringList &CmdArgs) const; 1869c073ff462eb75ccbb1c4446e21c148f3fc618e1Daniel Dunbar }; 18731b1e5437e7435879fc044afb77ff27096008e72Daniel Dunbar} // end namespace gcc 1889c073ff462eb75ccbb1c4446e21c148f3fc618e1Daniel Dunbar 1899631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicumnamespace hexagon { 1909631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum // For Hexagon, we do not need to instantiate tools for PreProcess, PreCompile and Compile. 1919631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum // We simply use "clang -cc1" for those actions. 1929631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum class LLVM_LIBRARY_VISIBILITY Assemble : public Tool { 1939631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum public: 1949631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum Assemble(const ToolChain &TC) : Tool("hexagon::Assemble", 1959631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum "hexagon-as", TC) {} 1969631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum 1979631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum virtual bool hasIntegratedCPP() const { return false; } 1989631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum 1999631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum virtual void RenderExtraToolArgs(const JobAction &JA, 200dd0b3c4c72464af92e2c27dd5a67e29f91ba7b28Reid Kleckner llvm::opt::ArgStringList &CmdArgs) const; 2019631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum virtual void ConstructJob(Compilation &C, const JobAction &JA, 2029631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum const InputInfo &Output, 2039631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum const InputInfoList &Inputs, 204dd0b3c4c72464af92e2c27dd5a67e29f91ba7b28Reid Kleckner const llvm::opt::ArgList &TCArgs, 2059631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum const char *LinkingOutput) const; 2069631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum }; 2079631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum 2089631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum class LLVM_LIBRARY_VISIBILITY Link : public Tool { 2099631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum public: 2109631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum Link(const ToolChain &TC) : Tool("hexagon::Link", 2119631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum "hexagon-ld", TC) {} 2129631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum 2139631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum virtual bool hasIntegratedCPP() const { return false; } 2148ba9a6244c56b19bc2a24de5d0c32ff37d50177bChad Rosier virtual bool isLinkJob() const { return true; } 2159631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum 2169631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum virtual void RenderExtraToolArgs(const JobAction &JA, 217dd0b3c4c72464af92e2c27dd5a67e29f91ba7b28Reid Kleckner llvm::opt::ArgStringList &CmdArgs) const; 2189631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum virtual void ConstructJob(Compilation &C, const JobAction &JA, 2199631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum const InputInfo &Output, 2209631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum const InputInfoList &Inputs, 221dd0b3c4c72464af92e2c27dd5a67e29f91ba7b28Reid Kleckner const llvm::opt::ArgList &TCArgs, 2229631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum const char *LinkingOutput) const; 2239631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum }; 2249631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum} // end namespace hexagon. 2259631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum 2269631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum 227ff7488dc9a766f94daf54d81b03ab9160d0bfd88Daniel Dunbarnamespace darwin { 228cfed8283c3aeb03ddd837411467d19e250068d39Rafael Espindola llvm::Triple::ArchType getArchTypeForDarwinArchName(StringRef Str); 229cfed8283c3aeb03ddd837411467d19e250068d39Rafael Espindola 23092dd1915842410005c68d32c43bb3b3cf5a4a702Duncan Sands class LLVM_LIBRARY_VISIBILITY DarwinTool : public Tool { 23199ba9e3bd70671f3441fb974895f226a83ce0e66David Blaikie virtual void anchor(); 232fbefe6bd6f62a3361813498dc672ab0d6c0d4fd1Daniel Dunbar protected: 233dd0b3c4c72464af92e2c27dd5a67e29f91ba7b28Reid Kleckner void AddDarwinArch(const llvm::opt::ArgList &Args, 234dd0b3c4c72464af92e2c27dd5a67e29f91ba7b28Reid Kleckner llvm::opt::ArgStringList &CmdArgs) const; 235fbefe6bd6f62a3361813498dc672ab0d6c0d4fd1Daniel Dunbar 236fbefe6bd6f62a3361813498dc672ab0d6c0d4fd1Daniel Dunbar const toolchains::Darwin &getDarwinToolChain() const { 237fbefe6bd6f62a3361813498dc672ab0d6c0d4fd1Daniel Dunbar return reinterpret_cast<const toolchains::Darwin&>(getToolChain()); 238fbefe6bd6f62a3361813498dc672ab0d6c0d4fd1Daniel Dunbar } 239fbefe6bd6f62a3361813498dc672ab0d6c0d4fd1Daniel Dunbar 240fbefe6bd6f62a3361813498dc672ab0d6c0d4fd1Daniel Dunbar public: 2413038204fd8f6ff22082dd18e4b12ed252b75a5e4Daniel Dunbar DarwinTool(const char *Name, const char *ShortName, 2423038204fd8f6ff22082dd18e4b12ed252b75a5e4Daniel Dunbar const ToolChain &TC) : Tool(Name, ShortName, TC) {} 243fbefe6bd6f62a3361813498dc672ab0d6c0d4fd1Daniel Dunbar }; 244fbefe6bd6f62a3361813498dc672ab0d6c0d4fd1Daniel Dunbar 24592dd1915842410005c68d32c43bb3b3cf5a4a702Duncan Sands class LLVM_LIBRARY_VISIBILITY Assemble : public DarwinTool { 2468cac5f7e1ce63dd77ee0fb4ef68f9fa804f41ea6Daniel Dunbar public: 2473038204fd8f6ff22082dd18e4b12ed252b75a5e4Daniel Dunbar Assemble(const ToolChain &TC) : DarwinTool("darwin::Assemble", 2483038204fd8f6ff22082dd18e4b12ed252b75a5e4Daniel Dunbar "assembler", TC) {} 2498cac5f7e1ce63dd77ee0fb4ef68f9fa804f41ea6Daniel Dunbar 2508cac5f7e1ce63dd77ee0fb4ef68f9fa804f41ea6Daniel Dunbar virtual bool hasIntegratedCPP() const { return false; } 2518cac5f7e1ce63dd77ee0fb4ef68f9fa804f41ea6Daniel Dunbar 2528cac5f7e1ce63dd77ee0fb4ef68f9fa804f41ea6Daniel Dunbar virtual void ConstructJob(Compilation &C, const JobAction &JA, 2531eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump const InputInfo &Output, 2541eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump const InputInfoList &Inputs, 255dd0b3c4c72464af92e2c27dd5a67e29f91ba7b28Reid Kleckner const llvm::opt::ArgList &TCArgs, 25602633b541b04ad5ffc1c70f4c2feeeb13e607057Daniel Dunbar const char *LinkingOutput) const; 25702633b541b04ad5ffc1c70f4c2feeeb13e607057Daniel Dunbar }; 25802633b541b04ad5ffc1c70f4c2feeeb13e607057Daniel Dunbar 25992dd1915842410005c68d32c43bb3b3cf5a4a702Duncan Sands class LLVM_LIBRARY_VISIBILITY Link : public DarwinTool { 2606acf8b4f9418be93a24b493c2f8a7d32c203002dBill Wendling bool NeedsTempPath(const InputInfoList &Inputs) const; 261dd0b3c4c72464af92e2c27dd5a67e29f91ba7b28Reid Kleckner void AddLinkArgs(Compilation &C, const llvm::opt::ArgList &Args, 262dd0b3c4c72464af92e2c27dd5a67e29f91ba7b28Reid Kleckner llvm::opt::ArgStringList &CmdArgs, 263dd0b3c4c72464af92e2c27dd5a67e29f91ba7b28Reid Kleckner const InputInfoList &Inputs) const; 26402633b541b04ad5ffc1c70f4c2feeeb13e607057Daniel Dunbar 26502633b541b04ad5ffc1c70f4c2feeeb13e607057Daniel Dunbar public: 2663038204fd8f6ff22082dd18e4b12ed252b75a5e4Daniel Dunbar Link(const ToolChain &TC) : DarwinTool("darwin::Link", "linker", TC) {} 26702633b541b04ad5ffc1c70f4c2feeeb13e607057Daniel Dunbar 26802633b541b04ad5ffc1c70f4c2feeeb13e607057Daniel Dunbar virtual bool hasIntegratedCPP() const { return false; } 2698ba9a6244c56b19bc2a24de5d0c32ff37d50177bChad Rosier virtual bool isLinkJob() const { return true; } 27002633b541b04ad5ffc1c70f4c2feeeb13e607057Daniel Dunbar 27102633b541b04ad5ffc1c70f4c2feeeb13e607057Daniel Dunbar virtual void ConstructJob(Compilation &C, const JobAction &JA, 2721eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump const InputInfo &Output, 2731eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump const InputInfoList &Inputs, 274dd0b3c4c72464af92e2c27dd5a67e29f91ba7b28Reid Kleckner const llvm::opt::ArgList &TCArgs, 2758cac5f7e1ce63dd77ee0fb4ef68f9fa804f41ea6Daniel Dunbar const char *LinkingOutput) const; 2768cac5f7e1ce63dd77ee0fb4ef68f9fa804f41ea6Daniel Dunbar }; 2778cac5f7e1ce63dd77ee0fb4ef68f9fa804f41ea6Daniel Dunbar 27892dd1915842410005c68d32c43bb3b3cf5a4a702Duncan Sands class LLVM_LIBRARY_VISIBILITY Lipo : public DarwinTool { 279ff7488dc9a766f94daf54d81b03ab9160d0bfd88Daniel Dunbar public: 2803038204fd8f6ff22082dd18e4b12ed252b75a5e4Daniel Dunbar Lipo(const ToolChain &TC) : DarwinTool("darwin::Lipo", "lipo", TC) {} 281ff7488dc9a766f94daf54d81b03ab9160d0bfd88Daniel Dunbar 282ff7488dc9a766f94daf54d81b03ab9160d0bfd88Daniel Dunbar virtual bool hasIntegratedCPP() const { return false; } 283ff7488dc9a766f94daf54d81b03ab9160d0bfd88Daniel Dunbar 284ff7488dc9a766f94daf54d81b03ab9160d0bfd88Daniel Dunbar virtual void ConstructJob(Compilation &C, const JobAction &JA, 2851eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump const InputInfo &Output, 2861eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump const InputInfoList &Inputs, 287dd0b3c4c72464af92e2c27dd5a67e29f91ba7b28Reid Kleckner const llvm::opt::ArgList &TCArgs, 2886e0f25483b1a801cd1155ea89c2b725feab16332Daniel Dunbar const char *LinkingOutput) const; 2896e0f25483b1a801cd1155ea89c2b725feab16332Daniel Dunbar }; 2906e0f25483b1a801cd1155ea89c2b725feab16332Daniel Dunbar 2916e0f25483b1a801cd1155ea89c2b725feab16332Daniel Dunbar class LLVM_LIBRARY_VISIBILITY Dsymutil : public DarwinTool { 2926e0f25483b1a801cd1155ea89c2b725feab16332Daniel Dunbar public: 2936e0f25483b1a801cd1155ea89c2b725feab16332Daniel Dunbar Dsymutil(const ToolChain &TC) : DarwinTool("darwin::Dsymutil", 2946e0f25483b1a801cd1155ea89c2b725feab16332Daniel Dunbar "dsymutil", TC) {} 2956e0f25483b1a801cd1155ea89c2b725feab16332Daniel Dunbar 2966e0f25483b1a801cd1155ea89c2b725feab16332Daniel Dunbar virtual bool hasIntegratedCPP() const { return false; } 29775dbc717c21a662b7836ed34cc4e7da7b8fa33c0Chad Rosier virtual bool isDsymutilJob() const { return true; } 2986e0f25483b1a801cd1155ea89c2b725feab16332Daniel Dunbar 2996e0f25483b1a801cd1155ea89c2b725feab16332Daniel Dunbar virtual void ConstructJob(Compilation &C, const JobAction &JA, 3006e0f25483b1a801cd1155ea89c2b725feab16332Daniel Dunbar const InputInfo &Output, 3016e0f25483b1a801cd1155ea89c2b725feab16332Daniel Dunbar const InputInfoList &Inputs, 302dd0b3c4c72464af92e2c27dd5a67e29f91ba7b28Reid Kleckner const llvm::opt::ArgList &TCArgs, 303f7b8eec37c8c8012fa525c71fb29a58c9f29beefDaniel Dunbar const char *LinkingOutput) const; 304f7b8eec37c8c8012fa525c71fb29a58c9f29beefDaniel Dunbar }; 305f857186fd1995b34185d063a29b11ad4f948519fEric Christopher 306f857186fd1995b34185d063a29b11ad4f948519fEric Christopher class LLVM_LIBRARY_VISIBILITY VerifyDebug : public DarwinTool { 307f857186fd1995b34185d063a29b11ad4f948519fEric Christopher public: 308f857186fd1995b34185d063a29b11ad4f948519fEric Christopher VerifyDebug(const ToolChain &TC) : DarwinTool("darwin::VerifyDebug", 30927e2b983beb8b5a29869639637327725623069a8Eric Christopher "dwarfdump", TC) {} 310f857186fd1995b34185d063a29b11ad4f948519fEric Christopher 311f857186fd1995b34185d063a29b11ad4f948519fEric Christopher virtual bool hasIntegratedCPP() const { return false; } 312f857186fd1995b34185d063a29b11ad4f948519fEric Christopher 313f857186fd1995b34185d063a29b11ad4f948519fEric Christopher virtual void ConstructJob(Compilation &C, const JobAction &JA, 31427e2b983beb8b5a29869639637327725623069a8Eric Christopher const InputInfo &Output, 31527e2b983beb8b5a29869639637327725623069a8Eric Christopher const InputInfoList &Inputs, 316dd0b3c4c72464af92e2c27dd5a67e29f91ba7b28Reid Kleckner const llvm::opt::ArgList &TCArgs, 31727e2b983beb8b5a29869639637327725623069a8Eric Christopher const char *LinkingOutput) const; 318f857186fd1995b34185d063a29b11ad4f948519fEric Christopher }; 319f857186fd1995b34185d063a29b11ad4f948519fEric Christopher 320f7b8eec37c8c8012fa525c71fb29a58c9f29beefDaniel Dunbar} 321f7b8eec37c8c8012fa525c71fb29a58c9f29beefDaniel Dunbar 322f7b8eec37c8c8012fa525c71fb29a58c9f29beefDaniel Dunbar /// openbsd -- Directly call GNU Binutils assembler and linker 323f7b8eec37c8c8012fa525c71fb29a58c9f29beefDaniel Dunbarnamespace openbsd { 32492dd1915842410005c68d32c43bb3b3cf5a4a702Duncan Sands class LLVM_LIBRARY_VISIBILITY Assemble : public Tool { 325f7b8eec37c8c8012fa525c71fb29a58c9f29beefDaniel Dunbar public: 3263038204fd8f6ff22082dd18e4b12ed252b75a5e4Daniel Dunbar Assemble(const ToolChain &TC) : Tool("openbsd::Assemble", "assembler", 3273038204fd8f6ff22082dd18e4b12ed252b75a5e4Daniel Dunbar TC) {} 328f7b8eec37c8c8012fa525c71fb29a58c9f29beefDaniel Dunbar 329f7b8eec37c8c8012fa525c71fb29a58c9f29beefDaniel Dunbar virtual bool hasIntegratedCPP() const { return false; } 330f7b8eec37c8c8012fa525c71fb29a58c9f29beefDaniel Dunbar 331f7b8eec37c8c8012fa525c71fb29a58c9f29beefDaniel Dunbar virtual void ConstructJob(Compilation &C, const JobAction &JA, 3321eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump const InputInfo &Output, 3331eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump const InputInfoList &Inputs, 334dd0b3c4c72464af92e2c27dd5a67e29f91ba7b28Reid Kleckner const llvm::opt::ArgList &TCArgs, 335f7b8eec37c8c8012fa525c71fb29a58c9f29beefDaniel Dunbar const char *LinkingOutput) const; 336f7b8eec37c8c8012fa525c71fb29a58c9f29beefDaniel Dunbar }; 33792dd1915842410005c68d32c43bb3b3cf5a4a702Duncan Sands class LLVM_LIBRARY_VISIBILITY Link : public Tool { 338f7b8eec37c8c8012fa525c71fb29a58c9f29beefDaniel Dunbar public: 3393038204fd8f6ff22082dd18e4b12ed252b75a5e4Daniel Dunbar Link(const ToolChain &TC) : Tool("openbsd::Link", "linker", TC) {} 340f7b8eec37c8c8012fa525c71fb29a58c9f29beefDaniel Dunbar 341f7b8eec37c8c8012fa525c71fb29a58c9f29beefDaniel Dunbar virtual bool hasIntegratedCPP() const { return false; } 3428ba9a6244c56b19bc2a24de5d0c32ff37d50177bChad Rosier virtual bool isLinkJob() const { return true; } 343f7b8eec37c8c8012fa525c71fb29a58c9f29beefDaniel Dunbar 344f7b8eec37c8c8012fa525c71fb29a58c9f29beefDaniel Dunbar virtual void ConstructJob(Compilation &C, const JobAction &JA, 3451eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump const InputInfo &Output, 3461eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump const InputInfoList &Inputs, 347dd0b3c4c72464af92e2c27dd5a67e29f91ba7b28Reid Kleckner const llvm::opt::ArgList &TCArgs, 348ff7488dc9a766f94daf54d81b03ab9160d0bfd88Daniel Dunbar const char *LinkingOutput) const; 349ff7488dc9a766f94daf54d81b03ab9160d0bfd88Daniel Dunbar }; 350e7925a075f110ab21afeae084670a155dea568e3Edward O'Callaghan} // end namespace openbsd 351ff7488dc9a766f94daf54d81b03ab9160d0bfd88Daniel Dunbar 35242f74f21ece01dc8573d5377859d327fbb23b26cEli Friedman /// bitrig -- Directly call GNU Binutils assembler and linker 35342f74f21ece01dc8573d5377859d327fbb23b26cEli Friedmannamespace bitrig { 35442f74f21ece01dc8573d5377859d327fbb23b26cEli Friedman class LLVM_LIBRARY_VISIBILITY Assemble : public Tool { 35542f74f21ece01dc8573d5377859d327fbb23b26cEli Friedman public: 35642f74f21ece01dc8573d5377859d327fbb23b26cEli Friedman Assemble(const ToolChain &TC) : Tool("bitrig::Assemble", "assembler", 35742f74f21ece01dc8573d5377859d327fbb23b26cEli Friedman TC) {} 35842f74f21ece01dc8573d5377859d327fbb23b26cEli Friedman 35942f74f21ece01dc8573d5377859d327fbb23b26cEli Friedman virtual bool hasIntegratedCPP() const { return false; } 36042f74f21ece01dc8573d5377859d327fbb23b26cEli Friedman 36142f74f21ece01dc8573d5377859d327fbb23b26cEli Friedman virtual void ConstructJob(Compilation &C, const JobAction &JA, 36242f74f21ece01dc8573d5377859d327fbb23b26cEli Friedman const InputInfo &Output, 36342f74f21ece01dc8573d5377859d327fbb23b26cEli Friedman const InputInfoList &Inputs, 364dd0b3c4c72464af92e2c27dd5a67e29f91ba7b28Reid Kleckner const llvm::opt::ArgList &TCArgs, 36542f74f21ece01dc8573d5377859d327fbb23b26cEli Friedman const char *LinkingOutput) const; 36642f74f21ece01dc8573d5377859d327fbb23b26cEli Friedman }; 36742f74f21ece01dc8573d5377859d327fbb23b26cEli Friedman class LLVM_LIBRARY_VISIBILITY Link : public Tool { 36842f74f21ece01dc8573d5377859d327fbb23b26cEli Friedman public: 36942f74f21ece01dc8573d5377859d327fbb23b26cEli Friedman Link(const ToolChain &TC) : Tool("bitrig::Link", "linker", TC) {} 37042f74f21ece01dc8573d5377859d327fbb23b26cEli Friedman 37142f74f21ece01dc8573d5377859d327fbb23b26cEli Friedman virtual bool hasIntegratedCPP() const { return false; } 37242f74f21ece01dc8573d5377859d327fbb23b26cEli Friedman virtual bool isLinkJob() const { return true; } 37342f74f21ece01dc8573d5377859d327fbb23b26cEli Friedman 37442f74f21ece01dc8573d5377859d327fbb23b26cEli Friedman virtual void ConstructJob(Compilation &C, const JobAction &JA, 37542f74f21ece01dc8573d5377859d327fbb23b26cEli Friedman const InputInfo &Output, 37642f74f21ece01dc8573d5377859d327fbb23b26cEli Friedman const InputInfoList &Inputs, 377dd0b3c4c72464af92e2c27dd5a67e29f91ba7b28Reid Kleckner const llvm::opt::ArgList &TCArgs, 37842f74f21ece01dc8573d5377859d327fbb23b26cEli Friedman const char *LinkingOutput) const; 37942f74f21ece01dc8573d5377859d327fbb23b26cEli Friedman }; 38042f74f21ece01dc8573d5377859d327fbb23b26cEli Friedman} // end namespace bitrig 38142f74f21ece01dc8573d5377859d327fbb23b26cEli Friedman 38268a31d406c6dc4382c700d1199b062de2aa7e1daDaniel Dunbar /// freebsd -- Directly call GNU Binutils assembler and linker 38368a31d406c6dc4382c700d1199b062de2aa7e1daDaniel Dunbarnamespace freebsd { 38492dd1915842410005c68d32c43bb3b3cf5a4a702Duncan Sands class LLVM_LIBRARY_VISIBILITY Assemble : public Tool { 38568a31d406c6dc4382c700d1199b062de2aa7e1daDaniel Dunbar public: 3863038204fd8f6ff22082dd18e4b12ed252b75a5e4Daniel Dunbar Assemble(const ToolChain &TC) : Tool("freebsd::Assemble", "assembler", 3873038204fd8f6ff22082dd18e4b12ed252b75a5e4Daniel Dunbar TC) {} 38868a31d406c6dc4382c700d1199b062de2aa7e1daDaniel Dunbar 38968a31d406c6dc4382c700d1199b062de2aa7e1daDaniel Dunbar virtual bool hasIntegratedCPP() const { return false; } 39068a31d406c6dc4382c700d1199b062de2aa7e1daDaniel Dunbar 39168a31d406c6dc4382c700d1199b062de2aa7e1daDaniel Dunbar virtual void ConstructJob(Compilation &C, const JobAction &JA, 3921eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump const InputInfo &Output, 3931eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump const InputInfoList &Inputs, 394dd0b3c4c72464af92e2c27dd5a67e29f91ba7b28Reid Kleckner const llvm::opt::ArgList &TCArgs, 39568a31d406c6dc4382c700d1199b062de2aa7e1daDaniel Dunbar const char *LinkingOutput) const; 39668a31d406c6dc4382c700d1199b062de2aa7e1daDaniel Dunbar }; 39792dd1915842410005c68d32c43bb3b3cf5a4a702Duncan Sands class LLVM_LIBRARY_VISIBILITY Link : public Tool { 398008f54a54299eaafdaa940e2bdeaf55935ecd95aDaniel Dunbar public: 3993038204fd8f6ff22082dd18e4b12ed252b75a5e4Daniel Dunbar Link(const ToolChain &TC) : Tool("freebsd::Link", "linker", TC) {} 400008f54a54299eaafdaa940e2bdeaf55935ecd95aDaniel Dunbar 401008f54a54299eaafdaa940e2bdeaf55935ecd95aDaniel Dunbar virtual bool hasIntegratedCPP() const { return false; } 4028ba9a6244c56b19bc2a24de5d0c32ff37d50177bChad Rosier virtual bool isLinkJob() const { return true; } 403008f54a54299eaafdaa940e2bdeaf55935ecd95aDaniel Dunbar 404008f54a54299eaafdaa940e2bdeaf55935ecd95aDaniel Dunbar virtual void ConstructJob(Compilation &C, const JobAction &JA, 4051eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump const InputInfo &Output, 4061eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump const InputInfoList &Inputs, 407dd0b3c4c72464af92e2c27dd5a67e29f91ba7b28Reid Kleckner const llvm::opt::ArgList &TCArgs, 408008f54a54299eaafdaa940e2bdeaf55935ecd95aDaniel Dunbar const char *LinkingOutput) const; 409008f54a54299eaafdaa940e2bdeaf55935ecd95aDaniel Dunbar }; 410e7925a075f110ab21afeae084670a155dea568e3Edward O'Callaghan} // end namespace freebsd 411e7925a075f110ab21afeae084670a155dea568e3Edward O'Callaghan 4128e50a96b387dca7525caa8a6add31420dd82a2cdBenjamin Kramer /// netbsd -- Directly call GNU Binutils assembler and linker 4138e50a96b387dca7525caa8a6add31420dd82a2cdBenjamin Kramernamespace netbsd { 4148e50a96b387dca7525caa8a6add31420dd82a2cdBenjamin Kramer class LLVM_LIBRARY_VISIBILITY Assemble : public Tool { 415182564cd14a2105fff05fd52f5940eff96161d57Joerg Sonnenberger 4168e50a96b387dca7525caa8a6add31420dd82a2cdBenjamin Kramer public: 4171bd91374498ac78e72545f08f4daa6491f9c9d14Joerg Sonnenberger Assemble(const ToolChain &TC) 4181bd91374498ac78e72545f08f4daa6491f9c9d14Joerg Sonnenberger : Tool("netbsd::Assemble", "assembler", TC) {} 4198e50a96b387dca7525caa8a6add31420dd82a2cdBenjamin Kramer 4208e50a96b387dca7525caa8a6add31420dd82a2cdBenjamin Kramer virtual bool hasIntegratedCPP() const { return false; } 4218e50a96b387dca7525caa8a6add31420dd82a2cdBenjamin Kramer 4228e50a96b387dca7525caa8a6add31420dd82a2cdBenjamin Kramer virtual void ConstructJob(Compilation &C, const JobAction &JA, 4238e50a96b387dca7525caa8a6add31420dd82a2cdBenjamin Kramer const InputInfo &Output, 4248e50a96b387dca7525caa8a6add31420dd82a2cdBenjamin Kramer const InputInfoList &Inputs, 425dd0b3c4c72464af92e2c27dd5a67e29f91ba7b28Reid Kleckner const llvm::opt::ArgList &TCArgs, 4268e50a96b387dca7525caa8a6add31420dd82a2cdBenjamin Kramer const char *LinkingOutput) const; 4278e50a96b387dca7525caa8a6add31420dd82a2cdBenjamin Kramer }; 4288e50a96b387dca7525caa8a6add31420dd82a2cdBenjamin Kramer class LLVM_LIBRARY_VISIBILITY Link : public Tool { 429182564cd14a2105fff05fd52f5940eff96161d57Joerg Sonnenberger 4308e50a96b387dca7525caa8a6add31420dd82a2cdBenjamin Kramer public: 4311bd91374498ac78e72545f08f4daa6491f9c9d14Joerg Sonnenberger Link(const ToolChain &TC) 4321bd91374498ac78e72545f08f4daa6491f9c9d14Joerg Sonnenberger : Tool("netbsd::Link", "linker", TC) {} 4338e50a96b387dca7525caa8a6add31420dd82a2cdBenjamin Kramer 4348e50a96b387dca7525caa8a6add31420dd82a2cdBenjamin Kramer virtual bool hasIntegratedCPP() const { return false; } 4358ba9a6244c56b19bc2a24de5d0c32ff37d50177bChad Rosier virtual bool isLinkJob() const { return true; } 4368e50a96b387dca7525caa8a6add31420dd82a2cdBenjamin Kramer 4378e50a96b387dca7525caa8a6add31420dd82a2cdBenjamin Kramer virtual void ConstructJob(Compilation &C, const JobAction &JA, 4388e50a96b387dca7525caa8a6add31420dd82a2cdBenjamin Kramer const InputInfo &Output, 4398e50a96b387dca7525caa8a6add31420dd82a2cdBenjamin Kramer const InputInfoList &Inputs, 440dd0b3c4c72464af92e2c27dd5a67e29f91ba7b28Reid Kleckner const llvm::opt::ArgList &TCArgs, 4418e50a96b387dca7525caa8a6add31420dd82a2cdBenjamin Kramer const char *LinkingOutput) const; 4428e50a96b387dca7525caa8a6add31420dd82a2cdBenjamin Kramer }; 4438e50a96b387dca7525caa8a6add31420dd82a2cdBenjamin Kramer} // end namespace netbsd 4448e50a96b387dca7525caa8a6add31420dd82a2cdBenjamin Kramer 445577bb0a2335295958b3b0f88bc9cdedf6551c17fThomas Schwinge /// Directly call GNU Binutils' assembler and linker. 446577bb0a2335295958b3b0f88bc9cdedf6551c17fThomas Schwingenamespace gnutools { 447ba30bbe4e36a30a274da809a11a42f9cdc168e92Rafael Espindola class LLVM_LIBRARY_VISIBILITY Assemble : public Tool { 448ba30bbe4e36a30a274da809a11a42f9cdc168e92Rafael Espindola public: 449577bb0a2335295958b3b0f88bc9cdedf6551c17fThomas Schwinge Assemble(const ToolChain &TC) : Tool("GNU::Assemble", "assembler", TC) {} 450ba30bbe4e36a30a274da809a11a42f9cdc168e92Rafael Espindola 451ba30bbe4e36a30a274da809a11a42f9cdc168e92Rafael Espindola virtual bool hasIntegratedCPP() const { return false; } 452ba30bbe4e36a30a274da809a11a42f9cdc168e92Rafael Espindola 453ba30bbe4e36a30a274da809a11a42f9cdc168e92Rafael Espindola virtual void ConstructJob(Compilation &C, const JobAction &JA, 454ba30bbe4e36a30a274da809a11a42f9cdc168e92Rafael Espindola const InputInfo &Output, 455ba30bbe4e36a30a274da809a11a42f9cdc168e92Rafael Espindola const InputInfoList &Inputs, 456dd0b3c4c72464af92e2c27dd5a67e29f91ba7b28Reid Kleckner const llvm::opt::ArgList &TCArgs, 457ba30bbe4e36a30a274da809a11a42f9cdc168e92Rafael Espindola const char *LinkingOutput) const; 458ba30bbe4e36a30a274da809a11a42f9cdc168e92Rafael Espindola }; 459c1da981bba867681004004b2d54ec2fdf3c08913Rafael Espindola class LLVM_LIBRARY_VISIBILITY Link : public Tool { 460c1da981bba867681004004b2d54ec2fdf3c08913Rafael Espindola public: 461577bb0a2335295958b3b0f88bc9cdedf6551c17fThomas Schwinge Link(const ToolChain &TC) : Tool("GNU::Link", "linker", TC) {} 462c1da981bba867681004004b2d54ec2fdf3c08913Rafael Espindola 463c1da981bba867681004004b2d54ec2fdf3c08913Rafael Espindola virtual bool hasIntegratedCPP() const { return false; } 4648ba9a6244c56b19bc2a24de5d0c32ff37d50177bChad Rosier virtual bool isLinkJob() const { return true; } 465c1da981bba867681004004b2d54ec2fdf3c08913Rafael Espindola 466c1da981bba867681004004b2d54ec2fdf3c08913Rafael Espindola virtual void ConstructJob(Compilation &C, const JobAction &JA, 467c1da981bba867681004004b2d54ec2fdf3c08913Rafael Espindola const InputInfo &Output, 468c1da981bba867681004004b2d54ec2fdf3c08913Rafael Espindola const InputInfoList &Inputs, 469dd0b3c4c72464af92e2c27dd5a67e29f91ba7b28Reid Kleckner const llvm::opt::ArgList &TCArgs, 470c1da981bba867681004004b2d54ec2fdf3c08913Rafael Espindola const char *LinkingOutput) const; 471c1da981bba867681004004b2d54ec2fdf3c08913Rafael Espindola }; 472ba30bbe4e36a30a274da809a11a42f9cdc168e92Rafael Espindola} 47338e317d6dce161b249508686cc67eb7176958762Chris Lattner /// minix -- Directly call GNU Binutils assembler and linker 47438e317d6dce161b249508686cc67eb7176958762Chris Lattnernamespace minix { 47538e317d6dce161b249508686cc67eb7176958762Chris Lattner class LLVM_LIBRARY_VISIBILITY Assemble : public Tool { 47638e317d6dce161b249508686cc67eb7176958762Chris Lattner public: 47738e317d6dce161b249508686cc67eb7176958762Chris Lattner Assemble(const ToolChain &TC) : Tool("minix::Assemble", "assembler", 47838e317d6dce161b249508686cc67eb7176958762Chris Lattner TC) {} 47938e317d6dce161b249508686cc67eb7176958762Chris Lattner 48038e317d6dce161b249508686cc67eb7176958762Chris Lattner virtual bool hasIntegratedCPP() const { return false; } 48138e317d6dce161b249508686cc67eb7176958762Chris Lattner 48238e317d6dce161b249508686cc67eb7176958762Chris Lattner virtual void ConstructJob(Compilation &C, const JobAction &JA, 48338e317d6dce161b249508686cc67eb7176958762Chris Lattner const InputInfo &Output, 48438e317d6dce161b249508686cc67eb7176958762Chris Lattner const InputInfoList &Inputs, 485dd0b3c4c72464af92e2c27dd5a67e29f91ba7b28Reid Kleckner const llvm::opt::ArgList &TCArgs, 48638e317d6dce161b249508686cc67eb7176958762Chris Lattner const char *LinkingOutput) const; 48738e317d6dce161b249508686cc67eb7176958762Chris Lattner }; 48838e317d6dce161b249508686cc67eb7176958762Chris Lattner class LLVM_LIBRARY_VISIBILITY Link : public Tool { 48938e317d6dce161b249508686cc67eb7176958762Chris Lattner public: 49038e317d6dce161b249508686cc67eb7176958762Chris Lattner Link(const ToolChain &TC) : Tool("minix::Link", "linker", TC) {} 49138e317d6dce161b249508686cc67eb7176958762Chris Lattner 49238e317d6dce161b249508686cc67eb7176958762Chris Lattner virtual bool hasIntegratedCPP() const { return false; } 4938ba9a6244c56b19bc2a24de5d0c32ff37d50177bChad Rosier virtual bool isLinkJob() const { return true; } 49438e317d6dce161b249508686cc67eb7176958762Chris Lattner 49538e317d6dce161b249508686cc67eb7176958762Chris Lattner virtual void ConstructJob(Compilation &C, const JobAction &JA, 49638e317d6dce161b249508686cc67eb7176958762Chris Lattner const InputInfo &Output, 49738e317d6dce161b249508686cc67eb7176958762Chris Lattner const InputInfoList &Inputs, 498dd0b3c4c72464af92e2c27dd5a67e29f91ba7b28Reid Kleckner const llvm::opt::ArgList &TCArgs, 49938e317d6dce161b249508686cc67eb7176958762Chris Lattner const char *LinkingOutput) const; 50038e317d6dce161b249508686cc67eb7176958762Chris Lattner }; 50138e317d6dce161b249508686cc67eb7176958762Chris Lattner} // end namespace minix 50238e317d6dce161b249508686cc67eb7176958762Chris Lattner 50331c4690047f5f362ecf886f1586844b1aef0c4d2David Chisnall /// solaris -- Directly call Solaris assembler and linker 50431c4690047f5f362ecf886f1586844b1aef0c4d2David Chisnallnamespace solaris { 50531c4690047f5f362ecf886f1586844b1aef0c4d2David Chisnall class LLVM_LIBRARY_VISIBILITY Assemble : public Tool { 50631c4690047f5f362ecf886f1586844b1aef0c4d2David Chisnall public: 50731c4690047f5f362ecf886f1586844b1aef0c4d2David Chisnall Assemble(const ToolChain &TC) : Tool("solaris::Assemble", "assembler", 50831c4690047f5f362ecf886f1586844b1aef0c4d2David Chisnall TC) {} 50931c4690047f5f362ecf886f1586844b1aef0c4d2David Chisnall 51031c4690047f5f362ecf886f1586844b1aef0c4d2David Chisnall virtual bool hasIntegratedCPP() const { return false; } 51131c4690047f5f362ecf886f1586844b1aef0c4d2David Chisnall 51231c4690047f5f362ecf886f1586844b1aef0c4d2David Chisnall virtual void ConstructJob(Compilation &C, const JobAction &JA, 51331c4690047f5f362ecf886f1586844b1aef0c4d2David Chisnall const InputInfo &Output, 51431c4690047f5f362ecf886f1586844b1aef0c4d2David Chisnall const InputInfoList &Inputs, 515dd0b3c4c72464af92e2c27dd5a67e29f91ba7b28Reid Kleckner const llvm::opt::ArgList &TCArgs, 51631c4690047f5f362ecf886f1586844b1aef0c4d2David Chisnall const char *LinkingOutput) const; 51731c4690047f5f362ecf886f1586844b1aef0c4d2David Chisnall }; 51831c4690047f5f362ecf886f1586844b1aef0c4d2David Chisnall class LLVM_LIBRARY_VISIBILITY Link : public Tool { 51931c4690047f5f362ecf886f1586844b1aef0c4d2David Chisnall public: 52031c4690047f5f362ecf886f1586844b1aef0c4d2David Chisnall Link(const ToolChain &TC) : Tool("solaris::Link", "linker", TC) {} 52131c4690047f5f362ecf886f1586844b1aef0c4d2David Chisnall 52231c4690047f5f362ecf886f1586844b1aef0c4d2David Chisnall virtual bool hasIntegratedCPP() const { return false; } 5238ba9a6244c56b19bc2a24de5d0c32ff37d50177bChad Rosier virtual bool isLinkJob() const { return true; } 52431c4690047f5f362ecf886f1586844b1aef0c4d2David Chisnall 52531c4690047f5f362ecf886f1586844b1aef0c4d2David Chisnall virtual void ConstructJob(Compilation &C, const JobAction &JA, 52631c4690047f5f362ecf886f1586844b1aef0c4d2David Chisnall const InputInfo &Output, 52731c4690047f5f362ecf886f1586844b1aef0c4d2David Chisnall const InputInfoList &Inputs, 528dd0b3c4c72464af92e2c27dd5a67e29f91ba7b28Reid Kleckner const llvm::opt::ArgList &TCArgs, 52931c4690047f5f362ecf886f1586844b1aef0c4d2David Chisnall const char *LinkingOutput) const; 53031c4690047f5f362ecf886f1586844b1aef0c4d2David Chisnall }; 531badb6cd2007825308208e6c4275ba54e220e4e28David Chisnall} // end namespace solaris 53231c4690047f5f362ecf886f1586844b1aef0c4d2David Chisnall 533e7925a075f110ab21afeae084670a155dea568e3Edward O'Callaghan /// auroraux -- Directly call GNU Binutils assembler and linker 534e7925a075f110ab21afeae084670a155dea568e3Edward O'Callaghannamespace auroraux { 53592dd1915842410005c68d32c43bb3b3cf5a4a702Duncan Sands class LLVM_LIBRARY_VISIBILITY Assemble : public Tool { 536e7925a075f110ab21afeae084670a155dea568e3Edward O'Callaghan public: 5373038204fd8f6ff22082dd18e4b12ed252b75a5e4Daniel Dunbar Assemble(const ToolChain &TC) : Tool("auroraux::Assemble", "assembler", 5383038204fd8f6ff22082dd18e4b12ed252b75a5e4Daniel Dunbar TC) {} 539e7925a075f110ab21afeae084670a155dea568e3Edward O'Callaghan 540e7925a075f110ab21afeae084670a155dea568e3Edward O'Callaghan virtual bool hasIntegratedCPP() const { return false; } 541e7925a075f110ab21afeae084670a155dea568e3Edward O'Callaghan 542e7925a075f110ab21afeae084670a155dea568e3Edward O'Callaghan virtual void ConstructJob(Compilation &C, const JobAction &JA, 5431eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump const InputInfo &Output, 5441eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump const InputInfoList &Inputs, 545dd0b3c4c72464af92e2c27dd5a67e29f91ba7b28Reid Kleckner const llvm::opt::ArgList &TCArgs, 546e7925a075f110ab21afeae084670a155dea568e3Edward O'Callaghan const char *LinkingOutput) const; 547e7925a075f110ab21afeae084670a155dea568e3Edward O'Callaghan }; 54892dd1915842410005c68d32c43bb3b3cf5a4a702Duncan Sands class LLVM_LIBRARY_VISIBILITY Link : public Tool { 549e7925a075f110ab21afeae084670a155dea568e3Edward O'Callaghan public: 5503038204fd8f6ff22082dd18e4b12ed252b75a5e4Daniel Dunbar Link(const ToolChain &TC) : Tool("auroraux::Link", "linker", TC) {} 551e7925a075f110ab21afeae084670a155dea568e3Edward O'Callaghan 552e7925a075f110ab21afeae084670a155dea568e3Edward O'Callaghan virtual bool hasIntegratedCPP() const { return false; } 5538ba9a6244c56b19bc2a24de5d0c32ff37d50177bChad Rosier virtual bool isLinkJob() const { return true; } 554e7925a075f110ab21afeae084670a155dea568e3Edward O'Callaghan 555e7925a075f110ab21afeae084670a155dea568e3Edward O'Callaghan virtual void ConstructJob(Compilation &C, const JobAction &JA, 5561eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump const InputInfo &Output, 5571eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump const InputInfoList &Inputs, 558dd0b3c4c72464af92e2c27dd5a67e29f91ba7b28Reid Kleckner const llvm::opt::ArgList &TCArgs, 559e7925a075f110ab21afeae084670a155dea568e3Edward O'Callaghan const char *LinkingOutput) const; 560e7925a075f110ab21afeae084670a155dea568e3Edward O'Callaghan }; 561e7925a075f110ab21afeae084670a155dea568e3Edward O'Callaghan} // end namespace auroraux 56268a31d406c6dc4382c700d1199b062de2aa7e1daDaniel Dunbar 56311e1b40d759a643086f590f6ffbd9d68360bad46Daniel Dunbar /// dragonfly -- Directly call GNU Binutils assembler and linker 56411e1b40d759a643086f590f6ffbd9d68360bad46Daniel Dunbarnamespace dragonfly { 56592dd1915842410005c68d32c43bb3b3cf5a4a702Duncan Sands class LLVM_LIBRARY_VISIBILITY Assemble : public Tool { 56611e1b40d759a643086f590f6ffbd9d68360bad46Daniel Dunbar public: 5673038204fd8f6ff22082dd18e4b12ed252b75a5e4Daniel Dunbar Assemble(const ToolChain &TC) : Tool("dragonfly::Assemble", "assembler", 5683038204fd8f6ff22082dd18e4b12ed252b75a5e4Daniel Dunbar TC) {} 56911e1b40d759a643086f590f6ffbd9d68360bad46Daniel Dunbar 57011e1b40d759a643086f590f6ffbd9d68360bad46Daniel Dunbar virtual bool hasIntegratedCPP() const { return false; } 57111e1b40d759a643086f590f6ffbd9d68360bad46Daniel Dunbar 57211e1b40d759a643086f590f6ffbd9d68360bad46Daniel Dunbar virtual void ConstructJob(Compilation &C, const JobAction &JA, 5731eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump const InputInfo &Output, 5741eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump const InputInfoList &Inputs, 575dd0b3c4c72464af92e2c27dd5a67e29f91ba7b28Reid Kleckner const llvm::opt::ArgList &TCArgs, 57611e1b40d759a643086f590f6ffbd9d68360bad46Daniel Dunbar const char *LinkingOutput) const; 57711e1b40d759a643086f590f6ffbd9d68360bad46Daniel Dunbar }; 57892dd1915842410005c68d32c43bb3b3cf5a4a702Duncan Sands class LLVM_LIBRARY_VISIBILITY Link : public Tool { 57911e1b40d759a643086f590f6ffbd9d68360bad46Daniel Dunbar public: 5803038204fd8f6ff22082dd18e4b12ed252b75a5e4Daniel Dunbar Link(const ToolChain &TC) : Tool("dragonfly::Link", "linker", TC) {} 58111e1b40d759a643086f590f6ffbd9d68360bad46Daniel Dunbar 58211e1b40d759a643086f590f6ffbd9d68360bad46Daniel Dunbar virtual bool hasIntegratedCPP() const { return false; } 5838ba9a6244c56b19bc2a24de5d0c32ff37d50177bChad Rosier virtual bool isLinkJob() const { return true; } 58411e1b40d759a643086f590f6ffbd9d68360bad46Daniel Dunbar 58511e1b40d759a643086f590f6ffbd9d68360bad46Daniel Dunbar virtual void ConstructJob(Compilation &C, const JobAction &JA, 5861eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump const InputInfo &Output, 5871eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump const InputInfoList &Inputs, 588dd0b3c4c72464af92e2c27dd5a67e29f91ba7b28Reid Kleckner const llvm::opt::ArgList &TCArgs, 58911e1b40d759a643086f590f6ffbd9d68360bad46Daniel Dunbar const char *LinkingOutput) const; 59011e1b40d759a643086f590f6ffbd9d68360bad46Daniel Dunbar }; 591e7925a075f110ab21afeae084670a155dea568e3Edward O'Callaghan} // end namespace dragonfly 59211e1b40d759a643086f590f6ffbd9d68360bad46Daniel Dunbar 593ff58e3610f4e12094def69eb2d6dcb4330378d8fMichael J. Spencer /// Visual studio tools. 594ff58e3610f4e12094def69eb2d6dcb4330378d8fMichael J. Spencernamespace visualstudio { 595ff58e3610f4e12094def69eb2d6dcb4330378d8fMichael J. Spencer class LLVM_LIBRARY_VISIBILITY Link : public Tool { 596ff58e3610f4e12094def69eb2d6dcb4330378d8fMichael J. Spencer public: 597ff58e3610f4e12094def69eb2d6dcb4330378d8fMichael J. Spencer Link(const ToolChain &TC) : Tool("visualstudio::Link", "linker", TC) {} 598ff58e3610f4e12094def69eb2d6dcb4330378d8fMichael J. Spencer 599ff58e3610f4e12094def69eb2d6dcb4330378d8fMichael J. Spencer virtual bool hasIntegratedCPP() const { return false; } 6008ba9a6244c56b19bc2a24de5d0c32ff37d50177bChad Rosier virtual bool isLinkJob() const { return true; } 601ff58e3610f4e12094def69eb2d6dcb4330378d8fMichael J. Spencer 602ff58e3610f4e12094def69eb2d6dcb4330378d8fMichael J. Spencer virtual void ConstructJob(Compilation &C, const JobAction &JA, 603ff58e3610f4e12094def69eb2d6dcb4330378d8fMichael J. Spencer const InputInfo &Output, 604ff58e3610f4e12094def69eb2d6dcb4330378d8fMichael J. Spencer const InputInfoList &Inputs, 605dd0b3c4c72464af92e2c27dd5a67e29f91ba7b28Reid Kleckner const llvm::opt::ArgList &TCArgs, 606ff58e3610f4e12094def69eb2d6dcb4330378d8fMichael J. Spencer const char *LinkingOutput) const; 607ff58e3610f4e12094def69eb2d6dcb4330378d8fMichael J. Spencer }; 608ff58e3610f4e12094def69eb2d6dcb4330378d8fMichael J. Spencer} // end namespace visualstudio 609ff58e3610f4e12094def69eb2d6dcb4330378d8fMichael J. Spencer 6109c073ff462eb75ccbb1c4446e21c148f3fc618e1Daniel Dunbar} // end namespace toolchains 6119c073ff462eb75ccbb1c4446e21c148f3fc618e1Daniel Dunbar} // end namespace driver 6129c073ff462eb75ccbb1c4446e21c148f3fc618e1Daniel Dunbar} // end namespace clang 6139c073ff462eb75ccbb1c4446e21c148f3fc618e1Daniel Dunbar 614e7925a075f110ab21afeae084670a155dea568e3Edward O'Callaghan#endif // CLANG_LIB_DRIVER_TOOLS_H_ 615