Tools.h revision 6acda16e9c194dcbd0dea64341e182bdb65d0f41
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 366acda16e9c194dcbd0dea64341e182bdb65d0f41Daniel Dunbar void AddX86TargetArgs(const ArgList &Args, ArgStringList &CmdArgs) const; 376acda16e9c194dcbd0dea64341e182bdb65d0f41Daniel Dunbar 389c073ff462eb75ccbb1c4446e21c148f3fc618e1Daniel Dunbar public: 3931b1e5437e7435879fc044afb77ff27096008e72Daniel Dunbar Clang(const ToolChain &TC) : Tool("clang", TC) {} 409c073ff462eb75ccbb1c4446e21c148f3fc618e1Daniel Dunbar 419c073ff462eb75ccbb1c4446e21c148f3fc618e1Daniel Dunbar virtual bool acceptsPipedInput() const { return true; } 429c073ff462eb75ccbb1c4446e21c148f3fc618e1Daniel Dunbar virtual bool canPipeOutput() const { return true; } 439c073ff462eb75ccbb1c4446e21c148f3fc618e1Daniel Dunbar virtual bool hasIntegratedCPP() const { return true; } 4447ac7d27c44bd64a7d0fc03d4babc196cf2b8230Daniel Dunbar 4547ac7d27c44bd64a7d0fc03d4babc196cf2b8230Daniel Dunbar virtual void ConstructJob(Compilation &C, const JobAction &JA, 46871adcf4e41285e3f4c3b62eaa1b2e05b60b92daDaniel Dunbar Job &Dest, 471eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump const InputInfo &Output, 481eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump const InputInfoList &Inputs, 491eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump const ArgList &TCArgs, 5047ac7d27c44bd64a7d0fc03d4babc196cf2b8230Daniel Dunbar const char *LinkingOutput) const; 519c073ff462eb75ccbb1c4446e21c148f3fc618e1Daniel Dunbar }; 529c073ff462eb75ccbb1c4446e21c148f3fc618e1Daniel Dunbar 5331b1e5437e7435879fc044afb77ff27096008e72Daniel Dunbar /// gcc - Generic GCC tool implementations. 5431b1e5437e7435879fc044afb77ff27096008e72Daniel Dunbarnamespace gcc { 55b488c1dac8e53206f07103d794a62a3f5012c0f4Daniel Dunbar class VISIBILITY_HIDDEN Common : public Tool { 569c073ff462eb75ccbb1c4446e21c148f3fc618e1Daniel Dunbar public: 57b488c1dac8e53206f07103d794a62a3f5012c0f4Daniel Dunbar Common(const char *Name, const ToolChain &TC) : Tool(Name, TC) {} 5847ac7d27c44bd64a7d0fc03d4babc196cf2b8230Daniel Dunbar 5947ac7d27c44bd64a7d0fc03d4babc196cf2b8230Daniel Dunbar virtual void ConstructJob(Compilation &C, const JobAction &JA, 60871adcf4e41285e3f4c3b62eaa1b2e05b60b92daDaniel Dunbar Job &Dest, 611eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump const InputInfo &Output, 621eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump const InputInfoList &Inputs, 631eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump const ArgList &TCArgs, 6447ac7d27c44bd64a7d0fc03d4babc196cf2b8230Daniel Dunbar const char *LinkingOutput) const; 65b488c1dac8e53206f07103d794a62a3f5012c0f4Daniel Dunbar 66b488c1dac8e53206f07103d794a62a3f5012c0f4Daniel Dunbar /// RenderExtraToolArgs - Render any arguments necessary to force 67b488c1dac8e53206f07103d794a62a3f5012c0f4Daniel Dunbar /// the particular tool mode. 68b488c1dac8e53206f07103d794a62a3f5012c0f4Daniel Dunbar virtual void RenderExtraToolArgs(ArgStringList &CmdArgs) const = 0; 699c073ff462eb75ccbb1c4446e21c148f3fc618e1Daniel Dunbar }; 709c073ff462eb75ccbb1c4446e21c148f3fc618e1Daniel Dunbar 711eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump 72b488c1dac8e53206f07103d794a62a3f5012c0f4Daniel Dunbar class VISIBILITY_HIDDEN Preprocess : public Common { 739c073ff462eb75ccbb1c4446e21c148f3fc618e1Daniel Dunbar public: 74b488c1dac8e53206f07103d794a62a3f5012c0f4Daniel Dunbar Preprocess(const ToolChain &TC) : Common("gcc::Preprocess", TC) {} 75b488c1dac8e53206f07103d794a62a3f5012c0f4Daniel Dunbar 76b488c1dac8e53206f07103d794a62a3f5012c0f4Daniel Dunbar virtual bool acceptsPipedInput() const { return true; } 77b488c1dac8e53206f07103d794a62a3f5012c0f4Daniel Dunbar virtual bool canPipeOutput() const { return true; } 78b488c1dac8e53206f07103d794a62a3f5012c0f4Daniel Dunbar virtual bool hasIntegratedCPP() const { return false; } 79b488c1dac8e53206f07103d794a62a3f5012c0f4Daniel Dunbar 80b488c1dac8e53206f07103d794a62a3f5012c0f4Daniel Dunbar virtual void RenderExtraToolArgs(ArgStringList &CmdArgs) const; 81b488c1dac8e53206f07103d794a62a3f5012c0f4Daniel Dunbar }; 82b488c1dac8e53206f07103d794a62a3f5012c0f4Daniel Dunbar 83b488c1dac8e53206f07103d794a62a3f5012c0f4Daniel Dunbar class VISIBILITY_HIDDEN Precompile : public Common { 84b488c1dac8e53206f07103d794a62a3f5012c0f4Daniel Dunbar public: 85b488c1dac8e53206f07103d794a62a3f5012c0f4Daniel Dunbar Precompile(const ToolChain &TC) : Common("gcc::Precompile", TC) {} 869c073ff462eb75ccbb1c4446e21c148f3fc618e1Daniel Dunbar 879c073ff462eb75ccbb1c4446e21c148f3fc618e1Daniel Dunbar virtual bool acceptsPipedInput() const { return true; } 889c073ff462eb75ccbb1c4446e21c148f3fc618e1Daniel Dunbar virtual bool canPipeOutput() const { return false; } 899c073ff462eb75ccbb1c4446e21c148f3fc618e1Daniel Dunbar virtual bool hasIntegratedCPP() const { return true; } 9047ac7d27c44bd64a7d0fc03d4babc196cf2b8230Daniel Dunbar 91b488c1dac8e53206f07103d794a62a3f5012c0f4Daniel Dunbar virtual void RenderExtraToolArgs(ArgStringList &CmdArgs) const; 929c073ff462eb75ccbb1c4446e21c148f3fc618e1Daniel Dunbar }; 939c073ff462eb75ccbb1c4446e21c148f3fc618e1Daniel Dunbar 94b488c1dac8e53206f07103d794a62a3f5012c0f4Daniel Dunbar class VISIBILITY_HIDDEN Compile : public Common { 959c073ff462eb75ccbb1c4446e21c148f3fc618e1Daniel Dunbar public: 96b488c1dac8e53206f07103d794a62a3f5012c0f4Daniel Dunbar Compile(const ToolChain &TC) : Common("gcc::Compile", TC) {} 979c073ff462eb75ccbb1c4446e21c148f3fc618e1Daniel Dunbar 989c073ff462eb75ccbb1c4446e21c148f3fc618e1Daniel Dunbar virtual bool acceptsPipedInput() const { return true; } 999c073ff462eb75ccbb1c4446e21c148f3fc618e1Daniel Dunbar virtual bool canPipeOutput() const { return true; } 1009c073ff462eb75ccbb1c4446e21c148f3fc618e1Daniel Dunbar virtual bool hasIntegratedCPP() const { return true; } 10147ac7d27c44bd64a7d0fc03d4babc196cf2b8230Daniel Dunbar 102b488c1dac8e53206f07103d794a62a3f5012c0f4Daniel Dunbar virtual void RenderExtraToolArgs(ArgStringList &CmdArgs) const; 1039c073ff462eb75ccbb1c4446e21c148f3fc618e1Daniel Dunbar }; 1049c073ff462eb75ccbb1c4446e21c148f3fc618e1Daniel Dunbar 105b488c1dac8e53206f07103d794a62a3f5012c0f4Daniel Dunbar class VISIBILITY_HIDDEN Assemble : public Common { 1069c073ff462eb75ccbb1c4446e21c148f3fc618e1Daniel Dunbar public: 107b488c1dac8e53206f07103d794a62a3f5012c0f4Daniel Dunbar Assemble(const ToolChain &TC) : Common("gcc::Assemble", TC) {} 1089c073ff462eb75ccbb1c4446e21c148f3fc618e1Daniel Dunbar 1099c073ff462eb75ccbb1c4446e21c148f3fc618e1Daniel Dunbar virtual bool acceptsPipedInput() const { return true; } 1109c073ff462eb75ccbb1c4446e21c148f3fc618e1Daniel Dunbar virtual bool canPipeOutput() const { return false; } 1119c073ff462eb75ccbb1c4446e21c148f3fc618e1Daniel Dunbar virtual bool hasIntegratedCPP() const { return false; } 11247ac7d27c44bd64a7d0fc03d4babc196cf2b8230Daniel Dunbar 113b488c1dac8e53206f07103d794a62a3f5012c0f4Daniel Dunbar virtual void RenderExtraToolArgs(ArgStringList &CmdArgs) const; 1149c073ff462eb75ccbb1c4446e21c148f3fc618e1Daniel Dunbar }; 1159c073ff462eb75ccbb1c4446e21c148f3fc618e1Daniel Dunbar 116b488c1dac8e53206f07103d794a62a3f5012c0f4Daniel Dunbar class VISIBILITY_HIDDEN Link : public Common { 1179c073ff462eb75ccbb1c4446e21c148f3fc618e1Daniel Dunbar public: 118b488c1dac8e53206f07103d794a62a3f5012c0f4Daniel Dunbar Link(const ToolChain &TC) : Common("gcc::Link", TC) {} 1199c073ff462eb75ccbb1c4446e21c148f3fc618e1Daniel Dunbar 1209c073ff462eb75ccbb1c4446e21c148f3fc618e1Daniel Dunbar virtual bool acceptsPipedInput() const { return false; } 1219c073ff462eb75ccbb1c4446e21c148f3fc618e1Daniel Dunbar virtual bool canPipeOutput() const { return false; } 1229c073ff462eb75ccbb1c4446e21c148f3fc618e1Daniel Dunbar virtual bool hasIntegratedCPP() const { return false; } 12347ac7d27c44bd64a7d0fc03d4babc196cf2b8230Daniel Dunbar 124b488c1dac8e53206f07103d794a62a3f5012c0f4Daniel Dunbar virtual void RenderExtraToolArgs(ArgStringList &CmdArgs) const; 1259c073ff462eb75ccbb1c4446e21c148f3fc618e1Daniel Dunbar }; 12631b1e5437e7435879fc044afb77ff27096008e72Daniel Dunbar} // end namespace gcc 1279c073ff462eb75ccbb1c4446e21c148f3fc618e1Daniel Dunbar 128ff7488dc9a766f94daf54d81b03ab9160d0bfd88Daniel Dunbarnamespace darwin { 129fbefe6bd6f62a3361813498dc672ab0d6c0d4fd1Daniel Dunbar class VISIBILITY_HIDDEN DarwinTool : public Tool { 130fbefe6bd6f62a3361813498dc672ab0d6c0d4fd1Daniel Dunbar protected: 131fbefe6bd6f62a3361813498dc672ab0d6c0d4fd1Daniel Dunbar void AddDarwinArch(const ArgList &Args, ArgStringList &CmdArgs) const; 132fbefe6bd6f62a3361813498dc672ab0d6c0d4fd1Daniel Dunbar void AddDarwinSubArch(const ArgList &Args, ArgStringList &CmdArgs) const; 133fbefe6bd6f62a3361813498dc672ab0d6c0d4fd1Daniel Dunbar 134fbefe6bd6f62a3361813498dc672ab0d6c0d4fd1Daniel Dunbar const toolchains::Darwin &getDarwinToolChain() const { 135fbefe6bd6f62a3361813498dc672ab0d6c0d4fd1Daniel Dunbar return reinterpret_cast<const toolchains::Darwin&>(getToolChain()); 136fbefe6bd6f62a3361813498dc672ab0d6c0d4fd1Daniel Dunbar } 137fbefe6bd6f62a3361813498dc672ab0d6c0d4fd1Daniel Dunbar 138fbefe6bd6f62a3361813498dc672ab0d6c0d4fd1Daniel Dunbar public: 139fbefe6bd6f62a3361813498dc672ab0d6c0d4fd1Daniel Dunbar DarwinTool(const char *Name, const ToolChain &TC) : Tool(Name, TC) {}; 140fbefe6bd6f62a3361813498dc672ab0d6c0d4fd1Daniel Dunbar }; 141fbefe6bd6f62a3361813498dc672ab0d6c0d4fd1Daniel Dunbar 142fbefe6bd6f62a3361813498dc672ab0d6c0d4fd1Daniel Dunbar class VISIBILITY_HIDDEN CC1 : public DarwinTool { 143a5a7bd0de7b6b80212095195a055a4a43f21d4b2Daniel Dunbar public: 1441eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump static const char *getBaseInputName(const ArgList &Args, 145a5a7bd0de7b6b80212095195a055a4a43f21d4b2Daniel Dunbar const InputInfoList &Input); 1461eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump static const char *getBaseInputStem(const ArgList &Args, 147a5a7bd0de7b6b80212095195a055a4a43f21d4b2Daniel Dunbar const InputInfoList &Input); 1481eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump static const char *getDependencyFileName(const ArgList &Args, 149a5a7bd0de7b6b80212095195a055a4a43f21d4b2Daniel Dunbar const InputInfoList &Inputs); 150a5a7bd0de7b6b80212095195a055a4a43f21d4b2Daniel Dunbar 15140f1265ebd42ece3e7f7917319b56012e8e2bce2Daniel Dunbar protected: 15240f1265ebd42ece3e7f7917319b56012e8e2bce2Daniel Dunbar const char *getCC1Name(types::ID Type) const; 153a3ec60e0cf2a1916f479288998d31bd980b1a306Daniel Dunbar 154a3ec60e0cf2a1916f479288998d31bd980b1a306Daniel Dunbar void AddCC1Args(const ArgList &Args, ArgStringList &CmdArgs) const; 15540f1265ebd42ece3e7f7917319b56012e8e2bce2Daniel Dunbar void AddCC1OptionsArgs(const ArgList &Args, ArgStringList &CmdArgs, 15640f1265ebd42ece3e7f7917319b56012e8e2bce2Daniel Dunbar const InputInfoList &Inputs, 157a3ec60e0cf2a1916f479288998d31bd980b1a306Daniel Dunbar const ArgStringList &OutputArgs) const; 15840f1265ebd42ece3e7f7917319b56012e8e2bce2Daniel Dunbar void AddCPPOptionsArgs(const ArgList &Args, ArgStringList &CmdArgs, 15940f1265ebd42ece3e7f7917319b56012e8e2bce2Daniel Dunbar const InputInfoList &Inputs, 160a3ec60e0cf2a1916f479288998d31bd980b1a306Daniel Dunbar const ArgStringList &OutputArgs) const; 1611eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump void AddCPPUniqueOptionsArgs(const ArgList &Args, 162a3ec60e0cf2a1916f479288998d31bd980b1a306Daniel Dunbar ArgStringList &CmdArgs, 163a3ec60e0cf2a1916f479288998d31bd980b1a306Daniel Dunbar const InputInfoList &Inputs) const; 164a3ec60e0cf2a1916f479288998d31bd980b1a306Daniel Dunbar void AddCPPArgs(const ArgList &Args, ArgStringList &CmdArgs) const; 16540f1265ebd42ece3e7f7917319b56012e8e2bce2Daniel Dunbar 16640f1265ebd42ece3e7f7917319b56012e8e2bce2Daniel Dunbar public: 167fbefe6bd6f62a3361813498dc672ab0d6c0d4fd1Daniel Dunbar CC1(const char *Name, const ToolChain &TC) : DarwinTool(Name, TC) {} 16840f1265ebd42ece3e7f7917319b56012e8e2bce2Daniel Dunbar 16940f1265ebd42ece3e7f7917319b56012e8e2bce2Daniel Dunbar virtual bool acceptsPipedInput() const { return true; } 17040f1265ebd42ece3e7f7917319b56012e8e2bce2Daniel Dunbar virtual bool canPipeOutput() const { return true; } 17140f1265ebd42ece3e7f7917319b56012e8e2bce2Daniel Dunbar virtual bool hasIntegratedCPP() const { return true; } 17240f1265ebd42ece3e7f7917319b56012e8e2bce2Daniel Dunbar }; 17340f1265ebd42ece3e7f7917319b56012e8e2bce2Daniel Dunbar 17440f1265ebd42ece3e7f7917319b56012e8e2bce2Daniel Dunbar class VISIBILITY_HIDDEN Preprocess : public CC1 { 17540f1265ebd42ece3e7f7917319b56012e8e2bce2Daniel Dunbar public: 17640f1265ebd42ece3e7f7917319b56012e8e2bce2Daniel Dunbar Preprocess(const ToolChain &TC) : CC1("darwin::Preprocess", TC) {} 17740f1265ebd42ece3e7f7917319b56012e8e2bce2Daniel Dunbar 17840f1265ebd42ece3e7f7917319b56012e8e2bce2Daniel Dunbar virtual void ConstructJob(Compilation &C, const JobAction &JA, 17940f1265ebd42ece3e7f7917319b56012e8e2bce2Daniel Dunbar Job &Dest, 1801eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump const InputInfo &Output, 1811eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump const InputInfoList &Inputs, 1821eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump const ArgList &TCArgs, 18340f1265ebd42ece3e7f7917319b56012e8e2bce2Daniel Dunbar const char *LinkingOutput) const; 18440f1265ebd42ece3e7f7917319b56012e8e2bce2Daniel Dunbar }; 18540f1265ebd42ece3e7f7917319b56012e8e2bce2Daniel Dunbar 18640f1265ebd42ece3e7f7917319b56012e8e2bce2Daniel Dunbar class VISIBILITY_HIDDEN Compile : public CC1 { 18740f1265ebd42ece3e7f7917319b56012e8e2bce2Daniel Dunbar public: 18840f1265ebd42ece3e7f7917319b56012e8e2bce2Daniel Dunbar Compile(const ToolChain &TC) : CC1("darwin::Compile", TC) {} 18940f1265ebd42ece3e7f7917319b56012e8e2bce2Daniel Dunbar 19040f1265ebd42ece3e7f7917319b56012e8e2bce2Daniel Dunbar virtual void ConstructJob(Compilation &C, const JobAction &JA, 19140f1265ebd42ece3e7f7917319b56012e8e2bce2Daniel Dunbar Job &Dest, 1921eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump const InputInfo &Output, 1931eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump const InputInfoList &Inputs, 1941eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump const ArgList &TCArgs, 19540f1265ebd42ece3e7f7917319b56012e8e2bce2Daniel Dunbar const char *LinkingOutput) const; 19640f1265ebd42ece3e7f7917319b56012e8e2bce2Daniel Dunbar }; 19740f1265ebd42ece3e7f7917319b56012e8e2bce2Daniel Dunbar 198fbefe6bd6f62a3361813498dc672ab0d6c0d4fd1Daniel Dunbar class VISIBILITY_HIDDEN Assemble : public DarwinTool { 1998cac5f7e1ce63dd77ee0fb4ef68f9fa804f41ea6Daniel Dunbar public: 200fbefe6bd6f62a3361813498dc672ab0d6c0d4fd1Daniel Dunbar Assemble(const ToolChain &TC) : DarwinTool("darwin::Assemble", TC) {} 2018cac5f7e1ce63dd77ee0fb4ef68f9fa804f41ea6Daniel Dunbar 2028cac5f7e1ce63dd77ee0fb4ef68f9fa804f41ea6Daniel Dunbar virtual bool acceptsPipedInput() const { return true; } 2038cac5f7e1ce63dd77ee0fb4ef68f9fa804f41ea6Daniel Dunbar virtual bool canPipeOutput() const { return false; } 2048cac5f7e1ce63dd77ee0fb4ef68f9fa804f41ea6Daniel Dunbar virtual bool hasIntegratedCPP() const { return false; } 2058cac5f7e1ce63dd77ee0fb4ef68f9fa804f41ea6Daniel Dunbar 2068cac5f7e1ce63dd77ee0fb4ef68f9fa804f41ea6Daniel Dunbar virtual void ConstructJob(Compilation &C, const JobAction &JA, 20702633b541b04ad5ffc1c70f4c2feeeb13e607057Daniel Dunbar Job &Dest, 2081eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump const InputInfo &Output, 2091eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump const InputInfoList &Inputs, 2101eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump const ArgList &TCArgs, 21102633b541b04ad5ffc1c70f4c2feeeb13e607057Daniel Dunbar const char *LinkingOutput) const; 21202633b541b04ad5ffc1c70f4c2feeeb13e607057Daniel Dunbar }; 21302633b541b04ad5ffc1c70f4c2feeeb13e607057Daniel Dunbar 214fbefe6bd6f62a3361813498dc672ab0d6c0d4fd1Daniel Dunbar class VISIBILITY_HIDDEN Link : public DarwinTool { 21502633b541b04ad5ffc1c70f4c2feeeb13e607057Daniel Dunbar void AddLinkArgs(const ArgList &Args, ArgStringList &CmdArgs) const; 21602633b541b04ad5ffc1c70f4c2feeeb13e607057Daniel Dunbar 21702633b541b04ad5ffc1c70f4c2feeeb13e607057Daniel Dunbar public: 218fbefe6bd6f62a3361813498dc672ab0d6c0d4fd1Daniel Dunbar Link(const ToolChain &TC) : DarwinTool("darwin::Link", TC) {} 21902633b541b04ad5ffc1c70f4c2feeeb13e607057Daniel Dunbar 22002633b541b04ad5ffc1c70f4c2feeeb13e607057Daniel Dunbar virtual bool acceptsPipedInput() const { return false; } 22102633b541b04ad5ffc1c70f4c2feeeb13e607057Daniel Dunbar virtual bool canPipeOutput() const { return false; } 22202633b541b04ad5ffc1c70f4c2feeeb13e607057Daniel Dunbar virtual bool hasIntegratedCPP() const { return false; } 22302633b541b04ad5ffc1c70f4c2feeeb13e607057Daniel Dunbar 22402633b541b04ad5ffc1c70f4c2feeeb13e607057Daniel Dunbar virtual void ConstructJob(Compilation &C, const JobAction &JA, 2258cac5f7e1ce63dd77ee0fb4ef68f9fa804f41ea6Daniel Dunbar Job &Dest, 2261eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump const InputInfo &Output, 2271eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump const InputInfoList &Inputs, 2281eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump const ArgList &TCArgs, 2298cac5f7e1ce63dd77ee0fb4ef68f9fa804f41ea6Daniel Dunbar const char *LinkingOutput) const; 2308cac5f7e1ce63dd77ee0fb4ef68f9fa804f41ea6Daniel Dunbar }; 2318cac5f7e1ce63dd77ee0fb4ef68f9fa804f41ea6Daniel Dunbar 232fbefe6bd6f62a3361813498dc672ab0d6c0d4fd1Daniel Dunbar class VISIBILITY_HIDDEN Lipo : public DarwinTool { 233ff7488dc9a766f94daf54d81b03ab9160d0bfd88Daniel Dunbar public: 234fbefe6bd6f62a3361813498dc672ab0d6c0d4fd1Daniel Dunbar Lipo(const ToolChain &TC) : DarwinTool("darwin::Lipo", TC) {} 235ff7488dc9a766f94daf54d81b03ab9160d0bfd88Daniel Dunbar 236ff7488dc9a766f94daf54d81b03ab9160d0bfd88Daniel Dunbar virtual bool acceptsPipedInput() const { return false; } 237ff7488dc9a766f94daf54d81b03ab9160d0bfd88Daniel Dunbar virtual bool canPipeOutput() const { return false; } 238ff7488dc9a766f94daf54d81b03ab9160d0bfd88Daniel Dunbar virtual bool hasIntegratedCPP() const { return false; } 239ff7488dc9a766f94daf54d81b03ab9160d0bfd88Daniel Dunbar 240ff7488dc9a766f94daf54d81b03ab9160d0bfd88Daniel Dunbar virtual void ConstructJob(Compilation &C, const JobAction &JA, 241ff7488dc9a766f94daf54d81b03ab9160d0bfd88Daniel Dunbar Job &Dest, 2421eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump const InputInfo &Output, 2431eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump const InputInfoList &Inputs, 2441eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump const ArgList &TCArgs, 245f7b8eec37c8c8012fa525c71fb29a58c9f29beefDaniel Dunbar const char *LinkingOutput) const; 246f7b8eec37c8c8012fa525c71fb29a58c9f29beefDaniel Dunbar }; 247f7b8eec37c8c8012fa525c71fb29a58c9f29beefDaniel Dunbar} 248f7b8eec37c8c8012fa525c71fb29a58c9f29beefDaniel Dunbar 249f7b8eec37c8c8012fa525c71fb29a58c9f29beefDaniel Dunbar /// openbsd -- Directly call GNU Binutils assembler and linker 250f7b8eec37c8c8012fa525c71fb29a58c9f29beefDaniel Dunbarnamespace openbsd { 251f7b8eec37c8c8012fa525c71fb29a58c9f29beefDaniel Dunbar class VISIBILITY_HIDDEN Assemble : public Tool { 252f7b8eec37c8c8012fa525c71fb29a58c9f29beefDaniel Dunbar public: 253f7b8eec37c8c8012fa525c71fb29a58c9f29beefDaniel Dunbar Assemble(const ToolChain &TC) : Tool("openbsd::Assemble", TC) {} 254f7b8eec37c8c8012fa525c71fb29a58c9f29beefDaniel Dunbar 255f7b8eec37c8c8012fa525c71fb29a58c9f29beefDaniel Dunbar virtual bool acceptsPipedInput() const { return true; } 256f7b8eec37c8c8012fa525c71fb29a58c9f29beefDaniel Dunbar virtual bool canPipeOutput() const { return true; } 257f7b8eec37c8c8012fa525c71fb29a58c9f29beefDaniel Dunbar virtual bool hasIntegratedCPP() const { return false; } 258f7b8eec37c8c8012fa525c71fb29a58c9f29beefDaniel Dunbar 259f7b8eec37c8c8012fa525c71fb29a58c9f29beefDaniel Dunbar virtual void ConstructJob(Compilation &C, const JobAction &JA, 260f7b8eec37c8c8012fa525c71fb29a58c9f29beefDaniel Dunbar Job &Dest, 2611eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump const InputInfo &Output, 2621eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump const InputInfoList &Inputs, 2631eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump const ArgList &TCArgs, 264f7b8eec37c8c8012fa525c71fb29a58c9f29beefDaniel Dunbar const char *LinkingOutput) const; 265f7b8eec37c8c8012fa525c71fb29a58c9f29beefDaniel Dunbar }; 266f7b8eec37c8c8012fa525c71fb29a58c9f29beefDaniel Dunbar class VISIBILITY_HIDDEN Link : public Tool { 267f7b8eec37c8c8012fa525c71fb29a58c9f29beefDaniel Dunbar public: 268f7b8eec37c8c8012fa525c71fb29a58c9f29beefDaniel Dunbar Link(const ToolChain &TC) : Tool("openbsd::Link", TC) {} 269f7b8eec37c8c8012fa525c71fb29a58c9f29beefDaniel Dunbar 270f7b8eec37c8c8012fa525c71fb29a58c9f29beefDaniel Dunbar virtual bool acceptsPipedInput() const { return true; } 271f7b8eec37c8c8012fa525c71fb29a58c9f29beefDaniel Dunbar virtual bool canPipeOutput() const { return true; } 272f7b8eec37c8c8012fa525c71fb29a58c9f29beefDaniel Dunbar virtual bool hasIntegratedCPP() const { return false; } 273f7b8eec37c8c8012fa525c71fb29a58c9f29beefDaniel Dunbar 274f7b8eec37c8c8012fa525c71fb29a58c9f29beefDaniel Dunbar virtual void ConstructJob(Compilation &C, const JobAction &JA, 275f7b8eec37c8c8012fa525c71fb29a58c9f29beefDaniel Dunbar Job &Dest, 2761eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump const InputInfo &Output, 2771eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump const InputInfoList &Inputs, 2781eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump const ArgList &TCArgs, 279ff7488dc9a766f94daf54d81b03ab9160d0bfd88Daniel Dunbar const char *LinkingOutput) const; 280ff7488dc9a766f94daf54d81b03ab9160d0bfd88Daniel Dunbar }; 281e7925a075f110ab21afeae084670a155dea568e3Edward O'Callaghan} // end namespace openbsd 282ff7488dc9a766f94daf54d81b03ab9160d0bfd88Daniel Dunbar 28368a31d406c6dc4382c700d1199b062de2aa7e1daDaniel Dunbar /// freebsd -- Directly call GNU Binutils assembler and linker 28468a31d406c6dc4382c700d1199b062de2aa7e1daDaniel Dunbarnamespace freebsd { 28568a31d406c6dc4382c700d1199b062de2aa7e1daDaniel Dunbar class VISIBILITY_HIDDEN Assemble : public Tool { 28668a31d406c6dc4382c700d1199b062de2aa7e1daDaniel Dunbar public: 28768a31d406c6dc4382c700d1199b062de2aa7e1daDaniel Dunbar Assemble(const ToolChain &TC) : Tool("freebsd::Assemble", TC) {} 28868a31d406c6dc4382c700d1199b062de2aa7e1daDaniel Dunbar 28968a31d406c6dc4382c700d1199b062de2aa7e1daDaniel Dunbar virtual bool acceptsPipedInput() const { return true; } 29068a31d406c6dc4382c700d1199b062de2aa7e1daDaniel Dunbar virtual bool canPipeOutput() const { return true; } 29168a31d406c6dc4382c700d1199b062de2aa7e1daDaniel Dunbar virtual bool hasIntegratedCPP() const { return false; } 29268a31d406c6dc4382c700d1199b062de2aa7e1daDaniel Dunbar 29368a31d406c6dc4382c700d1199b062de2aa7e1daDaniel Dunbar virtual void ConstructJob(Compilation &C, const JobAction &JA, 29468a31d406c6dc4382c700d1199b062de2aa7e1daDaniel Dunbar Job &Dest, 2951eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump const InputInfo &Output, 2961eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump const InputInfoList &Inputs, 2971eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump const ArgList &TCArgs, 29868a31d406c6dc4382c700d1199b062de2aa7e1daDaniel Dunbar const char *LinkingOutput) const; 29968a31d406c6dc4382c700d1199b062de2aa7e1daDaniel Dunbar }; 300008f54a54299eaafdaa940e2bdeaf55935ecd95aDaniel Dunbar class VISIBILITY_HIDDEN Link : public Tool { 301008f54a54299eaafdaa940e2bdeaf55935ecd95aDaniel Dunbar public: 302008f54a54299eaafdaa940e2bdeaf55935ecd95aDaniel Dunbar Link(const ToolChain &TC) : Tool("freebsd::Link", TC) {} 303008f54a54299eaafdaa940e2bdeaf55935ecd95aDaniel Dunbar 304008f54a54299eaafdaa940e2bdeaf55935ecd95aDaniel Dunbar virtual bool acceptsPipedInput() const { return true; } 305008f54a54299eaafdaa940e2bdeaf55935ecd95aDaniel Dunbar virtual bool canPipeOutput() const { return true; } 306008f54a54299eaafdaa940e2bdeaf55935ecd95aDaniel Dunbar virtual bool hasIntegratedCPP() const { return false; } 307008f54a54299eaafdaa940e2bdeaf55935ecd95aDaniel Dunbar 308008f54a54299eaafdaa940e2bdeaf55935ecd95aDaniel Dunbar virtual void ConstructJob(Compilation &C, const JobAction &JA, 309008f54a54299eaafdaa940e2bdeaf55935ecd95aDaniel Dunbar Job &Dest, 3101eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump const InputInfo &Output, 3111eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump const InputInfoList &Inputs, 3121eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump const ArgList &TCArgs, 313008f54a54299eaafdaa940e2bdeaf55935ecd95aDaniel Dunbar const char *LinkingOutput) const; 314008f54a54299eaafdaa940e2bdeaf55935ecd95aDaniel Dunbar }; 315e7925a075f110ab21afeae084670a155dea568e3Edward O'Callaghan} // end namespace freebsd 316e7925a075f110ab21afeae084670a155dea568e3Edward O'Callaghan 317e7925a075f110ab21afeae084670a155dea568e3Edward O'Callaghan /// auroraux -- Directly call GNU Binutils assembler and linker 318e7925a075f110ab21afeae084670a155dea568e3Edward O'Callaghannamespace auroraux { 319e7925a075f110ab21afeae084670a155dea568e3Edward O'Callaghan class VISIBILITY_HIDDEN Assemble : public Tool { 320e7925a075f110ab21afeae084670a155dea568e3Edward O'Callaghan public: 321e7925a075f110ab21afeae084670a155dea568e3Edward O'Callaghan Assemble(const ToolChain &TC) : Tool("auroraux::Assemble", TC) {} 322e7925a075f110ab21afeae084670a155dea568e3Edward O'Callaghan 323e7925a075f110ab21afeae084670a155dea568e3Edward O'Callaghan virtual bool acceptsPipedInput() const { return true; } 324e7925a075f110ab21afeae084670a155dea568e3Edward O'Callaghan virtual bool canPipeOutput() const { return true; } 325e7925a075f110ab21afeae084670a155dea568e3Edward O'Callaghan virtual bool hasIntegratedCPP() const { return false; } 326e7925a075f110ab21afeae084670a155dea568e3Edward O'Callaghan 327e7925a075f110ab21afeae084670a155dea568e3Edward O'Callaghan virtual void ConstructJob(Compilation &C, const JobAction &JA, 328e7925a075f110ab21afeae084670a155dea568e3Edward O'Callaghan Job &Dest, 3291eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump const InputInfo &Output, 3301eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump const InputInfoList &Inputs, 3311eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump const ArgList &TCArgs, 332e7925a075f110ab21afeae084670a155dea568e3Edward O'Callaghan const char *LinkingOutput) const; 333e7925a075f110ab21afeae084670a155dea568e3Edward O'Callaghan }; 334e7925a075f110ab21afeae084670a155dea568e3Edward O'Callaghan class VISIBILITY_HIDDEN Link : public Tool { 335e7925a075f110ab21afeae084670a155dea568e3Edward O'Callaghan public: 336e7925a075f110ab21afeae084670a155dea568e3Edward O'Callaghan Link(const ToolChain &TC) : Tool("auroraux::Link", TC) {} 337e7925a075f110ab21afeae084670a155dea568e3Edward O'Callaghan 338e7925a075f110ab21afeae084670a155dea568e3Edward O'Callaghan virtual bool acceptsPipedInput() const { return true; } 339e7925a075f110ab21afeae084670a155dea568e3Edward O'Callaghan virtual bool canPipeOutput() const { return true; } 340e7925a075f110ab21afeae084670a155dea568e3Edward O'Callaghan virtual bool hasIntegratedCPP() const { return false; } 341e7925a075f110ab21afeae084670a155dea568e3Edward O'Callaghan 342e7925a075f110ab21afeae084670a155dea568e3Edward O'Callaghan virtual void ConstructJob(Compilation &C, const JobAction &JA, 343e7925a075f110ab21afeae084670a155dea568e3Edward O'Callaghan Job &Dest, 3441eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump const InputInfo &Output, 3451eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump const InputInfoList &Inputs, 3461eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump const ArgList &TCArgs, 347e7925a075f110ab21afeae084670a155dea568e3Edward O'Callaghan const char *LinkingOutput) const; 348e7925a075f110ab21afeae084670a155dea568e3Edward O'Callaghan }; 349e7925a075f110ab21afeae084670a155dea568e3Edward O'Callaghan} // end namespace auroraux 35068a31d406c6dc4382c700d1199b062de2aa7e1daDaniel Dunbar 35111e1b40d759a643086f590f6ffbd9d68360bad46Daniel Dunbar /// dragonfly -- Directly call GNU Binutils assembler and linker 35211e1b40d759a643086f590f6ffbd9d68360bad46Daniel Dunbarnamespace dragonfly { 35311e1b40d759a643086f590f6ffbd9d68360bad46Daniel Dunbar class VISIBILITY_HIDDEN Assemble : public Tool { 35411e1b40d759a643086f590f6ffbd9d68360bad46Daniel Dunbar public: 35511e1b40d759a643086f590f6ffbd9d68360bad46Daniel Dunbar Assemble(const ToolChain &TC) : Tool("dragonfly::Assemble", TC) {} 35611e1b40d759a643086f590f6ffbd9d68360bad46Daniel Dunbar 35711e1b40d759a643086f590f6ffbd9d68360bad46Daniel Dunbar virtual bool acceptsPipedInput() const { return true; } 35811e1b40d759a643086f590f6ffbd9d68360bad46Daniel Dunbar virtual bool canPipeOutput() const { return true; } 35911e1b40d759a643086f590f6ffbd9d68360bad46Daniel Dunbar virtual bool hasIntegratedCPP() const { return false; } 36011e1b40d759a643086f590f6ffbd9d68360bad46Daniel Dunbar 36111e1b40d759a643086f590f6ffbd9d68360bad46Daniel Dunbar virtual void ConstructJob(Compilation &C, const JobAction &JA, 36211e1b40d759a643086f590f6ffbd9d68360bad46Daniel Dunbar Job &Dest, 3631eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump const InputInfo &Output, 3641eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump const InputInfoList &Inputs, 3651eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump const ArgList &TCArgs, 36611e1b40d759a643086f590f6ffbd9d68360bad46Daniel Dunbar const char *LinkingOutput) const; 36711e1b40d759a643086f590f6ffbd9d68360bad46Daniel Dunbar }; 36811e1b40d759a643086f590f6ffbd9d68360bad46Daniel Dunbar class VISIBILITY_HIDDEN Link : public Tool { 36911e1b40d759a643086f590f6ffbd9d68360bad46Daniel Dunbar public: 37011e1b40d759a643086f590f6ffbd9d68360bad46Daniel Dunbar Link(const ToolChain &TC) : Tool("dragonfly::Link", TC) {} 37111e1b40d759a643086f590f6ffbd9d68360bad46Daniel Dunbar 37211e1b40d759a643086f590f6ffbd9d68360bad46Daniel Dunbar virtual bool acceptsPipedInput() const { return true; } 37311e1b40d759a643086f590f6ffbd9d68360bad46Daniel Dunbar virtual bool canPipeOutput() const { return true; } 37411e1b40d759a643086f590f6ffbd9d68360bad46Daniel Dunbar virtual bool hasIntegratedCPP() const { return false; } 37511e1b40d759a643086f590f6ffbd9d68360bad46Daniel Dunbar 37611e1b40d759a643086f590f6ffbd9d68360bad46Daniel Dunbar virtual void ConstructJob(Compilation &C, const JobAction &JA, 37711e1b40d759a643086f590f6ffbd9d68360bad46Daniel Dunbar Job &Dest, 3781eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump const InputInfo &Output, 3791eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump const InputInfoList &Inputs, 3801eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump const ArgList &TCArgs, 38111e1b40d759a643086f590f6ffbd9d68360bad46Daniel Dunbar const char *LinkingOutput) const; 38211e1b40d759a643086f590f6ffbd9d68360bad46Daniel Dunbar }; 383e7925a075f110ab21afeae084670a155dea568e3Edward O'Callaghan} // end namespace dragonfly 38411e1b40d759a643086f590f6ffbd9d68360bad46Daniel Dunbar 3859c073ff462eb75ccbb1c4446e21c148f3fc618e1Daniel Dunbar} // end namespace toolchains 3869c073ff462eb75ccbb1c4446e21c148f3fc618e1Daniel Dunbar} // end namespace driver 3879c073ff462eb75ccbb1c4446e21c148f3fc618e1Daniel Dunbar} // end namespace clang 3889c073ff462eb75ccbb1c4446e21c148f3fc618e1Daniel Dunbar 389e7925a075f110ab21afeae084670a155dea568e3Edward O'Callaghan#endif // CLANG_LIB_DRIVER_TOOLS_H_ 390