Tools.h revision 651f13cea278ec967336033dd032faef0e9fc2ec
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 { 24c8ba0a0acd30f0b56d08a3a0947f68ac01a40730Hans Wennborg class Command; 25df91ef3d6c55692a0236f67b6c6b134a3bf84098Douglas Gregor class Driver; 26df91ef3d6c55692a0236f67b6c6b134a3bf84098Douglas Gregor 2702633b541b04ad5ffc1c70f4c2feeeb13e607057Daniel Dunbarnamespace toolchains { 28651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines class MachO; 2902633b541b04ad5ffc1c70f4c2feeeb13e607057Daniel Dunbar} 3002633b541b04ad5ffc1c70f4c2feeeb13e607057Daniel Dunbar 31985b825eea7387be10478de0430815ed6a673326Daniel Dunbarnamespace tools { 32b1e25a1bc03292dc538d336573e0be1490223171Reid Klecknerusing llvm::opt::ArgStringList; 339c073ff462eb75ccbb1c4446e21c148f3fc618e1Daniel Dunbar 3420a9aa50f9a7d4b03f97bc67e96da1d605c309a2Daniel Dunbar /// \brief Clang compiler tool. 3592dd1915842410005c68d32c43bb3b3cf5a4a702Duncan Sands class LLVM_LIBRARY_VISIBILITY Clang : public Tool { 3627e2b983beb8b5a29869639637327725623069a8Eric Christopher public: 37dd0b3c4c72464af92e2c27dd5a67e29f91ba7b28Reid Kleckner static const char *getBaseInputName(const llvm::opt::ArgList &Args, 3866b8a6671bb5df540dd7200a5286f7ed7a72c1ccBob Wilson const InputInfoList &Inputs); 39dd0b3c4c72464af92e2c27dd5a67e29f91ba7b28Reid Kleckner static const char *getBaseInputStem(const llvm::opt::ArgList &Args, 4066b8a6671bb5df540dd7200a5286f7ed7a72c1ccBob Wilson const InputInfoList &Inputs); 41dd0b3c4c72464af92e2c27dd5a67e29f91ba7b28Reid Kleckner static const char *getDependencyFileName(const llvm::opt::ArgList &Args, 4266b8a6671bb5df540dd7200a5286f7ed7a72c1ccBob Wilson const InputInfoList &Inputs); 4366b8a6671bb5df540dd7200a5286f7ed7a72c1ccBob Wilson 4427e2b983beb8b5a29869639637327725623069a8Eric Christopher private: 45dd0b3c4c72464af92e2c27dd5a67e29f91ba7b28Reid Kleckner void AddPreprocessingOptions(Compilation &C, const JobAction &JA, 4654db68bf0e389b8aabe1a434f825a81a9c1f7db8Peter Collingbourne const Driver &D, 47dd0b3c4c72464af92e2c27dd5a67e29f91ba7b28Reid Kleckner const llvm::opt::ArgList &Args, 48dd0b3c4c72464af92e2c27dd5a67e29f91ba7b28Reid Kleckner llvm::opt::ArgStringList &CmdArgs, 49c21c485b4fb58ef5d55cf3e523263dd824a2ace4Daniel Dunbar const InputInfo &Output, 50c21c485b4fb58ef5d55cf3e523263dd824a2ace4Daniel Dunbar const InputInfoList &Inputs) const; 51c21c485b4fb58ef5d55cf3e523263dd824a2ace4Daniel Dunbar 523bb1b5c953fc38d4b87525258cf27b7c908988b1Amara Emerson void AddAArch64TargetArgs(const llvm::opt::ArgList &Args, 533bb1b5c953fc38d4b87525258cf27b7c908988b1Amara Emerson llvm::opt::ArgStringList &CmdArgs) const; 54dd0b3c4c72464af92e2c27dd5a67e29f91ba7b28Reid Kleckner void AddARMTargetArgs(const llvm::opt::ArgList &Args, 55dd0b3c4c72464af92e2c27dd5a67e29f91ba7b28Reid Kleckner llvm::opt::ArgStringList &CmdArgs, 56fa41d6975058ceb1b8a24564f6dcec72f89f62e8Daniel Dunbar bool KernelOrKext) const; 57651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines void AddARM64TargetArgs(const llvm::opt::ArgList &Args, 58651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines llvm::opt::ArgStringList &CmdArgs) const; 59dd0b3c4c72464af92e2c27dd5a67e29f91ba7b28Reid Kleckner void AddMIPSTargetArgs(const llvm::opt::ArgList &Args, 60dd0b3c4c72464af92e2c27dd5a67e29f91ba7b28Reid Kleckner llvm::opt::ArgStringList &CmdArgs) const; 61dd0b3c4c72464af92e2c27dd5a67e29f91ba7b28Reid Kleckner void AddR600TargetArgs(const llvm::opt::ArgList &Args, 62dd0b3c4c72464af92e2c27dd5a67e29f91ba7b28Reid Kleckner llvm::opt::ArgStringList &CmdArgs) const; 63dd0b3c4c72464af92e2c27dd5a67e29f91ba7b28Reid Kleckner void AddSparcTargetArgs(const llvm::opt::ArgList &Args, 64dd0b3c4c72464af92e2c27dd5a67e29f91ba7b28Reid Kleckner llvm::opt::ArgStringList &CmdArgs) const; 655c92b9ab4e4dce3233ea3e400a02c443f9afd372Richard Sandiford void AddSystemZTargetArgs(const llvm::opt::ArgList &Args, 665c92b9ab4e4dce3233ea3e400a02c443f9afd372Richard Sandiford llvm::opt::ArgStringList &CmdArgs) const; 67dd0b3c4c72464af92e2c27dd5a67e29f91ba7b28Reid Kleckner void AddX86TargetArgs(const llvm::opt::ArgList &Args, 68dd0b3c4c72464af92e2c27dd5a67e29f91ba7b28Reid Kleckner llvm::opt::ArgStringList &CmdArgs) const; 69dd0b3c4c72464af92e2c27dd5a67e29f91ba7b28Reid Kleckner void AddHexagonTargetArgs(const llvm::opt::ArgList &Args, 70dd0b3c4c72464af92e2c27dd5a67e29f91ba7b28Reid Kleckner llvm::opt::ArgStringList &CmdArgs) const; 716acda16e9c194dcbd0dea64341e182bdb65d0f41Daniel Dunbar 72260611a32535c851237926bfcf78869b13c07d5bJohn McCall enum RewriteKind { RK_None, RK_Fragile, RK_NonFragile }; 73260611a32535c851237926bfcf78869b13c07d5bJohn McCall 74dd0b3c4c72464af92e2c27dd5a67e29f91ba7b28Reid Kleckner ObjCRuntime AddObjCRuntimeArgs(const llvm::opt::ArgList &args, 75dd0b3c4c72464af92e2c27dd5a67e29f91ba7b28Reid Kleckner llvm::opt::ArgStringList &cmdArgs, 76260611a32535c851237926bfcf78869b13c07d5bJohn McCall RewriteKind rewrite) const; 77260611a32535c851237926bfcf78869b13c07d5bJohn McCall 78b3574796d7cc0113e54b6516fc16e17ca09459fbHans Wennborg void AddClangCLArgs(const llvm::opt::ArgList &Args, 79b3574796d7cc0113e54b6516fc16e17ca09459fbHans Wennborg llvm::opt::ArgStringList &CmdArgs) const; 80b3574796d7cc0113e54b6516fc16e17ca09459fbHans Wennborg 819c073ff462eb75ccbb1c4446e21c148f3fc618e1Daniel Dunbar public: 823038204fd8f6ff22082dd18e4b12ed252b75a5e4Daniel Dunbar Clang(const ToolChain &TC) : Tool("clang", "clang frontend", TC) {} 839c073ff462eb75ccbb1c4446e21c148f3fc618e1Daniel Dunbar 84651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines bool hasGoodDiagnostics() const override { return true; } 85651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines bool hasIntegratedAssembler() const override { return true; } 86651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines bool hasIntegratedCPP() const override { return true; } 8747ac7d27c44bd64a7d0fc03d4babc196cf2b8230Daniel Dunbar 88651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines void ConstructJob(Compilation &C, const JobAction &JA, 89651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines const InputInfo &Output, const InputInfoList &Inputs, 90651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines const llvm::opt::ArgList &TCArgs, 91651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines const char *LinkingOutput) const override; 9220a9aa50f9a7d4b03f97bc67e96da1d605c309a2Daniel Dunbar }; 9320a9aa50f9a7d4b03f97bc67e96da1d605c309a2Daniel Dunbar 9420a9aa50f9a7d4b03f97bc67e96da1d605c309a2Daniel Dunbar /// \brief Clang integrated assembler tool. 9520a9aa50f9a7d4b03f97bc67e96da1d605c309a2Daniel Dunbar class LLVM_LIBRARY_VISIBILITY ClangAs : public Tool { 9620a9aa50f9a7d4b03f97bc67e96da1d605c309a2Daniel Dunbar public: 973038204fd8f6ff22082dd18e4b12ed252b75a5e4Daniel Dunbar ClangAs(const ToolChain &TC) : Tool("clang::as", 983038204fd8f6ff22082dd18e4b12ed252b75a5e4Daniel Dunbar "clang integrated assembler", TC) {} 9920a9aa50f9a7d4b03f97bc67e96da1d605c309a2Daniel Dunbar 100651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines bool hasGoodDiagnostics() const override { return true; } 101651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines bool hasIntegratedAssembler() const override { return false; } 102651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines bool hasIntegratedCPP() const override { return false; } 10320a9aa50f9a7d4b03f97bc67e96da1d605c309a2Daniel Dunbar 104651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines void ConstructJob(Compilation &C, const JobAction &JA, 105651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines const InputInfo &Output, const InputInfoList &Inputs, 106651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines const llvm::opt::ArgList &TCArgs, 107651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines const char *LinkingOutput) const override; 1089c073ff462eb75ccbb1c4446e21c148f3fc618e1Daniel Dunbar }; 1099c073ff462eb75ccbb1c4446e21c148f3fc618e1Daniel Dunbar 11031b1e5437e7435879fc044afb77ff27096008e72Daniel Dunbar /// gcc - Generic GCC tool implementations. 11131b1e5437e7435879fc044afb77ff27096008e72Daniel Dunbarnamespace gcc { 11292dd1915842410005c68d32c43bb3b3cf5a4a702Duncan Sands class LLVM_LIBRARY_VISIBILITY Common : public Tool { 1139c073ff462eb75ccbb1c4446e21c148f3fc618e1Daniel Dunbar public: 1143038204fd8f6ff22082dd18e4b12ed252b75a5e4Daniel Dunbar Common(const char *Name, const char *ShortName, 1153038204fd8f6ff22082dd18e4b12ed252b75a5e4Daniel Dunbar const ToolChain &TC) : Tool(Name, ShortName, TC) {} 11647ac7d27c44bd64a7d0fc03d4babc196cf2b8230Daniel Dunbar 117651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines void ConstructJob(Compilation &C, const JobAction &JA, 118651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines const InputInfo &Output, 119651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines const InputInfoList &Inputs, 120651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines const llvm::opt::ArgList &TCArgs, 121651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines const char *LinkingOutput) const override; 122b488c1dac8e53206f07103d794a62a3f5012c0f4Daniel Dunbar 123b488c1dac8e53206f07103d794a62a3f5012c0f4Daniel Dunbar /// RenderExtraToolArgs - Render any arguments necessary to force 124b488c1dac8e53206f07103d794a62a3f5012c0f4Daniel Dunbar /// the particular tool mode. 125dd0b3c4c72464af92e2c27dd5a67e29f91ba7b28Reid Kleckner virtual void 126dd0b3c4c72464af92e2c27dd5a67e29f91ba7b28Reid Kleckner RenderExtraToolArgs(const JobAction &JA, 127dd0b3c4c72464af92e2c27dd5a67e29f91ba7b28Reid Kleckner llvm::opt::ArgStringList &CmdArgs) const = 0; 1289c073ff462eb75ccbb1c4446e21c148f3fc618e1Daniel Dunbar }; 1299c073ff462eb75ccbb1c4446e21c148f3fc618e1Daniel Dunbar 13092dd1915842410005c68d32c43bb3b3cf5a4a702Duncan Sands class LLVM_LIBRARY_VISIBILITY Preprocess : public Common { 1319c073ff462eb75ccbb1c4446e21c148f3fc618e1Daniel Dunbar public: 1323038204fd8f6ff22082dd18e4b12ed252b75a5e4Daniel Dunbar Preprocess(const ToolChain &TC) : Common("gcc::Preprocess", 1333038204fd8f6ff22082dd18e4b12ed252b75a5e4Daniel Dunbar "gcc preprocessor", TC) {} 134b488c1dac8e53206f07103d794a62a3f5012c0f4Daniel Dunbar 135651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines bool hasGoodDiagnostics() const override { return true; } 136651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines bool hasIntegratedCPP() const override { return false; } 13747ac7d27c44bd64a7d0fc03d4babc196cf2b8230Daniel Dunbar 138651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines void RenderExtraToolArgs(const JobAction &JA, 139651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines llvm::opt::ArgStringList &CmdArgs) const override; 1409c073ff462eb75ccbb1c4446e21c148f3fc618e1Daniel Dunbar }; 1419c073ff462eb75ccbb1c4446e21c148f3fc618e1Daniel Dunbar 14292dd1915842410005c68d32c43bb3b3cf5a4a702Duncan Sands class LLVM_LIBRARY_VISIBILITY Compile : public Common { 1439c073ff462eb75ccbb1c4446e21c148f3fc618e1Daniel Dunbar public: 1443038204fd8f6ff22082dd18e4b12ed252b75a5e4Daniel Dunbar Compile(const ToolChain &TC) : Common("gcc::Compile", 1453038204fd8f6ff22082dd18e4b12ed252b75a5e4Daniel Dunbar "gcc frontend", TC) {} 1469c073ff462eb75ccbb1c4446e21c148f3fc618e1Daniel Dunbar 147651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines bool hasGoodDiagnostics() const override { return true; } 148651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines bool hasIntegratedCPP() const override { return true; } 14947ac7d27c44bd64a7d0fc03d4babc196cf2b8230Daniel Dunbar 150651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines void RenderExtraToolArgs(const JobAction &JA, 151651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines llvm::opt::ArgStringList &CmdArgs) const override; 1529c073ff462eb75ccbb1c4446e21c148f3fc618e1Daniel Dunbar }; 1539c073ff462eb75ccbb1c4446e21c148f3fc618e1Daniel Dunbar 15492dd1915842410005c68d32c43bb3b3cf5a4a702Duncan Sands class LLVM_LIBRARY_VISIBILITY Link : public Common { 1559c073ff462eb75ccbb1c4446e21c148f3fc618e1Daniel Dunbar public: 1563038204fd8f6ff22082dd18e4b12ed252b75a5e4Daniel Dunbar Link(const ToolChain &TC) : Common("gcc::Link", 1573038204fd8f6ff22082dd18e4b12ed252b75a5e4Daniel Dunbar "linker (via gcc)", TC) {} 1589c073ff462eb75ccbb1c4446e21c148f3fc618e1Daniel Dunbar 159651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines bool hasIntegratedCPP() const override { return false; } 160651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines bool isLinkJob() const override { return true; } 16147ac7d27c44bd64a7d0fc03d4babc196cf2b8230Daniel Dunbar 162651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines void RenderExtraToolArgs(const JobAction &JA, 163651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines llvm::opt::ArgStringList &CmdArgs) const override; 1649c073ff462eb75ccbb1c4446e21c148f3fc618e1Daniel Dunbar }; 16531b1e5437e7435879fc044afb77ff27096008e72Daniel Dunbar} // end namespace gcc 1669c073ff462eb75ccbb1c4446e21c148f3fc618e1Daniel Dunbar 1679631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicumnamespace hexagon { 1689631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum // For Hexagon, we do not need to instantiate tools for PreProcess, PreCompile and Compile. 1699631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum // We simply use "clang -cc1" for those actions. 1709631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum class LLVM_LIBRARY_VISIBILITY Assemble : public Tool { 1719631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum public: 1729631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum Assemble(const ToolChain &TC) : Tool("hexagon::Assemble", 1739631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum "hexagon-as", TC) {} 1749631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum 175651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines bool hasIntegratedCPP() const override { return false; } 1769631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum 177651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines void RenderExtraToolArgs(const JobAction &JA, 178651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines llvm::opt::ArgStringList &CmdArgs) const; 179651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines void ConstructJob(Compilation &C, const JobAction &JA, 180651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines const InputInfo &Output, const InputInfoList &Inputs, 181651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines const llvm::opt::ArgList &TCArgs, 182651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines const char *LinkingOutput) const override; 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 190651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines bool hasIntegratedCPP() const override { return false; } 191651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines bool isLinkJob() const override { return true; } 1929631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum 1939631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum virtual void RenderExtraToolArgs(const JobAction &JA, 194dd0b3c4c72464af92e2c27dd5a67e29f91ba7b28Reid Kleckner llvm::opt::ArgStringList &CmdArgs) const; 195651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines void ConstructJob(Compilation &C, const JobAction &JA, 196651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines const InputInfo &Output, const InputInfoList &Inputs, 197651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines const llvm::opt::ArgList &TCArgs, 198651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines const char *LinkingOutput) const override; 1999631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum }; 2009631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum} // end namespace hexagon. 2019631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum 202651f13cea278ec967336033dd032faef0e9fc2ecStephen Hinesnamespace arm { 203651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines StringRef getARMTargetCPU(const llvm::opt::ArgList &Args, 204651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines const llvm::Triple &Triple); 205651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines const char* getARMCPUForMArch(const llvm::opt::ArgList &Args, 206651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines const llvm::Triple &Triple); 207651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines const char* getLLVMArchSuffixForARM(StringRef CPU); 208651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines} 209651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines 210651f13cea278ec967336033dd032faef0e9fc2ecStephen Hinesnamespace mips { 211651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines bool hasMipsAbiArg(const llvm::opt::ArgList &Args, const char *Value); 212651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines} 2139631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum 214ff7488dc9a766f94daf54d81b03ab9160d0bfd88Daniel Dunbarnamespace darwin { 215651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines llvm::Triple::ArchType getArchTypeForMachOArchName(StringRef Str); 216651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines void setTripleTypeForMachOArchName(llvm::Triple &T, StringRef Str); 217cfed8283c3aeb03ddd837411467d19e250068d39Rafael Espindola 218651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines class LLVM_LIBRARY_VISIBILITY MachOTool : public Tool { 21999ba9e3bd70671f3441fb974895f226a83ce0e66David Blaikie virtual void anchor(); 220fbefe6bd6f62a3361813498dc672ab0d6c0d4fd1Daniel Dunbar protected: 221651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines void AddMachOArch(const llvm::opt::ArgList &Args, 222dd0b3c4c72464af92e2c27dd5a67e29f91ba7b28Reid Kleckner llvm::opt::ArgStringList &CmdArgs) const; 223fbefe6bd6f62a3361813498dc672ab0d6c0d4fd1Daniel Dunbar 224651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines const toolchains::MachO &getMachOToolChain() const { 225651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines return reinterpret_cast<const toolchains::MachO&>(getToolChain()); 226fbefe6bd6f62a3361813498dc672ab0d6c0d4fd1Daniel Dunbar } 227fbefe6bd6f62a3361813498dc672ab0d6c0d4fd1Daniel Dunbar 228fbefe6bd6f62a3361813498dc672ab0d6c0d4fd1Daniel Dunbar public: 229651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines MachOTool(const char *Name, const char *ShortName, 2303038204fd8f6ff22082dd18e4b12ed252b75a5e4Daniel Dunbar const ToolChain &TC) : Tool(Name, ShortName, TC) {} 231fbefe6bd6f62a3361813498dc672ab0d6c0d4fd1Daniel Dunbar }; 232fbefe6bd6f62a3361813498dc672ab0d6c0d4fd1Daniel Dunbar 233651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines class LLVM_LIBRARY_VISIBILITY Assemble : public MachOTool { 2348cac5f7e1ce63dd77ee0fb4ef68f9fa804f41ea6Daniel Dunbar public: 235651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines Assemble(const ToolChain &TC) : MachOTool("darwin::Assemble", 236651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines "assembler", TC) {} 2378cac5f7e1ce63dd77ee0fb4ef68f9fa804f41ea6Daniel Dunbar 238651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines bool hasIntegratedCPP() const override { return false; } 2398cac5f7e1ce63dd77ee0fb4ef68f9fa804f41ea6Daniel Dunbar 240651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines void ConstructJob(Compilation &C, const JobAction &JA, 241651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines const InputInfo &Output, const InputInfoList &Inputs, 242651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines const llvm::opt::ArgList &TCArgs, 243651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines const char *LinkingOutput) const override; 24402633b541b04ad5ffc1c70f4c2feeeb13e607057Daniel Dunbar }; 24502633b541b04ad5ffc1c70f4c2feeeb13e607057Daniel Dunbar 246651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines class LLVM_LIBRARY_VISIBILITY Link : public MachOTool { 2476acf8b4f9418be93a24b493c2f8a7d32c203002dBill Wendling bool NeedsTempPath(const InputInfoList &Inputs) const; 248dd0b3c4c72464af92e2c27dd5a67e29f91ba7b28Reid Kleckner void AddLinkArgs(Compilation &C, const llvm::opt::ArgList &Args, 249dd0b3c4c72464af92e2c27dd5a67e29f91ba7b28Reid Kleckner llvm::opt::ArgStringList &CmdArgs, 250dd0b3c4c72464af92e2c27dd5a67e29f91ba7b28Reid Kleckner const InputInfoList &Inputs) const; 25102633b541b04ad5ffc1c70f4c2feeeb13e607057Daniel Dunbar 25202633b541b04ad5ffc1c70f4c2feeeb13e607057Daniel Dunbar public: 253651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines Link(const ToolChain &TC) : MachOTool("darwin::Link", "linker", TC) {} 25402633b541b04ad5ffc1c70f4c2feeeb13e607057Daniel Dunbar 255651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines bool hasIntegratedCPP() const override { return false; } 256651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines bool isLinkJob() const override { return true; } 25702633b541b04ad5ffc1c70f4c2feeeb13e607057Daniel Dunbar 258651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines void ConstructJob(Compilation &C, const JobAction &JA, 259651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines const InputInfo &Output, const InputInfoList &Inputs, 260651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines const llvm::opt::ArgList &TCArgs, 261651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines const char *LinkingOutput) const override; 2628cac5f7e1ce63dd77ee0fb4ef68f9fa804f41ea6Daniel Dunbar }; 2638cac5f7e1ce63dd77ee0fb4ef68f9fa804f41ea6Daniel Dunbar 264651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines class LLVM_LIBRARY_VISIBILITY Lipo : public MachOTool { 265ff7488dc9a766f94daf54d81b03ab9160d0bfd88Daniel Dunbar public: 266651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines Lipo(const ToolChain &TC) : MachOTool("darwin::Lipo", "lipo", TC) {} 267ff7488dc9a766f94daf54d81b03ab9160d0bfd88Daniel Dunbar 268651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines bool hasIntegratedCPP() const override { return false; } 269ff7488dc9a766f94daf54d81b03ab9160d0bfd88Daniel Dunbar 270651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines void ConstructJob(Compilation &C, const JobAction &JA, 271651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines const InputInfo &Output, const InputInfoList &Inputs, 272651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines const llvm::opt::ArgList &TCArgs, 273651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines const char *LinkingOutput) const override; 2746e0f25483b1a801cd1155ea89c2b725feab16332Daniel Dunbar }; 2756e0f25483b1a801cd1155ea89c2b725feab16332Daniel Dunbar 276651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines class LLVM_LIBRARY_VISIBILITY Dsymutil : public MachOTool { 2776e0f25483b1a801cd1155ea89c2b725feab16332Daniel Dunbar public: 278651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines Dsymutil(const ToolChain &TC) : MachOTool("darwin::Dsymutil", 279651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines "dsymutil", TC) {} 2806e0f25483b1a801cd1155ea89c2b725feab16332Daniel Dunbar 281651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines bool hasIntegratedCPP() const override { return false; } 282651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines bool isDsymutilJob() const override { return true; } 2836e0f25483b1a801cd1155ea89c2b725feab16332Daniel Dunbar 284651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines void ConstructJob(Compilation &C, const JobAction &JA, 285651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines const InputInfo &Output, 286651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines const InputInfoList &Inputs, 287651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines const llvm::opt::ArgList &TCArgs, 288651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines const char *LinkingOutput) const override; 289f7b8eec37c8c8012fa525c71fb29a58c9f29beefDaniel Dunbar }; 290f857186fd1995b34185d063a29b11ad4f948519fEric Christopher 291651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines class LLVM_LIBRARY_VISIBILITY VerifyDebug : public MachOTool { 292f857186fd1995b34185d063a29b11ad4f948519fEric Christopher public: 293651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines VerifyDebug(const ToolChain &TC) : MachOTool("darwin::VerifyDebug", 294651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines "dwarfdump", TC) {} 295f857186fd1995b34185d063a29b11ad4f948519fEric Christopher 296651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines bool hasIntegratedCPP() const override { return false; } 297f857186fd1995b34185d063a29b11ad4f948519fEric Christopher 298651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines void ConstructJob(Compilation &C, const JobAction &JA, 299651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines const InputInfo &Output, const InputInfoList &Inputs, 300651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines const llvm::opt::ArgList &TCArgs, 301651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines const char *LinkingOutput) const override; 302f857186fd1995b34185d063a29b11ad4f948519fEric Christopher }; 303f857186fd1995b34185d063a29b11ad4f948519fEric Christopher 304f7b8eec37c8c8012fa525c71fb29a58c9f29beefDaniel Dunbar} 305f7b8eec37c8c8012fa525c71fb29a58c9f29beefDaniel Dunbar 306f7b8eec37c8c8012fa525c71fb29a58c9f29beefDaniel Dunbar /// openbsd -- Directly call GNU Binutils assembler and linker 307f7b8eec37c8c8012fa525c71fb29a58c9f29beefDaniel Dunbarnamespace openbsd { 30892dd1915842410005c68d32c43bb3b3cf5a4a702Duncan Sands class LLVM_LIBRARY_VISIBILITY Assemble : public Tool { 309f7b8eec37c8c8012fa525c71fb29a58c9f29beefDaniel Dunbar public: 3103038204fd8f6ff22082dd18e4b12ed252b75a5e4Daniel Dunbar Assemble(const ToolChain &TC) : Tool("openbsd::Assemble", "assembler", 3113038204fd8f6ff22082dd18e4b12ed252b75a5e4Daniel Dunbar TC) {} 312f7b8eec37c8c8012fa525c71fb29a58c9f29beefDaniel Dunbar 313651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines bool hasIntegratedCPP() const override { return false; } 314f7b8eec37c8c8012fa525c71fb29a58c9f29beefDaniel Dunbar 315651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines void ConstructJob(Compilation &C, const JobAction &JA, 316651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines const InputInfo &Output, 317651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines const InputInfoList &Inputs, 318651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines const llvm::opt::ArgList &TCArgs, 319651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines const char *LinkingOutput) const override; 320f7b8eec37c8c8012fa525c71fb29a58c9f29beefDaniel Dunbar }; 32192dd1915842410005c68d32c43bb3b3cf5a4a702Duncan Sands class LLVM_LIBRARY_VISIBILITY Link : public Tool { 322f7b8eec37c8c8012fa525c71fb29a58c9f29beefDaniel Dunbar public: 3233038204fd8f6ff22082dd18e4b12ed252b75a5e4Daniel Dunbar Link(const ToolChain &TC) : Tool("openbsd::Link", "linker", TC) {} 324f7b8eec37c8c8012fa525c71fb29a58c9f29beefDaniel Dunbar 325651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines bool hasIntegratedCPP() const override { return false; } 326651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines bool isLinkJob() const override { return true; } 327f7b8eec37c8c8012fa525c71fb29a58c9f29beefDaniel Dunbar 328651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines void ConstructJob(Compilation &C, const JobAction &JA, 329651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines const InputInfo &Output, const InputInfoList &Inputs, 330651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines const llvm::opt::ArgList &TCArgs, 331651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines const char *LinkingOutput) const override; 332ff7488dc9a766f94daf54d81b03ab9160d0bfd88Daniel Dunbar }; 333e7925a075f110ab21afeae084670a155dea568e3Edward O'Callaghan} // end namespace openbsd 334ff7488dc9a766f94daf54d81b03ab9160d0bfd88Daniel Dunbar 33542f74f21ece01dc8573d5377859d327fbb23b26cEli Friedman /// bitrig -- Directly call GNU Binutils assembler and linker 33642f74f21ece01dc8573d5377859d327fbb23b26cEli Friedmannamespace bitrig { 33742f74f21ece01dc8573d5377859d327fbb23b26cEli Friedman class LLVM_LIBRARY_VISIBILITY Assemble : public Tool { 33842f74f21ece01dc8573d5377859d327fbb23b26cEli Friedman public: 33942f74f21ece01dc8573d5377859d327fbb23b26cEli Friedman Assemble(const ToolChain &TC) : Tool("bitrig::Assemble", "assembler", 34042f74f21ece01dc8573d5377859d327fbb23b26cEli Friedman TC) {} 34142f74f21ece01dc8573d5377859d327fbb23b26cEli Friedman 342651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines bool hasIntegratedCPP() const override { return false; } 34342f74f21ece01dc8573d5377859d327fbb23b26cEli Friedman 344651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines void ConstructJob(Compilation &C, const JobAction &JA, 345651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines const InputInfo &Output, const InputInfoList &Inputs, 346651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines const llvm::opt::ArgList &TCArgs, 347651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines const char *LinkingOutput) const override; 34842f74f21ece01dc8573d5377859d327fbb23b26cEli Friedman }; 34942f74f21ece01dc8573d5377859d327fbb23b26cEli Friedman class LLVM_LIBRARY_VISIBILITY Link : public Tool { 35042f74f21ece01dc8573d5377859d327fbb23b26cEli Friedman public: 35142f74f21ece01dc8573d5377859d327fbb23b26cEli Friedman Link(const ToolChain &TC) : Tool("bitrig::Link", "linker", TC) {} 35242f74f21ece01dc8573d5377859d327fbb23b26cEli Friedman 353651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines bool hasIntegratedCPP() const override { return false; } 354651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines bool isLinkJob() const override { return true; } 35542f74f21ece01dc8573d5377859d327fbb23b26cEli Friedman 356651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines void ConstructJob(Compilation &C, const JobAction &JA, 357651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines const InputInfo &Output, const InputInfoList &Inputs, 358651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines const llvm::opt::ArgList &TCArgs, 359651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines const char *LinkingOutput) const override; 36042f74f21ece01dc8573d5377859d327fbb23b26cEli Friedman }; 36142f74f21ece01dc8573d5377859d327fbb23b26cEli Friedman} // end namespace bitrig 36242f74f21ece01dc8573d5377859d327fbb23b26cEli Friedman 36368a31d406c6dc4382c700d1199b062de2aa7e1daDaniel Dunbar /// freebsd -- Directly call GNU Binutils assembler and linker 36468a31d406c6dc4382c700d1199b062de2aa7e1daDaniel Dunbarnamespace freebsd { 36592dd1915842410005c68d32c43bb3b3cf5a4a702Duncan Sands class LLVM_LIBRARY_VISIBILITY Assemble : public Tool { 36668a31d406c6dc4382c700d1199b062de2aa7e1daDaniel Dunbar public: 3673038204fd8f6ff22082dd18e4b12ed252b75a5e4Daniel Dunbar Assemble(const ToolChain &TC) : Tool("freebsd::Assemble", "assembler", 3683038204fd8f6ff22082dd18e4b12ed252b75a5e4Daniel Dunbar TC) {} 36968a31d406c6dc4382c700d1199b062de2aa7e1daDaniel Dunbar 370651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines bool hasIntegratedCPP() const override { return false; } 37168a31d406c6dc4382c700d1199b062de2aa7e1daDaniel Dunbar 372651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines void ConstructJob(Compilation &C, const JobAction &JA, 373651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines const InputInfo &Output, const InputInfoList &Inputs, 374651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines const llvm::opt::ArgList &TCArgs, 375651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines const char *LinkingOutput) const override; 37668a31d406c6dc4382c700d1199b062de2aa7e1daDaniel Dunbar }; 37792dd1915842410005c68d32c43bb3b3cf5a4a702Duncan Sands class LLVM_LIBRARY_VISIBILITY Link : public Tool { 378008f54a54299eaafdaa940e2bdeaf55935ecd95aDaniel Dunbar public: 3793038204fd8f6ff22082dd18e4b12ed252b75a5e4Daniel Dunbar Link(const ToolChain &TC) : Tool("freebsd::Link", "linker", TC) {} 380008f54a54299eaafdaa940e2bdeaf55935ecd95aDaniel Dunbar 381651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines bool hasIntegratedCPP() const override { return false; } 382651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines bool isLinkJob() const override { return true; } 383008f54a54299eaafdaa940e2bdeaf55935ecd95aDaniel Dunbar 384651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines void ConstructJob(Compilation &C, const JobAction &JA, 385651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines const InputInfo &Output, const InputInfoList &Inputs, 386651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines const llvm::opt::ArgList &TCArgs, 387651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines const char *LinkingOutput) const override; 388008f54a54299eaafdaa940e2bdeaf55935ecd95aDaniel Dunbar }; 389e7925a075f110ab21afeae084670a155dea568e3Edward O'Callaghan} // end namespace freebsd 390e7925a075f110ab21afeae084670a155dea568e3Edward O'Callaghan 3918e50a96b387dca7525caa8a6add31420dd82a2cdBenjamin Kramer /// netbsd -- Directly call GNU Binutils assembler and linker 3928e50a96b387dca7525caa8a6add31420dd82a2cdBenjamin Kramernamespace netbsd { 3938e50a96b387dca7525caa8a6add31420dd82a2cdBenjamin Kramer class LLVM_LIBRARY_VISIBILITY Assemble : public Tool { 394182564cd14a2105fff05fd52f5940eff96161d57Joerg Sonnenberger 3958e50a96b387dca7525caa8a6add31420dd82a2cdBenjamin Kramer public: 3961bd91374498ac78e72545f08f4daa6491f9c9d14Joerg Sonnenberger Assemble(const ToolChain &TC) 3971bd91374498ac78e72545f08f4daa6491f9c9d14Joerg Sonnenberger : Tool("netbsd::Assemble", "assembler", TC) {} 3988e50a96b387dca7525caa8a6add31420dd82a2cdBenjamin Kramer 399651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines bool hasIntegratedCPP() const override { return false; } 4008e50a96b387dca7525caa8a6add31420dd82a2cdBenjamin Kramer 401651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines void ConstructJob(Compilation &C, const JobAction &JA, 402651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines const InputInfo &Output, const InputInfoList &Inputs, 403651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines const llvm::opt::ArgList &TCArgs, 404651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines const char *LinkingOutput) const override; 4058e50a96b387dca7525caa8a6add31420dd82a2cdBenjamin Kramer }; 4068e50a96b387dca7525caa8a6add31420dd82a2cdBenjamin Kramer class LLVM_LIBRARY_VISIBILITY Link : public Tool { 407182564cd14a2105fff05fd52f5940eff96161d57Joerg Sonnenberger 4088e50a96b387dca7525caa8a6add31420dd82a2cdBenjamin Kramer public: 4091bd91374498ac78e72545f08f4daa6491f9c9d14Joerg Sonnenberger Link(const ToolChain &TC) 4101bd91374498ac78e72545f08f4daa6491f9c9d14Joerg Sonnenberger : Tool("netbsd::Link", "linker", TC) {} 4118e50a96b387dca7525caa8a6add31420dd82a2cdBenjamin Kramer 412651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines bool hasIntegratedCPP() const override { return false; } 413651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines bool isLinkJob() const override { return true; } 4148e50a96b387dca7525caa8a6add31420dd82a2cdBenjamin Kramer 415651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines void ConstructJob(Compilation &C, const JobAction &JA, 416651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines const InputInfo &Output, const InputInfoList &Inputs, 417651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines const llvm::opt::ArgList &TCArgs, 418651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines const char *LinkingOutput) const override; 4198e50a96b387dca7525caa8a6add31420dd82a2cdBenjamin Kramer }; 4208e50a96b387dca7525caa8a6add31420dd82a2cdBenjamin Kramer} // end namespace netbsd 4218e50a96b387dca7525caa8a6add31420dd82a2cdBenjamin Kramer 422577bb0a2335295958b3b0f88bc9cdedf6551c17fThomas Schwinge /// Directly call GNU Binutils' assembler and linker. 423577bb0a2335295958b3b0f88bc9cdedf6551c17fThomas Schwingenamespace gnutools { 424ba30bbe4e36a30a274da809a11a42f9cdc168e92Rafael Espindola class LLVM_LIBRARY_VISIBILITY Assemble : public Tool { 425ba30bbe4e36a30a274da809a11a42f9cdc168e92Rafael Espindola public: 426577bb0a2335295958b3b0f88bc9cdedf6551c17fThomas Schwinge Assemble(const ToolChain &TC) : Tool("GNU::Assemble", "assembler", TC) {} 427ba30bbe4e36a30a274da809a11a42f9cdc168e92Rafael Espindola 428651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines bool hasIntegratedCPP() const override { return false; } 429ba30bbe4e36a30a274da809a11a42f9cdc168e92Rafael Espindola 430651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines void ConstructJob(Compilation &C, const JobAction &JA, 431651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines const InputInfo &Output, 432651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines const InputInfoList &Inputs, 433651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines const llvm::opt::ArgList &TCArgs, 434651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines const char *LinkingOutput) const override; 435ba30bbe4e36a30a274da809a11a42f9cdc168e92Rafael Espindola }; 436c1da981bba867681004004b2d54ec2fdf3c08913Rafael Espindola class LLVM_LIBRARY_VISIBILITY Link : public Tool { 437c1da981bba867681004004b2d54ec2fdf3c08913Rafael Espindola public: 438577bb0a2335295958b3b0f88bc9cdedf6551c17fThomas Schwinge Link(const ToolChain &TC) : Tool("GNU::Link", "linker", TC) {} 439c1da981bba867681004004b2d54ec2fdf3c08913Rafael Espindola 440651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines bool hasIntegratedCPP() const override { return false; } 441651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines bool isLinkJob() const override { return true; } 442c1da981bba867681004004b2d54ec2fdf3c08913Rafael Espindola 443651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines void ConstructJob(Compilation &C, const JobAction &JA, 444651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines const InputInfo &Output, 445651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines const InputInfoList &Inputs, 446651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines const llvm::opt::ArgList &TCArgs, 447651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines const char *LinkingOutput) const override; 448c1da981bba867681004004b2d54ec2fdf3c08913Rafael Espindola }; 449ba30bbe4e36a30a274da809a11a42f9cdc168e92Rafael Espindola} 45038e317d6dce161b249508686cc67eb7176958762Chris Lattner /// minix -- Directly call GNU Binutils assembler and linker 45138e317d6dce161b249508686cc67eb7176958762Chris Lattnernamespace minix { 45238e317d6dce161b249508686cc67eb7176958762Chris Lattner class LLVM_LIBRARY_VISIBILITY Assemble : public Tool { 45338e317d6dce161b249508686cc67eb7176958762Chris Lattner public: 45438e317d6dce161b249508686cc67eb7176958762Chris Lattner Assemble(const ToolChain &TC) : Tool("minix::Assemble", "assembler", 45538e317d6dce161b249508686cc67eb7176958762Chris Lattner TC) {} 45638e317d6dce161b249508686cc67eb7176958762Chris Lattner 457651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines bool hasIntegratedCPP() const override { return false; } 45838e317d6dce161b249508686cc67eb7176958762Chris Lattner 459651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines void ConstructJob(Compilation &C, const JobAction &JA, 460651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines const InputInfo &Output, 461651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines const InputInfoList &Inputs, 462651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines const llvm::opt::ArgList &TCArgs, 463651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines const char *LinkingOutput) const override; 46438e317d6dce161b249508686cc67eb7176958762Chris Lattner }; 46538e317d6dce161b249508686cc67eb7176958762Chris Lattner class LLVM_LIBRARY_VISIBILITY Link : public Tool { 46638e317d6dce161b249508686cc67eb7176958762Chris Lattner public: 46738e317d6dce161b249508686cc67eb7176958762Chris Lattner Link(const ToolChain &TC) : Tool("minix::Link", "linker", TC) {} 46838e317d6dce161b249508686cc67eb7176958762Chris Lattner 469651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines bool hasIntegratedCPP() const override { return false; } 470651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines bool isLinkJob() const override { return true; } 47138e317d6dce161b249508686cc67eb7176958762Chris Lattner 472651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines void ConstructJob(Compilation &C, const JobAction &JA, 473651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines const InputInfo &Output, 474651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines const InputInfoList &Inputs, 475651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines const llvm::opt::ArgList &TCArgs, 476651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines const char *LinkingOutput) const override; 47738e317d6dce161b249508686cc67eb7176958762Chris Lattner }; 47838e317d6dce161b249508686cc67eb7176958762Chris Lattner} // end namespace minix 47938e317d6dce161b249508686cc67eb7176958762Chris Lattner 48031c4690047f5f362ecf886f1586844b1aef0c4d2David Chisnall /// solaris -- Directly call Solaris assembler and linker 48131c4690047f5f362ecf886f1586844b1aef0c4d2David Chisnallnamespace solaris { 48231c4690047f5f362ecf886f1586844b1aef0c4d2David Chisnall class LLVM_LIBRARY_VISIBILITY Assemble : public Tool { 48331c4690047f5f362ecf886f1586844b1aef0c4d2David Chisnall public: 48431c4690047f5f362ecf886f1586844b1aef0c4d2David Chisnall Assemble(const ToolChain &TC) : Tool("solaris::Assemble", "assembler", 48531c4690047f5f362ecf886f1586844b1aef0c4d2David Chisnall TC) {} 48631c4690047f5f362ecf886f1586844b1aef0c4d2David Chisnall 487651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines bool hasIntegratedCPP() const override { return false; } 48831c4690047f5f362ecf886f1586844b1aef0c4d2David Chisnall 489651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines void ConstructJob(Compilation &C, const JobAction &JA, 490651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines const InputInfo &Output, const InputInfoList &Inputs, 491651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines const llvm::opt::ArgList &TCArgs, 492651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines const char *LinkingOutput) const override; 49331c4690047f5f362ecf886f1586844b1aef0c4d2David Chisnall }; 49431c4690047f5f362ecf886f1586844b1aef0c4d2David Chisnall class LLVM_LIBRARY_VISIBILITY Link : public Tool { 49531c4690047f5f362ecf886f1586844b1aef0c4d2David Chisnall public: 49631c4690047f5f362ecf886f1586844b1aef0c4d2David Chisnall Link(const ToolChain &TC) : Tool("solaris::Link", "linker", TC) {} 49731c4690047f5f362ecf886f1586844b1aef0c4d2David Chisnall 498651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines bool hasIntegratedCPP() const override { return false; } 499651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines bool isLinkJob() const override { return true; } 50031c4690047f5f362ecf886f1586844b1aef0c4d2David Chisnall 501651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines void ConstructJob(Compilation &C, const JobAction &JA, 502651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines const InputInfo &Output, const InputInfoList &Inputs, 503651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines const llvm::opt::ArgList &TCArgs, 504651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines const char *LinkingOutput) const override; 50531c4690047f5f362ecf886f1586844b1aef0c4d2David Chisnall }; 506badb6cd2007825308208e6c4275ba54e220e4e28David Chisnall} // end namespace solaris 50731c4690047f5f362ecf886f1586844b1aef0c4d2David Chisnall 508e7925a075f110ab21afeae084670a155dea568e3Edward O'Callaghan /// auroraux -- Directly call GNU Binutils assembler and linker 509e7925a075f110ab21afeae084670a155dea568e3Edward O'Callaghannamespace auroraux { 51092dd1915842410005c68d32c43bb3b3cf5a4a702Duncan Sands class LLVM_LIBRARY_VISIBILITY Assemble : public Tool { 511e7925a075f110ab21afeae084670a155dea568e3Edward O'Callaghan public: 5123038204fd8f6ff22082dd18e4b12ed252b75a5e4Daniel Dunbar Assemble(const ToolChain &TC) : Tool("auroraux::Assemble", "assembler", 5133038204fd8f6ff22082dd18e4b12ed252b75a5e4Daniel Dunbar TC) {} 514e7925a075f110ab21afeae084670a155dea568e3Edward O'Callaghan 515651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines bool hasIntegratedCPP() const override { return false; } 516e7925a075f110ab21afeae084670a155dea568e3Edward O'Callaghan 517651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines void ConstructJob(Compilation &C, const JobAction &JA, 518651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines const InputInfo &Output, const InputInfoList &Inputs, 519651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines const llvm::opt::ArgList &TCArgs, 520651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines const char *LinkingOutput) const override; 521e7925a075f110ab21afeae084670a155dea568e3Edward O'Callaghan }; 52292dd1915842410005c68d32c43bb3b3cf5a4a702Duncan Sands class LLVM_LIBRARY_VISIBILITY Link : public Tool { 523e7925a075f110ab21afeae084670a155dea568e3Edward O'Callaghan public: 5243038204fd8f6ff22082dd18e4b12ed252b75a5e4Daniel Dunbar Link(const ToolChain &TC) : Tool("auroraux::Link", "linker", TC) {} 525e7925a075f110ab21afeae084670a155dea568e3Edward O'Callaghan 526651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines bool hasIntegratedCPP() const override { return false; } 527651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines bool isLinkJob() const override { return true; } 528e7925a075f110ab21afeae084670a155dea568e3Edward O'Callaghan 529651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines void ConstructJob(Compilation &C, const JobAction &JA, 530651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines const InputInfo &Output, const InputInfoList &Inputs, 531651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines const llvm::opt::ArgList &TCArgs, 532651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines const char *LinkingOutput) const override; 533e7925a075f110ab21afeae084670a155dea568e3Edward O'Callaghan }; 534e7925a075f110ab21afeae084670a155dea568e3Edward O'Callaghan} // end namespace auroraux 53568a31d406c6dc4382c700d1199b062de2aa7e1daDaniel Dunbar 53611e1b40d759a643086f590f6ffbd9d68360bad46Daniel Dunbar /// dragonfly -- Directly call GNU Binutils assembler and linker 53711e1b40d759a643086f590f6ffbd9d68360bad46Daniel Dunbarnamespace dragonfly { 53892dd1915842410005c68d32c43bb3b3cf5a4a702Duncan Sands class LLVM_LIBRARY_VISIBILITY Assemble : public Tool { 53911e1b40d759a643086f590f6ffbd9d68360bad46Daniel Dunbar public: 5403038204fd8f6ff22082dd18e4b12ed252b75a5e4Daniel Dunbar Assemble(const ToolChain &TC) : Tool("dragonfly::Assemble", "assembler", 5413038204fd8f6ff22082dd18e4b12ed252b75a5e4Daniel Dunbar TC) {} 54211e1b40d759a643086f590f6ffbd9d68360bad46Daniel Dunbar 543651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines bool hasIntegratedCPP() const override { return false; } 54411e1b40d759a643086f590f6ffbd9d68360bad46Daniel Dunbar 545651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines void ConstructJob(Compilation &C, const JobAction &JA, 546651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines const InputInfo &Output, const InputInfoList &Inputs, 547651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines const llvm::opt::ArgList &TCArgs, 548651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines const char *LinkingOutput) const override; 54911e1b40d759a643086f590f6ffbd9d68360bad46Daniel Dunbar }; 55092dd1915842410005c68d32c43bb3b3cf5a4a702Duncan Sands class LLVM_LIBRARY_VISIBILITY Link : public Tool { 55111e1b40d759a643086f590f6ffbd9d68360bad46Daniel Dunbar public: 5523038204fd8f6ff22082dd18e4b12ed252b75a5e4Daniel Dunbar Link(const ToolChain &TC) : Tool("dragonfly::Link", "linker", TC) {} 55311e1b40d759a643086f590f6ffbd9d68360bad46Daniel Dunbar 554651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines bool hasIntegratedCPP() const override { return false; } 555651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines bool isLinkJob() const override { return true; } 55611e1b40d759a643086f590f6ffbd9d68360bad46Daniel Dunbar 557651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines void ConstructJob(Compilation &C, const JobAction &JA, 558651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines const InputInfo &Output, 559651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines const InputInfoList &Inputs, 560651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines const llvm::opt::ArgList &TCArgs, 561651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines const char *LinkingOutput) const override; 56211e1b40d759a643086f590f6ffbd9d68360bad46Daniel Dunbar }; 563e7925a075f110ab21afeae084670a155dea568e3Edward O'Callaghan} // end namespace dragonfly 56411e1b40d759a643086f590f6ffbd9d68360bad46Daniel Dunbar 565ff58e3610f4e12094def69eb2d6dcb4330378d8fMichael J. Spencer /// Visual studio tools. 566ff58e3610f4e12094def69eb2d6dcb4330378d8fMichael J. Spencernamespace visualstudio { 567c8ba0a0acd30f0b56d08a3a0947f68ac01a40730Hans Wennborg class LLVM_LIBRARY_VISIBILITY Link : public Tool { 568ff58e3610f4e12094def69eb2d6dcb4330378d8fMichael J. Spencer public: 569ff58e3610f4e12094def69eb2d6dcb4330378d8fMichael J. Spencer Link(const ToolChain &TC) : Tool("visualstudio::Link", "linker", TC) {} 570ff58e3610f4e12094def69eb2d6dcb4330378d8fMichael J. Spencer 571651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines bool hasIntegratedCPP() const override { return false; } 572651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines bool isLinkJob() const override { return true; } 573ff58e3610f4e12094def69eb2d6dcb4330378d8fMichael J. Spencer 574651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines void ConstructJob(Compilation &C, const JobAction &JA, 575651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines const InputInfo &Output, const InputInfoList &Inputs, 576651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines const llvm::opt::ArgList &TCArgs, 577651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines const char *LinkingOutput) const override; 578ff58e3610f4e12094def69eb2d6dcb4330378d8fMichael J. Spencer }; 579c8ba0a0acd30f0b56d08a3a0947f68ac01a40730Hans Wennborg 580c8ba0a0acd30f0b56d08a3a0947f68ac01a40730Hans Wennborg class LLVM_LIBRARY_VISIBILITY Compile : public Tool { 581c8ba0a0acd30f0b56d08a3a0947f68ac01a40730Hans Wennborg public: 582c8ba0a0acd30f0b56d08a3a0947f68ac01a40730Hans Wennborg Compile(const ToolChain &TC) : Tool("visualstudio::Compile", "compiler", TC) {} 583c8ba0a0acd30f0b56d08a3a0947f68ac01a40730Hans Wennborg 584651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines bool hasIntegratedAssembler() const override { return true; } 585651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines bool hasIntegratedCPP() const override { return true; } 586651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines bool isLinkJob() const override { return false; } 587c8ba0a0acd30f0b56d08a3a0947f68ac01a40730Hans Wennborg 588651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines void ConstructJob(Compilation &C, const JobAction &JA, 589651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines const InputInfo &Output, const InputInfoList &Inputs, 590651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines const llvm::opt::ArgList &TCArgs, 591651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines const char *LinkingOutput) const override; 592c8ba0a0acd30f0b56d08a3a0947f68ac01a40730Hans Wennborg 593c8ba0a0acd30f0b56d08a3a0947f68ac01a40730Hans Wennborg Command *GetCommand(Compilation &C, const JobAction &JA, 594c8ba0a0acd30f0b56d08a3a0947f68ac01a40730Hans Wennborg const InputInfo &Output, 595c8ba0a0acd30f0b56d08a3a0947f68ac01a40730Hans Wennborg const InputInfoList &Inputs, 596c8ba0a0acd30f0b56d08a3a0947f68ac01a40730Hans Wennborg const llvm::opt::ArgList &TCArgs, 597c8ba0a0acd30f0b56d08a3a0947f68ac01a40730Hans Wennborg const char *LinkingOutput) const; 598c8ba0a0acd30f0b56d08a3a0947f68ac01a40730Hans Wennborg }; 599ff58e3610f4e12094def69eb2d6dcb4330378d8fMichael J. Spencer} // end namespace visualstudio 600ff58e3610f4e12094def69eb2d6dcb4330378d8fMichael J. Spencer 601651f13cea278ec967336033dd032faef0e9fc2ecStephen Hinesnamespace arm { 602651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines StringRef getARMFloatABI(const Driver &D, const llvm::opt::ArgList &Args, 603651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines const llvm::Triple &Triple); 604651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines} 6054e490e271ce3f0d4289b5115e000b55333c1b829Robert Lyttonnamespace XCore { 6064e490e271ce3f0d4289b5115e000b55333c1b829Robert Lytton // For XCore, we do not need to instantiate tools for PreProcess, PreCompile and Compile. 6074e490e271ce3f0d4289b5115e000b55333c1b829Robert Lytton // We simply use "clang -cc1" for those actions. 6084e490e271ce3f0d4289b5115e000b55333c1b829Robert Lytton class LLVM_LIBRARY_VISIBILITY Assemble : public Tool { 6094e490e271ce3f0d4289b5115e000b55333c1b829Robert Lytton public: 6104e490e271ce3f0d4289b5115e000b55333c1b829Robert Lytton Assemble(const ToolChain &TC) : Tool("XCore::Assemble", 6114e490e271ce3f0d4289b5115e000b55333c1b829Robert Lytton "XCore-as", TC) {} 6124e490e271ce3f0d4289b5115e000b55333c1b829Robert Lytton 613651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines bool hasIntegratedCPP() const override { return false; } 614651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines void ConstructJob(Compilation &C, const JobAction &JA, 615651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines const InputInfo &Output, const InputInfoList &Inputs, 616651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines const llvm::opt::ArgList &TCArgs, 617651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines const char *LinkingOutput) const override; 6184e490e271ce3f0d4289b5115e000b55333c1b829Robert Lytton }; 6194e490e271ce3f0d4289b5115e000b55333c1b829Robert Lytton 6204e490e271ce3f0d4289b5115e000b55333c1b829Robert Lytton class LLVM_LIBRARY_VISIBILITY Link : public Tool { 6214e490e271ce3f0d4289b5115e000b55333c1b829Robert Lytton public: 6224e490e271ce3f0d4289b5115e000b55333c1b829Robert Lytton Link(const ToolChain &TC) : Tool("XCore::Link", 6234e490e271ce3f0d4289b5115e000b55333c1b829Robert Lytton "XCore-ld", TC) {} 6244e490e271ce3f0d4289b5115e000b55333c1b829Robert Lytton 625651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines bool hasIntegratedCPP() const override { return false; } 626651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines bool isLinkJob() const override { return true; } 627651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines void ConstructJob(Compilation &C, const JobAction &JA, 628651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines const InputInfo &Output, const InputInfoList &Inputs, 629651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines const llvm::opt::ArgList &TCArgs, 630651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines const char *LinkingOutput) const override; 6314e490e271ce3f0d4289b5115e000b55333c1b829Robert Lytton }; 6324e490e271ce3f0d4289b5115e000b55333c1b829Robert Lytton} // end namespace XCore. 6334e490e271ce3f0d4289b5115e000b55333c1b829Robert Lytton 6344e490e271ce3f0d4289b5115e000b55333c1b829Robert Lytton 6359c073ff462eb75ccbb1c4446e21c148f3fc618e1Daniel Dunbar} // end namespace toolchains 6369c073ff462eb75ccbb1c4446e21c148f3fc618e1Daniel Dunbar} // end namespace driver 6379c073ff462eb75ccbb1c4446e21c148f3fc618e1Daniel Dunbar} // end namespace clang 6389c073ff462eb75ccbb1c4446e21c148f3fc618e1Daniel Dunbar 639e7925a075f110ab21afeae084670a155dea568e3Edward O'Callaghan#endif // CLANG_LIB_DRIVER_TOOLS_H_ 640