Tools.h revision 8cac5f7e1ce63dd77ee0fb4ef68f9fa804f41ea6
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" 14b488c1dac8e53206f07103d794a62a3f5012c0f4Daniel Dunbar#include "clang/Driver/Util.h" 159c073ff462eb75ccbb1c4446e21c148f3fc618e1Daniel Dunbar 169c073ff462eb75ccbb1c4446e21c148f3fc618e1Daniel Dunbar#include "llvm/Support/Compiler.h" 179c073ff462eb75ccbb1c4446e21c148f3fc618e1Daniel Dunbar 189c073ff462eb75ccbb1c4446e21c148f3fc618e1Daniel Dunbarnamespace clang { 199c073ff462eb75ccbb1c4446e21c148f3fc618e1Daniel Dunbarnamespace driver { 20985b825eea7387be10478de0430815ed6a673326Daniel Dunbarnamespace tools { 219c073ff462eb75ccbb1c4446e21c148f3fc618e1Daniel Dunbar 22985b825eea7387be10478de0430815ed6a673326Daniel Dunbar class VISIBILITY_HIDDEN Clang : public Tool { 239c073ff462eb75ccbb1c4446e21c148f3fc618e1Daniel Dunbar public: 2431b1e5437e7435879fc044afb77ff27096008e72Daniel Dunbar Clang(const ToolChain &TC) : Tool("clang", TC) {} 259c073ff462eb75ccbb1c4446e21c148f3fc618e1Daniel Dunbar 269c073ff462eb75ccbb1c4446e21c148f3fc618e1Daniel Dunbar virtual bool acceptsPipedInput() const { return true; } 279c073ff462eb75ccbb1c4446e21c148f3fc618e1Daniel Dunbar virtual bool canPipeOutput() const { return true; } 289c073ff462eb75ccbb1c4446e21c148f3fc618e1Daniel Dunbar virtual bool hasIntegratedCPP() const { return true; } 2947ac7d27c44bd64a7d0fc03d4babc196cf2b8230Daniel Dunbar 3047ac7d27c44bd64a7d0fc03d4babc196cf2b8230Daniel Dunbar virtual void ConstructJob(Compilation &C, const JobAction &JA, 31871adcf4e41285e3f4c3b62eaa1b2e05b60b92daDaniel Dunbar Job &Dest, 3262cf601812e03dd9bc5df42b8ef06a0cdedc38bfDaniel Dunbar const InputInfo &Output, 3362cf601812e03dd9bc5df42b8ef06a0cdedc38bfDaniel Dunbar const InputInfoList &Inputs, 3447ac7d27c44bd64a7d0fc03d4babc196cf2b8230Daniel Dunbar const ArgList &TCArgs, 3547ac7d27c44bd64a7d0fc03d4babc196cf2b8230Daniel Dunbar const char *LinkingOutput) const; 369c073ff462eb75ccbb1c4446e21c148f3fc618e1Daniel Dunbar }; 379c073ff462eb75ccbb1c4446e21c148f3fc618e1Daniel Dunbar 3831b1e5437e7435879fc044afb77ff27096008e72Daniel Dunbar /// gcc - Generic GCC tool implementations. 3931b1e5437e7435879fc044afb77ff27096008e72Daniel Dunbarnamespace gcc { 40b488c1dac8e53206f07103d794a62a3f5012c0f4Daniel Dunbar class VISIBILITY_HIDDEN Common : public Tool { 419c073ff462eb75ccbb1c4446e21c148f3fc618e1Daniel Dunbar public: 42b488c1dac8e53206f07103d794a62a3f5012c0f4Daniel Dunbar Common(const char *Name, const ToolChain &TC) : Tool(Name, TC) {} 4347ac7d27c44bd64a7d0fc03d4babc196cf2b8230Daniel Dunbar 4447ac7d27c44bd64a7d0fc03d4babc196cf2b8230Daniel Dunbar virtual void ConstructJob(Compilation &C, const JobAction &JA, 45871adcf4e41285e3f4c3b62eaa1b2e05b60b92daDaniel Dunbar Job &Dest, 4662cf601812e03dd9bc5df42b8ef06a0cdedc38bfDaniel Dunbar const InputInfo &Output, 4762cf601812e03dd9bc5df42b8ef06a0cdedc38bfDaniel Dunbar const InputInfoList &Inputs, 4847ac7d27c44bd64a7d0fc03d4babc196cf2b8230Daniel Dunbar const ArgList &TCArgs, 4947ac7d27c44bd64a7d0fc03d4babc196cf2b8230Daniel Dunbar const char *LinkingOutput) const; 50b488c1dac8e53206f07103d794a62a3f5012c0f4Daniel Dunbar 51b488c1dac8e53206f07103d794a62a3f5012c0f4Daniel Dunbar /// RenderExtraToolArgs - Render any arguments necessary to force 52b488c1dac8e53206f07103d794a62a3f5012c0f4Daniel Dunbar /// the particular tool mode. 53b488c1dac8e53206f07103d794a62a3f5012c0f4Daniel Dunbar virtual void RenderExtraToolArgs(ArgStringList &CmdArgs) const = 0; 549c073ff462eb75ccbb1c4446e21c148f3fc618e1Daniel Dunbar }; 559c073ff462eb75ccbb1c4446e21c148f3fc618e1Daniel Dunbar 56b488c1dac8e53206f07103d794a62a3f5012c0f4Daniel Dunbar 57b488c1dac8e53206f07103d794a62a3f5012c0f4Daniel Dunbar class VISIBILITY_HIDDEN Preprocess : public Common { 589c073ff462eb75ccbb1c4446e21c148f3fc618e1Daniel Dunbar public: 59b488c1dac8e53206f07103d794a62a3f5012c0f4Daniel Dunbar Preprocess(const ToolChain &TC) : Common("gcc::Preprocess", TC) {} 60b488c1dac8e53206f07103d794a62a3f5012c0f4Daniel Dunbar 61b488c1dac8e53206f07103d794a62a3f5012c0f4Daniel Dunbar virtual bool acceptsPipedInput() const { return true; } 62b488c1dac8e53206f07103d794a62a3f5012c0f4Daniel Dunbar virtual bool canPipeOutput() const { return true; } 63b488c1dac8e53206f07103d794a62a3f5012c0f4Daniel Dunbar virtual bool hasIntegratedCPP() const { return false; } 64b488c1dac8e53206f07103d794a62a3f5012c0f4Daniel Dunbar 65b488c1dac8e53206f07103d794a62a3f5012c0f4Daniel Dunbar virtual void RenderExtraToolArgs(ArgStringList &CmdArgs) const; 66b488c1dac8e53206f07103d794a62a3f5012c0f4Daniel Dunbar }; 67b488c1dac8e53206f07103d794a62a3f5012c0f4Daniel Dunbar 68b488c1dac8e53206f07103d794a62a3f5012c0f4Daniel Dunbar class VISIBILITY_HIDDEN Precompile : public Common { 69b488c1dac8e53206f07103d794a62a3f5012c0f4Daniel Dunbar public: 70b488c1dac8e53206f07103d794a62a3f5012c0f4Daniel Dunbar Precompile(const ToolChain &TC) : Common("gcc::Precompile", TC) {} 719c073ff462eb75ccbb1c4446e21c148f3fc618e1Daniel Dunbar 729c073ff462eb75ccbb1c4446e21c148f3fc618e1Daniel Dunbar virtual bool acceptsPipedInput() const { return true; } 739c073ff462eb75ccbb1c4446e21c148f3fc618e1Daniel Dunbar virtual bool canPipeOutput() const { return false; } 749c073ff462eb75ccbb1c4446e21c148f3fc618e1Daniel Dunbar virtual bool hasIntegratedCPP() const { return true; } 7547ac7d27c44bd64a7d0fc03d4babc196cf2b8230Daniel Dunbar 76b488c1dac8e53206f07103d794a62a3f5012c0f4Daniel Dunbar virtual void RenderExtraToolArgs(ArgStringList &CmdArgs) const; 779c073ff462eb75ccbb1c4446e21c148f3fc618e1Daniel Dunbar }; 789c073ff462eb75ccbb1c4446e21c148f3fc618e1Daniel Dunbar 79b488c1dac8e53206f07103d794a62a3f5012c0f4Daniel Dunbar class VISIBILITY_HIDDEN Compile : public Common { 809c073ff462eb75ccbb1c4446e21c148f3fc618e1Daniel Dunbar public: 81b488c1dac8e53206f07103d794a62a3f5012c0f4Daniel Dunbar Compile(const ToolChain &TC) : Common("gcc::Compile", TC) {} 829c073ff462eb75ccbb1c4446e21c148f3fc618e1Daniel Dunbar 839c073ff462eb75ccbb1c4446e21c148f3fc618e1Daniel Dunbar virtual bool acceptsPipedInput() const { return true; } 849c073ff462eb75ccbb1c4446e21c148f3fc618e1Daniel Dunbar virtual bool canPipeOutput() const { return true; } 859c073ff462eb75ccbb1c4446e21c148f3fc618e1Daniel Dunbar virtual bool hasIntegratedCPP() const { return true; } 8647ac7d27c44bd64a7d0fc03d4babc196cf2b8230Daniel Dunbar 87b488c1dac8e53206f07103d794a62a3f5012c0f4Daniel Dunbar virtual void RenderExtraToolArgs(ArgStringList &CmdArgs) const; 889c073ff462eb75ccbb1c4446e21c148f3fc618e1Daniel Dunbar }; 899c073ff462eb75ccbb1c4446e21c148f3fc618e1Daniel Dunbar 90b488c1dac8e53206f07103d794a62a3f5012c0f4Daniel Dunbar class VISIBILITY_HIDDEN Assemble : public Common { 919c073ff462eb75ccbb1c4446e21c148f3fc618e1Daniel Dunbar public: 92b488c1dac8e53206f07103d794a62a3f5012c0f4Daniel Dunbar Assemble(const ToolChain &TC) : Common("gcc::Assemble", TC) {} 939c073ff462eb75ccbb1c4446e21c148f3fc618e1Daniel Dunbar 949c073ff462eb75ccbb1c4446e21c148f3fc618e1Daniel Dunbar virtual bool acceptsPipedInput() const { return true; } 959c073ff462eb75ccbb1c4446e21c148f3fc618e1Daniel Dunbar virtual bool canPipeOutput() const { return false; } 969c073ff462eb75ccbb1c4446e21c148f3fc618e1Daniel Dunbar virtual bool hasIntegratedCPP() const { return false; } 9747ac7d27c44bd64a7d0fc03d4babc196cf2b8230Daniel Dunbar 98b488c1dac8e53206f07103d794a62a3f5012c0f4Daniel Dunbar virtual void RenderExtraToolArgs(ArgStringList &CmdArgs) const; 999c073ff462eb75ccbb1c4446e21c148f3fc618e1Daniel Dunbar }; 1009c073ff462eb75ccbb1c4446e21c148f3fc618e1Daniel Dunbar 101b488c1dac8e53206f07103d794a62a3f5012c0f4Daniel Dunbar class VISIBILITY_HIDDEN Link : public Common { 1029c073ff462eb75ccbb1c4446e21c148f3fc618e1Daniel Dunbar public: 103b488c1dac8e53206f07103d794a62a3f5012c0f4Daniel Dunbar Link(const ToolChain &TC) : Common("gcc::Link", TC) {} 1049c073ff462eb75ccbb1c4446e21c148f3fc618e1Daniel Dunbar 1059c073ff462eb75ccbb1c4446e21c148f3fc618e1Daniel Dunbar virtual bool acceptsPipedInput() const { return false; } 1069c073ff462eb75ccbb1c4446e21c148f3fc618e1Daniel Dunbar virtual bool canPipeOutput() const { return false; } 1079c073ff462eb75ccbb1c4446e21c148f3fc618e1Daniel Dunbar virtual bool hasIntegratedCPP() const { return false; } 10847ac7d27c44bd64a7d0fc03d4babc196cf2b8230Daniel Dunbar 109b488c1dac8e53206f07103d794a62a3f5012c0f4Daniel Dunbar virtual void RenderExtraToolArgs(ArgStringList &CmdArgs) const; 1109c073ff462eb75ccbb1c4446e21c148f3fc618e1Daniel Dunbar }; 11131b1e5437e7435879fc044afb77ff27096008e72Daniel Dunbar} // end namespace gcc 1129c073ff462eb75ccbb1c4446e21c148f3fc618e1Daniel Dunbar 113ff7488dc9a766f94daf54d81b03ab9160d0bfd88Daniel Dunbarnamespace darwin { 1148cac5f7e1ce63dd77ee0fb4ef68f9fa804f41ea6Daniel Dunbar class VISIBILITY_HIDDEN Assemble : public Tool { 1158cac5f7e1ce63dd77ee0fb4ef68f9fa804f41ea6Daniel Dunbar public: 1168cac5f7e1ce63dd77ee0fb4ef68f9fa804f41ea6Daniel Dunbar Assemble(const ToolChain &TC) : Tool("darwin::Assemble", TC) {} 1178cac5f7e1ce63dd77ee0fb4ef68f9fa804f41ea6Daniel Dunbar 1188cac5f7e1ce63dd77ee0fb4ef68f9fa804f41ea6Daniel Dunbar virtual bool acceptsPipedInput() const { return true; } 1198cac5f7e1ce63dd77ee0fb4ef68f9fa804f41ea6Daniel Dunbar virtual bool canPipeOutput() const { return false; } 1208cac5f7e1ce63dd77ee0fb4ef68f9fa804f41ea6Daniel Dunbar virtual bool hasIntegratedCPP() const { return false; } 1218cac5f7e1ce63dd77ee0fb4ef68f9fa804f41ea6Daniel Dunbar 1228cac5f7e1ce63dd77ee0fb4ef68f9fa804f41ea6Daniel Dunbar virtual void ConstructJob(Compilation &C, const JobAction &JA, 1238cac5f7e1ce63dd77ee0fb4ef68f9fa804f41ea6Daniel Dunbar Job &Dest, 1248cac5f7e1ce63dd77ee0fb4ef68f9fa804f41ea6Daniel Dunbar const InputInfo &Output, 1258cac5f7e1ce63dd77ee0fb4ef68f9fa804f41ea6Daniel Dunbar const InputInfoList &Inputs, 1268cac5f7e1ce63dd77ee0fb4ef68f9fa804f41ea6Daniel Dunbar const ArgList &TCArgs, 1278cac5f7e1ce63dd77ee0fb4ef68f9fa804f41ea6Daniel Dunbar const char *LinkingOutput) const; 1288cac5f7e1ce63dd77ee0fb4ef68f9fa804f41ea6Daniel Dunbar }; 1298cac5f7e1ce63dd77ee0fb4ef68f9fa804f41ea6Daniel Dunbar 130ff7488dc9a766f94daf54d81b03ab9160d0bfd88Daniel Dunbar class VISIBILITY_HIDDEN Lipo : public Tool { 131ff7488dc9a766f94daf54d81b03ab9160d0bfd88Daniel Dunbar public: 1328cac5f7e1ce63dd77ee0fb4ef68f9fa804f41ea6Daniel Dunbar Lipo(const ToolChain &TC) : Tool("darwin::Lipo", TC) {} 133ff7488dc9a766f94daf54d81b03ab9160d0bfd88Daniel Dunbar 134ff7488dc9a766f94daf54d81b03ab9160d0bfd88Daniel Dunbar virtual bool acceptsPipedInput() const { return false; } 135ff7488dc9a766f94daf54d81b03ab9160d0bfd88Daniel Dunbar virtual bool canPipeOutput() const { return false; } 136ff7488dc9a766f94daf54d81b03ab9160d0bfd88Daniel Dunbar virtual bool hasIntegratedCPP() const { return false; } 137ff7488dc9a766f94daf54d81b03ab9160d0bfd88Daniel Dunbar 138ff7488dc9a766f94daf54d81b03ab9160d0bfd88Daniel Dunbar virtual void ConstructJob(Compilation &C, const JobAction &JA, 139ff7488dc9a766f94daf54d81b03ab9160d0bfd88Daniel Dunbar Job &Dest, 140ff7488dc9a766f94daf54d81b03ab9160d0bfd88Daniel Dunbar const InputInfo &Output, 141ff7488dc9a766f94daf54d81b03ab9160d0bfd88Daniel Dunbar const InputInfoList &Inputs, 142ff7488dc9a766f94daf54d81b03ab9160d0bfd88Daniel Dunbar const ArgList &TCArgs, 143ff7488dc9a766f94daf54d81b03ab9160d0bfd88Daniel Dunbar const char *LinkingOutput) const; 144ff7488dc9a766f94daf54d81b03ab9160d0bfd88Daniel Dunbar }; 145ff7488dc9a766f94daf54d81b03ab9160d0bfd88Daniel Dunbar} 146ff7488dc9a766f94daf54d81b03ab9160d0bfd88Daniel Dunbar 1479c073ff462eb75ccbb1c4446e21c148f3fc618e1Daniel Dunbar} // end namespace toolchains 1489c073ff462eb75ccbb1c4446e21c148f3fc618e1Daniel Dunbar} // end namespace driver 1499c073ff462eb75ccbb1c4446e21c148f3fc618e1Daniel Dunbar} // end namespace clang 1509c073ff462eb75ccbb1c4446e21c148f3fc618e1Daniel Dunbar 1519c073ff462eb75ccbb1c4446e21c148f3fc618e1Daniel Dunbar#endif 152