Tools.h revision a3ec60e0cf2a1916f479288998d31bd980b1a306
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/Types.h" 15#include "clang/Driver/Util.h" 16 17#include "llvm/Support/Compiler.h" 18 19namespace clang { 20namespace driver { 21namespace toolchains { 22 class Darwin_X86; 23} 24 25namespace tools { 26 27 class VISIBILITY_HIDDEN Clang : public Tool { 28 public: 29 Clang(const ToolChain &TC) : Tool("clang", TC) {} 30 31 virtual bool acceptsPipedInput() const { return true; } 32 virtual bool canPipeOutput() const { return true; } 33 virtual bool hasIntegratedCPP() const { return true; } 34 35 virtual void ConstructJob(Compilation &C, const JobAction &JA, 36 Job &Dest, 37 const InputInfo &Output, 38 const InputInfoList &Inputs, 39 const ArgList &TCArgs, 40 const char *LinkingOutput) const; 41 }; 42 43 /// gcc - Generic GCC tool implementations. 44namespace gcc { 45 class VISIBILITY_HIDDEN Common : public Tool { 46 public: 47 Common(const char *Name, const ToolChain &TC) : Tool(Name, TC) {} 48 49 virtual void ConstructJob(Compilation &C, const JobAction &JA, 50 Job &Dest, 51 const InputInfo &Output, 52 const InputInfoList &Inputs, 53 const ArgList &TCArgs, 54 const char *LinkingOutput) const; 55 56 /// RenderExtraToolArgs - Render any arguments necessary to force 57 /// the particular tool mode. 58 virtual void RenderExtraToolArgs(ArgStringList &CmdArgs) const = 0; 59 }; 60 61 62 class VISIBILITY_HIDDEN Preprocess : public Common { 63 public: 64 Preprocess(const ToolChain &TC) : Common("gcc::Preprocess", TC) {} 65 66 virtual bool acceptsPipedInput() const { return true; } 67 virtual bool canPipeOutput() const { return true; } 68 virtual bool hasIntegratedCPP() const { return false; } 69 70 virtual void RenderExtraToolArgs(ArgStringList &CmdArgs) const; 71 }; 72 73 class VISIBILITY_HIDDEN Precompile : public Common { 74 public: 75 Precompile(const ToolChain &TC) : Common("gcc::Precompile", TC) {} 76 77 virtual bool acceptsPipedInput() const { return true; } 78 virtual bool canPipeOutput() const { return false; } 79 virtual bool hasIntegratedCPP() const { return true; } 80 81 virtual void RenderExtraToolArgs(ArgStringList &CmdArgs) const; 82 }; 83 84 class VISIBILITY_HIDDEN Compile : public Common { 85 public: 86 Compile(const ToolChain &TC) : Common("gcc::Compile", TC) {} 87 88 virtual bool acceptsPipedInput() const { return true; } 89 virtual bool canPipeOutput() const { return true; } 90 virtual bool hasIntegratedCPP() const { return true; } 91 92 virtual void RenderExtraToolArgs(ArgStringList &CmdArgs) const; 93 }; 94 95 class VISIBILITY_HIDDEN Assemble : public Common { 96 public: 97 Assemble(const ToolChain &TC) : Common("gcc::Assemble", TC) {} 98 99 virtual bool acceptsPipedInput() const { return true; } 100 virtual bool canPipeOutput() const { return false; } 101 virtual bool hasIntegratedCPP() const { return false; } 102 103 virtual void RenderExtraToolArgs(ArgStringList &CmdArgs) const; 104 }; 105 106 class VISIBILITY_HIDDEN Link : public Common { 107 public: 108 Link(const ToolChain &TC) : Common("gcc::Link", TC) {} 109 110 virtual bool acceptsPipedInput() const { return false; } 111 virtual bool canPipeOutput() const { return false; } 112 virtual bool hasIntegratedCPP() const { return false; } 113 114 virtual void RenderExtraToolArgs(ArgStringList &CmdArgs) const; 115 }; 116} // end namespace gcc 117 118namespace darwin { 119 class VISIBILITY_HIDDEN CC1 : public Tool { 120 protected: 121 const char *getCC1Name(types::ID Type) const; 122 const char *getBaseInputName(const ArgList &Args, 123 const InputInfoList &Input) const; 124 const char *getBaseInputStem(const ArgList &Args, 125 const InputInfoList &Input) const; 126 const char *getDependencyFileName(const ArgList &Args, 127 const InputInfoList &Inputs) const; 128 129 void AddCC1Args(const ArgList &Args, ArgStringList &CmdArgs) const; 130 void AddCC1OptionsArgs(const ArgList &Args, ArgStringList &CmdArgs, 131 const InputInfoList &Inputs, 132 const ArgStringList &OutputArgs) const; 133 void AddCPPOptionsArgs(const ArgList &Args, ArgStringList &CmdArgs, 134 const InputInfoList &Inputs, 135 const ArgStringList &OutputArgs) const; 136 void AddCPPUniqueOptionsArgs(const ArgList &Args, 137 ArgStringList &CmdArgs, 138 const InputInfoList &Inputs) const; 139 void AddCPPArgs(const ArgList &Args, ArgStringList &CmdArgs) const; 140 141 public: 142 CC1(const char *Name, const ToolChain &TC) : Tool(Name, TC) {} 143 144 virtual bool acceptsPipedInput() const { return true; } 145 virtual bool canPipeOutput() const { return true; } 146 virtual bool hasIntegratedCPP() const { return true; } 147 }; 148 149 class VISIBILITY_HIDDEN Preprocess : public CC1 { 150 public: 151 Preprocess(const ToolChain &TC) : CC1("darwin::Preprocess", TC) {} 152 153 virtual void ConstructJob(Compilation &C, const JobAction &JA, 154 Job &Dest, 155 const InputInfo &Output, 156 const InputInfoList &Inputs, 157 const ArgList &TCArgs, 158 const char *LinkingOutput) const; 159 }; 160 161 class VISIBILITY_HIDDEN Compile : public CC1 { 162 public: 163 Compile(const ToolChain &TC) : CC1("darwin::Compile", TC) {} 164 165 virtual void ConstructJob(Compilation &C, const JobAction &JA, 166 Job &Dest, 167 const InputInfo &Output, 168 const InputInfoList &Inputs, 169 const ArgList &TCArgs, 170 const char *LinkingOutput) const; 171 }; 172 173 class VISIBILITY_HIDDEN Assemble : public Tool { 174 public: 175 Assemble(const ToolChain &TC) : Tool("darwin::Assemble", TC) {} 176 177 virtual bool acceptsPipedInput() const { return true; } 178 virtual bool canPipeOutput() const { return false; } 179 virtual bool hasIntegratedCPP() const { return false; } 180 181 virtual void ConstructJob(Compilation &C, const JobAction &JA, 182 Job &Dest, 183 const InputInfo &Output, 184 const InputInfoList &Inputs, 185 const ArgList &TCArgs, 186 const char *LinkingOutput) const; 187 }; 188 189 class VISIBILITY_HIDDEN Link : public Tool { 190 void AddDarwinArch(const ArgList &Args, ArgStringList &CmdArgs) const; 191 void AddDarwinSubArch(const ArgList &Args, ArgStringList &CmdArgs) const; 192 void AddLinkArgs(const ArgList &Args, ArgStringList &CmdArgs) const; 193 194 /// The default macosx-version-min. 195 const char *MacosxVersionMin; 196 197 const toolchains::Darwin_X86 &getDarwinToolChain() const; 198 199 public: 200 Link(const ToolChain &TC, 201 const char *_MacosxVersionMin) 202 : Tool("darwin::Link", TC), MacosxVersionMin(_MacosxVersionMin) { 203 } 204 205 virtual bool acceptsPipedInput() const { return false; } 206 virtual bool canPipeOutput() const { return false; } 207 virtual bool hasIntegratedCPP() const { return false; } 208 209 virtual void ConstructJob(Compilation &C, const JobAction &JA, 210 Job &Dest, 211 const InputInfo &Output, 212 const InputInfoList &Inputs, 213 const ArgList &TCArgs, 214 const char *LinkingOutput) const; 215 }; 216 217 class VISIBILITY_HIDDEN Lipo : public Tool { 218 public: 219 Lipo(const ToolChain &TC) : Tool("darwin::Lipo", TC) {} 220 221 virtual bool acceptsPipedInput() const { return false; } 222 virtual bool canPipeOutput() const { return false; } 223 virtual bool hasIntegratedCPP() const { return false; } 224 225 virtual void ConstructJob(Compilation &C, const JobAction &JA, 226 Job &Dest, 227 const InputInfo &Output, 228 const InputInfoList &Inputs, 229 const ArgList &TCArgs, 230 const char *LinkingOutput) const; 231 }; 232} 233 234} // end namespace toolchains 235} // end namespace driver 236} // end namespace clang 237 238#endif 239