Tools.h revision 11e1b40d759a643086f590f6ffbd9d68360bad46
19c073ff462eb75ccbb1c4446e21c148f3fc618e1Daniel Dunbar//===--- Tools.h - Tool Implementations -------------------------*- C++ -*-===// 29c073ff462eb75ccbb1c4446e21c148f3fc618e1Daniel Dunbar// 39c073ff462eb75ccbb1c4446e21c148f3fc618e1Daniel Dunbar// The LLVM Compiler Infrastructure 49c073ff462eb75ccbb1c4446e21c148f3fc618e1Daniel Dunbar// 59c073ff462eb75ccbb1c4446e21c148f3fc618e1Daniel Dunbar// This file is distributed under the University of Illinois Open Source 69c073ff462eb75ccbb1c4446e21c148f3fc618e1Daniel Dunbar// License. See LICENSE.TXT for details. 79c073ff462eb75ccbb1c4446e21c148f3fc618e1Daniel Dunbar// 89c073ff462eb75ccbb1c4446e21c148f3fc618e1Daniel Dunbar//===----------------------------------------------------------------------===// 99c073ff462eb75ccbb1c4446e21c148f3fc618e1Daniel Dunbar 109c073ff462eb75ccbb1c4446e21c148f3fc618e1Daniel Dunbar#ifndef CLANG_LIB_DRIVER_TOOLS_H_ 119c073ff462eb75ccbb1c4446e21c148f3fc618e1Daniel Dunbar#define CLANG_LIB_DRIVER_TOOLS_H_ 129c073ff462eb75ccbb1c4446e21c148f3fc618e1Daniel Dunbar 139c073ff462eb75ccbb1c4446e21c148f3fc618e1Daniel Dunbar#include "clang/Driver/Tool.h" 1440f1265ebd42ece3e7f7917319b56012e8e2bce2Daniel Dunbar#include "clang/Driver/Types.h" 15b488c1dac8e53206f07103d794a62a3f5012c0f4Daniel Dunbar#include "clang/Driver/Util.h" 169c073ff462eb75ccbb1c4446e21c148f3fc618e1Daniel Dunbar 179c073ff462eb75ccbb1c4446e21c148f3fc618e1Daniel Dunbar#include "llvm/Support/Compiler.h" 189c073ff462eb75ccbb1c4446e21c148f3fc618e1Daniel Dunbar 199c073ff462eb75ccbb1c4446e21c148f3fc618e1Daniel Dunbarnamespace clang { 209c073ff462eb75ccbb1c4446e21c148f3fc618e1Daniel Dunbarnamespace driver { 21df91ef3d6c55692a0236f67b6c6b134a3bf84098Douglas Gregor class Driver; 22df91ef3d6c55692a0236f67b6c6b134a3bf84098Douglas Gregor 2302633b541b04ad5ffc1c70f4c2feeeb13e607057Daniel Dunbarnamespace toolchains { 2402633b541b04ad5ffc1c70f4c2feeeb13e607057Daniel Dunbar class Darwin_X86; 2502633b541b04ad5ffc1c70f4c2feeeb13e607057Daniel Dunbar} 2602633b541b04ad5ffc1c70f4c2feeeb13e607057Daniel Dunbar 27985b825eea7387be10478de0430815ed6a673326Daniel Dunbarnamespace tools { 289c073ff462eb75ccbb1c4446e21c148f3fc618e1Daniel Dunbar 29985b825eea7387be10478de0430815ed6a673326Daniel Dunbar class VISIBILITY_HIDDEN Clang : public Tool { 30df91ef3d6c55692a0236f67b6c6b134a3bf84098Douglas Gregor void AddPreprocessingOptions(const Driver &D, 31df91ef3d6c55692a0236f67b6c6b134a3bf84098Douglas Gregor const ArgList &Args, 32c21c485b4fb58ef5d55cf3e523263dd824a2ace4Daniel Dunbar ArgStringList &CmdArgs, 33c21c485b4fb58ef5d55cf3e523263dd824a2ace4Daniel Dunbar const InputInfo &Output, 34c21c485b4fb58ef5d55cf3e523263dd824a2ace4Daniel Dunbar const InputInfoList &Inputs) const; 35c21c485b4fb58ef5d55cf3e523263dd824a2ace4Daniel Dunbar 369c073ff462eb75ccbb1c4446e21c148f3fc618e1Daniel Dunbar public: 3731b1e5437e7435879fc044afb77ff27096008e72Daniel Dunbar Clang(const ToolChain &TC) : Tool("clang", TC) {} 389c073ff462eb75ccbb1c4446e21c148f3fc618e1Daniel Dunbar 399c073ff462eb75ccbb1c4446e21c148f3fc618e1Daniel Dunbar virtual bool acceptsPipedInput() const { return true; } 409c073ff462eb75ccbb1c4446e21c148f3fc618e1Daniel Dunbar virtual bool canPipeOutput() const { return true; } 419c073ff462eb75ccbb1c4446e21c148f3fc618e1Daniel Dunbar virtual bool hasIntegratedCPP() const { return true; } 4247ac7d27c44bd64a7d0fc03d4babc196cf2b8230Daniel Dunbar 4347ac7d27c44bd64a7d0fc03d4babc196cf2b8230Daniel Dunbar virtual void ConstructJob(Compilation &C, const JobAction &JA, 44871adcf4e41285e3f4c3b62eaa1b2e05b60b92daDaniel Dunbar Job &Dest, 4562cf601812e03dd9bc5df42b8ef06a0cdedc38bfDaniel Dunbar const InputInfo &Output, 4662cf601812e03dd9bc5df42b8ef06a0cdedc38bfDaniel Dunbar const InputInfoList &Inputs, 4747ac7d27c44bd64a7d0fc03d4babc196cf2b8230Daniel Dunbar const ArgList &TCArgs, 4847ac7d27c44bd64a7d0fc03d4babc196cf2b8230Daniel Dunbar const char *LinkingOutput) const; 499c073ff462eb75ccbb1c4446e21c148f3fc618e1Daniel Dunbar }; 509c073ff462eb75ccbb1c4446e21c148f3fc618e1Daniel Dunbar 5131b1e5437e7435879fc044afb77ff27096008e72Daniel Dunbar /// gcc - Generic GCC tool implementations. 5231b1e5437e7435879fc044afb77ff27096008e72Daniel Dunbarnamespace gcc { 53b488c1dac8e53206f07103d794a62a3f5012c0f4Daniel Dunbar class VISIBILITY_HIDDEN Common : public Tool { 549c073ff462eb75ccbb1c4446e21c148f3fc618e1Daniel Dunbar public: 55b488c1dac8e53206f07103d794a62a3f5012c0f4Daniel Dunbar Common(const char *Name, const ToolChain &TC) : Tool(Name, TC) {} 5647ac7d27c44bd64a7d0fc03d4babc196cf2b8230Daniel Dunbar 5747ac7d27c44bd64a7d0fc03d4babc196cf2b8230Daniel Dunbar virtual void ConstructJob(Compilation &C, const JobAction &JA, 58871adcf4e41285e3f4c3b62eaa1b2e05b60b92daDaniel Dunbar Job &Dest, 5962cf601812e03dd9bc5df42b8ef06a0cdedc38bfDaniel Dunbar const InputInfo &Output, 6062cf601812e03dd9bc5df42b8ef06a0cdedc38bfDaniel Dunbar const InputInfoList &Inputs, 6147ac7d27c44bd64a7d0fc03d4babc196cf2b8230Daniel Dunbar const ArgList &TCArgs, 6247ac7d27c44bd64a7d0fc03d4babc196cf2b8230Daniel Dunbar const char *LinkingOutput) const; 63b488c1dac8e53206f07103d794a62a3f5012c0f4Daniel Dunbar 64b488c1dac8e53206f07103d794a62a3f5012c0f4Daniel Dunbar /// RenderExtraToolArgs - Render any arguments necessary to force 65b488c1dac8e53206f07103d794a62a3f5012c0f4Daniel Dunbar /// the particular tool mode. 66b488c1dac8e53206f07103d794a62a3f5012c0f4Daniel Dunbar virtual void RenderExtraToolArgs(ArgStringList &CmdArgs) const = 0; 679c073ff462eb75ccbb1c4446e21c148f3fc618e1Daniel Dunbar }; 689c073ff462eb75ccbb1c4446e21c148f3fc618e1Daniel Dunbar 69b488c1dac8e53206f07103d794a62a3f5012c0f4Daniel Dunbar 70b488c1dac8e53206f07103d794a62a3f5012c0f4Daniel Dunbar class VISIBILITY_HIDDEN Preprocess : public Common { 719c073ff462eb75ccbb1c4446e21c148f3fc618e1Daniel Dunbar public: 72b488c1dac8e53206f07103d794a62a3f5012c0f4Daniel Dunbar Preprocess(const ToolChain &TC) : Common("gcc::Preprocess", TC) {} 73b488c1dac8e53206f07103d794a62a3f5012c0f4Daniel Dunbar 74b488c1dac8e53206f07103d794a62a3f5012c0f4Daniel Dunbar virtual bool acceptsPipedInput() const { return true; } 75b488c1dac8e53206f07103d794a62a3f5012c0f4Daniel Dunbar virtual bool canPipeOutput() const { return true; } 76b488c1dac8e53206f07103d794a62a3f5012c0f4Daniel Dunbar virtual bool hasIntegratedCPP() const { return false; } 77b488c1dac8e53206f07103d794a62a3f5012c0f4Daniel Dunbar 78b488c1dac8e53206f07103d794a62a3f5012c0f4Daniel Dunbar virtual void RenderExtraToolArgs(ArgStringList &CmdArgs) const; 79b488c1dac8e53206f07103d794a62a3f5012c0f4Daniel Dunbar }; 80b488c1dac8e53206f07103d794a62a3f5012c0f4Daniel Dunbar 81b488c1dac8e53206f07103d794a62a3f5012c0f4Daniel Dunbar class VISIBILITY_HIDDEN Precompile : public Common { 82b488c1dac8e53206f07103d794a62a3f5012c0f4Daniel Dunbar public: 83b488c1dac8e53206f07103d794a62a3f5012c0f4Daniel Dunbar Precompile(const ToolChain &TC) : Common("gcc::Precompile", TC) {} 849c073ff462eb75ccbb1c4446e21c148f3fc618e1Daniel Dunbar 859c073ff462eb75ccbb1c4446e21c148f3fc618e1Daniel Dunbar virtual bool acceptsPipedInput() const { return true; } 869c073ff462eb75ccbb1c4446e21c148f3fc618e1Daniel Dunbar virtual bool canPipeOutput() const { return false; } 879c073ff462eb75ccbb1c4446e21c148f3fc618e1Daniel Dunbar virtual bool hasIntegratedCPP() const { return true; } 8847ac7d27c44bd64a7d0fc03d4babc196cf2b8230Daniel Dunbar 89b488c1dac8e53206f07103d794a62a3f5012c0f4Daniel Dunbar virtual void RenderExtraToolArgs(ArgStringList &CmdArgs) const; 909c073ff462eb75ccbb1c4446e21c148f3fc618e1Daniel Dunbar }; 919c073ff462eb75ccbb1c4446e21c148f3fc618e1Daniel Dunbar 92b488c1dac8e53206f07103d794a62a3f5012c0f4Daniel Dunbar class VISIBILITY_HIDDEN Compile : public Common { 939c073ff462eb75ccbb1c4446e21c148f3fc618e1Daniel Dunbar public: 94b488c1dac8e53206f07103d794a62a3f5012c0f4Daniel Dunbar Compile(const ToolChain &TC) : Common("gcc::Compile", TC) {} 959c073ff462eb75ccbb1c4446e21c148f3fc618e1Daniel Dunbar 969c073ff462eb75ccbb1c4446e21c148f3fc618e1Daniel Dunbar virtual bool acceptsPipedInput() const { return true; } 979c073ff462eb75ccbb1c4446e21c148f3fc618e1Daniel Dunbar virtual bool canPipeOutput() const { return true; } 989c073ff462eb75ccbb1c4446e21c148f3fc618e1Daniel Dunbar virtual bool hasIntegratedCPP() const { return true; } 9947ac7d27c44bd64a7d0fc03d4babc196cf2b8230Daniel Dunbar 100b488c1dac8e53206f07103d794a62a3f5012c0f4Daniel Dunbar virtual void RenderExtraToolArgs(ArgStringList &CmdArgs) const; 1019c073ff462eb75ccbb1c4446e21c148f3fc618e1Daniel Dunbar }; 1029c073ff462eb75ccbb1c4446e21c148f3fc618e1Daniel Dunbar 103b488c1dac8e53206f07103d794a62a3f5012c0f4Daniel Dunbar class VISIBILITY_HIDDEN Assemble : public Common { 1049c073ff462eb75ccbb1c4446e21c148f3fc618e1Daniel Dunbar public: 105b488c1dac8e53206f07103d794a62a3f5012c0f4Daniel Dunbar Assemble(const ToolChain &TC) : Common("gcc::Assemble", TC) {} 1069c073ff462eb75ccbb1c4446e21c148f3fc618e1Daniel Dunbar 1079c073ff462eb75ccbb1c4446e21c148f3fc618e1Daniel Dunbar virtual bool acceptsPipedInput() const { return true; } 1089c073ff462eb75ccbb1c4446e21c148f3fc618e1Daniel Dunbar virtual bool canPipeOutput() const { return false; } 1099c073ff462eb75ccbb1c4446e21c148f3fc618e1Daniel Dunbar virtual bool hasIntegratedCPP() const { return false; } 11047ac7d27c44bd64a7d0fc03d4babc196cf2b8230Daniel Dunbar 111b488c1dac8e53206f07103d794a62a3f5012c0f4Daniel Dunbar virtual void RenderExtraToolArgs(ArgStringList &CmdArgs) const; 1129c073ff462eb75ccbb1c4446e21c148f3fc618e1Daniel Dunbar }; 1139c073ff462eb75ccbb1c4446e21c148f3fc618e1Daniel Dunbar 114b488c1dac8e53206f07103d794a62a3f5012c0f4Daniel Dunbar class VISIBILITY_HIDDEN Link : public Common { 1159c073ff462eb75ccbb1c4446e21c148f3fc618e1Daniel Dunbar public: 116b488c1dac8e53206f07103d794a62a3f5012c0f4Daniel Dunbar Link(const ToolChain &TC) : Common("gcc::Link", TC) {} 1179c073ff462eb75ccbb1c4446e21c148f3fc618e1Daniel Dunbar 1189c073ff462eb75ccbb1c4446e21c148f3fc618e1Daniel Dunbar virtual bool acceptsPipedInput() const { return false; } 1199c073ff462eb75ccbb1c4446e21c148f3fc618e1Daniel Dunbar virtual bool canPipeOutput() const { return false; } 1209c073ff462eb75ccbb1c4446e21c148f3fc618e1Daniel Dunbar virtual bool hasIntegratedCPP() const { return false; } 12147ac7d27c44bd64a7d0fc03d4babc196cf2b8230Daniel Dunbar 122b488c1dac8e53206f07103d794a62a3f5012c0f4Daniel Dunbar virtual void RenderExtraToolArgs(ArgStringList &CmdArgs) const; 1239c073ff462eb75ccbb1c4446e21c148f3fc618e1Daniel Dunbar }; 12431b1e5437e7435879fc044afb77ff27096008e72Daniel Dunbar} // end namespace gcc 1259c073ff462eb75ccbb1c4446e21c148f3fc618e1Daniel Dunbar 126ff7488dc9a766f94daf54d81b03ab9160d0bfd88Daniel Dunbarnamespace darwin { 12740f1265ebd42ece3e7f7917319b56012e8e2bce2Daniel Dunbar class VISIBILITY_HIDDEN CC1 : public Tool { 128a5a7bd0de7b6b80212095195a055a4a43f21d4b2Daniel Dunbar public: 129a5a7bd0de7b6b80212095195a055a4a43f21d4b2Daniel Dunbar static const char *getBaseInputName(const ArgList &Args, 130a5a7bd0de7b6b80212095195a055a4a43f21d4b2Daniel Dunbar const InputInfoList &Input); 131a5a7bd0de7b6b80212095195a055a4a43f21d4b2Daniel Dunbar static const char *getBaseInputStem(const ArgList &Args, 132a5a7bd0de7b6b80212095195a055a4a43f21d4b2Daniel Dunbar const InputInfoList &Input); 133a5a7bd0de7b6b80212095195a055a4a43f21d4b2Daniel Dunbar static const char *getDependencyFileName(const ArgList &Args, 134a5a7bd0de7b6b80212095195a055a4a43f21d4b2Daniel Dunbar const InputInfoList &Inputs); 135a5a7bd0de7b6b80212095195a055a4a43f21d4b2Daniel Dunbar 13640f1265ebd42ece3e7f7917319b56012e8e2bce2Daniel Dunbar protected: 13740f1265ebd42ece3e7f7917319b56012e8e2bce2Daniel Dunbar const char *getCC1Name(types::ID Type) const; 138a3ec60e0cf2a1916f479288998d31bd980b1a306Daniel Dunbar 139a3ec60e0cf2a1916f479288998d31bd980b1a306Daniel Dunbar void AddCC1Args(const ArgList &Args, ArgStringList &CmdArgs) const; 14040f1265ebd42ece3e7f7917319b56012e8e2bce2Daniel Dunbar void AddCC1OptionsArgs(const ArgList &Args, ArgStringList &CmdArgs, 14140f1265ebd42ece3e7f7917319b56012e8e2bce2Daniel Dunbar const InputInfoList &Inputs, 142a3ec60e0cf2a1916f479288998d31bd980b1a306Daniel Dunbar const ArgStringList &OutputArgs) const; 14340f1265ebd42ece3e7f7917319b56012e8e2bce2Daniel Dunbar void AddCPPOptionsArgs(const ArgList &Args, ArgStringList &CmdArgs, 14440f1265ebd42ece3e7f7917319b56012e8e2bce2Daniel Dunbar const InputInfoList &Inputs, 145a3ec60e0cf2a1916f479288998d31bd980b1a306Daniel Dunbar const ArgStringList &OutputArgs) const; 146a3ec60e0cf2a1916f479288998d31bd980b1a306Daniel Dunbar void AddCPPUniqueOptionsArgs(const ArgList &Args, 147a3ec60e0cf2a1916f479288998d31bd980b1a306Daniel Dunbar ArgStringList &CmdArgs, 148a3ec60e0cf2a1916f479288998d31bd980b1a306Daniel Dunbar const InputInfoList &Inputs) const; 149a3ec60e0cf2a1916f479288998d31bd980b1a306Daniel Dunbar void AddCPPArgs(const ArgList &Args, ArgStringList &CmdArgs) const; 15040f1265ebd42ece3e7f7917319b56012e8e2bce2Daniel Dunbar 15140f1265ebd42ece3e7f7917319b56012e8e2bce2Daniel Dunbar public: 15240f1265ebd42ece3e7f7917319b56012e8e2bce2Daniel Dunbar CC1(const char *Name, const ToolChain &TC) : Tool(Name, TC) {} 15340f1265ebd42ece3e7f7917319b56012e8e2bce2Daniel Dunbar 15440f1265ebd42ece3e7f7917319b56012e8e2bce2Daniel Dunbar virtual bool acceptsPipedInput() const { return true; } 15540f1265ebd42ece3e7f7917319b56012e8e2bce2Daniel Dunbar virtual bool canPipeOutput() const { return true; } 15640f1265ebd42ece3e7f7917319b56012e8e2bce2Daniel Dunbar virtual bool hasIntegratedCPP() const { return true; } 15740f1265ebd42ece3e7f7917319b56012e8e2bce2Daniel Dunbar }; 15840f1265ebd42ece3e7f7917319b56012e8e2bce2Daniel Dunbar 15940f1265ebd42ece3e7f7917319b56012e8e2bce2Daniel Dunbar class VISIBILITY_HIDDEN Preprocess : public CC1 { 16040f1265ebd42ece3e7f7917319b56012e8e2bce2Daniel Dunbar public: 16140f1265ebd42ece3e7f7917319b56012e8e2bce2Daniel Dunbar Preprocess(const ToolChain &TC) : CC1("darwin::Preprocess", TC) {} 16240f1265ebd42ece3e7f7917319b56012e8e2bce2Daniel Dunbar 16340f1265ebd42ece3e7f7917319b56012e8e2bce2Daniel Dunbar virtual void ConstructJob(Compilation &C, const JobAction &JA, 16440f1265ebd42ece3e7f7917319b56012e8e2bce2Daniel Dunbar Job &Dest, 16540f1265ebd42ece3e7f7917319b56012e8e2bce2Daniel Dunbar const InputInfo &Output, 16640f1265ebd42ece3e7f7917319b56012e8e2bce2Daniel Dunbar const InputInfoList &Inputs, 16740f1265ebd42ece3e7f7917319b56012e8e2bce2Daniel Dunbar const ArgList &TCArgs, 16840f1265ebd42ece3e7f7917319b56012e8e2bce2Daniel Dunbar const char *LinkingOutput) const; 16940f1265ebd42ece3e7f7917319b56012e8e2bce2Daniel Dunbar }; 17040f1265ebd42ece3e7f7917319b56012e8e2bce2Daniel Dunbar 17140f1265ebd42ece3e7f7917319b56012e8e2bce2Daniel Dunbar class VISIBILITY_HIDDEN Compile : public CC1 { 17240f1265ebd42ece3e7f7917319b56012e8e2bce2Daniel Dunbar public: 17340f1265ebd42ece3e7f7917319b56012e8e2bce2Daniel Dunbar Compile(const ToolChain &TC) : CC1("darwin::Compile", TC) {} 17440f1265ebd42ece3e7f7917319b56012e8e2bce2Daniel Dunbar 17540f1265ebd42ece3e7f7917319b56012e8e2bce2Daniel Dunbar virtual void ConstructJob(Compilation &C, const JobAction &JA, 17640f1265ebd42ece3e7f7917319b56012e8e2bce2Daniel Dunbar Job &Dest, 17740f1265ebd42ece3e7f7917319b56012e8e2bce2Daniel Dunbar const InputInfo &Output, 17840f1265ebd42ece3e7f7917319b56012e8e2bce2Daniel Dunbar const InputInfoList &Inputs, 17940f1265ebd42ece3e7f7917319b56012e8e2bce2Daniel Dunbar const ArgList &TCArgs, 18040f1265ebd42ece3e7f7917319b56012e8e2bce2Daniel Dunbar const char *LinkingOutput) const; 18140f1265ebd42ece3e7f7917319b56012e8e2bce2Daniel Dunbar }; 18240f1265ebd42ece3e7f7917319b56012e8e2bce2Daniel Dunbar 1838cac5f7e1ce63dd77ee0fb4ef68f9fa804f41ea6Daniel Dunbar class VISIBILITY_HIDDEN Assemble : public Tool { 1848cac5f7e1ce63dd77ee0fb4ef68f9fa804f41ea6Daniel Dunbar public: 1858cac5f7e1ce63dd77ee0fb4ef68f9fa804f41ea6Daniel Dunbar Assemble(const ToolChain &TC) : Tool("darwin::Assemble", TC) {} 1868cac5f7e1ce63dd77ee0fb4ef68f9fa804f41ea6Daniel Dunbar 1878cac5f7e1ce63dd77ee0fb4ef68f9fa804f41ea6Daniel Dunbar virtual bool acceptsPipedInput() const { return true; } 1888cac5f7e1ce63dd77ee0fb4ef68f9fa804f41ea6Daniel Dunbar virtual bool canPipeOutput() const { return false; } 1898cac5f7e1ce63dd77ee0fb4ef68f9fa804f41ea6Daniel Dunbar virtual bool hasIntegratedCPP() const { return false; } 1908cac5f7e1ce63dd77ee0fb4ef68f9fa804f41ea6Daniel Dunbar 1918cac5f7e1ce63dd77ee0fb4ef68f9fa804f41ea6Daniel Dunbar virtual void ConstructJob(Compilation &C, const JobAction &JA, 19202633b541b04ad5ffc1c70f4c2feeeb13e607057Daniel Dunbar Job &Dest, 19302633b541b04ad5ffc1c70f4c2feeeb13e607057Daniel Dunbar const InputInfo &Output, 19402633b541b04ad5ffc1c70f4c2feeeb13e607057Daniel Dunbar const InputInfoList &Inputs, 19502633b541b04ad5ffc1c70f4c2feeeb13e607057Daniel Dunbar const ArgList &TCArgs, 19602633b541b04ad5ffc1c70f4c2feeeb13e607057Daniel Dunbar const char *LinkingOutput) const; 19702633b541b04ad5ffc1c70f4c2feeeb13e607057Daniel Dunbar }; 19802633b541b04ad5ffc1c70f4c2feeeb13e607057Daniel Dunbar 19902633b541b04ad5ffc1c70f4c2feeeb13e607057Daniel Dunbar class VISIBILITY_HIDDEN Link : public Tool { 20002633b541b04ad5ffc1c70f4c2feeeb13e607057Daniel Dunbar void AddDarwinArch(const ArgList &Args, ArgStringList &CmdArgs) const; 20102633b541b04ad5ffc1c70f4c2feeeb13e607057Daniel Dunbar void AddDarwinSubArch(const ArgList &Args, ArgStringList &CmdArgs) const; 20202633b541b04ad5ffc1c70f4c2feeeb13e607057Daniel Dunbar void AddLinkArgs(const ArgList &Args, ArgStringList &CmdArgs) const; 20302633b541b04ad5ffc1c70f4c2feeeb13e607057Daniel Dunbar 20402633b541b04ad5ffc1c70f4c2feeeb13e607057Daniel Dunbar /// The default macosx-version-min. 20502633b541b04ad5ffc1c70f4c2feeeb13e607057Daniel Dunbar const char *MacosxVersionMin; 20602633b541b04ad5ffc1c70f4c2feeeb13e607057Daniel Dunbar 20702633b541b04ad5ffc1c70f4c2feeeb13e607057Daniel Dunbar const toolchains::Darwin_X86 &getDarwinToolChain() const; 20802633b541b04ad5ffc1c70f4c2feeeb13e607057Daniel Dunbar 20902633b541b04ad5ffc1c70f4c2feeeb13e607057Daniel Dunbar public: 21002633b541b04ad5ffc1c70f4c2feeeb13e607057Daniel Dunbar Link(const ToolChain &TC, 21102633b541b04ad5ffc1c70f4c2feeeb13e607057Daniel Dunbar const char *_MacosxVersionMin) 21202633b541b04ad5ffc1c70f4c2feeeb13e607057Daniel Dunbar : Tool("darwin::Link", TC), MacosxVersionMin(_MacosxVersionMin) { 21302633b541b04ad5ffc1c70f4c2feeeb13e607057Daniel Dunbar } 21402633b541b04ad5ffc1c70f4c2feeeb13e607057Daniel Dunbar 21502633b541b04ad5ffc1c70f4c2feeeb13e607057Daniel Dunbar virtual bool acceptsPipedInput() const { return false; } 21602633b541b04ad5ffc1c70f4c2feeeb13e607057Daniel Dunbar virtual bool canPipeOutput() const { return false; } 21702633b541b04ad5ffc1c70f4c2feeeb13e607057Daniel Dunbar virtual bool hasIntegratedCPP() const { return false; } 21802633b541b04ad5ffc1c70f4c2feeeb13e607057Daniel Dunbar 21902633b541b04ad5ffc1c70f4c2feeeb13e607057Daniel Dunbar virtual void ConstructJob(Compilation &C, const JobAction &JA, 2208cac5f7e1ce63dd77ee0fb4ef68f9fa804f41ea6Daniel Dunbar Job &Dest, 2218cac5f7e1ce63dd77ee0fb4ef68f9fa804f41ea6Daniel Dunbar const InputInfo &Output, 2228cac5f7e1ce63dd77ee0fb4ef68f9fa804f41ea6Daniel Dunbar const InputInfoList &Inputs, 2238cac5f7e1ce63dd77ee0fb4ef68f9fa804f41ea6Daniel Dunbar const ArgList &TCArgs, 2248cac5f7e1ce63dd77ee0fb4ef68f9fa804f41ea6Daniel Dunbar const char *LinkingOutput) const; 2258cac5f7e1ce63dd77ee0fb4ef68f9fa804f41ea6Daniel Dunbar }; 2268cac5f7e1ce63dd77ee0fb4ef68f9fa804f41ea6Daniel Dunbar 227ff7488dc9a766f94daf54d81b03ab9160d0bfd88Daniel Dunbar class VISIBILITY_HIDDEN Lipo : public Tool { 228ff7488dc9a766f94daf54d81b03ab9160d0bfd88Daniel Dunbar public: 2298cac5f7e1ce63dd77ee0fb4ef68f9fa804f41ea6Daniel Dunbar Lipo(const ToolChain &TC) : Tool("darwin::Lipo", TC) {} 230ff7488dc9a766f94daf54d81b03ab9160d0bfd88Daniel Dunbar 231ff7488dc9a766f94daf54d81b03ab9160d0bfd88Daniel Dunbar virtual bool acceptsPipedInput() const { return false; } 232ff7488dc9a766f94daf54d81b03ab9160d0bfd88Daniel Dunbar virtual bool canPipeOutput() const { return false; } 233ff7488dc9a766f94daf54d81b03ab9160d0bfd88Daniel Dunbar virtual bool hasIntegratedCPP() const { return false; } 234ff7488dc9a766f94daf54d81b03ab9160d0bfd88Daniel Dunbar 235ff7488dc9a766f94daf54d81b03ab9160d0bfd88Daniel Dunbar virtual void ConstructJob(Compilation &C, const JobAction &JA, 236ff7488dc9a766f94daf54d81b03ab9160d0bfd88Daniel Dunbar Job &Dest, 237ff7488dc9a766f94daf54d81b03ab9160d0bfd88Daniel Dunbar const InputInfo &Output, 238ff7488dc9a766f94daf54d81b03ab9160d0bfd88Daniel Dunbar const InputInfoList &Inputs, 239ff7488dc9a766f94daf54d81b03ab9160d0bfd88Daniel Dunbar const ArgList &TCArgs, 240ff7488dc9a766f94daf54d81b03ab9160d0bfd88Daniel Dunbar const char *LinkingOutput) const; 241ff7488dc9a766f94daf54d81b03ab9160d0bfd88Daniel Dunbar }; 242ff7488dc9a766f94daf54d81b03ab9160d0bfd88Daniel Dunbar} 243ff7488dc9a766f94daf54d81b03ab9160d0bfd88Daniel Dunbar 24468a31d406c6dc4382c700d1199b062de2aa7e1daDaniel Dunbar /// freebsd -- Directly call GNU Binutils assembler and linker 24568a31d406c6dc4382c700d1199b062de2aa7e1daDaniel Dunbarnamespace freebsd { 24668a31d406c6dc4382c700d1199b062de2aa7e1daDaniel Dunbar class VISIBILITY_HIDDEN Assemble : public Tool { 24768a31d406c6dc4382c700d1199b062de2aa7e1daDaniel Dunbar public: 24868a31d406c6dc4382c700d1199b062de2aa7e1daDaniel Dunbar Assemble(const ToolChain &TC) : Tool("freebsd::Assemble", TC) {} 24968a31d406c6dc4382c700d1199b062de2aa7e1daDaniel Dunbar 25068a31d406c6dc4382c700d1199b062de2aa7e1daDaniel Dunbar virtual bool acceptsPipedInput() const { return true; } 25168a31d406c6dc4382c700d1199b062de2aa7e1daDaniel Dunbar virtual bool canPipeOutput() const { return true; } 25268a31d406c6dc4382c700d1199b062de2aa7e1daDaniel Dunbar virtual bool hasIntegratedCPP() const { return false; } 25368a31d406c6dc4382c700d1199b062de2aa7e1daDaniel Dunbar 25468a31d406c6dc4382c700d1199b062de2aa7e1daDaniel Dunbar virtual void ConstructJob(Compilation &C, const JobAction &JA, 25568a31d406c6dc4382c700d1199b062de2aa7e1daDaniel Dunbar Job &Dest, 25668a31d406c6dc4382c700d1199b062de2aa7e1daDaniel Dunbar const InputInfo &Output, 25768a31d406c6dc4382c700d1199b062de2aa7e1daDaniel Dunbar const InputInfoList &Inputs, 25868a31d406c6dc4382c700d1199b062de2aa7e1daDaniel Dunbar const ArgList &TCArgs, 25968a31d406c6dc4382c700d1199b062de2aa7e1daDaniel Dunbar const char *LinkingOutput) const; 26068a31d406c6dc4382c700d1199b062de2aa7e1daDaniel Dunbar }; 261008f54a54299eaafdaa940e2bdeaf55935ecd95aDaniel Dunbar class VISIBILITY_HIDDEN Link : public Tool { 262008f54a54299eaafdaa940e2bdeaf55935ecd95aDaniel Dunbar public: 263008f54a54299eaafdaa940e2bdeaf55935ecd95aDaniel Dunbar Link(const ToolChain &TC) : Tool("freebsd::Link", TC) {} 264008f54a54299eaafdaa940e2bdeaf55935ecd95aDaniel Dunbar 265008f54a54299eaafdaa940e2bdeaf55935ecd95aDaniel Dunbar virtual bool acceptsPipedInput() const { return true; } 266008f54a54299eaafdaa940e2bdeaf55935ecd95aDaniel Dunbar virtual bool canPipeOutput() const { return true; } 267008f54a54299eaafdaa940e2bdeaf55935ecd95aDaniel Dunbar virtual bool hasIntegratedCPP() const { return false; } 268008f54a54299eaafdaa940e2bdeaf55935ecd95aDaniel Dunbar 269008f54a54299eaafdaa940e2bdeaf55935ecd95aDaniel Dunbar virtual void ConstructJob(Compilation &C, const JobAction &JA, 270008f54a54299eaafdaa940e2bdeaf55935ecd95aDaniel Dunbar Job &Dest, 271008f54a54299eaafdaa940e2bdeaf55935ecd95aDaniel Dunbar const InputInfo &Output, 272008f54a54299eaafdaa940e2bdeaf55935ecd95aDaniel Dunbar const InputInfoList &Inputs, 273008f54a54299eaafdaa940e2bdeaf55935ecd95aDaniel Dunbar const ArgList &TCArgs, 274008f54a54299eaafdaa940e2bdeaf55935ecd95aDaniel Dunbar const char *LinkingOutput) const; 275008f54a54299eaafdaa940e2bdeaf55935ecd95aDaniel Dunbar }; 27668a31d406c6dc4382c700d1199b062de2aa7e1daDaniel Dunbar} 27768a31d406c6dc4382c700d1199b062de2aa7e1daDaniel Dunbar 27811e1b40d759a643086f590f6ffbd9d68360bad46Daniel Dunbar /// dragonfly -- Directly call GNU Binutils assembler and linker 27911e1b40d759a643086f590f6ffbd9d68360bad46Daniel Dunbarnamespace dragonfly { 28011e1b40d759a643086f590f6ffbd9d68360bad46Daniel Dunbar class VISIBILITY_HIDDEN Assemble : public Tool { 28111e1b40d759a643086f590f6ffbd9d68360bad46Daniel Dunbar public: 28211e1b40d759a643086f590f6ffbd9d68360bad46Daniel Dunbar Assemble(const ToolChain &TC) : Tool("dragonfly::Assemble", TC) {} 28311e1b40d759a643086f590f6ffbd9d68360bad46Daniel Dunbar 28411e1b40d759a643086f590f6ffbd9d68360bad46Daniel Dunbar virtual bool acceptsPipedInput() const { return true; } 28511e1b40d759a643086f590f6ffbd9d68360bad46Daniel Dunbar virtual bool canPipeOutput() const { return true; } 28611e1b40d759a643086f590f6ffbd9d68360bad46Daniel Dunbar virtual bool hasIntegratedCPP() const { return false; } 28711e1b40d759a643086f590f6ffbd9d68360bad46Daniel Dunbar 28811e1b40d759a643086f590f6ffbd9d68360bad46Daniel Dunbar virtual void ConstructJob(Compilation &C, const JobAction &JA, 28911e1b40d759a643086f590f6ffbd9d68360bad46Daniel Dunbar Job &Dest, 29011e1b40d759a643086f590f6ffbd9d68360bad46Daniel Dunbar const InputInfo &Output, 29111e1b40d759a643086f590f6ffbd9d68360bad46Daniel Dunbar const InputInfoList &Inputs, 29211e1b40d759a643086f590f6ffbd9d68360bad46Daniel Dunbar const ArgList &TCArgs, 29311e1b40d759a643086f590f6ffbd9d68360bad46Daniel Dunbar const char *LinkingOutput) const; 29411e1b40d759a643086f590f6ffbd9d68360bad46Daniel Dunbar }; 29511e1b40d759a643086f590f6ffbd9d68360bad46Daniel Dunbar class VISIBILITY_HIDDEN Link : public Tool { 29611e1b40d759a643086f590f6ffbd9d68360bad46Daniel Dunbar public: 29711e1b40d759a643086f590f6ffbd9d68360bad46Daniel Dunbar Link(const ToolChain &TC) : Tool("dragonfly::Link", TC) {} 29811e1b40d759a643086f590f6ffbd9d68360bad46Daniel Dunbar 29911e1b40d759a643086f590f6ffbd9d68360bad46Daniel Dunbar virtual bool acceptsPipedInput() const { return true; } 30011e1b40d759a643086f590f6ffbd9d68360bad46Daniel Dunbar virtual bool canPipeOutput() const { return true; } 30111e1b40d759a643086f590f6ffbd9d68360bad46Daniel Dunbar virtual bool hasIntegratedCPP() const { return false; } 30211e1b40d759a643086f590f6ffbd9d68360bad46Daniel Dunbar 30311e1b40d759a643086f590f6ffbd9d68360bad46Daniel Dunbar virtual void ConstructJob(Compilation &C, const JobAction &JA, 30411e1b40d759a643086f590f6ffbd9d68360bad46Daniel Dunbar Job &Dest, 30511e1b40d759a643086f590f6ffbd9d68360bad46Daniel Dunbar const InputInfo &Output, 30611e1b40d759a643086f590f6ffbd9d68360bad46Daniel Dunbar const InputInfoList &Inputs, 30711e1b40d759a643086f590f6ffbd9d68360bad46Daniel Dunbar const ArgList &TCArgs, 30811e1b40d759a643086f590f6ffbd9d68360bad46Daniel Dunbar const char *LinkingOutput) const; 30911e1b40d759a643086f590f6ffbd9d68360bad46Daniel Dunbar }; 31011e1b40d759a643086f590f6ffbd9d68360bad46Daniel Dunbar} 31111e1b40d759a643086f590f6ffbd9d68360bad46Daniel Dunbar 3129c073ff462eb75ccbb1c4446e21c148f3fc618e1Daniel Dunbar} // end namespace toolchains 3139c073ff462eb75ccbb1c4446e21c148f3fc618e1Daniel Dunbar} // end namespace driver 3149c073ff462eb75ccbb1c4446e21c148f3fc618e1Daniel Dunbar} // end namespace clang 3159c073ff462eb75ccbb1c4446e21c148f3fc618e1Daniel Dunbar 3169c073ff462eb75ccbb1c4446e21c148f3fc618e1Daniel Dunbar#endif 317