Tools.h revision 68a31d406c6dc4382c700d1199b062de2aa7e1da
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 { 2102633b541b04ad5ffc1c70f4c2feeeb13e607057Daniel Dunbarnamespace toolchains { 2202633b541b04ad5ffc1c70f4c2feeeb13e607057Daniel Dunbar class Darwin_X86; 2302633b541b04ad5ffc1c70f4c2feeeb13e607057Daniel Dunbar} 2402633b541b04ad5ffc1c70f4c2feeeb13e607057Daniel Dunbar 25985b825eea7387be10478de0430815ed6a673326Daniel Dunbarnamespace tools { 269c073ff462eb75ccbb1c4446e21c148f3fc618e1Daniel Dunbar 27985b825eea7387be10478de0430815ed6a673326Daniel Dunbar class VISIBILITY_HIDDEN Clang : public Tool { 289c073ff462eb75ccbb1c4446e21c148f3fc618e1Daniel Dunbar public: 2931b1e5437e7435879fc044afb77ff27096008e72Daniel Dunbar Clang(const ToolChain &TC) : Tool("clang", TC) {} 309c073ff462eb75ccbb1c4446e21c148f3fc618e1Daniel Dunbar 319c073ff462eb75ccbb1c4446e21c148f3fc618e1Daniel Dunbar virtual bool acceptsPipedInput() const { return true; } 329c073ff462eb75ccbb1c4446e21c148f3fc618e1Daniel Dunbar virtual bool canPipeOutput() const { return true; } 339c073ff462eb75ccbb1c4446e21c148f3fc618e1Daniel Dunbar virtual bool hasIntegratedCPP() const { return true; } 3447ac7d27c44bd64a7d0fc03d4babc196cf2b8230Daniel Dunbar 3547ac7d27c44bd64a7d0fc03d4babc196cf2b8230Daniel Dunbar virtual void ConstructJob(Compilation &C, const JobAction &JA, 36871adcf4e41285e3f4c3b62eaa1b2e05b60b92daDaniel Dunbar Job &Dest, 3762cf601812e03dd9bc5df42b8ef06a0cdedc38bfDaniel Dunbar const InputInfo &Output, 3862cf601812e03dd9bc5df42b8ef06a0cdedc38bfDaniel Dunbar const InputInfoList &Inputs, 3947ac7d27c44bd64a7d0fc03d4babc196cf2b8230Daniel Dunbar const ArgList &TCArgs, 4047ac7d27c44bd64a7d0fc03d4babc196cf2b8230Daniel Dunbar const char *LinkingOutput) const; 419c073ff462eb75ccbb1c4446e21c148f3fc618e1Daniel Dunbar }; 429c073ff462eb75ccbb1c4446e21c148f3fc618e1Daniel Dunbar 4331b1e5437e7435879fc044afb77ff27096008e72Daniel Dunbar /// gcc - Generic GCC tool implementations. 4431b1e5437e7435879fc044afb77ff27096008e72Daniel Dunbarnamespace gcc { 45b488c1dac8e53206f07103d794a62a3f5012c0f4Daniel Dunbar class VISIBILITY_HIDDEN Common : public Tool { 469c073ff462eb75ccbb1c4446e21c148f3fc618e1Daniel Dunbar public: 47b488c1dac8e53206f07103d794a62a3f5012c0f4Daniel Dunbar Common(const char *Name, const ToolChain &TC) : Tool(Name, TC) {} 4847ac7d27c44bd64a7d0fc03d4babc196cf2b8230Daniel Dunbar 4947ac7d27c44bd64a7d0fc03d4babc196cf2b8230Daniel Dunbar virtual void ConstructJob(Compilation &C, const JobAction &JA, 50871adcf4e41285e3f4c3b62eaa1b2e05b60b92daDaniel Dunbar Job &Dest, 5162cf601812e03dd9bc5df42b8ef06a0cdedc38bfDaniel Dunbar const InputInfo &Output, 5262cf601812e03dd9bc5df42b8ef06a0cdedc38bfDaniel Dunbar const InputInfoList &Inputs, 5347ac7d27c44bd64a7d0fc03d4babc196cf2b8230Daniel Dunbar const ArgList &TCArgs, 5447ac7d27c44bd64a7d0fc03d4babc196cf2b8230Daniel Dunbar const char *LinkingOutput) const; 55b488c1dac8e53206f07103d794a62a3f5012c0f4Daniel Dunbar 56b488c1dac8e53206f07103d794a62a3f5012c0f4Daniel Dunbar /// RenderExtraToolArgs - Render any arguments necessary to force 57b488c1dac8e53206f07103d794a62a3f5012c0f4Daniel Dunbar /// the particular tool mode. 58b488c1dac8e53206f07103d794a62a3f5012c0f4Daniel Dunbar virtual void RenderExtraToolArgs(ArgStringList &CmdArgs) const = 0; 599c073ff462eb75ccbb1c4446e21c148f3fc618e1Daniel Dunbar }; 609c073ff462eb75ccbb1c4446e21c148f3fc618e1Daniel Dunbar 61b488c1dac8e53206f07103d794a62a3f5012c0f4Daniel Dunbar 62b488c1dac8e53206f07103d794a62a3f5012c0f4Daniel Dunbar class VISIBILITY_HIDDEN Preprocess : public Common { 639c073ff462eb75ccbb1c4446e21c148f3fc618e1Daniel Dunbar public: 64b488c1dac8e53206f07103d794a62a3f5012c0f4Daniel Dunbar Preprocess(const ToolChain &TC) : Common("gcc::Preprocess", TC) {} 65b488c1dac8e53206f07103d794a62a3f5012c0f4Daniel Dunbar 66b488c1dac8e53206f07103d794a62a3f5012c0f4Daniel Dunbar virtual bool acceptsPipedInput() const { return true; } 67b488c1dac8e53206f07103d794a62a3f5012c0f4Daniel Dunbar virtual bool canPipeOutput() const { return true; } 68b488c1dac8e53206f07103d794a62a3f5012c0f4Daniel Dunbar virtual bool hasIntegratedCPP() const { return false; } 69b488c1dac8e53206f07103d794a62a3f5012c0f4Daniel Dunbar 70b488c1dac8e53206f07103d794a62a3f5012c0f4Daniel Dunbar virtual void RenderExtraToolArgs(ArgStringList &CmdArgs) const; 71b488c1dac8e53206f07103d794a62a3f5012c0f4Daniel Dunbar }; 72b488c1dac8e53206f07103d794a62a3f5012c0f4Daniel Dunbar 73b488c1dac8e53206f07103d794a62a3f5012c0f4Daniel Dunbar class VISIBILITY_HIDDEN Precompile : public Common { 74b488c1dac8e53206f07103d794a62a3f5012c0f4Daniel Dunbar public: 75b488c1dac8e53206f07103d794a62a3f5012c0f4Daniel Dunbar Precompile(const ToolChain &TC) : Common("gcc::Precompile", TC) {} 769c073ff462eb75ccbb1c4446e21c148f3fc618e1Daniel Dunbar 779c073ff462eb75ccbb1c4446e21c148f3fc618e1Daniel Dunbar virtual bool acceptsPipedInput() const { return true; } 789c073ff462eb75ccbb1c4446e21c148f3fc618e1Daniel Dunbar virtual bool canPipeOutput() const { return false; } 799c073ff462eb75ccbb1c4446e21c148f3fc618e1Daniel Dunbar virtual bool hasIntegratedCPP() const { return true; } 8047ac7d27c44bd64a7d0fc03d4babc196cf2b8230Daniel Dunbar 81b488c1dac8e53206f07103d794a62a3f5012c0f4Daniel Dunbar virtual void RenderExtraToolArgs(ArgStringList &CmdArgs) const; 829c073ff462eb75ccbb1c4446e21c148f3fc618e1Daniel Dunbar }; 839c073ff462eb75ccbb1c4446e21c148f3fc618e1Daniel Dunbar 84b488c1dac8e53206f07103d794a62a3f5012c0f4Daniel Dunbar class VISIBILITY_HIDDEN Compile : public Common { 859c073ff462eb75ccbb1c4446e21c148f3fc618e1Daniel Dunbar public: 86b488c1dac8e53206f07103d794a62a3f5012c0f4Daniel Dunbar Compile(const ToolChain &TC) : Common("gcc::Compile", TC) {} 879c073ff462eb75ccbb1c4446e21c148f3fc618e1Daniel Dunbar 889c073ff462eb75ccbb1c4446e21c148f3fc618e1Daniel Dunbar virtual bool acceptsPipedInput() const { return true; } 899c073ff462eb75ccbb1c4446e21c148f3fc618e1Daniel Dunbar virtual bool canPipeOutput() const { return true; } 909c073ff462eb75ccbb1c4446e21c148f3fc618e1Daniel Dunbar virtual bool hasIntegratedCPP() const { return true; } 9147ac7d27c44bd64a7d0fc03d4babc196cf2b8230Daniel Dunbar 92b488c1dac8e53206f07103d794a62a3f5012c0f4Daniel Dunbar virtual void RenderExtraToolArgs(ArgStringList &CmdArgs) const; 939c073ff462eb75ccbb1c4446e21c148f3fc618e1Daniel Dunbar }; 949c073ff462eb75ccbb1c4446e21c148f3fc618e1Daniel Dunbar 95b488c1dac8e53206f07103d794a62a3f5012c0f4Daniel Dunbar class VISIBILITY_HIDDEN Assemble : public Common { 969c073ff462eb75ccbb1c4446e21c148f3fc618e1Daniel Dunbar public: 97b488c1dac8e53206f07103d794a62a3f5012c0f4Daniel Dunbar Assemble(const ToolChain &TC) : Common("gcc::Assemble", TC) {} 989c073ff462eb75ccbb1c4446e21c148f3fc618e1Daniel Dunbar 999c073ff462eb75ccbb1c4446e21c148f3fc618e1Daniel Dunbar virtual bool acceptsPipedInput() const { return true; } 1009c073ff462eb75ccbb1c4446e21c148f3fc618e1Daniel Dunbar virtual bool canPipeOutput() const { return false; } 1019c073ff462eb75ccbb1c4446e21c148f3fc618e1Daniel Dunbar virtual bool hasIntegratedCPP() const { return false; } 10247ac7d27c44bd64a7d0fc03d4babc196cf2b8230Daniel Dunbar 103b488c1dac8e53206f07103d794a62a3f5012c0f4Daniel Dunbar virtual void RenderExtraToolArgs(ArgStringList &CmdArgs) const; 1049c073ff462eb75ccbb1c4446e21c148f3fc618e1Daniel Dunbar }; 1059c073ff462eb75ccbb1c4446e21c148f3fc618e1Daniel Dunbar 106b488c1dac8e53206f07103d794a62a3f5012c0f4Daniel Dunbar class VISIBILITY_HIDDEN Link : public Common { 1079c073ff462eb75ccbb1c4446e21c148f3fc618e1Daniel Dunbar public: 108b488c1dac8e53206f07103d794a62a3f5012c0f4Daniel Dunbar Link(const ToolChain &TC) : Common("gcc::Link", TC) {} 1099c073ff462eb75ccbb1c4446e21c148f3fc618e1Daniel Dunbar 1109c073ff462eb75ccbb1c4446e21c148f3fc618e1Daniel Dunbar virtual bool acceptsPipedInput() const { return false; } 1119c073ff462eb75ccbb1c4446e21c148f3fc618e1Daniel Dunbar virtual bool canPipeOutput() const { return false; } 1129c073ff462eb75ccbb1c4446e21c148f3fc618e1Daniel Dunbar virtual bool hasIntegratedCPP() const { return false; } 11347ac7d27c44bd64a7d0fc03d4babc196cf2b8230Daniel Dunbar 114b488c1dac8e53206f07103d794a62a3f5012c0f4Daniel Dunbar virtual void RenderExtraToolArgs(ArgStringList &CmdArgs) const; 1159c073ff462eb75ccbb1c4446e21c148f3fc618e1Daniel Dunbar }; 11631b1e5437e7435879fc044afb77ff27096008e72Daniel Dunbar} // end namespace gcc 1179c073ff462eb75ccbb1c4446e21c148f3fc618e1Daniel Dunbar 118ff7488dc9a766f94daf54d81b03ab9160d0bfd88Daniel Dunbarnamespace darwin { 11940f1265ebd42ece3e7f7917319b56012e8e2bce2Daniel Dunbar class VISIBILITY_HIDDEN CC1 : public Tool { 120a5a7bd0de7b6b80212095195a055a4a43f21d4b2Daniel Dunbar public: 121a5a7bd0de7b6b80212095195a055a4a43f21d4b2Daniel Dunbar static const char *getBaseInputName(const ArgList &Args, 122a5a7bd0de7b6b80212095195a055a4a43f21d4b2Daniel Dunbar const InputInfoList &Input); 123a5a7bd0de7b6b80212095195a055a4a43f21d4b2Daniel Dunbar static const char *getBaseInputStem(const ArgList &Args, 124a5a7bd0de7b6b80212095195a055a4a43f21d4b2Daniel Dunbar const InputInfoList &Input); 125a5a7bd0de7b6b80212095195a055a4a43f21d4b2Daniel Dunbar static const char *getDependencyFileName(const ArgList &Args, 126a5a7bd0de7b6b80212095195a055a4a43f21d4b2Daniel Dunbar const InputInfoList &Inputs); 127a5a7bd0de7b6b80212095195a055a4a43f21d4b2Daniel Dunbar 12840f1265ebd42ece3e7f7917319b56012e8e2bce2Daniel Dunbar protected: 12940f1265ebd42ece3e7f7917319b56012e8e2bce2Daniel Dunbar const char *getCC1Name(types::ID Type) const; 130a3ec60e0cf2a1916f479288998d31bd980b1a306Daniel Dunbar 131a3ec60e0cf2a1916f479288998d31bd980b1a306Daniel Dunbar void AddCC1Args(const ArgList &Args, ArgStringList &CmdArgs) const; 13240f1265ebd42ece3e7f7917319b56012e8e2bce2Daniel Dunbar void AddCC1OptionsArgs(const ArgList &Args, ArgStringList &CmdArgs, 13340f1265ebd42ece3e7f7917319b56012e8e2bce2Daniel Dunbar const InputInfoList &Inputs, 134a3ec60e0cf2a1916f479288998d31bd980b1a306Daniel Dunbar const ArgStringList &OutputArgs) const; 13540f1265ebd42ece3e7f7917319b56012e8e2bce2Daniel Dunbar void AddCPPOptionsArgs(const ArgList &Args, ArgStringList &CmdArgs, 13640f1265ebd42ece3e7f7917319b56012e8e2bce2Daniel Dunbar const InputInfoList &Inputs, 137a3ec60e0cf2a1916f479288998d31bd980b1a306Daniel Dunbar const ArgStringList &OutputArgs) const; 138a3ec60e0cf2a1916f479288998d31bd980b1a306Daniel Dunbar void AddCPPUniqueOptionsArgs(const ArgList &Args, 139a3ec60e0cf2a1916f479288998d31bd980b1a306Daniel Dunbar ArgStringList &CmdArgs, 140a3ec60e0cf2a1916f479288998d31bd980b1a306Daniel Dunbar const InputInfoList &Inputs) const; 141a3ec60e0cf2a1916f479288998d31bd980b1a306Daniel Dunbar void AddCPPArgs(const ArgList &Args, ArgStringList &CmdArgs) const; 14240f1265ebd42ece3e7f7917319b56012e8e2bce2Daniel Dunbar 14340f1265ebd42ece3e7f7917319b56012e8e2bce2Daniel Dunbar public: 14440f1265ebd42ece3e7f7917319b56012e8e2bce2Daniel Dunbar CC1(const char *Name, const ToolChain &TC) : Tool(Name, TC) {} 14540f1265ebd42ece3e7f7917319b56012e8e2bce2Daniel Dunbar 14640f1265ebd42ece3e7f7917319b56012e8e2bce2Daniel Dunbar virtual bool acceptsPipedInput() const { return true; } 14740f1265ebd42ece3e7f7917319b56012e8e2bce2Daniel Dunbar virtual bool canPipeOutput() const { return true; } 14840f1265ebd42ece3e7f7917319b56012e8e2bce2Daniel Dunbar virtual bool hasIntegratedCPP() const { return true; } 14940f1265ebd42ece3e7f7917319b56012e8e2bce2Daniel Dunbar }; 15040f1265ebd42ece3e7f7917319b56012e8e2bce2Daniel Dunbar 15140f1265ebd42ece3e7f7917319b56012e8e2bce2Daniel Dunbar class VISIBILITY_HIDDEN Preprocess : public CC1 { 15240f1265ebd42ece3e7f7917319b56012e8e2bce2Daniel Dunbar public: 15340f1265ebd42ece3e7f7917319b56012e8e2bce2Daniel Dunbar Preprocess(const ToolChain &TC) : CC1("darwin::Preprocess", TC) {} 15440f1265ebd42ece3e7f7917319b56012e8e2bce2Daniel Dunbar 15540f1265ebd42ece3e7f7917319b56012e8e2bce2Daniel Dunbar virtual void ConstructJob(Compilation &C, const JobAction &JA, 15640f1265ebd42ece3e7f7917319b56012e8e2bce2Daniel Dunbar Job &Dest, 15740f1265ebd42ece3e7f7917319b56012e8e2bce2Daniel Dunbar const InputInfo &Output, 15840f1265ebd42ece3e7f7917319b56012e8e2bce2Daniel Dunbar const InputInfoList &Inputs, 15940f1265ebd42ece3e7f7917319b56012e8e2bce2Daniel Dunbar const ArgList &TCArgs, 16040f1265ebd42ece3e7f7917319b56012e8e2bce2Daniel Dunbar const char *LinkingOutput) const; 16140f1265ebd42ece3e7f7917319b56012e8e2bce2Daniel Dunbar }; 16240f1265ebd42ece3e7f7917319b56012e8e2bce2Daniel Dunbar 16340f1265ebd42ece3e7f7917319b56012e8e2bce2Daniel Dunbar class VISIBILITY_HIDDEN Compile : public CC1 { 16440f1265ebd42ece3e7f7917319b56012e8e2bce2Daniel Dunbar public: 16540f1265ebd42ece3e7f7917319b56012e8e2bce2Daniel Dunbar Compile(const ToolChain &TC) : CC1("darwin::Compile", TC) {} 16640f1265ebd42ece3e7f7917319b56012e8e2bce2Daniel Dunbar 16740f1265ebd42ece3e7f7917319b56012e8e2bce2Daniel Dunbar virtual void ConstructJob(Compilation &C, const JobAction &JA, 16840f1265ebd42ece3e7f7917319b56012e8e2bce2Daniel Dunbar Job &Dest, 16940f1265ebd42ece3e7f7917319b56012e8e2bce2Daniel Dunbar const InputInfo &Output, 17040f1265ebd42ece3e7f7917319b56012e8e2bce2Daniel Dunbar const InputInfoList &Inputs, 17140f1265ebd42ece3e7f7917319b56012e8e2bce2Daniel Dunbar const ArgList &TCArgs, 17240f1265ebd42ece3e7f7917319b56012e8e2bce2Daniel Dunbar const char *LinkingOutput) const; 17340f1265ebd42ece3e7f7917319b56012e8e2bce2Daniel Dunbar }; 17440f1265ebd42ece3e7f7917319b56012e8e2bce2Daniel Dunbar 1758cac5f7e1ce63dd77ee0fb4ef68f9fa804f41ea6Daniel Dunbar class VISIBILITY_HIDDEN Assemble : public Tool { 1768cac5f7e1ce63dd77ee0fb4ef68f9fa804f41ea6Daniel Dunbar public: 1778cac5f7e1ce63dd77ee0fb4ef68f9fa804f41ea6Daniel Dunbar Assemble(const ToolChain &TC) : Tool("darwin::Assemble", TC) {} 1788cac5f7e1ce63dd77ee0fb4ef68f9fa804f41ea6Daniel Dunbar 1798cac5f7e1ce63dd77ee0fb4ef68f9fa804f41ea6Daniel Dunbar virtual bool acceptsPipedInput() const { return true; } 1808cac5f7e1ce63dd77ee0fb4ef68f9fa804f41ea6Daniel Dunbar virtual bool canPipeOutput() const { return false; } 1818cac5f7e1ce63dd77ee0fb4ef68f9fa804f41ea6Daniel Dunbar virtual bool hasIntegratedCPP() const { return false; } 1828cac5f7e1ce63dd77ee0fb4ef68f9fa804f41ea6Daniel Dunbar 1838cac5f7e1ce63dd77ee0fb4ef68f9fa804f41ea6Daniel Dunbar virtual void ConstructJob(Compilation &C, const JobAction &JA, 18402633b541b04ad5ffc1c70f4c2feeeb13e607057Daniel Dunbar Job &Dest, 18502633b541b04ad5ffc1c70f4c2feeeb13e607057Daniel Dunbar const InputInfo &Output, 18602633b541b04ad5ffc1c70f4c2feeeb13e607057Daniel Dunbar const InputInfoList &Inputs, 18702633b541b04ad5ffc1c70f4c2feeeb13e607057Daniel Dunbar const ArgList &TCArgs, 18802633b541b04ad5ffc1c70f4c2feeeb13e607057Daniel Dunbar const char *LinkingOutput) const; 18902633b541b04ad5ffc1c70f4c2feeeb13e607057Daniel Dunbar }; 19002633b541b04ad5ffc1c70f4c2feeeb13e607057Daniel Dunbar 19102633b541b04ad5ffc1c70f4c2feeeb13e607057Daniel Dunbar class VISIBILITY_HIDDEN Link : public Tool { 19202633b541b04ad5ffc1c70f4c2feeeb13e607057Daniel Dunbar void AddDarwinArch(const ArgList &Args, ArgStringList &CmdArgs) const; 19302633b541b04ad5ffc1c70f4c2feeeb13e607057Daniel Dunbar void AddDarwinSubArch(const ArgList &Args, ArgStringList &CmdArgs) const; 19402633b541b04ad5ffc1c70f4c2feeeb13e607057Daniel Dunbar void AddLinkArgs(const ArgList &Args, ArgStringList &CmdArgs) const; 19502633b541b04ad5ffc1c70f4c2feeeb13e607057Daniel Dunbar 19602633b541b04ad5ffc1c70f4c2feeeb13e607057Daniel Dunbar /// The default macosx-version-min. 19702633b541b04ad5ffc1c70f4c2feeeb13e607057Daniel Dunbar const char *MacosxVersionMin; 19802633b541b04ad5ffc1c70f4c2feeeb13e607057Daniel Dunbar 19902633b541b04ad5ffc1c70f4c2feeeb13e607057Daniel Dunbar const toolchains::Darwin_X86 &getDarwinToolChain() const; 20002633b541b04ad5ffc1c70f4c2feeeb13e607057Daniel Dunbar 20102633b541b04ad5ffc1c70f4c2feeeb13e607057Daniel Dunbar public: 20202633b541b04ad5ffc1c70f4c2feeeb13e607057Daniel Dunbar Link(const ToolChain &TC, 20302633b541b04ad5ffc1c70f4c2feeeb13e607057Daniel Dunbar const char *_MacosxVersionMin) 20402633b541b04ad5ffc1c70f4c2feeeb13e607057Daniel Dunbar : Tool("darwin::Link", TC), MacosxVersionMin(_MacosxVersionMin) { 20502633b541b04ad5ffc1c70f4c2feeeb13e607057Daniel Dunbar } 20602633b541b04ad5ffc1c70f4c2feeeb13e607057Daniel Dunbar 20702633b541b04ad5ffc1c70f4c2feeeb13e607057Daniel Dunbar virtual bool acceptsPipedInput() const { return false; } 20802633b541b04ad5ffc1c70f4c2feeeb13e607057Daniel Dunbar virtual bool canPipeOutput() const { return false; } 20902633b541b04ad5ffc1c70f4c2feeeb13e607057Daniel Dunbar virtual bool hasIntegratedCPP() const { return false; } 21002633b541b04ad5ffc1c70f4c2feeeb13e607057Daniel Dunbar 21102633b541b04ad5ffc1c70f4c2feeeb13e607057Daniel Dunbar virtual void ConstructJob(Compilation &C, const JobAction &JA, 2128cac5f7e1ce63dd77ee0fb4ef68f9fa804f41ea6Daniel Dunbar Job &Dest, 2138cac5f7e1ce63dd77ee0fb4ef68f9fa804f41ea6Daniel Dunbar const InputInfo &Output, 2148cac5f7e1ce63dd77ee0fb4ef68f9fa804f41ea6Daniel Dunbar const InputInfoList &Inputs, 2158cac5f7e1ce63dd77ee0fb4ef68f9fa804f41ea6Daniel Dunbar const ArgList &TCArgs, 2168cac5f7e1ce63dd77ee0fb4ef68f9fa804f41ea6Daniel Dunbar const char *LinkingOutput) const; 2178cac5f7e1ce63dd77ee0fb4ef68f9fa804f41ea6Daniel Dunbar }; 2188cac5f7e1ce63dd77ee0fb4ef68f9fa804f41ea6Daniel Dunbar 219ff7488dc9a766f94daf54d81b03ab9160d0bfd88Daniel Dunbar class VISIBILITY_HIDDEN Lipo : public Tool { 220ff7488dc9a766f94daf54d81b03ab9160d0bfd88Daniel Dunbar public: 2218cac5f7e1ce63dd77ee0fb4ef68f9fa804f41ea6Daniel Dunbar Lipo(const ToolChain &TC) : Tool("darwin::Lipo", TC) {} 222ff7488dc9a766f94daf54d81b03ab9160d0bfd88Daniel Dunbar 223ff7488dc9a766f94daf54d81b03ab9160d0bfd88Daniel Dunbar virtual bool acceptsPipedInput() const { return false; } 224ff7488dc9a766f94daf54d81b03ab9160d0bfd88Daniel Dunbar virtual bool canPipeOutput() const { return false; } 225ff7488dc9a766f94daf54d81b03ab9160d0bfd88Daniel Dunbar virtual bool hasIntegratedCPP() const { return false; } 226ff7488dc9a766f94daf54d81b03ab9160d0bfd88Daniel Dunbar 227ff7488dc9a766f94daf54d81b03ab9160d0bfd88Daniel Dunbar virtual void ConstructJob(Compilation &C, const JobAction &JA, 228ff7488dc9a766f94daf54d81b03ab9160d0bfd88Daniel Dunbar Job &Dest, 229ff7488dc9a766f94daf54d81b03ab9160d0bfd88Daniel Dunbar const InputInfo &Output, 230ff7488dc9a766f94daf54d81b03ab9160d0bfd88Daniel Dunbar const InputInfoList &Inputs, 231ff7488dc9a766f94daf54d81b03ab9160d0bfd88Daniel Dunbar const ArgList &TCArgs, 232ff7488dc9a766f94daf54d81b03ab9160d0bfd88Daniel Dunbar const char *LinkingOutput) const; 233ff7488dc9a766f94daf54d81b03ab9160d0bfd88Daniel Dunbar }; 234ff7488dc9a766f94daf54d81b03ab9160d0bfd88Daniel Dunbar} 235ff7488dc9a766f94daf54d81b03ab9160d0bfd88Daniel Dunbar 23668a31d406c6dc4382c700d1199b062de2aa7e1daDaniel Dunbar /// freebsd -- Directly call GNU Binutils assembler and linker 23768a31d406c6dc4382c700d1199b062de2aa7e1daDaniel Dunbarnamespace freebsd { 23868a31d406c6dc4382c700d1199b062de2aa7e1daDaniel Dunbar class VISIBILITY_HIDDEN Assemble : public Tool { 23968a31d406c6dc4382c700d1199b062de2aa7e1daDaniel Dunbar public: 24068a31d406c6dc4382c700d1199b062de2aa7e1daDaniel Dunbar Assemble(const ToolChain &TC) : Tool("freebsd::Assemble", TC) {} 24168a31d406c6dc4382c700d1199b062de2aa7e1daDaniel Dunbar 24268a31d406c6dc4382c700d1199b062de2aa7e1daDaniel Dunbar virtual bool acceptsPipedInput() const { return true; } 24368a31d406c6dc4382c700d1199b062de2aa7e1daDaniel Dunbar virtual bool canPipeOutput() const { return true; } 24468a31d406c6dc4382c700d1199b062de2aa7e1daDaniel Dunbar virtual bool hasIntegratedCPP() const { return false; } 24568a31d406c6dc4382c700d1199b062de2aa7e1daDaniel Dunbar 24668a31d406c6dc4382c700d1199b062de2aa7e1daDaniel Dunbar virtual void ConstructJob(Compilation &C, const JobAction &JA, 24768a31d406c6dc4382c700d1199b062de2aa7e1daDaniel Dunbar Job &Dest, 24868a31d406c6dc4382c700d1199b062de2aa7e1daDaniel Dunbar const InputInfo &Output, 24968a31d406c6dc4382c700d1199b062de2aa7e1daDaniel Dunbar const InputInfoList &Inputs, 25068a31d406c6dc4382c700d1199b062de2aa7e1daDaniel Dunbar const ArgList &TCArgs, 25168a31d406c6dc4382c700d1199b062de2aa7e1daDaniel Dunbar const char *LinkingOutput) const; 25268a31d406c6dc4382c700d1199b062de2aa7e1daDaniel Dunbar }; 25368a31d406c6dc4382c700d1199b062de2aa7e1daDaniel Dunbar} 25468a31d406c6dc4382c700d1199b062de2aa7e1daDaniel Dunbar 2559c073ff462eb75ccbb1c4446e21c148f3fc618e1Daniel Dunbar} // end namespace toolchains 2569c073ff462eb75ccbb1c4446e21c148f3fc618e1Daniel Dunbar} // end namespace driver 2579c073ff462eb75ccbb1c4446e21c148f3fc618e1Daniel Dunbar} // end namespace clang 2589c073ff462eb75ccbb1c4446e21c148f3fc618e1Daniel Dunbar 2599c073ff462eb75ccbb1c4446e21c148f3fc618e1Daniel Dunbar#endif 260