Tools.h revision b488c1dac8e53206f07103d794a62a3f5012c0f4
1//===--- Tools.h - Tool Implementations -------------------------*- C++ -*-===// 2// 3// The LLVM Compiler Infrastructure 4// 5// This file is distributed under the University of Illinois Open Source 6// License. See LICENSE.TXT for details. 7// 8//===----------------------------------------------------------------------===// 9 10#ifndef CLANG_LIB_DRIVER_TOOLS_H_ 11#define CLANG_LIB_DRIVER_TOOLS_H_ 12 13#include "clang/Driver/Tool.h" 14#include "clang/Driver/Util.h" 15 16#include "llvm/Support/Compiler.h" 17 18namespace clang { 19namespace driver { 20namespace tools { 21 22 class VISIBILITY_HIDDEN Clang : public Tool { 23 public: 24 Clang(const ToolChain &TC) : Tool("clang", TC) {} 25 26 virtual bool acceptsPipedInput() const { return true; } 27 virtual bool canPipeOutput() const { return true; } 28 virtual bool hasIntegratedCPP() const { return true; } 29 30 virtual void ConstructJob(Compilation &C, const JobAction &JA, 31 Job &Dest, 32 const InputInfo &Output, 33 const InputInfoList &Inputs, 34 const ArgList &TCArgs, 35 const char *LinkingOutput) const; 36 }; 37 38 /// gcc - Generic GCC tool implementations. 39namespace gcc { 40 class VISIBILITY_HIDDEN Common : public Tool { 41 public: 42 Common(const char *Name, const ToolChain &TC) : Tool(Name, TC) {} 43 44 virtual void ConstructJob(Compilation &C, const JobAction &JA, 45 Job &Dest, 46 const InputInfo &Output, 47 const InputInfoList &Inputs, 48 const ArgList &TCArgs, 49 const char *LinkingOutput) const; 50 51 /// RenderExtraToolArgs - Render any arguments necessary to force 52 /// the particular tool mode. 53 virtual void RenderExtraToolArgs(ArgStringList &CmdArgs) const = 0; 54 }; 55 56 57 class VISIBILITY_HIDDEN Preprocess : public Common { 58 public: 59 Preprocess(const ToolChain &TC) : Common("gcc::Preprocess", TC) {} 60 61 virtual bool acceptsPipedInput() const { return true; } 62 virtual bool canPipeOutput() const { return true; } 63 virtual bool hasIntegratedCPP() const { return false; } 64 65 virtual void RenderExtraToolArgs(ArgStringList &CmdArgs) const; 66 }; 67 68 class VISIBILITY_HIDDEN Precompile : public Common { 69 public: 70 Precompile(const ToolChain &TC) : Common("gcc::Precompile", TC) {} 71 72 virtual bool acceptsPipedInput() const { return true; } 73 virtual bool canPipeOutput() const { return false; } 74 virtual bool hasIntegratedCPP() const { return true; } 75 76 virtual void RenderExtraToolArgs(ArgStringList &CmdArgs) const; 77 }; 78 79 class VISIBILITY_HIDDEN Compile : public Common { 80 public: 81 Compile(const ToolChain &TC) : Common("gcc::Compile", TC) {} 82 83 virtual bool acceptsPipedInput() const { return true; } 84 virtual bool canPipeOutput() const { return true; } 85 virtual bool hasIntegratedCPP() const { return true; } 86 87 virtual void RenderExtraToolArgs(ArgStringList &CmdArgs) const; 88 }; 89 90 class VISIBILITY_HIDDEN Assemble : public Common { 91 public: 92 Assemble(const ToolChain &TC) : Common("gcc::Assemble", TC) {} 93 94 virtual bool acceptsPipedInput() const { return true; } 95 virtual bool canPipeOutput() const { return false; } 96 virtual bool hasIntegratedCPP() const { return false; } 97 98 virtual void RenderExtraToolArgs(ArgStringList &CmdArgs) const; 99 }; 100 101 class VISIBILITY_HIDDEN Link : public Common { 102 public: 103 Link(const ToolChain &TC) : Common("gcc::Link", TC) {} 104 105 virtual bool acceptsPipedInput() const { return false; } 106 virtual bool canPipeOutput() const { return false; } 107 virtual bool hasIntegratedCPP() const { return false; } 108 109 virtual void RenderExtraToolArgs(ArgStringList &CmdArgs) const; 110 }; 111} // end namespace gcc 112 113} // end namespace toolchains 114} // end namespace driver 115} // end namespace clang 116 117#endif 118