Tools.h revision 60a53f24b160724de0e8dd0e142009981540fd26
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 { 24f395528158379e7ea9f6ff4bbb791abadca15aabDaniel Dunbar class Darwin; 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 36b163ef7e7a5d904ef0962a7c38c460be083c4d63Daniel Dunbar void AddARMTargetArgs(const ArgList &Args, ArgStringList &CmdArgs) const; 37ed734737d5af31906e30e537d4a41c760ddcfc59Eric Christopher void AddMIPSTargetArgs(const ArgList &Args, ArgStringList &CmdArgs) const; 386acda16e9c194dcbd0dea64341e182bdb65d0f41Daniel Dunbar void AddX86TargetArgs(const ArgList &Args, ArgStringList &CmdArgs) const; 396acda16e9c194dcbd0dea64341e182bdb65d0f41Daniel Dunbar 409c073ff462eb75ccbb1c4446e21c148f3fc618e1Daniel Dunbar public: 4131b1e5437e7435879fc044afb77ff27096008e72Daniel Dunbar Clang(const ToolChain &TC) : Tool("clang", TC) {} 429c073ff462eb75ccbb1c4446e21c148f3fc618e1Daniel Dunbar 439c073ff462eb75ccbb1c4446e21c148f3fc618e1Daniel Dunbar virtual bool acceptsPipedInput() const { return true; } 449c073ff462eb75ccbb1c4446e21c148f3fc618e1Daniel Dunbar virtual bool canPipeOutput() const { return true; } 4560a53f24b160724de0e8dd0e142009981540fd26Daniel Dunbar virtual bool hasGoodDiagnostics() const { return true; } 468767cbc475ed96397b6f08617814eeb9cab121bdDaniel Dunbar virtual bool hasIntegratedAssembler() const { return true; } 479c073ff462eb75ccbb1c4446e21c148f3fc618e1Daniel Dunbar virtual bool hasIntegratedCPP() const { return true; } 4847ac7d27c44bd64a7d0fc03d4babc196cf2b8230Daniel Dunbar 4947ac7d27c44bd64a7d0fc03d4babc196cf2b8230Daniel Dunbar virtual void ConstructJob(Compilation &C, const JobAction &JA, 50871adcf4e41285e3f4c3b62eaa1b2e05b60b92daDaniel Dunbar Job &Dest, 511eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump const InputInfo &Output, 521eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump const InputInfoList &Inputs, 531eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump const ArgList &TCArgs, 5447ac7d27c44bd64a7d0fc03d4babc196cf2b8230Daniel Dunbar const char *LinkingOutput) const; 559c073ff462eb75ccbb1c4446e21c148f3fc618e1Daniel Dunbar }; 569c073ff462eb75ccbb1c4446e21c148f3fc618e1Daniel Dunbar 5731b1e5437e7435879fc044afb77ff27096008e72Daniel Dunbar /// gcc - Generic GCC tool implementations. 5831b1e5437e7435879fc044afb77ff27096008e72Daniel Dunbarnamespace gcc { 59b488c1dac8e53206f07103d794a62a3f5012c0f4Daniel Dunbar class VISIBILITY_HIDDEN Common : public Tool { 609c073ff462eb75ccbb1c4446e21c148f3fc618e1Daniel Dunbar public: 61b488c1dac8e53206f07103d794a62a3f5012c0f4Daniel Dunbar Common(const char *Name, const ToolChain &TC) : Tool(Name, TC) {} 6247ac7d27c44bd64a7d0fc03d4babc196cf2b8230Daniel Dunbar 6347ac7d27c44bd64a7d0fc03d4babc196cf2b8230Daniel Dunbar virtual void ConstructJob(Compilation &C, const JobAction &JA, 64871adcf4e41285e3f4c3b62eaa1b2e05b60b92daDaniel Dunbar Job &Dest, 651eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump const InputInfo &Output, 661eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump const InputInfoList &Inputs, 671eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump const ArgList &TCArgs, 6847ac7d27c44bd64a7d0fc03d4babc196cf2b8230Daniel Dunbar const char *LinkingOutput) const; 69b488c1dac8e53206f07103d794a62a3f5012c0f4Daniel Dunbar 70b488c1dac8e53206f07103d794a62a3f5012c0f4Daniel Dunbar /// RenderExtraToolArgs - Render any arguments necessary to force 71b488c1dac8e53206f07103d794a62a3f5012c0f4Daniel Dunbar /// the particular tool mode. 7282b51cce8cea6b6bb6175c406c2ab425c91d9dc8Daniel Dunbar virtual void RenderExtraToolArgs(const JobAction &JA, 7382b51cce8cea6b6bb6175c406c2ab425c91d9dc8Daniel Dunbar ArgStringList &CmdArgs) const = 0; 749c073ff462eb75ccbb1c4446e21c148f3fc618e1Daniel Dunbar }; 759c073ff462eb75ccbb1c4446e21c148f3fc618e1Daniel Dunbar 761eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump 77b488c1dac8e53206f07103d794a62a3f5012c0f4Daniel Dunbar class VISIBILITY_HIDDEN Preprocess : public Common { 789c073ff462eb75ccbb1c4446e21c148f3fc618e1Daniel Dunbar public: 79b488c1dac8e53206f07103d794a62a3f5012c0f4Daniel Dunbar Preprocess(const ToolChain &TC) : Common("gcc::Preprocess", TC) {} 80b488c1dac8e53206f07103d794a62a3f5012c0f4Daniel Dunbar 81b488c1dac8e53206f07103d794a62a3f5012c0f4Daniel Dunbar virtual bool acceptsPipedInput() const { return true; } 82b488c1dac8e53206f07103d794a62a3f5012c0f4Daniel Dunbar virtual bool canPipeOutput() const { return true; } 8360a53f24b160724de0e8dd0e142009981540fd26Daniel Dunbar virtual bool hasGoodDiagnostics() const { return true; } 84b488c1dac8e53206f07103d794a62a3f5012c0f4Daniel Dunbar virtual bool hasIntegratedCPP() const { return false; } 85b488c1dac8e53206f07103d794a62a3f5012c0f4Daniel Dunbar 8682b51cce8cea6b6bb6175c406c2ab425c91d9dc8Daniel Dunbar virtual void RenderExtraToolArgs(const JobAction &JA, 8782b51cce8cea6b6bb6175c406c2ab425c91d9dc8Daniel Dunbar ArgStringList &CmdArgs) const; 88b488c1dac8e53206f07103d794a62a3f5012c0f4Daniel Dunbar }; 89b488c1dac8e53206f07103d794a62a3f5012c0f4Daniel Dunbar 90b488c1dac8e53206f07103d794a62a3f5012c0f4Daniel Dunbar class VISIBILITY_HIDDEN Precompile : public Common { 91b488c1dac8e53206f07103d794a62a3f5012c0f4Daniel Dunbar public: 92b488c1dac8e53206f07103d794a62a3f5012c0f4Daniel Dunbar Precompile(const ToolChain &TC) : Common("gcc::Precompile", TC) {} 939c073ff462eb75ccbb1c4446e21c148f3fc618e1Daniel Dunbar 949c073ff462eb75ccbb1c4446e21c148f3fc618e1Daniel Dunbar virtual bool acceptsPipedInput() const { return true; } 959c073ff462eb75ccbb1c4446e21c148f3fc618e1Daniel Dunbar virtual bool canPipeOutput() const { return false; } 9660a53f24b160724de0e8dd0e142009981540fd26Daniel Dunbar virtual bool hasGoodDiagnostics() const { return true; } 979c073ff462eb75ccbb1c4446e21c148f3fc618e1Daniel Dunbar virtual bool hasIntegratedCPP() const { return true; } 9847ac7d27c44bd64a7d0fc03d4babc196cf2b8230Daniel Dunbar 9982b51cce8cea6b6bb6175c406c2ab425c91d9dc8Daniel Dunbar virtual void RenderExtraToolArgs(const JobAction &JA, 10082b51cce8cea6b6bb6175c406c2ab425c91d9dc8Daniel Dunbar ArgStringList &CmdArgs) const; 1019c073ff462eb75ccbb1c4446e21c148f3fc618e1Daniel Dunbar }; 1029c073ff462eb75ccbb1c4446e21c148f3fc618e1Daniel Dunbar 103b488c1dac8e53206f07103d794a62a3f5012c0f4Daniel Dunbar class VISIBILITY_HIDDEN Compile : public Common { 1049c073ff462eb75ccbb1c4446e21c148f3fc618e1Daniel Dunbar public: 105b488c1dac8e53206f07103d794a62a3f5012c0f4Daniel Dunbar Compile(const ToolChain &TC) : Common("gcc::Compile", TC) {} 1069c073ff462eb75ccbb1c4446e21c148f3fc618e1Daniel Dunbar 1079c073ff462eb75ccbb1c4446e21c148f3fc618e1Daniel Dunbar virtual bool acceptsPipedInput() const { return true; } 1089c073ff462eb75ccbb1c4446e21c148f3fc618e1Daniel Dunbar virtual bool canPipeOutput() const { return true; } 10960a53f24b160724de0e8dd0e142009981540fd26Daniel Dunbar virtual bool hasGoodDiagnostics() const { return true; } 1109c073ff462eb75ccbb1c4446e21c148f3fc618e1Daniel Dunbar virtual bool hasIntegratedCPP() const { return true; } 11147ac7d27c44bd64a7d0fc03d4babc196cf2b8230Daniel Dunbar 11282b51cce8cea6b6bb6175c406c2ab425c91d9dc8Daniel Dunbar virtual void RenderExtraToolArgs(const JobAction &JA, 11382b51cce8cea6b6bb6175c406c2ab425c91d9dc8Daniel Dunbar ArgStringList &CmdArgs) const; 1149c073ff462eb75ccbb1c4446e21c148f3fc618e1Daniel Dunbar }; 1159c073ff462eb75ccbb1c4446e21c148f3fc618e1Daniel Dunbar 116b488c1dac8e53206f07103d794a62a3f5012c0f4Daniel Dunbar class VISIBILITY_HIDDEN Assemble : public Common { 1179c073ff462eb75ccbb1c4446e21c148f3fc618e1Daniel Dunbar public: 118b488c1dac8e53206f07103d794a62a3f5012c0f4Daniel Dunbar Assemble(const ToolChain &TC) : Common("gcc::Assemble", TC) {} 1199c073ff462eb75ccbb1c4446e21c148f3fc618e1Daniel Dunbar 1209c073ff462eb75ccbb1c4446e21c148f3fc618e1Daniel Dunbar virtual bool acceptsPipedInput() const { return true; } 1219c073ff462eb75ccbb1c4446e21c148f3fc618e1Daniel Dunbar virtual bool canPipeOutput() const { return false; } 1229c073ff462eb75ccbb1c4446e21c148f3fc618e1Daniel Dunbar virtual bool hasIntegratedCPP() const { return false; } 12347ac7d27c44bd64a7d0fc03d4babc196cf2b8230Daniel Dunbar 12482b51cce8cea6b6bb6175c406c2ab425c91d9dc8Daniel Dunbar virtual void RenderExtraToolArgs(const JobAction &JA, 12582b51cce8cea6b6bb6175c406c2ab425c91d9dc8Daniel Dunbar ArgStringList &CmdArgs) const; 1269c073ff462eb75ccbb1c4446e21c148f3fc618e1Daniel Dunbar }; 1279c073ff462eb75ccbb1c4446e21c148f3fc618e1Daniel Dunbar 128b488c1dac8e53206f07103d794a62a3f5012c0f4Daniel Dunbar class VISIBILITY_HIDDEN Link : public Common { 1299c073ff462eb75ccbb1c4446e21c148f3fc618e1Daniel Dunbar public: 130b488c1dac8e53206f07103d794a62a3f5012c0f4Daniel Dunbar Link(const ToolChain &TC) : Common("gcc::Link", TC) {} 1319c073ff462eb75ccbb1c4446e21c148f3fc618e1Daniel Dunbar 1329c073ff462eb75ccbb1c4446e21c148f3fc618e1Daniel Dunbar virtual bool acceptsPipedInput() const { return false; } 1339c073ff462eb75ccbb1c4446e21c148f3fc618e1Daniel Dunbar virtual bool canPipeOutput() const { return false; } 1349c073ff462eb75ccbb1c4446e21c148f3fc618e1Daniel Dunbar virtual bool hasIntegratedCPP() const { return false; } 13547ac7d27c44bd64a7d0fc03d4babc196cf2b8230Daniel Dunbar 13682b51cce8cea6b6bb6175c406c2ab425c91d9dc8Daniel Dunbar virtual void RenderExtraToolArgs(const JobAction &JA, 13782b51cce8cea6b6bb6175c406c2ab425c91d9dc8Daniel Dunbar ArgStringList &CmdArgs) const; 1389c073ff462eb75ccbb1c4446e21c148f3fc618e1Daniel Dunbar }; 13931b1e5437e7435879fc044afb77ff27096008e72Daniel Dunbar} // end namespace gcc 1409c073ff462eb75ccbb1c4446e21c148f3fc618e1Daniel Dunbar 141ff7488dc9a766f94daf54d81b03ab9160d0bfd88Daniel Dunbarnamespace darwin { 142fbefe6bd6f62a3361813498dc672ab0d6c0d4fd1Daniel Dunbar class VISIBILITY_HIDDEN DarwinTool : public Tool { 143fbefe6bd6f62a3361813498dc672ab0d6c0d4fd1Daniel Dunbar protected: 144fbefe6bd6f62a3361813498dc672ab0d6c0d4fd1Daniel Dunbar void AddDarwinArch(const ArgList &Args, ArgStringList &CmdArgs) const; 145fbefe6bd6f62a3361813498dc672ab0d6c0d4fd1Daniel Dunbar 146fbefe6bd6f62a3361813498dc672ab0d6c0d4fd1Daniel Dunbar const toolchains::Darwin &getDarwinToolChain() const { 147fbefe6bd6f62a3361813498dc672ab0d6c0d4fd1Daniel Dunbar return reinterpret_cast<const toolchains::Darwin&>(getToolChain()); 148fbefe6bd6f62a3361813498dc672ab0d6c0d4fd1Daniel Dunbar } 149fbefe6bd6f62a3361813498dc672ab0d6c0d4fd1Daniel Dunbar 150fbefe6bd6f62a3361813498dc672ab0d6c0d4fd1Daniel Dunbar public: 1517177dee8aee4b432911c91f1b788963bec0cac9fDaniel Dunbar DarwinTool(const char *Name, const ToolChain &TC) : Tool(Name, TC) {} 152fbefe6bd6f62a3361813498dc672ab0d6c0d4fd1Daniel Dunbar }; 153fbefe6bd6f62a3361813498dc672ab0d6c0d4fd1Daniel Dunbar 154fbefe6bd6f62a3361813498dc672ab0d6c0d4fd1Daniel Dunbar class VISIBILITY_HIDDEN CC1 : public DarwinTool { 155a5a7bd0de7b6b80212095195a055a4a43f21d4b2Daniel Dunbar public: 1561eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump static const char *getBaseInputName(const ArgList &Args, 157a5a7bd0de7b6b80212095195a055a4a43f21d4b2Daniel Dunbar const InputInfoList &Input); 1581eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump static const char *getBaseInputStem(const ArgList &Args, 159a5a7bd0de7b6b80212095195a055a4a43f21d4b2Daniel Dunbar const InputInfoList &Input); 1601eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump static const char *getDependencyFileName(const ArgList &Args, 161a5a7bd0de7b6b80212095195a055a4a43f21d4b2Daniel Dunbar const InputInfoList &Inputs); 162a5a7bd0de7b6b80212095195a055a4a43f21d4b2Daniel Dunbar 16340f1265ebd42ece3e7f7917319b56012e8e2bce2Daniel Dunbar protected: 16440f1265ebd42ece3e7f7917319b56012e8e2bce2Daniel Dunbar const char *getCC1Name(types::ID Type) const; 165a3ec60e0cf2a1916f479288998d31bd980b1a306Daniel Dunbar 166a3ec60e0cf2a1916f479288998d31bd980b1a306Daniel Dunbar void AddCC1Args(const ArgList &Args, ArgStringList &CmdArgs) const; 16740f1265ebd42ece3e7f7917319b56012e8e2bce2Daniel Dunbar void AddCC1OptionsArgs(const ArgList &Args, ArgStringList &CmdArgs, 16840f1265ebd42ece3e7f7917319b56012e8e2bce2Daniel Dunbar const InputInfoList &Inputs, 169a3ec60e0cf2a1916f479288998d31bd980b1a306Daniel Dunbar const ArgStringList &OutputArgs) const; 17040f1265ebd42ece3e7f7917319b56012e8e2bce2Daniel Dunbar void AddCPPOptionsArgs(const ArgList &Args, ArgStringList &CmdArgs, 17140f1265ebd42ece3e7f7917319b56012e8e2bce2Daniel Dunbar const InputInfoList &Inputs, 172a3ec60e0cf2a1916f479288998d31bd980b1a306Daniel Dunbar const ArgStringList &OutputArgs) const; 1731eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump void AddCPPUniqueOptionsArgs(const ArgList &Args, 174a3ec60e0cf2a1916f479288998d31bd980b1a306Daniel Dunbar ArgStringList &CmdArgs, 175a3ec60e0cf2a1916f479288998d31bd980b1a306Daniel Dunbar const InputInfoList &Inputs) const; 176a3ec60e0cf2a1916f479288998d31bd980b1a306Daniel Dunbar void AddCPPArgs(const ArgList &Args, ArgStringList &CmdArgs) const; 17740f1265ebd42ece3e7f7917319b56012e8e2bce2Daniel Dunbar 17840f1265ebd42ece3e7f7917319b56012e8e2bce2Daniel Dunbar public: 179fbefe6bd6f62a3361813498dc672ab0d6c0d4fd1Daniel Dunbar CC1(const char *Name, const ToolChain &TC) : DarwinTool(Name, TC) {} 18040f1265ebd42ece3e7f7917319b56012e8e2bce2Daniel Dunbar 18140f1265ebd42ece3e7f7917319b56012e8e2bce2Daniel Dunbar virtual bool acceptsPipedInput() const { return true; } 18240f1265ebd42ece3e7f7917319b56012e8e2bce2Daniel Dunbar virtual bool canPipeOutput() const { return true; } 18360a53f24b160724de0e8dd0e142009981540fd26Daniel Dunbar virtual bool hasGoodDiagnostics() const { return true; } 18440f1265ebd42ece3e7f7917319b56012e8e2bce2Daniel Dunbar virtual bool hasIntegratedCPP() const { return true; } 18540f1265ebd42ece3e7f7917319b56012e8e2bce2Daniel Dunbar }; 18640f1265ebd42ece3e7f7917319b56012e8e2bce2Daniel Dunbar 18740f1265ebd42ece3e7f7917319b56012e8e2bce2Daniel Dunbar class VISIBILITY_HIDDEN Preprocess : public CC1 { 18840f1265ebd42ece3e7f7917319b56012e8e2bce2Daniel Dunbar public: 18940f1265ebd42ece3e7f7917319b56012e8e2bce2Daniel Dunbar Preprocess(const ToolChain &TC) : CC1("darwin::Preprocess", TC) {} 19040f1265ebd42ece3e7f7917319b56012e8e2bce2Daniel Dunbar 19140f1265ebd42ece3e7f7917319b56012e8e2bce2Daniel Dunbar virtual void ConstructJob(Compilation &C, const JobAction &JA, 19240f1265ebd42ece3e7f7917319b56012e8e2bce2Daniel Dunbar Job &Dest, 1931eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump const InputInfo &Output, 1941eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump const InputInfoList &Inputs, 1951eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump const ArgList &TCArgs, 19640f1265ebd42ece3e7f7917319b56012e8e2bce2Daniel Dunbar const char *LinkingOutput) const; 19740f1265ebd42ece3e7f7917319b56012e8e2bce2Daniel Dunbar }; 19840f1265ebd42ece3e7f7917319b56012e8e2bce2Daniel Dunbar 19940f1265ebd42ece3e7f7917319b56012e8e2bce2Daniel Dunbar class VISIBILITY_HIDDEN Compile : public CC1 { 20040f1265ebd42ece3e7f7917319b56012e8e2bce2Daniel Dunbar public: 20140f1265ebd42ece3e7f7917319b56012e8e2bce2Daniel Dunbar Compile(const ToolChain &TC) : CC1("darwin::Compile", TC) {} 20240f1265ebd42ece3e7f7917319b56012e8e2bce2Daniel Dunbar 20340f1265ebd42ece3e7f7917319b56012e8e2bce2Daniel Dunbar virtual void ConstructJob(Compilation &C, const JobAction &JA, 20440f1265ebd42ece3e7f7917319b56012e8e2bce2Daniel Dunbar Job &Dest, 2051eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump const InputInfo &Output, 2061eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump const InputInfoList &Inputs, 2071eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump const ArgList &TCArgs, 20840f1265ebd42ece3e7f7917319b56012e8e2bce2Daniel Dunbar const char *LinkingOutput) const; 20940f1265ebd42ece3e7f7917319b56012e8e2bce2Daniel Dunbar }; 21040f1265ebd42ece3e7f7917319b56012e8e2bce2Daniel Dunbar 211fbefe6bd6f62a3361813498dc672ab0d6c0d4fd1Daniel Dunbar class VISIBILITY_HIDDEN Assemble : public DarwinTool { 2128cac5f7e1ce63dd77ee0fb4ef68f9fa804f41ea6Daniel Dunbar public: 213fbefe6bd6f62a3361813498dc672ab0d6c0d4fd1Daniel Dunbar Assemble(const ToolChain &TC) : DarwinTool("darwin::Assemble", TC) {} 2148cac5f7e1ce63dd77ee0fb4ef68f9fa804f41ea6Daniel Dunbar 2158cac5f7e1ce63dd77ee0fb4ef68f9fa804f41ea6Daniel Dunbar virtual bool acceptsPipedInput() const { return true; } 2168cac5f7e1ce63dd77ee0fb4ef68f9fa804f41ea6Daniel Dunbar virtual bool canPipeOutput() const { return false; } 2178cac5f7e1ce63dd77ee0fb4ef68f9fa804f41ea6Daniel Dunbar virtual bool hasIntegratedCPP() const { return false; } 2188cac5f7e1ce63dd77ee0fb4ef68f9fa804f41ea6Daniel Dunbar 2198cac5f7e1ce63dd77ee0fb4ef68f9fa804f41ea6Daniel Dunbar virtual void ConstructJob(Compilation &C, const JobAction &JA, 22002633b541b04ad5ffc1c70f4c2feeeb13e607057Daniel Dunbar Job &Dest, 2211eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump const InputInfo &Output, 2221eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump const InputInfoList &Inputs, 2231eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump const ArgList &TCArgs, 22402633b541b04ad5ffc1c70f4c2feeeb13e607057Daniel Dunbar const char *LinkingOutput) const; 22502633b541b04ad5ffc1c70f4c2feeeb13e607057Daniel Dunbar }; 22602633b541b04ad5ffc1c70f4c2feeeb13e607057Daniel Dunbar 227fbefe6bd6f62a3361813498dc672ab0d6c0d4fd1Daniel Dunbar class VISIBILITY_HIDDEN Link : public DarwinTool { 22802633b541b04ad5ffc1c70f4c2feeeb13e607057Daniel Dunbar void AddLinkArgs(const ArgList &Args, ArgStringList &CmdArgs) const; 22902633b541b04ad5ffc1c70f4c2feeeb13e607057Daniel Dunbar 23002633b541b04ad5ffc1c70f4c2feeeb13e607057Daniel Dunbar public: 231fbefe6bd6f62a3361813498dc672ab0d6c0d4fd1Daniel Dunbar Link(const ToolChain &TC) : DarwinTool("darwin::Link", TC) {} 23202633b541b04ad5ffc1c70f4c2feeeb13e607057Daniel Dunbar 23302633b541b04ad5ffc1c70f4c2feeeb13e607057Daniel Dunbar virtual bool acceptsPipedInput() const { return false; } 23402633b541b04ad5ffc1c70f4c2feeeb13e607057Daniel Dunbar virtual bool canPipeOutput() const { return false; } 23502633b541b04ad5ffc1c70f4c2feeeb13e607057Daniel Dunbar virtual bool hasIntegratedCPP() const { return false; } 23602633b541b04ad5ffc1c70f4c2feeeb13e607057Daniel Dunbar 23702633b541b04ad5ffc1c70f4c2feeeb13e607057Daniel Dunbar virtual void ConstructJob(Compilation &C, const JobAction &JA, 2388cac5f7e1ce63dd77ee0fb4ef68f9fa804f41ea6Daniel Dunbar Job &Dest, 2391eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump const InputInfo &Output, 2401eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump const InputInfoList &Inputs, 2411eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump const ArgList &TCArgs, 2428cac5f7e1ce63dd77ee0fb4ef68f9fa804f41ea6Daniel Dunbar const char *LinkingOutput) const; 2438cac5f7e1ce63dd77ee0fb4ef68f9fa804f41ea6Daniel Dunbar }; 2448cac5f7e1ce63dd77ee0fb4ef68f9fa804f41ea6Daniel Dunbar 245fbefe6bd6f62a3361813498dc672ab0d6c0d4fd1Daniel Dunbar class VISIBILITY_HIDDEN Lipo : public DarwinTool { 246ff7488dc9a766f94daf54d81b03ab9160d0bfd88Daniel Dunbar public: 247fbefe6bd6f62a3361813498dc672ab0d6c0d4fd1Daniel Dunbar Lipo(const ToolChain &TC) : DarwinTool("darwin::Lipo", TC) {} 248ff7488dc9a766f94daf54d81b03ab9160d0bfd88Daniel Dunbar 249ff7488dc9a766f94daf54d81b03ab9160d0bfd88Daniel Dunbar virtual bool acceptsPipedInput() const { return false; } 250ff7488dc9a766f94daf54d81b03ab9160d0bfd88Daniel Dunbar virtual bool canPipeOutput() const { return false; } 251ff7488dc9a766f94daf54d81b03ab9160d0bfd88Daniel Dunbar virtual bool hasIntegratedCPP() const { return false; } 252ff7488dc9a766f94daf54d81b03ab9160d0bfd88Daniel Dunbar 253ff7488dc9a766f94daf54d81b03ab9160d0bfd88Daniel Dunbar virtual void ConstructJob(Compilation &C, const JobAction &JA, 254ff7488dc9a766f94daf54d81b03ab9160d0bfd88Daniel Dunbar Job &Dest, 2551eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump const InputInfo &Output, 2561eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump const InputInfoList &Inputs, 2571eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump const ArgList &TCArgs, 258f7b8eec37c8c8012fa525c71fb29a58c9f29beefDaniel Dunbar const char *LinkingOutput) const; 259f7b8eec37c8c8012fa525c71fb29a58c9f29beefDaniel Dunbar }; 260f7b8eec37c8c8012fa525c71fb29a58c9f29beefDaniel Dunbar} 261f7b8eec37c8c8012fa525c71fb29a58c9f29beefDaniel Dunbar 262f7b8eec37c8c8012fa525c71fb29a58c9f29beefDaniel Dunbar /// openbsd -- Directly call GNU Binutils assembler and linker 263f7b8eec37c8c8012fa525c71fb29a58c9f29beefDaniel Dunbarnamespace openbsd { 264f7b8eec37c8c8012fa525c71fb29a58c9f29beefDaniel Dunbar class VISIBILITY_HIDDEN Assemble : public Tool { 265f7b8eec37c8c8012fa525c71fb29a58c9f29beefDaniel Dunbar public: 266f7b8eec37c8c8012fa525c71fb29a58c9f29beefDaniel Dunbar Assemble(const ToolChain &TC) : Tool("openbsd::Assemble", TC) {} 267f7b8eec37c8c8012fa525c71fb29a58c9f29beefDaniel Dunbar 268f7b8eec37c8c8012fa525c71fb29a58c9f29beefDaniel Dunbar virtual bool acceptsPipedInput() const { return true; } 269f7b8eec37c8c8012fa525c71fb29a58c9f29beefDaniel Dunbar virtual bool canPipeOutput() const { return true; } 270f7b8eec37c8c8012fa525c71fb29a58c9f29beefDaniel Dunbar virtual bool hasIntegratedCPP() const { return false; } 271f7b8eec37c8c8012fa525c71fb29a58c9f29beefDaniel Dunbar 272f7b8eec37c8c8012fa525c71fb29a58c9f29beefDaniel Dunbar virtual void ConstructJob(Compilation &C, const JobAction &JA, 273f7b8eec37c8c8012fa525c71fb29a58c9f29beefDaniel Dunbar Job &Dest, 2741eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump const InputInfo &Output, 2751eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump const InputInfoList &Inputs, 2761eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump const ArgList &TCArgs, 277f7b8eec37c8c8012fa525c71fb29a58c9f29beefDaniel Dunbar const char *LinkingOutput) const; 278f7b8eec37c8c8012fa525c71fb29a58c9f29beefDaniel Dunbar }; 279f7b8eec37c8c8012fa525c71fb29a58c9f29beefDaniel Dunbar class VISIBILITY_HIDDEN Link : public Tool { 280f7b8eec37c8c8012fa525c71fb29a58c9f29beefDaniel Dunbar public: 281f7b8eec37c8c8012fa525c71fb29a58c9f29beefDaniel Dunbar Link(const ToolChain &TC) : Tool("openbsd::Link", TC) {} 282f7b8eec37c8c8012fa525c71fb29a58c9f29beefDaniel Dunbar 283f7b8eec37c8c8012fa525c71fb29a58c9f29beefDaniel Dunbar virtual bool acceptsPipedInput() const { return true; } 284f7b8eec37c8c8012fa525c71fb29a58c9f29beefDaniel Dunbar virtual bool canPipeOutput() const { return true; } 285f7b8eec37c8c8012fa525c71fb29a58c9f29beefDaniel Dunbar virtual bool hasIntegratedCPP() const { return false; } 286f7b8eec37c8c8012fa525c71fb29a58c9f29beefDaniel Dunbar 287f7b8eec37c8c8012fa525c71fb29a58c9f29beefDaniel Dunbar virtual void ConstructJob(Compilation &C, const JobAction &JA, 288f7b8eec37c8c8012fa525c71fb29a58c9f29beefDaniel Dunbar Job &Dest, 2891eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump const InputInfo &Output, 2901eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump const InputInfoList &Inputs, 2911eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump const ArgList &TCArgs, 292ff7488dc9a766f94daf54d81b03ab9160d0bfd88Daniel Dunbar const char *LinkingOutput) const; 293ff7488dc9a766f94daf54d81b03ab9160d0bfd88Daniel Dunbar }; 294e7925a075f110ab21afeae084670a155dea568e3Edward O'Callaghan} // end namespace openbsd 295ff7488dc9a766f94daf54d81b03ab9160d0bfd88Daniel Dunbar 29668a31d406c6dc4382c700d1199b062de2aa7e1daDaniel Dunbar /// freebsd -- Directly call GNU Binutils assembler and linker 29768a31d406c6dc4382c700d1199b062de2aa7e1daDaniel Dunbarnamespace freebsd { 29868a31d406c6dc4382c700d1199b062de2aa7e1daDaniel Dunbar class VISIBILITY_HIDDEN Assemble : public Tool { 29968a31d406c6dc4382c700d1199b062de2aa7e1daDaniel Dunbar public: 30068a31d406c6dc4382c700d1199b062de2aa7e1daDaniel Dunbar Assemble(const ToolChain &TC) : Tool("freebsd::Assemble", TC) {} 30168a31d406c6dc4382c700d1199b062de2aa7e1daDaniel Dunbar 30268a31d406c6dc4382c700d1199b062de2aa7e1daDaniel Dunbar virtual bool acceptsPipedInput() const { return true; } 30368a31d406c6dc4382c700d1199b062de2aa7e1daDaniel Dunbar virtual bool canPipeOutput() const { return true; } 30468a31d406c6dc4382c700d1199b062de2aa7e1daDaniel Dunbar virtual bool hasIntegratedCPP() const { return false; } 30568a31d406c6dc4382c700d1199b062de2aa7e1daDaniel Dunbar 30668a31d406c6dc4382c700d1199b062de2aa7e1daDaniel Dunbar virtual void ConstructJob(Compilation &C, const JobAction &JA, 30768a31d406c6dc4382c700d1199b062de2aa7e1daDaniel Dunbar Job &Dest, 3081eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump const InputInfo &Output, 3091eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump const InputInfoList &Inputs, 3101eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump const ArgList &TCArgs, 31168a31d406c6dc4382c700d1199b062de2aa7e1daDaniel Dunbar const char *LinkingOutput) const; 31268a31d406c6dc4382c700d1199b062de2aa7e1daDaniel Dunbar }; 313008f54a54299eaafdaa940e2bdeaf55935ecd95aDaniel Dunbar class VISIBILITY_HIDDEN Link : public Tool { 314008f54a54299eaafdaa940e2bdeaf55935ecd95aDaniel Dunbar public: 315008f54a54299eaafdaa940e2bdeaf55935ecd95aDaniel Dunbar Link(const ToolChain &TC) : Tool("freebsd::Link", TC) {} 316008f54a54299eaafdaa940e2bdeaf55935ecd95aDaniel Dunbar 317008f54a54299eaafdaa940e2bdeaf55935ecd95aDaniel Dunbar virtual bool acceptsPipedInput() const { return true; } 318008f54a54299eaafdaa940e2bdeaf55935ecd95aDaniel Dunbar virtual bool canPipeOutput() const { return true; } 319008f54a54299eaafdaa940e2bdeaf55935ecd95aDaniel Dunbar virtual bool hasIntegratedCPP() const { return false; } 320008f54a54299eaafdaa940e2bdeaf55935ecd95aDaniel Dunbar 321008f54a54299eaafdaa940e2bdeaf55935ecd95aDaniel Dunbar virtual void ConstructJob(Compilation &C, const JobAction &JA, 322008f54a54299eaafdaa940e2bdeaf55935ecd95aDaniel Dunbar Job &Dest, 3231eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump const InputInfo &Output, 3241eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump const InputInfoList &Inputs, 3251eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump const ArgList &TCArgs, 326008f54a54299eaafdaa940e2bdeaf55935ecd95aDaniel Dunbar const char *LinkingOutput) const; 327008f54a54299eaafdaa940e2bdeaf55935ecd95aDaniel Dunbar }; 328e7925a075f110ab21afeae084670a155dea568e3Edward O'Callaghan} // end namespace freebsd 329e7925a075f110ab21afeae084670a155dea568e3Edward O'Callaghan 330e7925a075f110ab21afeae084670a155dea568e3Edward O'Callaghan /// auroraux -- Directly call GNU Binutils assembler and linker 331e7925a075f110ab21afeae084670a155dea568e3Edward O'Callaghannamespace auroraux { 332e7925a075f110ab21afeae084670a155dea568e3Edward O'Callaghan class VISIBILITY_HIDDEN Assemble : public Tool { 333e7925a075f110ab21afeae084670a155dea568e3Edward O'Callaghan public: 334e7925a075f110ab21afeae084670a155dea568e3Edward O'Callaghan Assemble(const ToolChain &TC) : Tool("auroraux::Assemble", TC) {} 335e7925a075f110ab21afeae084670a155dea568e3Edward O'Callaghan 336e7925a075f110ab21afeae084670a155dea568e3Edward O'Callaghan virtual bool acceptsPipedInput() const { return true; } 337e7925a075f110ab21afeae084670a155dea568e3Edward O'Callaghan virtual bool canPipeOutput() const { return true; } 338e7925a075f110ab21afeae084670a155dea568e3Edward O'Callaghan virtual bool hasIntegratedCPP() const { return false; } 339e7925a075f110ab21afeae084670a155dea568e3Edward O'Callaghan 340e7925a075f110ab21afeae084670a155dea568e3Edward O'Callaghan virtual void ConstructJob(Compilation &C, const JobAction &JA, 341e7925a075f110ab21afeae084670a155dea568e3Edward O'Callaghan Job &Dest, 3421eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump const InputInfo &Output, 3431eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump const InputInfoList &Inputs, 3441eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump const ArgList &TCArgs, 345e7925a075f110ab21afeae084670a155dea568e3Edward O'Callaghan const char *LinkingOutput) const; 346e7925a075f110ab21afeae084670a155dea568e3Edward O'Callaghan }; 347e7925a075f110ab21afeae084670a155dea568e3Edward O'Callaghan class VISIBILITY_HIDDEN Link : public Tool { 348e7925a075f110ab21afeae084670a155dea568e3Edward O'Callaghan public: 349e7925a075f110ab21afeae084670a155dea568e3Edward O'Callaghan Link(const ToolChain &TC) : Tool("auroraux::Link", TC) {} 350e7925a075f110ab21afeae084670a155dea568e3Edward O'Callaghan 351e7925a075f110ab21afeae084670a155dea568e3Edward O'Callaghan virtual bool acceptsPipedInput() const { return true; } 352e7925a075f110ab21afeae084670a155dea568e3Edward O'Callaghan virtual bool canPipeOutput() const { return true; } 353e7925a075f110ab21afeae084670a155dea568e3Edward O'Callaghan virtual bool hasIntegratedCPP() const { return false; } 354e7925a075f110ab21afeae084670a155dea568e3Edward O'Callaghan 355e7925a075f110ab21afeae084670a155dea568e3Edward O'Callaghan virtual void ConstructJob(Compilation &C, const JobAction &JA, 356e7925a075f110ab21afeae084670a155dea568e3Edward O'Callaghan Job &Dest, 3571eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump const InputInfo &Output, 3581eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump const InputInfoList &Inputs, 3591eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump const ArgList &TCArgs, 360e7925a075f110ab21afeae084670a155dea568e3Edward O'Callaghan const char *LinkingOutput) const; 361e7925a075f110ab21afeae084670a155dea568e3Edward O'Callaghan }; 362e7925a075f110ab21afeae084670a155dea568e3Edward O'Callaghan} // end namespace auroraux 36368a31d406c6dc4382c700d1199b062de2aa7e1daDaniel Dunbar 36411e1b40d759a643086f590f6ffbd9d68360bad46Daniel Dunbar /// dragonfly -- Directly call GNU Binutils assembler and linker 36511e1b40d759a643086f590f6ffbd9d68360bad46Daniel Dunbarnamespace dragonfly { 36611e1b40d759a643086f590f6ffbd9d68360bad46Daniel Dunbar class VISIBILITY_HIDDEN Assemble : public Tool { 36711e1b40d759a643086f590f6ffbd9d68360bad46Daniel Dunbar public: 36811e1b40d759a643086f590f6ffbd9d68360bad46Daniel Dunbar Assemble(const ToolChain &TC) : Tool("dragonfly::Assemble", TC) {} 36911e1b40d759a643086f590f6ffbd9d68360bad46Daniel Dunbar 37011e1b40d759a643086f590f6ffbd9d68360bad46Daniel Dunbar virtual bool acceptsPipedInput() const { return true; } 37111e1b40d759a643086f590f6ffbd9d68360bad46Daniel Dunbar virtual bool canPipeOutput() const { return true; } 37211e1b40d759a643086f590f6ffbd9d68360bad46Daniel Dunbar virtual bool hasIntegratedCPP() const { return false; } 37311e1b40d759a643086f590f6ffbd9d68360bad46Daniel Dunbar 37411e1b40d759a643086f590f6ffbd9d68360bad46Daniel Dunbar virtual void ConstructJob(Compilation &C, const JobAction &JA, 37511e1b40d759a643086f590f6ffbd9d68360bad46Daniel Dunbar Job &Dest, 3761eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump const InputInfo &Output, 3771eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump const InputInfoList &Inputs, 3781eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump const ArgList &TCArgs, 37911e1b40d759a643086f590f6ffbd9d68360bad46Daniel Dunbar const char *LinkingOutput) const; 38011e1b40d759a643086f590f6ffbd9d68360bad46Daniel Dunbar }; 38111e1b40d759a643086f590f6ffbd9d68360bad46Daniel Dunbar class VISIBILITY_HIDDEN Link : public Tool { 38211e1b40d759a643086f590f6ffbd9d68360bad46Daniel Dunbar public: 38311e1b40d759a643086f590f6ffbd9d68360bad46Daniel Dunbar Link(const ToolChain &TC) : Tool("dragonfly::Link", TC) {} 38411e1b40d759a643086f590f6ffbd9d68360bad46Daniel Dunbar 38511e1b40d759a643086f590f6ffbd9d68360bad46Daniel Dunbar virtual bool acceptsPipedInput() const { return true; } 38611e1b40d759a643086f590f6ffbd9d68360bad46Daniel Dunbar virtual bool canPipeOutput() const { return true; } 38711e1b40d759a643086f590f6ffbd9d68360bad46Daniel Dunbar virtual bool hasIntegratedCPP() const { return false; } 38811e1b40d759a643086f590f6ffbd9d68360bad46Daniel Dunbar 38911e1b40d759a643086f590f6ffbd9d68360bad46Daniel Dunbar virtual void ConstructJob(Compilation &C, const JobAction &JA, 39011e1b40d759a643086f590f6ffbd9d68360bad46Daniel Dunbar Job &Dest, 3911eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump const InputInfo &Output, 3921eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump const InputInfoList &Inputs, 3931eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump const ArgList &TCArgs, 39411e1b40d759a643086f590f6ffbd9d68360bad46Daniel Dunbar const char *LinkingOutput) const; 39511e1b40d759a643086f590f6ffbd9d68360bad46Daniel Dunbar }; 396e7925a075f110ab21afeae084670a155dea568e3Edward O'Callaghan} // end namespace dragonfly 39711e1b40d759a643086f590f6ffbd9d68360bad46Daniel Dunbar 3989c073ff462eb75ccbb1c4446e21c148f3fc618e1Daniel Dunbar} // end namespace toolchains 3999c073ff462eb75ccbb1c4446e21c148f3fc618e1Daniel Dunbar} // end namespace driver 4009c073ff462eb75ccbb1c4446e21c148f3fc618e1Daniel Dunbar} // end namespace clang 4019c073ff462eb75ccbb1c4446e21c148f3fc618e1Daniel Dunbar 402e7925a075f110ab21afeae084670a155dea568e3Edward O'Callaghan#endif // CLANG_LIB_DRIVER_TOOLS_H_ 403