Tools.h revision 871adcf4e41285e3f4c3b62eaa1b2e05b60b92da
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" 149c073ff462eb75ccbb1c4446e21c148f3fc618e1Daniel Dunbar 159c073ff462eb75ccbb1c4446e21c148f3fc618e1Daniel Dunbar#include "llvm/Support/Compiler.h" 169c073ff462eb75ccbb1c4446e21c148f3fc618e1Daniel Dunbar 179c073ff462eb75ccbb1c4446e21c148f3fc618e1Daniel Dunbarnamespace clang { 189c073ff462eb75ccbb1c4446e21c148f3fc618e1Daniel Dunbarnamespace driver { 19985b825eea7387be10478de0430815ed6a673326Daniel Dunbarnamespace tools { 209c073ff462eb75ccbb1c4446e21c148f3fc618e1Daniel Dunbar 21985b825eea7387be10478de0430815ed6a673326Daniel Dunbar class VISIBILITY_HIDDEN Clang : public Tool { 229c073ff462eb75ccbb1c4446e21c148f3fc618e1Daniel Dunbar public: 2331b1e5437e7435879fc044afb77ff27096008e72Daniel Dunbar Clang(const ToolChain &TC) : Tool("clang", TC) {} 249c073ff462eb75ccbb1c4446e21c148f3fc618e1Daniel Dunbar 259c073ff462eb75ccbb1c4446e21c148f3fc618e1Daniel Dunbar virtual bool acceptsPipedInput() const { return true; } 269c073ff462eb75ccbb1c4446e21c148f3fc618e1Daniel Dunbar virtual bool canPipeOutput() const { return true; } 279c073ff462eb75ccbb1c4446e21c148f3fc618e1Daniel Dunbar virtual bool hasIntegratedCPP() const { return true; } 2847ac7d27c44bd64a7d0fc03d4babc196cf2b8230Daniel Dunbar 2947ac7d27c44bd64a7d0fc03d4babc196cf2b8230Daniel Dunbar virtual void ConstructJob(Compilation &C, const JobAction &JA, 30871adcf4e41285e3f4c3b62eaa1b2e05b60b92daDaniel Dunbar Job &Dest, 3162cf601812e03dd9bc5df42b8ef06a0cdedc38bfDaniel Dunbar const InputInfo &Output, 3262cf601812e03dd9bc5df42b8ef06a0cdedc38bfDaniel Dunbar const InputInfoList &Inputs, 3347ac7d27c44bd64a7d0fc03d4babc196cf2b8230Daniel Dunbar const ArgList &TCArgs, 3447ac7d27c44bd64a7d0fc03d4babc196cf2b8230Daniel Dunbar const char *LinkingOutput) const; 359c073ff462eb75ccbb1c4446e21c148f3fc618e1Daniel Dunbar }; 369c073ff462eb75ccbb1c4446e21c148f3fc618e1Daniel Dunbar 3731b1e5437e7435879fc044afb77ff27096008e72Daniel Dunbar /// gcc - Generic GCC tool implementations. 3831b1e5437e7435879fc044afb77ff27096008e72Daniel Dunbarnamespace gcc { 3931b1e5437e7435879fc044afb77ff27096008e72Daniel Dunbar class VISIBILITY_HIDDEN Preprocess : public Tool { 409c073ff462eb75ccbb1c4446e21c148f3fc618e1Daniel Dunbar public: 4131b1e5437e7435879fc044afb77ff27096008e72Daniel Dunbar Preprocess(const ToolChain &TC) : Tool("gcc::Preprocess", TC) {} 429c073ff462eb75ccbb1c4446e21c148f3fc618e1Daniel Dunbar 439c073ff462eb75ccbb1c4446e21c148f3fc618e1Daniel Dunbar virtual bool acceptsPipedInput() const { return true; } 449c073ff462eb75ccbb1c4446e21c148f3fc618e1Daniel Dunbar virtual bool canPipeOutput() const { return true; } 459c073ff462eb75ccbb1c4446e21c148f3fc618e1Daniel Dunbar virtual bool hasIntegratedCPP() const { return false; } 4647ac7d27c44bd64a7d0fc03d4babc196cf2b8230Daniel Dunbar 4747ac7d27c44bd64a7d0fc03d4babc196cf2b8230Daniel Dunbar virtual void ConstructJob(Compilation &C, const JobAction &JA, 48871adcf4e41285e3f4c3b62eaa1b2e05b60b92daDaniel Dunbar Job &Dest, 4962cf601812e03dd9bc5df42b8ef06a0cdedc38bfDaniel Dunbar const InputInfo &Output, 5062cf601812e03dd9bc5df42b8ef06a0cdedc38bfDaniel Dunbar const InputInfoList &Inputs, 5147ac7d27c44bd64a7d0fc03d4babc196cf2b8230Daniel Dunbar const ArgList &TCArgs, 5247ac7d27c44bd64a7d0fc03d4babc196cf2b8230Daniel Dunbar const char *LinkingOutput) const; 539c073ff462eb75ccbb1c4446e21c148f3fc618e1Daniel Dunbar }; 549c073ff462eb75ccbb1c4446e21c148f3fc618e1Daniel Dunbar 5531b1e5437e7435879fc044afb77ff27096008e72Daniel Dunbar class VISIBILITY_HIDDEN Precompile : public Tool { 569c073ff462eb75ccbb1c4446e21c148f3fc618e1Daniel Dunbar public: 5731b1e5437e7435879fc044afb77ff27096008e72Daniel Dunbar Precompile(const ToolChain &TC) : Tool("gcc::Precompile", TC) {} 589c073ff462eb75ccbb1c4446e21c148f3fc618e1Daniel Dunbar 599c073ff462eb75ccbb1c4446e21c148f3fc618e1Daniel Dunbar virtual bool acceptsPipedInput() const { return true; } 609c073ff462eb75ccbb1c4446e21c148f3fc618e1Daniel Dunbar virtual bool canPipeOutput() const { return false; } 619c073ff462eb75ccbb1c4446e21c148f3fc618e1Daniel Dunbar virtual bool hasIntegratedCPP() const { return true; } 6247ac7d27c44bd64a7d0fc03d4babc196cf2b8230Daniel Dunbar 6347ac7d27c44bd64a7d0fc03d4babc196cf2b8230Daniel Dunbar virtual void ConstructJob(Compilation &C, const JobAction &JA, 64871adcf4e41285e3f4c3b62eaa1b2e05b60b92daDaniel Dunbar Job &Dest, 6562cf601812e03dd9bc5df42b8ef06a0cdedc38bfDaniel Dunbar const InputInfo &Output, 6662cf601812e03dd9bc5df42b8ef06a0cdedc38bfDaniel Dunbar const InputInfoList &Inputs, 6747ac7d27c44bd64a7d0fc03d4babc196cf2b8230Daniel Dunbar const ArgList &TCArgs, 6847ac7d27c44bd64a7d0fc03d4babc196cf2b8230Daniel Dunbar const char *LinkingOutput) const; 699c073ff462eb75ccbb1c4446e21c148f3fc618e1Daniel Dunbar }; 709c073ff462eb75ccbb1c4446e21c148f3fc618e1Daniel Dunbar 7131b1e5437e7435879fc044afb77ff27096008e72Daniel Dunbar class VISIBILITY_HIDDEN Compile : public Tool { 729c073ff462eb75ccbb1c4446e21c148f3fc618e1Daniel Dunbar public: 7331b1e5437e7435879fc044afb77ff27096008e72Daniel Dunbar Compile(const ToolChain &TC) : Tool("gcc::Compile", TC) {} 749c073ff462eb75ccbb1c4446e21c148f3fc618e1Daniel Dunbar 759c073ff462eb75ccbb1c4446e21c148f3fc618e1Daniel Dunbar virtual bool acceptsPipedInput() const { return true; } 769c073ff462eb75ccbb1c4446e21c148f3fc618e1Daniel Dunbar virtual bool canPipeOutput() const { return true; } 779c073ff462eb75ccbb1c4446e21c148f3fc618e1Daniel Dunbar virtual bool hasIntegratedCPP() const { return true; } 7847ac7d27c44bd64a7d0fc03d4babc196cf2b8230Daniel Dunbar 7947ac7d27c44bd64a7d0fc03d4babc196cf2b8230Daniel Dunbar virtual void ConstructJob(Compilation &C, const JobAction &JA, 80871adcf4e41285e3f4c3b62eaa1b2e05b60b92daDaniel Dunbar Job &Dest, 8162cf601812e03dd9bc5df42b8ef06a0cdedc38bfDaniel Dunbar const InputInfo &Output, 8262cf601812e03dd9bc5df42b8ef06a0cdedc38bfDaniel Dunbar const InputInfoList &Inputs, 8347ac7d27c44bd64a7d0fc03d4babc196cf2b8230Daniel Dunbar const ArgList &TCArgs, 8447ac7d27c44bd64a7d0fc03d4babc196cf2b8230Daniel Dunbar const char *LinkingOutput) const; 859c073ff462eb75ccbb1c4446e21c148f3fc618e1Daniel Dunbar }; 869c073ff462eb75ccbb1c4446e21c148f3fc618e1Daniel Dunbar 8731b1e5437e7435879fc044afb77ff27096008e72Daniel Dunbar class VISIBILITY_HIDDEN Assemble : public Tool { 889c073ff462eb75ccbb1c4446e21c148f3fc618e1Daniel Dunbar public: 8931b1e5437e7435879fc044afb77ff27096008e72Daniel Dunbar Assemble(const ToolChain &TC) : Tool("gcc::Assemble", TC) {} 909c073ff462eb75ccbb1c4446e21c148f3fc618e1Daniel Dunbar 919c073ff462eb75ccbb1c4446e21c148f3fc618e1Daniel Dunbar virtual bool acceptsPipedInput() const { return true; } 929c073ff462eb75ccbb1c4446e21c148f3fc618e1Daniel Dunbar virtual bool canPipeOutput() const { return false; } 939c073ff462eb75ccbb1c4446e21c148f3fc618e1Daniel Dunbar virtual bool hasIntegratedCPP() const { return false; } 9447ac7d27c44bd64a7d0fc03d4babc196cf2b8230Daniel Dunbar 9547ac7d27c44bd64a7d0fc03d4babc196cf2b8230Daniel Dunbar virtual void ConstructJob(Compilation &C, const JobAction &JA, 96871adcf4e41285e3f4c3b62eaa1b2e05b60b92daDaniel Dunbar Job &Dest, 9762cf601812e03dd9bc5df42b8ef06a0cdedc38bfDaniel Dunbar const InputInfo &Output, 9862cf601812e03dd9bc5df42b8ef06a0cdedc38bfDaniel Dunbar const InputInfoList &Inputs, 9947ac7d27c44bd64a7d0fc03d4babc196cf2b8230Daniel Dunbar const ArgList &TCArgs, 10047ac7d27c44bd64a7d0fc03d4babc196cf2b8230Daniel Dunbar const char *LinkingOutput) const; 1019c073ff462eb75ccbb1c4446e21c148f3fc618e1Daniel Dunbar }; 1029c073ff462eb75ccbb1c4446e21c148f3fc618e1Daniel Dunbar 10331b1e5437e7435879fc044afb77ff27096008e72Daniel Dunbar class VISIBILITY_HIDDEN Link : public Tool { 1049c073ff462eb75ccbb1c4446e21c148f3fc618e1Daniel Dunbar public: 10531b1e5437e7435879fc044afb77ff27096008e72Daniel Dunbar Link(const ToolChain &TC) : Tool("gcc::Link", TC) {} 1069c073ff462eb75ccbb1c4446e21c148f3fc618e1Daniel Dunbar 1079c073ff462eb75ccbb1c4446e21c148f3fc618e1Daniel Dunbar virtual bool acceptsPipedInput() const { return false; } 1089c073ff462eb75ccbb1c4446e21c148f3fc618e1Daniel Dunbar virtual bool canPipeOutput() const { return false; } 1099c073ff462eb75ccbb1c4446e21c148f3fc618e1Daniel Dunbar virtual bool hasIntegratedCPP() const { return false; } 11047ac7d27c44bd64a7d0fc03d4babc196cf2b8230Daniel Dunbar 11147ac7d27c44bd64a7d0fc03d4babc196cf2b8230Daniel Dunbar virtual void ConstructJob(Compilation &C, const JobAction &JA, 112871adcf4e41285e3f4c3b62eaa1b2e05b60b92daDaniel Dunbar Job &Dest, 11362cf601812e03dd9bc5df42b8ef06a0cdedc38bfDaniel Dunbar const InputInfo &Output, 11462cf601812e03dd9bc5df42b8ef06a0cdedc38bfDaniel Dunbar const InputInfoList &Inputs, 11547ac7d27c44bd64a7d0fc03d4babc196cf2b8230Daniel Dunbar const ArgList &TCArgs, 11647ac7d27c44bd64a7d0fc03d4babc196cf2b8230Daniel Dunbar const char *LinkingOutput) const; 1179c073ff462eb75ccbb1c4446e21c148f3fc618e1Daniel Dunbar }; 11831b1e5437e7435879fc044afb77ff27096008e72Daniel Dunbar} // end namespace gcc 1199c073ff462eb75ccbb1c4446e21c148f3fc618e1Daniel Dunbar 1209c073ff462eb75ccbb1c4446e21c148f3fc618e1Daniel Dunbar} // end namespace toolchains 1219c073ff462eb75ccbb1c4446e21c148f3fc618e1Daniel Dunbar} // end namespace driver 1229c073ff462eb75ccbb1c4446e21c148f3fc618e1Daniel Dunbar} // end namespace clang 1239c073ff462eb75ccbb1c4446e21c148f3fc618e1Daniel Dunbar 1249c073ff462eb75ccbb1c4446e21c148f3fc618e1Daniel Dunbar#endif 125