Tools.h revision c21c485b4fb58ef5d55cf3e523263dd824a2ace4
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 { 28c21c485b4fb58ef5d55cf3e523263dd824a2ace4Daniel Dunbar void AddPreprocessingOptions(const ArgList &Args, 29c21c485b4fb58ef5d55cf3e523263dd824a2ace4Daniel Dunbar ArgStringList &CmdArgs, 30c21c485b4fb58ef5d55cf3e523263dd824a2ace4Daniel Dunbar const InputInfo &Output, 31c21c485b4fb58ef5d55cf3e523263dd824a2ace4Daniel Dunbar const InputInfoList &Inputs) const; 32c21c485b4fb58ef5d55cf3e523263dd824a2ace4Daniel Dunbar 339c073ff462eb75ccbb1c4446e21c148f3fc618e1Daniel Dunbar public: 3431b1e5437e7435879fc044afb77ff27096008e72Daniel Dunbar Clang(const ToolChain &TC) : Tool("clang", TC) {} 359c073ff462eb75ccbb1c4446e21c148f3fc618e1Daniel Dunbar 369c073ff462eb75ccbb1c4446e21c148f3fc618e1Daniel Dunbar virtual bool acceptsPipedInput() const { return true; } 379c073ff462eb75ccbb1c4446e21c148f3fc618e1Daniel Dunbar virtual bool canPipeOutput() const { return true; } 389c073ff462eb75ccbb1c4446e21c148f3fc618e1Daniel Dunbar virtual bool hasIntegratedCPP() const { return true; } 3947ac7d27c44bd64a7d0fc03d4babc196cf2b8230Daniel Dunbar 4047ac7d27c44bd64a7d0fc03d4babc196cf2b8230Daniel Dunbar virtual void ConstructJob(Compilation &C, const JobAction &JA, 41871adcf4e41285e3f4c3b62eaa1b2e05b60b92daDaniel Dunbar Job &Dest, 4262cf601812e03dd9bc5df42b8ef06a0cdedc38bfDaniel Dunbar const InputInfo &Output, 4362cf601812e03dd9bc5df42b8ef06a0cdedc38bfDaniel Dunbar const InputInfoList &Inputs, 4447ac7d27c44bd64a7d0fc03d4babc196cf2b8230Daniel Dunbar const ArgList &TCArgs, 4547ac7d27c44bd64a7d0fc03d4babc196cf2b8230Daniel Dunbar const char *LinkingOutput) const; 469c073ff462eb75ccbb1c4446e21c148f3fc618e1Daniel Dunbar }; 479c073ff462eb75ccbb1c4446e21c148f3fc618e1Daniel Dunbar 4831b1e5437e7435879fc044afb77ff27096008e72Daniel Dunbar /// gcc - Generic GCC tool implementations. 4931b1e5437e7435879fc044afb77ff27096008e72Daniel Dunbarnamespace gcc { 50b488c1dac8e53206f07103d794a62a3f5012c0f4Daniel Dunbar class VISIBILITY_HIDDEN Common : public Tool { 519c073ff462eb75ccbb1c4446e21c148f3fc618e1Daniel Dunbar public: 52b488c1dac8e53206f07103d794a62a3f5012c0f4Daniel Dunbar Common(const char *Name, const ToolChain &TC) : Tool(Name, TC) {} 5347ac7d27c44bd64a7d0fc03d4babc196cf2b8230Daniel Dunbar 5447ac7d27c44bd64a7d0fc03d4babc196cf2b8230Daniel Dunbar virtual void ConstructJob(Compilation &C, const JobAction &JA, 55871adcf4e41285e3f4c3b62eaa1b2e05b60b92daDaniel Dunbar Job &Dest, 5662cf601812e03dd9bc5df42b8ef06a0cdedc38bfDaniel Dunbar const InputInfo &Output, 5762cf601812e03dd9bc5df42b8ef06a0cdedc38bfDaniel Dunbar const InputInfoList &Inputs, 5847ac7d27c44bd64a7d0fc03d4babc196cf2b8230Daniel Dunbar const ArgList &TCArgs, 5947ac7d27c44bd64a7d0fc03d4babc196cf2b8230Daniel Dunbar const char *LinkingOutput) const; 60b488c1dac8e53206f07103d794a62a3f5012c0f4Daniel Dunbar 61b488c1dac8e53206f07103d794a62a3f5012c0f4Daniel Dunbar /// RenderExtraToolArgs - Render any arguments necessary to force 62b488c1dac8e53206f07103d794a62a3f5012c0f4Daniel Dunbar /// the particular tool mode. 63b488c1dac8e53206f07103d794a62a3f5012c0f4Daniel Dunbar virtual void RenderExtraToolArgs(ArgStringList &CmdArgs) const = 0; 649c073ff462eb75ccbb1c4446e21c148f3fc618e1Daniel Dunbar }; 659c073ff462eb75ccbb1c4446e21c148f3fc618e1Daniel Dunbar 66b488c1dac8e53206f07103d794a62a3f5012c0f4Daniel Dunbar 67b488c1dac8e53206f07103d794a62a3f5012c0f4Daniel Dunbar class VISIBILITY_HIDDEN Preprocess : public Common { 689c073ff462eb75ccbb1c4446e21c148f3fc618e1Daniel Dunbar public: 69b488c1dac8e53206f07103d794a62a3f5012c0f4Daniel Dunbar Preprocess(const ToolChain &TC) : Common("gcc::Preprocess", TC) {} 70b488c1dac8e53206f07103d794a62a3f5012c0f4Daniel Dunbar 71b488c1dac8e53206f07103d794a62a3f5012c0f4Daniel Dunbar virtual bool acceptsPipedInput() const { return true; } 72b488c1dac8e53206f07103d794a62a3f5012c0f4Daniel Dunbar virtual bool canPipeOutput() const { return true; } 73b488c1dac8e53206f07103d794a62a3f5012c0f4Daniel Dunbar virtual bool hasIntegratedCPP() const { return false; } 74b488c1dac8e53206f07103d794a62a3f5012c0f4Daniel Dunbar 75b488c1dac8e53206f07103d794a62a3f5012c0f4Daniel Dunbar virtual void RenderExtraToolArgs(ArgStringList &CmdArgs) const; 76b488c1dac8e53206f07103d794a62a3f5012c0f4Daniel Dunbar }; 77b488c1dac8e53206f07103d794a62a3f5012c0f4Daniel Dunbar 78b488c1dac8e53206f07103d794a62a3f5012c0f4Daniel Dunbar class VISIBILITY_HIDDEN Precompile : public Common { 79b488c1dac8e53206f07103d794a62a3f5012c0f4Daniel Dunbar public: 80b488c1dac8e53206f07103d794a62a3f5012c0f4Daniel Dunbar Precompile(const ToolChain &TC) : Common("gcc::Precompile", TC) {} 819c073ff462eb75ccbb1c4446e21c148f3fc618e1Daniel Dunbar 829c073ff462eb75ccbb1c4446e21c148f3fc618e1Daniel Dunbar virtual bool acceptsPipedInput() const { return true; } 839c073ff462eb75ccbb1c4446e21c148f3fc618e1Daniel Dunbar virtual bool canPipeOutput() const { return false; } 849c073ff462eb75ccbb1c4446e21c148f3fc618e1Daniel Dunbar virtual bool hasIntegratedCPP() const { return true; } 8547ac7d27c44bd64a7d0fc03d4babc196cf2b8230Daniel Dunbar 86b488c1dac8e53206f07103d794a62a3f5012c0f4Daniel Dunbar virtual void RenderExtraToolArgs(ArgStringList &CmdArgs) const; 879c073ff462eb75ccbb1c4446e21c148f3fc618e1Daniel Dunbar }; 889c073ff462eb75ccbb1c4446e21c148f3fc618e1Daniel Dunbar 89b488c1dac8e53206f07103d794a62a3f5012c0f4Daniel Dunbar class VISIBILITY_HIDDEN Compile : public Common { 909c073ff462eb75ccbb1c4446e21c148f3fc618e1Daniel Dunbar public: 91b488c1dac8e53206f07103d794a62a3f5012c0f4Daniel Dunbar Compile(const ToolChain &TC) : Common("gcc::Compile", TC) {} 929c073ff462eb75ccbb1c4446e21c148f3fc618e1Daniel Dunbar 939c073ff462eb75ccbb1c4446e21c148f3fc618e1Daniel Dunbar virtual bool acceptsPipedInput() const { return true; } 949c073ff462eb75ccbb1c4446e21c148f3fc618e1Daniel Dunbar virtual bool canPipeOutput() const { return true; } 959c073ff462eb75ccbb1c4446e21c148f3fc618e1Daniel Dunbar virtual bool hasIntegratedCPP() const { return true; } 9647ac7d27c44bd64a7d0fc03d4babc196cf2b8230Daniel Dunbar 97b488c1dac8e53206f07103d794a62a3f5012c0f4Daniel Dunbar virtual void RenderExtraToolArgs(ArgStringList &CmdArgs) const; 989c073ff462eb75ccbb1c4446e21c148f3fc618e1Daniel Dunbar }; 999c073ff462eb75ccbb1c4446e21c148f3fc618e1Daniel Dunbar 100b488c1dac8e53206f07103d794a62a3f5012c0f4Daniel Dunbar class VISIBILITY_HIDDEN Assemble : public Common { 1019c073ff462eb75ccbb1c4446e21c148f3fc618e1Daniel Dunbar public: 102b488c1dac8e53206f07103d794a62a3f5012c0f4Daniel Dunbar Assemble(const ToolChain &TC) : Common("gcc::Assemble", TC) {} 1039c073ff462eb75ccbb1c4446e21c148f3fc618e1Daniel Dunbar 1049c073ff462eb75ccbb1c4446e21c148f3fc618e1Daniel Dunbar virtual bool acceptsPipedInput() const { return true; } 1059c073ff462eb75ccbb1c4446e21c148f3fc618e1Daniel Dunbar virtual bool canPipeOutput() const { return false; } 1069c073ff462eb75ccbb1c4446e21c148f3fc618e1Daniel Dunbar virtual bool hasIntegratedCPP() const { return false; } 10747ac7d27c44bd64a7d0fc03d4babc196cf2b8230Daniel Dunbar 108b488c1dac8e53206f07103d794a62a3f5012c0f4Daniel Dunbar virtual void RenderExtraToolArgs(ArgStringList &CmdArgs) const; 1099c073ff462eb75ccbb1c4446e21c148f3fc618e1Daniel Dunbar }; 1109c073ff462eb75ccbb1c4446e21c148f3fc618e1Daniel Dunbar 111b488c1dac8e53206f07103d794a62a3f5012c0f4Daniel Dunbar class VISIBILITY_HIDDEN Link : public Common { 1129c073ff462eb75ccbb1c4446e21c148f3fc618e1Daniel Dunbar public: 113b488c1dac8e53206f07103d794a62a3f5012c0f4Daniel Dunbar Link(const ToolChain &TC) : Common("gcc::Link", TC) {} 1149c073ff462eb75ccbb1c4446e21c148f3fc618e1Daniel Dunbar 1159c073ff462eb75ccbb1c4446e21c148f3fc618e1Daniel Dunbar virtual bool acceptsPipedInput() const { return false; } 1169c073ff462eb75ccbb1c4446e21c148f3fc618e1Daniel Dunbar virtual bool canPipeOutput() const { return false; } 1179c073ff462eb75ccbb1c4446e21c148f3fc618e1Daniel Dunbar virtual bool hasIntegratedCPP() const { return false; } 11847ac7d27c44bd64a7d0fc03d4babc196cf2b8230Daniel Dunbar 119b488c1dac8e53206f07103d794a62a3f5012c0f4Daniel Dunbar virtual void RenderExtraToolArgs(ArgStringList &CmdArgs) const; 1209c073ff462eb75ccbb1c4446e21c148f3fc618e1Daniel Dunbar }; 12131b1e5437e7435879fc044afb77ff27096008e72Daniel Dunbar} // end namespace gcc 1229c073ff462eb75ccbb1c4446e21c148f3fc618e1Daniel Dunbar 123ff7488dc9a766f94daf54d81b03ab9160d0bfd88Daniel Dunbarnamespace darwin { 12440f1265ebd42ece3e7f7917319b56012e8e2bce2Daniel Dunbar class VISIBILITY_HIDDEN CC1 : public Tool { 125a5a7bd0de7b6b80212095195a055a4a43f21d4b2Daniel Dunbar public: 126a5a7bd0de7b6b80212095195a055a4a43f21d4b2Daniel Dunbar static const char *getBaseInputName(const ArgList &Args, 127a5a7bd0de7b6b80212095195a055a4a43f21d4b2Daniel Dunbar const InputInfoList &Input); 128a5a7bd0de7b6b80212095195a055a4a43f21d4b2Daniel Dunbar static const char *getBaseInputStem(const ArgList &Args, 129a5a7bd0de7b6b80212095195a055a4a43f21d4b2Daniel Dunbar const InputInfoList &Input); 130a5a7bd0de7b6b80212095195a055a4a43f21d4b2Daniel Dunbar static const char *getDependencyFileName(const ArgList &Args, 131a5a7bd0de7b6b80212095195a055a4a43f21d4b2Daniel Dunbar const InputInfoList &Inputs); 132a5a7bd0de7b6b80212095195a055a4a43f21d4b2Daniel Dunbar 13340f1265ebd42ece3e7f7917319b56012e8e2bce2Daniel Dunbar protected: 13440f1265ebd42ece3e7f7917319b56012e8e2bce2Daniel Dunbar const char *getCC1Name(types::ID Type) const; 135a3ec60e0cf2a1916f479288998d31bd980b1a306Daniel Dunbar 136a3ec60e0cf2a1916f479288998d31bd980b1a306Daniel Dunbar void AddCC1Args(const ArgList &Args, ArgStringList &CmdArgs) const; 13740f1265ebd42ece3e7f7917319b56012e8e2bce2Daniel Dunbar void AddCC1OptionsArgs(const ArgList &Args, ArgStringList &CmdArgs, 13840f1265ebd42ece3e7f7917319b56012e8e2bce2Daniel Dunbar const InputInfoList &Inputs, 139a3ec60e0cf2a1916f479288998d31bd980b1a306Daniel Dunbar const ArgStringList &OutputArgs) const; 14040f1265ebd42ece3e7f7917319b56012e8e2bce2Daniel Dunbar void AddCPPOptionsArgs(const ArgList &Args, ArgStringList &CmdArgs, 14140f1265ebd42ece3e7f7917319b56012e8e2bce2Daniel Dunbar const InputInfoList &Inputs, 142a3ec60e0cf2a1916f479288998d31bd980b1a306Daniel Dunbar const ArgStringList &OutputArgs) const; 143a3ec60e0cf2a1916f479288998d31bd980b1a306Daniel Dunbar void AddCPPUniqueOptionsArgs(const ArgList &Args, 144a3ec60e0cf2a1916f479288998d31bd980b1a306Daniel Dunbar ArgStringList &CmdArgs, 145a3ec60e0cf2a1916f479288998d31bd980b1a306Daniel Dunbar const InputInfoList &Inputs) const; 146a3ec60e0cf2a1916f479288998d31bd980b1a306Daniel Dunbar void AddCPPArgs(const ArgList &Args, ArgStringList &CmdArgs) const; 14740f1265ebd42ece3e7f7917319b56012e8e2bce2Daniel Dunbar 14840f1265ebd42ece3e7f7917319b56012e8e2bce2Daniel Dunbar public: 14940f1265ebd42ece3e7f7917319b56012e8e2bce2Daniel Dunbar CC1(const char *Name, const ToolChain &TC) : Tool(Name, TC) {} 15040f1265ebd42ece3e7f7917319b56012e8e2bce2Daniel Dunbar 15140f1265ebd42ece3e7f7917319b56012e8e2bce2Daniel Dunbar virtual bool acceptsPipedInput() const { return true; } 15240f1265ebd42ece3e7f7917319b56012e8e2bce2Daniel Dunbar virtual bool canPipeOutput() const { return true; } 15340f1265ebd42ece3e7f7917319b56012e8e2bce2Daniel Dunbar virtual bool hasIntegratedCPP() const { return true; } 15440f1265ebd42ece3e7f7917319b56012e8e2bce2Daniel Dunbar }; 15540f1265ebd42ece3e7f7917319b56012e8e2bce2Daniel Dunbar 15640f1265ebd42ece3e7f7917319b56012e8e2bce2Daniel Dunbar class VISIBILITY_HIDDEN Preprocess : public CC1 { 15740f1265ebd42ece3e7f7917319b56012e8e2bce2Daniel Dunbar public: 15840f1265ebd42ece3e7f7917319b56012e8e2bce2Daniel Dunbar Preprocess(const ToolChain &TC) : CC1("darwin::Preprocess", TC) {} 15940f1265ebd42ece3e7f7917319b56012e8e2bce2Daniel Dunbar 16040f1265ebd42ece3e7f7917319b56012e8e2bce2Daniel Dunbar virtual void ConstructJob(Compilation &C, const JobAction &JA, 16140f1265ebd42ece3e7f7917319b56012e8e2bce2Daniel Dunbar Job &Dest, 16240f1265ebd42ece3e7f7917319b56012e8e2bce2Daniel Dunbar const InputInfo &Output, 16340f1265ebd42ece3e7f7917319b56012e8e2bce2Daniel Dunbar const InputInfoList &Inputs, 16440f1265ebd42ece3e7f7917319b56012e8e2bce2Daniel Dunbar const ArgList &TCArgs, 16540f1265ebd42ece3e7f7917319b56012e8e2bce2Daniel Dunbar const char *LinkingOutput) const; 16640f1265ebd42ece3e7f7917319b56012e8e2bce2Daniel Dunbar }; 16740f1265ebd42ece3e7f7917319b56012e8e2bce2Daniel Dunbar 16840f1265ebd42ece3e7f7917319b56012e8e2bce2Daniel Dunbar class VISIBILITY_HIDDEN Compile : public CC1 { 16940f1265ebd42ece3e7f7917319b56012e8e2bce2Daniel Dunbar public: 17040f1265ebd42ece3e7f7917319b56012e8e2bce2Daniel Dunbar Compile(const ToolChain &TC) : CC1("darwin::Compile", TC) {} 17140f1265ebd42ece3e7f7917319b56012e8e2bce2Daniel Dunbar 17240f1265ebd42ece3e7f7917319b56012e8e2bce2Daniel Dunbar virtual void ConstructJob(Compilation &C, const JobAction &JA, 17340f1265ebd42ece3e7f7917319b56012e8e2bce2Daniel Dunbar Job &Dest, 17440f1265ebd42ece3e7f7917319b56012e8e2bce2Daniel Dunbar const InputInfo &Output, 17540f1265ebd42ece3e7f7917319b56012e8e2bce2Daniel Dunbar const InputInfoList &Inputs, 17640f1265ebd42ece3e7f7917319b56012e8e2bce2Daniel Dunbar const ArgList &TCArgs, 17740f1265ebd42ece3e7f7917319b56012e8e2bce2Daniel Dunbar const char *LinkingOutput) const; 17840f1265ebd42ece3e7f7917319b56012e8e2bce2Daniel Dunbar }; 17940f1265ebd42ece3e7f7917319b56012e8e2bce2Daniel Dunbar 1808cac5f7e1ce63dd77ee0fb4ef68f9fa804f41ea6Daniel Dunbar class VISIBILITY_HIDDEN Assemble : public Tool { 1818cac5f7e1ce63dd77ee0fb4ef68f9fa804f41ea6Daniel Dunbar public: 1828cac5f7e1ce63dd77ee0fb4ef68f9fa804f41ea6Daniel Dunbar Assemble(const ToolChain &TC) : Tool("darwin::Assemble", TC) {} 1838cac5f7e1ce63dd77ee0fb4ef68f9fa804f41ea6Daniel Dunbar 1848cac5f7e1ce63dd77ee0fb4ef68f9fa804f41ea6Daniel Dunbar virtual bool acceptsPipedInput() const { return true; } 1858cac5f7e1ce63dd77ee0fb4ef68f9fa804f41ea6Daniel Dunbar virtual bool canPipeOutput() const { return false; } 1868cac5f7e1ce63dd77ee0fb4ef68f9fa804f41ea6Daniel Dunbar virtual bool hasIntegratedCPP() const { return false; } 1878cac5f7e1ce63dd77ee0fb4ef68f9fa804f41ea6Daniel Dunbar 1888cac5f7e1ce63dd77ee0fb4ef68f9fa804f41ea6Daniel Dunbar virtual void ConstructJob(Compilation &C, const JobAction &JA, 18902633b541b04ad5ffc1c70f4c2feeeb13e607057Daniel Dunbar Job &Dest, 19002633b541b04ad5ffc1c70f4c2feeeb13e607057Daniel Dunbar const InputInfo &Output, 19102633b541b04ad5ffc1c70f4c2feeeb13e607057Daniel Dunbar const InputInfoList &Inputs, 19202633b541b04ad5ffc1c70f4c2feeeb13e607057Daniel Dunbar const ArgList &TCArgs, 19302633b541b04ad5ffc1c70f4c2feeeb13e607057Daniel Dunbar const char *LinkingOutput) const; 19402633b541b04ad5ffc1c70f4c2feeeb13e607057Daniel Dunbar }; 19502633b541b04ad5ffc1c70f4c2feeeb13e607057Daniel Dunbar 19602633b541b04ad5ffc1c70f4c2feeeb13e607057Daniel Dunbar class VISIBILITY_HIDDEN Link : public Tool { 19702633b541b04ad5ffc1c70f4c2feeeb13e607057Daniel Dunbar void AddDarwinArch(const ArgList &Args, ArgStringList &CmdArgs) const; 19802633b541b04ad5ffc1c70f4c2feeeb13e607057Daniel Dunbar void AddDarwinSubArch(const ArgList &Args, ArgStringList &CmdArgs) const; 19902633b541b04ad5ffc1c70f4c2feeeb13e607057Daniel Dunbar void AddLinkArgs(const ArgList &Args, ArgStringList &CmdArgs) const; 20002633b541b04ad5ffc1c70f4c2feeeb13e607057Daniel Dunbar 20102633b541b04ad5ffc1c70f4c2feeeb13e607057Daniel Dunbar /// The default macosx-version-min. 20202633b541b04ad5ffc1c70f4c2feeeb13e607057Daniel Dunbar const char *MacosxVersionMin; 20302633b541b04ad5ffc1c70f4c2feeeb13e607057Daniel Dunbar 20402633b541b04ad5ffc1c70f4c2feeeb13e607057Daniel Dunbar const toolchains::Darwin_X86 &getDarwinToolChain() const; 20502633b541b04ad5ffc1c70f4c2feeeb13e607057Daniel Dunbar 20602633b541b04ad5ffc1c70f4c2feeeb13e607057Daniel Dunbar public: 20702633b541b04ad5ffc1c70f4c2feeeb13e607057Daniel Dunbar Link(const ToolChain &TC, 20802633b541b04ad5ffc1c70f4c2feeeb13e607057Daniel Dunbar const char *_MacosxVersionMin) 20902633b541b04ad5ffc1c70f4c2feeeb13e607057Daniel Dunbar : Tool("darwin::Link", TC), MacosxVersionMin(_MacosxVersionMin) { 21002633b541b04ad5ffc1c70f4c2feeeb13e607057Daniel Dunbar } 21102633b541b04ad5ffc1c70f4c2feeeb13e607057Daniel Dunbar 21202633b541b04ad5ffc1c70f4c2feeeb13e607057Daniel Dunbar virtual bool acceptsPipedInput() const { return false; } 21302633b541b04ad5ffc1c70f4c2feeeb13e607057Daniel Dunbar virtual bool canPipeOutput() const { return false; } 21402633b541b04ad5ffc1c70f4c2feeeb13e607057Daniel Dunbar virtual bool hasIntegratedCPP() const { return false; } 21502633b541b04ad5ffc1c70f4c2feeeb13e607057Daniel Dunbar 21602633b541b04ad5ffc1c70f4c2feeeb13e607057Daniel Dunbar virtual void ConstructJob(Compilation &C, const JobAction &JA, 2178cac5f7e1ce63dd77ee0fb4ef68f9fa804f41ea6Daniel Dunbar Job &Dest, 2188cac5f7e1ce63dd77ee0fb4ef68f9fa804f41ea6Daniel Dunbar const InputInfo &Output, 2198cac5f7e1ce63dd77ee0fb4ef68f9fa804f41ea6Daniel Dunbar const InputInfoList &Inputs, 2208cac5f7e1ce63dd77ee0fb4ef68f9fa804f41ea6Daniel Dunbar const ArgList &TCArgs, 2218cac5f7e1ce63dd77ee0fb4ef68f9fa804f41ea6Daniel Dunbar const char *LinkingOutput) const; 2228cac5f7e1ce63dd77ee0fb4ef68f9fa804f41ea6Daniel Dunbar }; 2238cac5f7e1ce63dd77ee0fb4ef68f9fa804f41ea6Daniel Dunbar 224ff7488dc9a766f94daf54d81b03ab9160d0bfd88Daniel Dunbar class VISIBILITY_HIDDEN Lipo : public Tool { 225ff7488dc9a766f94daf54d81b03ab9160d0bfd88Daniel Dunbar public: 2268cac5f7e1ce63dd77ee0fb4ef68f9fa804f41ea6Daniel Dunbar Lipo(const ToolChain &TC) : Tool("darwin::Lipo", TC) {} 227ff7488dc9a766f94daf54d81b03ab9160d0bfd88Daniel Dunbar 228ff7488dc9a766f94daf54d81b03ab9160d0bfd88Daniel Dunbar virtual bool acceptsPipedInput() const { return false; } 229ff7488dc9a766f94daf54d81b03ab9160d0bfd88Daniel Dunbar virtual bool canPipeOutput() const { return false; } 230ff7488dc9a766f94daf54d81b03ab9160d0bfd88Daniel Dunbar virtual bool hasIntegratedCPP() const { return false; } 231ff7488dc9a766f94daf54d81b03ab9160d0bfd88Daniel Dunbar 232ff7488dc9a766f94daf54d81b03ab9160d0bfd88Daniel Dunbar virtual void ConstructJob(Compilation &C, const JobAction &JA, 233ff7488dc9a766f94daf54d81b03ab9160d0bfd88Daniel Dunbar Job &Dest, 234ff7488dc9a766f94daf54d81b03ab9160d0bfd88Daniel Dunbar const InputInfo &Output, 235ff7488dc9a766f94daf54d81b03ab9160d0bfd88Daniel Dunbar const InputInfoList &Inputs, 236ff7488dc9a766f94daf54d81b03ab9160d0bfd88Daniel Dunbar const ArgList &TCArgs, 237ff7488dc9a766f94daf54d81b03ab9160d0bfd88Daniel Dunbar const char *LinkingOutput) const; 238ff7488dc9a766f94daf54d81b03ab9160d0bfd88Daniel Dunbar }; 239ff7488dc9a766f94daf54d81b03ab9160d0bfd88Daniel Dunbar} 240ff7488dc9a766f94daf54d81b03ab9160d0bfd88Daniel Dunbar 24168a31d406c6dc4382c700d1199b062de2aa7e1daDaniel Dunbar /// freebsd -- Directly call GNU Binutils assembler and linker 24268a31d406c6dc4382c700d1199b062de2aa7e1daDaniel Dunbarnamespace freebsd { 24368a31d406c6dc4382c700d1199b062de2aa7e1daDaniel Dunbar class VISIBILITY_HIDDEN Assemble : public Tool { 24468a31d406c6dc4382c700d1199b062de2aa7e1daDaniel Dunbar public: 24568a31d406c6dc4382c700d1199b062de2aa7e1daDaniel Dunbar Assemble(const ToolChain &TC) : Tool("freebsd::Assemble", TC) {} 24668a31d406c6dc4382c700d1199b062de2aa7e1daDaniel Dunbar 24768a31d406c6dc4382c700d1199b062de2aa7e1daDaniel Dunbar virtual bool acceptsPipedInput() const { return true; } 24868a31d406c6dc4382c700d1199b062de2aa7e1daDaniel Dunbar virtual bool canPipeOutput() const { return true; } 24968a31d406c6dc4382c700d1199b062de2aa7e1daDaniel Dunbar virtual bool hasIntegratedCPP() const { return false; } 25068a31d406c6dc4382c700d1199b062de2aa7e1daDaniel Dunbar 25168a31d406c6dc4382c700d1199b062de2aa7e1daDaniel Dunbar virtual void ConstructJob(Compilation &C, const JobAction &JA, 25268a31d406c6dc4382c700d1199b062de2aa7e1daDaniel Dunbar Job &Dest, 25368a31d406c6dc4382c700d1199b062de2aa7e1daDaniel Dunbar const InputInfo &Output, 25468a31d406c6dc4382c700d1199b062de2aa7e1daDaniel Dunbar const InputInfoList &Inputs, 25568a31d406c6dc4382c700d1199b062de2aa7e1daDaniel Dunbar const ArgList &TCArgs, 25668a31d406c6dc4382c700d1199b062de2aa7e1daDaniel Dunbar const char *LinkingOutput) const; 25768a31d406c6dc4382c700d1199b062de2aa7e1daDaniel Dunbar }; 258008f54a54299eaafdaa940e2bdeaf55935ecd95aDaniel Dunbar class VISIBILITY_HIDDEN Link : public Tool { 259008f54a54299eaafdaa940e2bdeaf55935ecd95aDaniel Dunbar public: 260008f54a54299eaafdaa940e2bdeaf55935ecd95aDaniel Dunbar Link(const ToolChain &TC) : Tool("freebsd::Link", TC) {} 261008f54a54299eaafdaa940e2bdeaf55935ecd95aDaniel Dunbar 262008f54a54299eaafdaa940e2bdeaf55935ecd95aDaniel Dunbar virtual bool acceptsPipedInput() const { return true; } 263008f54a54299eaafdaa940e2bdeaf55935ecd95aDaniel Dunbar virtual bool canPipeOutput() const { return true; } 264008f54a54299eaafdaa940e2bdeaf55935ecd95aDaniel Dunbar virtual bool hasIntegratedCPP() const { return false; } 265008f54a54299eaafdaa940e2bdeaf55935ecd95aDaniel Dunbar 266008f54a54299eaafdaa940e2bdeaf55935ecd95aDaniel Dunbar virtual void ConstructJob(Compilation &C, const JobAction &JA, 267008f54a54299eaafdaa940e2bdeaf55935ecd95aDaniel Dunbar Job &Dest, 268008f54a54299eaafdaa940e2bdeaf55935ecd95aDaniel Dunbar const InputInfo &Output, 269008f54a54299eaafdaa940e2bdeaf55935ecd95aDaniel Dunbar const InputInfoList &Inputs, 270008f54a54299eaafdaa940e2bdeaf55935ecd95aDaniel Dunbar const ArgList &TCArgs, 271008f54a54299eaafdaa940e2bdeaf55935ecd95aDaniel Dunbar const char *LinkingOutput) const; 272008f54a54299eaafdaa940e2bdeaf55935ecd95aDaniel Dunbar }; 27368a31d406c6dc4382c700d1199b062de2aa7e1daDaniel Dunbar} 27468a31d406c6dc4382c700d1199b062de2aa7e1daDaniel Dunbar 2759c073ff462eb75ccbb1c4446e21c148f3fc618e1Daniel Dunbar} // end namespace toolchains 2769c073ff462eb75ccbb1c4446e21c148f3fc618e1Daniel Dunbar} // end namespace driver 2779c073ff462eb75ccbb1c4446e21c148f3fc618e1Daniel Dunbar} // end namespace clang 2789c073ff462eb75ccbb1c4446e21c148f3fc618e1Daniel Dunbar 2799c073ff462eb75ccbb1c4446e21c148f3fc618e1Daniel Dunbar#endif 280