blob: aa15f3551c1d27207dba9addfbc46fb3031a9731 [file] [log] [blame]
Daniel Dunbar5903d8c2009-03-17 22:07:58 +00001//===--- 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"
Daniel Dunbare6adeee2009-03-29 17:08:39 +000014#include "clang/Driver/Types.h"
Daniel Dunbara3246a02009-03-18 08:07:30 +000015#include "clang/Driver/Util.h"
Daniel Dunbar5903d8c2009-03-17 22:07:58 +000016
Joerg Sonnenberger637603a2011-05-16 13:35:02 +000017#include "llvm/ADT/Triple.h"
Daniel Dunbar5903d8c2009-03-17 22:07:58 +000018#include "llvm/Support/Compiler.h"
19
20namespace clang {
21namespace driver {
Douglas Gregor111af7d2009-04-18 00:34:01 +000022 class Driver;
23
Daniel Dunbarc1964212009-03-26 16:23:12 +000024namespace toolchains {
Daniel Dunbarf0a5b9b2009-09-04 18:34:51 +000025 class Darwin;
Daniel Dunbarc1964212009-03-26 16:23:12 +000026}
27
Daniel Dunbar15abb2e2009-03-17 22:18:43 +000028namespace tools {
Daniel Dunbar5903d8c2009-03-17 22:07:58 +000029
Daniel Dunbar4f5e79c2010-05-20 21:30:13 +000030 /// \brief Clang compiler tool.
Duncan Sandsaf260b92010-05-11 20:16:05 +000031 class LLVM_LIBRARY_VISIBILITY Clang : public Tool {
Peter Collingbourne9b515cb2011-11-06 00:40:05 +000032 void AddPreprocessingOptions(Compilation &C,
33 const Driver &D,
Douglas Gregor111af7d2009-04-18 00:34:01 +000034 const ArgList &Args,
Daniel Dunbard067f7f2009-04-08 23:54:23 +000035 ArgStringList &CmdArgs,
36 const InputInfo &Output,
37 const InputInfoList &Inputs) const;
38
Daniel Dunbarc9388c12011-03-17 17:10:06 +000039 void AddARMTargetArgs(const ArgList &Args, ArgStringList &CmdArgs,
40 bool KernelOrKext) const;
Eric Christopher0b26a612010-03-02 02:41:08 +000041 void AddMIPSTargetArgs(const ArgList &Args, ArgStringList &CmdArgs) const;
Hal Finkel8eb59282012-06-11 22:35:19 +000042 void AddPPCTargetArgs(const ArgList &Args, ArgStringList &CmdArgs) const;
Bruno Cardoso Lopese7f211c2010-11-09 17:21:19 +000043 void AddSparcTargetArgs(const ArgList &Args, ArgStringList &CmdArgs) const;
Daniel Dunbar3b3191f2009-09-09 22:33:08 +000044 void AddX86TargetArgs(const ArgList &Args, ArgStringList &CmdArgs) const;
Tony Linthicum76329bf2011-12-12 21:14:55 +000045 void AddHexagonTargetArgs (const ArgList &Args, ArgStringList &CmdArgs) const;
Daniel Dunbar3b3191f2009-09-09 22:33:08 +000046
Daniel Dunbar5903d8c2009-03-17 22:07:58 +000047 public:
Daniel Dunbar1cb532c2010-05-22 00:37:18 +000048 Clang(const ToolChain &TC) : Tool("clang", "clang frontend", TC) {}
Daniel Dunbar5903d8c2009-03-17 22:07:58 +000049
Daniel Dunbar3d45e172010-04-06 17:07:49 +000050 virtual bool hasGoodDiagnostics() const { return true; }
Daniel Dunbarc4343942010-02-03 03:07:56 +000051 virtual bool hasIntegratedAssembler() const { return true; }
Daniel Dunbar5903d8c2009-03-17 22:07:58 +000052 virtual bool hasIntegratedCPP() const { return true; }
Daniel Dunbar1a093d22009-03-18 06:00:36 +000053
54 virtual void ConstructJob(Compilation &C, const JobAction &JA,
Mike Stump11289f42009-09-09 15:08:12 +000055 const InputInfo &Output,
56 const InputInfoList &Inputs,
57 const ArgList &TCArgs,
Daniel Dunbar1a093d22009-03-18 06:00:36 +000058 const char *LinkingOutput) const;
Daniel Dunbar5903d8c2009-03-17 22:07:58 +000059 };
60
Daniel Dunbar4f5e79c2010-05-20 21:30:13 +000061 /// \brief Clang integrated assembler tool.
62 class LLVM_LIBRARY_VISIBILITY ClangAs : public Tool {
Jim Grosbach576452b2012-02-10 20:37:10 +000063 void AddARMTargetArgs(const ArgList &Args, ArgStringList &CmdArgs) const;
Daniel Dunbar4f5e79c2010-05-20 21:30:13 +000064 public:
Daniel Dunbar1cb532c2010-05-22 00:37:18 +000065 ClangAs(const ToolChain &TC) : Tool("clang::as",
66 "clang integrated assembler", TC) {}
Daniel Dunbar4f5e79c2010-05-20 21:30:13 +000067
Daniel Dunbar4f5e79c2010-05-20 21:30:13 +000068 virtual bool hasGoodDiagnostics() const { return true; }
69 virtual bool hasIntegratedAssembler() const { return false; }
70 virtual bool hasIntegratedCPP() const { return false; }
71
72 virtual void ConstructJob(Compilation &C, const JobAction &JA,
Daniel Dunbar4f5e79c2010-05-20 21:30:13 +000073 const InputInfo &Output,
74 const InputInfoList &Inputs,
75 const ArgList &TCArgs,
76 const char *LinkingOutput) const;
77 };
78
Daniel Dunbar82116f82009-03-17 22:45:24 +000079 /// gcc - Generic GCC tool implementations.
80namespace gcc {
Duncan Sandsaf260b92010-05-11 20:16:05 +000081 class LLVM_LIBRARY_VISIBILITY Common : public Tool {
Daniel Dunbar5903d8c2009-03-17 22:07:58 +000082 public:
Daniel Dunbar1cb532c2010-05-22 00:37:18 +000083 Common(const char *Name, const char *ShortName,
84 const ToolChain &TC) : Tool(Name, ShortName, TC) {}
Daniel Dunbara3246a02009-03-18 08:07:30 +000085
86 virtual void ConstructJob(Compilation &C, const JobAction &JA,
Mike Stump11289f42009-09-09 15:08:12 +000087 const InputInfo &Output,
88 const InputInfoList &Inputs,
89 const ArgList &TCArgs,
Daniel Dunbara3246a02009-03-18 08:07:30 +000090 const char *LinkingOutput) const;
91
92 /// RenderExtraToolArgs - Render any arguments necessary to force
93 /// the particular tool mode.
Daniel Dunbar4e295052010-01-25 22:35:08 +000094 virtual void RenderExtraToolArgs(const JobAction &JA,
95 ArgStringList &CmdArgs) const = 0;
Daniel Dunbara3246a02009-03-18 08:07:30 +000096 };
97
Mike Stump11289f42009-09-09 15:08:12 +000098
Duncan Sandsaf260b92010-05-11 20:16:05 +000099 class LLVM_LIBRARY_VISIBILITY Preprocess : public Common {
Daniel Dunbara3246a02009-03-18 08:07:30 +0000100 public:
Daniel Dunbar1cb532c2010-05-22 00:37:18 +0000101 Preprocess(const ToolChain &TC) : Common("gcc::Preprocess",
102 "gcc preprocessor", TC) {}
Daniel Dunbar5903d8c2009-03-17 22:07:58 +0000103
Daniel Dunbar3d45e172010-04-06 17:07:49 +0000104 virtual bool hasGoodDiagnostics() const { return true; }
Daniel Dunbar5903d8c2009-03-17 22:07:58 +0000105 virtual bool hasIntegratedCPP() const { return false; }
Daniel Dunbar1a093d22009-03-18 06:00:36 +0000106
Daniel Dunbar4e295052010-01-25 22:35:08 +0000107 virtual void RenderExtraToolArgs(const JobAction &JA,
108 ArgStringList &CmdArgs) const;
Daniel Dunbar5903d8c2009-03-17 22:07:58 +0000109 };
110
Duncan Sandsaf260b92010-05-11 20:16:05 +0000111 class LLVM_LIBRARY_VISIBILITY Precompile : public Common {
Daniel Dunbar5903d8c2009-03-17 22:07:58 +0000112 public:
Daniel Dunbar1cb532c2010-05-22 00:37:18 +0000113 Precompile(const ToolChain &TC) : Common("gcc::Precompile",
114 "gcc precompile", TC) {}
Daniel Dunbar5903d8c2009-03-17 22:07:58 +0000115
Daniel Dunbar3d45e172010-04-06 17:07:49 +0000116 virtual bool hasGoodDiagnostics() const { return true; }
Daniel Dunbar5903d8c2009-03-17 22:07:58 +0000117 virtual bool hasIntegratedCPP() const { return true; }
Daniel Dunbar1a093d22009-03-18 06:00:36 +0000118
Daniel Dunbar4e295052010-01-25 22:35:08 +0000119 virtual void RenderExtraToolArgs(const JobAction &JA,
120 ArgStringList &CmdArgs) const;
Daniel Dunbar5903d8c2009-03-17 22:07:58 +0000121 };
122
Duncan Sandsaf260b92010-05-11 20:16:05 +0000123 class LLVM_LIBRARY_VISIBILITY Compile : public Common {
Daniel Dunbar5903d8c2009-03-17 22:07:58 +0000124 public:
Daniel Dunbar1cb532c2010-05-22 00:37:18 +0000125 Compile(const ToolChain &TC) : Common("gcc::Compile",
126 "gcc frontend", TC) {}
Daniel Dunbar5903d8c2009-03-17 22:07:58 +0000127
Daniel Dunbar3d45e172010-04-06 17:07:49 +0000128 virtual bool hasGoodDiagnostics() const { return true; }
Daniel Dunbar5903d8c2009-03-17 22:07:58 +0000129 virtual bool hasIntegratedCPP() const { return true; }
Daniel Dunbar1a093d22009-03-18 06:00:36 +0000130
Daniel Dunbar4e295052010-01-25 22:35:08 +0000131 virtual void RenderExtraToolArgs(const JobAction &JA,
132 ArgStringList &CmdArgs) const;
Daniel Dunbar5903d8c2009-03-17 22:07:58 +0000133 };
134
Duncan Sandsaf260b92010-05-11 20:16:05 +0000135 class LLVM_LIBRARY_VISIBILITY Assemble : public Common {
Daniel Dunbar5903d8c2009-03-17 22:07:58 +0000136 public:
Daniel Dunbar1cb532c2010-05-22 00:37:18 +0000137 Assemble(const ToolChain &TC) : Common("gcc::Assemble",
138 "assembler (via gcc)", TC) {}
Daniel Dunbar5903d8c2009-03-17 22:07:58 +0000139
Daniel Dunbar5903d8c2009-03-17 22:07:58 +0000140 virtual bool hasIntegratedCPP() const { return false; }
Daniel Dunbar1a093d22009-03-18 06:00:36 +0000141
Daniel Dunbar4e295052010-01-25 22:35:08 +0000142 virtual void RenderExtraToolArgs(const JobAction &JA,
143 ArgStringList &CmdArgs) const;
Daniel Dunbar5903d8c2009-03-17 22:07:58 +0000144 };
145
Duncan Sandsaf260b92010-05-11 20:16:05 +0000146 class LLVM_LIBRARY_VISIBILITY Link : public Common {
Daniel Dunbar5903d8c2009-03-17 22:07:58 +0000147 public:
Daniel Dunbar1cb532c2010-05-22 00:37:18 +0000148 Link(const ToolChain &TC) : Common("gcc::Link",
149 "linker (via gcc)", TC) {}
Daniel Dunbar5903d8c2009-03-17 22:07:58 +0000150
Daniel Dunbar5903d8c2009-03-17 22:07:58 +0000151 virtual bool hasIntegratedCPP() const { return false; }
Chad Rosierbee5a1d2012-03-07 00:30:40 +0000152 virtual bool isLinkJob() const { return true; }
Daniel Dunbar1a093d22009-03-18 06:00:36 +0000153
Daniel Dunbar4e295052010-01-25 22:35:08 +0000154 virtual void RenderExtraToolArgs(const JobAction &JA,
155 ArgStringList &CmdArgs) const;
Daniel Dunbar5903d8c2009-03-17 22:07:58 +0000156 };
Daniel Dunbar82116f82009-03-17 22:45:24 +0000157} // end namespace gcc
Daniel Dunbar5903d8c2009-03-17 22:07:58 +0000158
Tony Linthicum76329bf2011-12-12 21:14:55 +0000159namespace hexagon {
160 // For Hexagon, we do not need to instantiate tools for PreProcess, PreCompile and Compile.
161 // We simply use "clang -cc1" for those actions.
162 class LLVM_LIBRARY_VISIBILITY Assemble : public Tool {
163 public:
164 Assemble(const ToolChain &TC) : Tool("hexagon::Assemble",
165 "hexagon-as", TC) {}
166
167 virtual bool hasIntegratedCPP() const { return false; }
168
169 virtual void RenderExtraToolArgs(const JobAction &JA,
170 ArgStringList &CmdArgs) const;
171 virtual void ConstructJob(Compilation &C, const JobAction &JA,
172 const InputInfo &Output,
173 const InputInfoList &Inputs,
174 const ArgList &TCArgs,
175 const char *LinkingOutput) const;
176 };
177
178 class LLVM_LIBRARY_VISIBILITY Link : public Tool {
179 public:
180 Link(const ToolChain &TC) : Tool("hexagon::Link",
181 "hexagon-ld", TC) {}
182
183 virtual bool hasIntegratedCPP() const { return false; }
Chad Rosierbee5a1d2012-03-07 00:30:40 +0000184 virtual bool isLinkJob() const { return true; }
Tony Linthicum76329bf2011-12-12 21:14:55 +0000185
186 virtual void RenderExtraToolArgs(const JobAction &JA,
187 ArgStringList &CmdArgs) const;
188 virtual void ConstructJob(Compilation &C, const JobAction &JA,
189 const InputInfo &Output,
190 const InputInfoList &Inputs,
191 const ArgList &TCArgs,
192 const char *LinkingOutput) const;
193 };
194} // end namespace hexagon.
195
196
Daniel Dunbar64ed5e32009-03-20 00:52:38 +0000197namespace darwin {
Duncan Sandsaf260b92010-05-11 20:16:05 +0000198 class LLVM_LIBRARY_VISIBILITY DarwinTool : public Tool {
David Blaikie68e081d2011-12-20 02:48:34 +0000199 virtual void anchor();
Daniel Dunbare9ded432009-09-09 18:36:20 +0000200 protected:
201 void AddDarwinArch(const ArgList &Args, ArgStringList &CmdArgs) const;
Daniel Dunbare9ded432009-09-09 18:36:20 +0000202
203 const toolchains::Darwin &getDarwinToolChain() const {
204 return reinterpret_cast<const toolchains::Darwin&>(getToolChain());
205 }
206
207 public:
Daniel Dunbar1cb532c2010-05-22 00:37:18 +0000208 DarwinTool(const char *Name, const char *ShortName,
209 const ToolChain &TC) : Tool(Name, ShortName, TC) {}
Daniel Dunbare9ded432009-09-09 18:36:20 +0000210 };
211
Duncan Sandsaf260b92010-05-11 20:16:05 +0000212 class LLVM_LIBRARY_VISIBILITY CC1 : public DarwinTool {
David Blaikie68e081d2011-12-20 02:48:34 +0000213 virtual void anchor();
Daniel Dunbar52e96cc2009-03-30 00:34:04 +0000214 public:
Mike Stump11289f42009-09-09 15:08:12 +0000215 static const char *getBaseInputName(const ArgList &Args,
Daniel Dunbar52e96cc2009-03-30 00:34:04 +0000216 const InputInfoList &Input);
Mike Stump11289f42009-09-09 15:08:12 +0000217 static const char *getBaseInputStem(const ArgList &Args,
Daniel Dunbar52e96cc2009-03-30 00:34:04 +0000218 const InputInfoList &Input);
Mike Stump11289f42009-09-09 15:08:12 +0000219 static const char *getDependencyFileName(const ArgList &Args,
Daniel Dunbar52e96cc2009-03-30 00:34:04 +0000220 const InputInfoList &Inputs);
221
Daniel Dunbare6adeee2009-03-29 17:08:39 +0000222 protected:
223 const char *getCC1Name(types::ID Type) const;
224
Daniel Dunbarafec1f52009-03-29 18:40:18 +0000225 void AddCC1Args(const ArgList &Args, ArgStringList &CmdArgs) const;
Chad Rosierbc5ea3d2011-08-17 18:24:55 +0000226 void RemoveCC1UnsupportedArgs(ArgStringList &CmdArgs) const;
Daniel Dunbare6adeee2009-03-29 17:08:39 +0000227 void AddCC1OptionsArgs(const ArgList &Args, ArgStringList &CmdArgs,
228 const InputInfoList &Inputs,
Daniel Dunbarafec1f52009-03-29 18:40:18 +0000229 const ArgStringList &OutputArgs) const;
Daniel Dunbare6adeee2009-03-29 17:08:39 +0000230 void AddCPPOptionsArgs(const ArgList &Args, ArgStringList &CmdArgs,
231 const InputInfoList &Inputs,
Daniel Dunbarafec1f52009-03-29 18:40:18 +0000232 const ArgStringList &OutputArgs) const;
Mike Stump11289f42009-09-09 15:08:12 +0000233 void AddCPPUniqueOptionsArgs(const ArgList &Args,
Daniel Dunbarafec1f52009-03-29 18:40:18 +0000234 ArgStringList &CmdArgs,
235 const InputInfoList &Inputs) const;
236 void AddCPPArgs(const ArgList &Args, ArgStringList &CmdArgs) const;
Daniel Dunbare6adeee2009-03-29 17:08:39 +0000237
238 public:
Daniel Dunbar1cb532c2010-05-22 00:37:18 +0000239 CC1(const char *Name, const char *ShortName,
240 const ToolChain &TC) : DarwinTool(Name, ShortName, TC) {}
Daniel Dunbare6adeee2009-03-29 17:08:39 +0000241
Daniel Dunbar3d45e172010-04-06 17:07:49 +0000242 virtual bool hasGoodDiagnostics() const { return true; }
Daniel Dunbare6adeee2009-03-29 17:08:39 +0000243 virtual bool hasIntegratedCPP() const { return true; }
244 };
245
Duncan Sandsaf260b92010-05-11 20:16:05 +0000246 class LLVM_LIBRARY_VISIBILITY Preprocess : public CC1 {
Daniel Dunbare6adeee2009-03-29 17:08:39 +0000247 public:
Daniel Dunbar1cb532c2010-05-22 00:37:18 +0000248 Preprocess(const ToolChain &TC) : CC1("darwin::Preprocess",
249 "gcc preprocessor", TC) {}
Daniel Dunbare6adeee2009-03-29 17:08:39 +0000250
251 virtual void ConstructJob(Compilation &C, const JobAction &JA,
Mike Stump11289f42009-09-09 15:08:12 +0000252 const InputInfo &Output,
253 const InputInfoList &Inputs,
254 const ArgList &TCArgs,
Daniel Dunbare6adeee2009-03-29 17:08:39 +0000255 const char *LinkingOutput) const;
256 };
257
Duncan Sandsaf260b92010-05-11 20:16:05 +0000258 class LLVM_LIBRARY_VISIBILITY Compile : public CC1 {
Daniel Dunbare6adeee2009-03-29 17:08:39 +0000259 public:
Daniel Dunbar1cb532c2010-05-22 00:37:18 +0000260 Compile(const ToolChain &TC) : CC1("darwin::Compile", "gcc frontend", TC) {}
Daniel Dunbare6adeee2009-03-29 17:08:39 +0000261
262 virtual void ConstructJob(Compilation &C, const JobAction &JA,
Mike Stump11289f42009-09-09 15:08:12 +0000263 const InputInfo &Output,
264 const InputInfoList &Inputs,
265 const ArgList &TCArgs,
Daniel Dunbare6adeee2009-03-29 17:08:39 +0000266 const char *LinkingOutput) const;
267 };
268
Duncan Sandsaf260b92010-05-11 20:16:05 +0000269 class LLVM_LIBRARY_VISIBILITY Assemble : public DarwinTool {
Daniel Dunbarbe220842009-03-20 16:06:39 +0000270 public:
Daniel Dunbar1cb532c2010-05-22 00:37:18 +0000271 Assemble(const ToolChain &TC) : DarwinTool("darwin::Assemble",
272 "assembler", TC) {}
Daniel Dunbarbe220842009-03-20 16:06:39 +0000273
Daniel Dunbarbe220842009-03-20 16:06:39 +0000274 virtual bool hasIntegratedCPP() const { return false; }
275
276 virtual void ConstructJob(Compilation &C, const JobAction &JA,
Mike Stump11289f42009-09-09 15:08:12 +0000277 const InputInfo &Output,
278 const InputInfoList &Inputs,
279 const ArgList &TCArgs,
Daniel Dunbarbe220842009-03-20 16:06:39 +0000280 const char *LinkingOutput) const;
281 };
282
Duncan Sandsaf260b92010-05-11 20:16:05 +0000283 class LLVM_LIBRARY_VISIBILITY Link : public DarwinTool {
Daniel Dunbarccbc4522010-09-09 21:51:05 +0000284 void AddLinkArgs(Compilation &C, const ArgList &Args,
285 ArgStringList &CmdArgs) const;
Daniel Dunbarc1964212009-03-26 16:23:12 +0000286
Daniel Dunbarc1964212009-03-26 16:23:12 +0000287 public:
Daniel Dunbar1cb532c2010-05-22 00:37:18 +0000288 Link(const ToolChain &TC) : DarwinTool("darwin::Link", "linker", TC) {}
Daniel Dunbarc1964212009-03-26 16:23:12 +0000289
Daniel Dunbarc1964212009-03-26 16:23:12 +0000290 virtual bool hasIntegratedCPP() const { return false; }
Chad Rosierbee5a1d2012-03-07 00:30:40 +0000291 virtual bool isLinkJob() const { return true; }
Daniel Dunbarc1964212009-03-26 16:23:12 +0000292
293 virtual void ConstructJob(Compilation &C, const JobAction &JA,
Mike Stump11289f42009-09-09 15:08:12 +0000294 const InputInfo &Output,
295 const InputInfoList &Inputs,
296 const ArgList &TCArgs,
Daniel Dunbarc1964212009-03-26 16:23:12 +0000297 const char *LinkingOutput) const;
298 };
299
Duncan Sandsaf260b92010-05-11 20:16:05 +0000300 class LLVM_LIBRARY_VISIBILITY Lipo : public DarwinTool {
Daniel Dunbar64ed5e32009-03-20 00:52:38 +0000301 public:
Daniel Dunbar1cb532c2010-05-22 00:37:18 +0000302 Lipo(const ToolChain &TC) : DarwinTool("darwin::Lipo", "lipo", TC) {}
Daniel Dunbar64ed5e32009-03-20 00:52:38 +0000303
Daniel Dunbar64ed5e32009-03-20 00:52:38 +0000304 virtual bool hasIntegratedCPP() const { return false; }
305
306 virtual void ConstructJob(Compilation &C, const JobAction &JA,
Mike Stump11289f42009-09-09 15:08:12 +0000307 const InputInfo &Output,
308 const InputInfoList &Inputs,
309 const ArgList &TCArgs,
Daniel Dunbar64ed5e32009-03-20 00:52:38 +0000310 const char *LinkingOutput) const;
311 };
Daniel Dunbar88299622010-06-04 18:28:36 +0000312
313 class LLVM_LIBRARY_VISIBILITY Dsymutil : public DarwinTool {
314 public:
315 Dsymutil(const ToolChain &TC) : DarwinTool("darwin::Dsymutil",
316 "dsymutil", TC) {}
317
Daniel Dunbar88299622010-06-04 18:28:36 +0000318 virtual bool hasIntegratedCPP() const { return false; }
319
320 virtual void ConstructJob(Compilation &C, const JobAction &JA,
Daniel Dunbar88299622010-06-04 18:28:36 +0000321 const InputInfo &Output,
322 const InputInfoList &Inputs,
323 const ArgList &TCArgs,
324 const char *LinkingOutput) const;
325 };
Eric Christopher551ef452011-08-23 17:56:55 +0000326
327 class LLVM_LIBRARY_VISIBILITY VerifyDebug : public DarwinTool {
328 public:
329 VerifyDebug(const ToolChain &TC) : DarwinTool("darwin::VerifyDebug",
330 "dwarfdump", TC) {}
331
332 virtual bool hasIntegratedCPP() const { return false; }
333
334 virtual void ConstructJob(Compilation &C, const JobAction &JA,
335 const InputInfo &Output,
336 const InputInfoList &Inputs,
337 const ArgList &TCArgs,
338 const char *LinkingOutput) const;
339 };
340
Daniel Dunbar64ed5e32009-03-20 00:52:38 +0000341}
342
Daniel Dunbar10de9e62009-06-29 20:52:51 +0000343 /// openbsd -- Directly call GNU Binutils assembler and linker
344namespace openbsd {
Duncan Sandsaf260b92010-05-11 20:16:05 +0000345 class LLVM_LIBRARY_VISIBILITY Assemble : public Tool {
Daniel Dunbar10de9e62009-06-29 20:52:51 +0000346 public:
Daniel Dunbar1cb532c2010-05-22 00:37:18 +0000347 Assemble(const ToolChain &TC) : Tool("openbsd::Assemble", "assembler",
348 TC) {}
Daniel Dunbar10de9e62009-06-29 20:52:51 +0000349
Daniel Dunbar10de9e62009-06-29 20:52:51 +0000350 virtual bool hasIntegratedCPP() const { return false; }
351
352 virtual void ConstructJob(Compilation &C, const JobAction &JA,
Mike Stump11289f42009-09-09 15:08:12 +0000353 const InputInfo &Output,
354 const InputInfoList &Inputs,
355 const ArgList &TCArgs,
Daniel Dunbar10de9e62009-06-29 20:52:51 +0000356 const char *LinkingOutput) const;
357 };
Duncan Sandsaf260b92010-05-11 20:16:05 +0000358 class LLVM_LIBRARY_VISIBILITY Link : public Tool {
Daniel Dunbar10de9e62009-06-29 20:52:51 +0000359 public:
Daniel Dunbar1cb532c2010-05-22 00:37:18 +0000360 Link(const ToolChain &TC) : Tool("openbsd::Link", "linker", TC) {}
Daniel Dunbar10de9e62009-06-29 20:52:51 +0000361
Daniel Dunbar10de9e62009-06-29 20:52:51 +0000362 virtual bool hasIntegratedCPP() const { return false; }
Chad Rosierbee5a1d2012-03-07 00:30:40 +0000363 virtual bool isLinkJob() const { return true; }
Daniel Dunbar10de9e62009-06-29 20:52:51 +0000364
365 virtual void ConstructJob(Compilation &C, const JobAction &JA,
Mike Stump11289f42009-09-09 15:08:12 +0000366 const InputInfo &Output,
367 const InputInfoList &Inputs,
368 const ArgList &TCArgs,
Daniel Dunbar10de9e62009-06-29 20:52:51 +0000369 const char *LinkingOutput) const;
370 };
Edward O'Callaghan856e4ff2009-08-22 01:06:46 +0000371} // end namespace openbsd
Daniel Dunbar10de9e62009-06-29 20:52:51 +0000372
Daniel Dunbar8eb473c2009-03-31 17:45:15 +0000373 /// freebsd -- Directly call GNU Binutils assembler and linker
374namespace freebsd {
Duncan Sandsaf260b92010-05-11 20:16:05 +0000375 class LLVM_LIBRARY_VISIBILITY Assemble : public Tool {
Daniel Dunbar8eb473c2009-03-31 17:45:15 +0000376 public:
Daniel Dunbar1cb532c2010-05-22 00:37:18 +0000377 Assemble(const ToolChain &TC) : Tool("freebsd::Assemble", "assembler",
378 TC) {}
Daniel Dunbar8eb473c2009-03-31 17:45:15 +0000379
Daniel Dunbar8eb473c2009-03-31 17:45:15 +0000380 virtual bool hasIntegratedCPP() const { return false; }
381
382 virtual void ConstructJob(Compilation &C, const JobAction &JA,
Mike Stump11289f42009-09-09 15:08:12 +0000383 const InputInfo &Output,
384 const InputInfoList &Inputs,
385 const ArgList &TCArgs,
Daniel Dunbar8eb473c2009-03-31 17:45:15 +0000386 const char *LinkingOutput) const;
387 };
Duncan Sandsaf260b92010-05-11 20:16:05 +0000388 class LLVM_LIBRARY_VISIBILITY Link : public Tool {
Daniel Dunbard854c8d2009-04-01 19:36:32 +0000389 public:
Daniel Dunbar1cb532c2010-05-22 00:37:18 +0000390 Link(const ToolChain &TC) : Tool("freebsd::Link", "linker", TC) {}
Daniel Dunbard854c8d2009-04-01 19:36:32 +0000391
Daniel Dunbard854c8d2009-04-01 19:36:32 +0000392 virtual bool hasIntegratedCPP() const { return false; }
Chad Rosierbee5a1d2012-03-07 00:30:40 +0000393 virtual bool isLinkJob() const { return true; }
Daniel Dunbard854c8d2009-04-01 19:36:32 +0000394
395 virtual void ConstructJob(Compilation &C, const JobAction &JA,
Mike Stump11289f42009-09-09 15:08:12 +0000396 const InputInfo &Output,
397 const InputInfoList &Inputs,
398 const ArgList &TCArgs,
Daniel Dunbard854c8d2009-04-01 19:36:32 +0000399 const char *LinkingOutput) const;
400 };
Edward O'Callaghan856e4ff2009-08-22 01:06:46 +0000401} // end namespace freebsd
402
Benjamin Kramer24f1d3e2011-02-02 18:59:27 +0000403 /// netbsd -- Directly call GNU Binutils assembler and linker
404namespace netbsd {
405 class LLVM_LIBRARY_VISIBILITY Assemble : public Tool {
Joerg Sonnenberger637603a2011-05-16 13:35:02 +0000406
Benjamin Kramer24f1d3e2011-02-02 18:59:27 +0000407 public:
Joerg Sonnenbergerd64c60e2012-01-26 22:27:52 +0000408 Assemble(const ToolChain &TC)
409 : Tool("netbsd::Assemble", "assembler", TC) {}
Benjamin Kramer24f1d3e2011-02-02 18:59:27 +0000410
411 virtual bool hasIntegratedCPP() const { return false; }
412
413 virtual void ConstructJob(Compilation &C, const JobAction &JA,
414 const InputInfo &Output,
415 const InputInfoList &Inputs,
416 const ArgList &TCArgs,
417 const char *LinkingOutput) const;
418 };
419 class LLVM_LIBRARY_VISIBILITY Link : public Tool {
Joerg Sonnenberger637603a2011-05-16 13:35:02 +0000420
Benjamin Kramer24f1d3e2011-02-02 18:59:27 +0000421 public:
Joerg Sonnenbergerd64c60e2012-01-26 22:27:52 +0000422 Link(const ToolChain &TC)
423 : Tool("netbsd::Link", "linker", TC) {}
Benjamin Kramer24f1d3e2011-02-02 18:59:27 +0000424
425 virtual bool hasIntegratedCPP() const { return false; }
Chad Rosierbee5a1d2012-03-07 00:30:40 +0000426 virtual bool isLinkJob() const { return true; }
Benjamin Kramer24f1d3e2011-02-02 18:59:27 +0000427
428 virtual void ConstructJob(Compilation &C, const JobAction &JA,
429 const InputInfo &Output,
430 const InputInfoList &Inputs,
431 const ArgList &TCArgs,
432 const char *LinkingOutput) const;
433 };
434} // end namespace netbsd
435
Rafael Espindola92b00932010-08-10 00:25:48 +0000436 /// linux -- Directly call GNU Binutils assembler and linker
437namespace linuxtools {
438 class LLVM_LIBRARY_VISIBILITY Assemble : public Tool {
439 public:
440 Assemble(const ToolChain &TC) : Tool("linux::Assemble", "assembler",
441 TC) {}
442
443 virtual bool hasIntegratedCPP() const { return false; }
444
445 virtual void ConstructJob(Compilation &C, const JobAction &JA,
446 const InputInfo &Output,
447 const InputInfoList &Inputs,
448 const ArgList &TCArgs,
449 const char *LinkingOutput) const;
450 };
Rafael Espindolac8f008f2010-11-07 20:14:31 +0000451 class LLVM_LIBRARY_VISIBILITY Link : public Tool {
452 public:
453 Link(const ToolChain &TC) : Tool("linux::Link", "linker", TC) {}
454
455 virtual bool hasIntegratedCPP() const { return false; }
Chad Rosierbee5a1d2012-03-07 00:30:40 +0000456 virtual bool isLinkJob() const { return true; }
Rafael Espindolac8f008f2010-11-07 20:14:31 +0000457
458 virtual void ConstructJob(Compilation &C, const JobAction &JA,
459 const InputInfo &Output,
460 const InputInfoList &Inputs,
461 const ArgList &TCArgs,
462 const char *LinkingOutput) const;
463 };
Rafael Espindola92b00932010-08-10 00:25:48 +0000464}
Chris Lattner3e2ee142010-07-07 16:01:42 +0000465 /// minix -- Directly call GNU Binutils assembler and linker
466namespace minix {
467 class LLVM_LIBRARY_VISIBILITY Assemble : public Tool {
468 public:
469 Assemble(const ToolChain &TC) : Tool("minix::Assemble", "assembler",
470 TC) {}
471
Chris Lattner3e2ee142010-07-07 16:01:42 +0000472 virtual bool hasIntegratedCPP() const { return false; }
473
474 virtual void ConstructJob(Compilation &C, const JobAction &JA,
Chris Lattner3e2ee142010-07-07 16:01:42 +0000475 const InputInfo &Output,
476 const InputInfoList &Inputs,
477 const ArgList &TCArgs,
478 const char *LinkingOutput) const;
479 };
480 class LLVM_LIBRARY_VISIBILITY Link : public Tool {
481 public:
482 Link(const ToolChain &TC) : Tool("minix::Link", "linker", TC) {}
483
Chris Lattner3e2ee142010-07-07 16:01:42 +0000484 virtual bool hasIntegratedCPP() const { return false; }
Chad Rosierbee5a1d2012-03-07 00:30:40 +0000485 virtual bool isLinkJob() const { return true; }
Chris Lattner3e2ee142010-07-07 16:01:42 +0000486
487 virtual void ConstructJob(Compilation &C, const JobAction &JA,
Chris Lattner3e2ee142010-07-07 16:01:42 +0000488 const InputInfo &Output,
489 const InputInfoList &Inputs,
490 const ArgList &TCArgs,
491 const char *LinkingOutput) const;
492 };
493} // end namespace minix
494
David Chisnallf571cde2012-02-15 13:39:01 +0000495 /// solaris -- Directly call Solaris assembler and linker
496namespace solaris {
497 class LLVM_LIBRARY_VISIBILITY Assemble : public Tool {
498 public:
499 Assemble(const ToolChain &TC) : Tool("solaris::Assemble", "assembler",
500 TC) {}
501
502 virtual bool hasIntegratedCPP() const { return false; }
503
504 virtual void ConstructJob(Compilation &C, const JobAction &JA,
505 const InputInfo &Output,
506 const InputInfoList &Inputs,
507 const ArgList &TCArgs,
508 const char *LinkingOutput) const;
509 };
510 class LLVM_LIBRARY_VISIBILITY Link : public Tool {
511 public:
512 Link(const ToolChain &TC) : Tool("solaris::Link", "linker", TC) {}
513
514 virtual bool hasIntegratedCPP() const { return false; }
Chad Rosierbee5a1d2012-03-07 00:30:40 +0000515 virtual bool isLinkJob() const { return true; }
David Chisnallf571cde2012-02-15 13:39:01 +0000516
517 virtual void ConstructJob(Compilation &C, const JobAction &JA,
518 const InputInfo &Output,
519 const InputInfoList &Inputs,
520 const ArgList &TCArgs,
521 const char *LinkingOutput) const;
522 };
David Chisnalla9ed5d72012-02-15 16:25:46 +0000523} // end namespace solaris
David Chisnallf571cde2012-02-15 13:39:01 +0000524
Edward O'Callaghan856e4ff2009-08-22 01:06:46 +0000525 /// auroraux -- Directly call GNU Binutils assembler and linker
526namespace auroraux {
Duncan Sandsaf260b92010-05-11 20:16:05 +0000527 class LLVM_LIBRARY_VISIBILITY Assemble : public Tool {
Edward O'Callaghan856e4ff2009-08-22 01:06:46 +0000528 public:
Daniel Dunbar1cb532c2010-05-22 00:37:18 +0000529 Assemble(const ToolChain &TC) : Tool("auroraux::Assemble", "assembler",
530 TC) {}
Edward O'Callaghan856e4ff2009-08-22 01:06:46 +0000531
Edward O'Callaghan856e4ff2009-08-22 01:06:46 +0000532 virtual bool hasIntegratedCPP() const { return false; }
533
534 virtual void ConstructJob(Compilation &C, const JobAction &JA,
Mike Stump11289f42009-09-09 15:08:12 +0000535 const InputInfo &Output,
536 const InputInfoList &Inputs,
537 const ArgList &TCArgs,
Edward O'Callaghan856e4ff2009-08-22 01:06:46 +0000538 const char *LinkingOutput) const;
539 };
Duncan Sandsaf260b92010-05-11 20:16:05 +0000540 class LLVM_LIBRARY_VISIBILITY Link : public Tool {
Edward O'Callaghan856e4ff2009-08-22 01:06:46 +0000541 public:
Daniel Dunbar1cb532c2010-05-22 00:37:18 +0000542 Link(const ToolChain &TC) : Tool("auroraux::Link", "linker", TC) {}
Edward O'Callaghan856e4ff2009-08-22 01:06:46 +0000543
Edward O'Callaghan856e4ff2009-08-22 01:06:46 +0000544 virtual bool hasIntegratedCPP() const { return false; }
Chad Rosierbee5a1d2012-03-07 00:30:40 +0000545 virtual bool isLinkJob() const { return true; }
Edward O'Callaghan856e4ff2009-08-22 01:06:46 +0000546
547 virtual void ConstructJob(Compilation &C, const JobAction &JA,
Mike Stump11289f42009-09-09 15:08:12 +0000548 const InputInfo &Output,
549 const InputInfoList &Inputs,
550 const ArgList &TCArgs,
Edward O'Callaghan856e4ff2009-08-22 01:06:46 +0000551 const char *LinkingOutput) const;
552 };
553} // end namespace auroraux
Daniel Dunbar8eb473c2009-03-31 17:45:15 +0000554
Daniel Dunbarcc912342009-05-02 18:28:39 +0000555 /// dragonfly -- Directly call GNU Binutils assembler and linker
556namespace dragonfly {
Duncan Sandsaf260b92010-05-11 20:16:05 +0000557 class LLVM_LIBRARY_VISIBILITY Assemble : public Tool {
Daniel Dunbarcc912342009-05-02 18:28:39 +0000558 public:
Daniel Dunbar1cb532c2010-05-22 00:37:18 +0000559 Assemble(const ToolChain &TC) : Tool("dragonfly::Assemble", "assembler",
560 TC) {}
Daniel Dunbarcc912342009-05-02 18:28:39 +0000561
Daniel Dunbarcc912342009-05-02 18:28:39 +0000562 virtual bool hasIntegratedCPP() const { return false; }
563
564 virtual void ConstructJob(Compilation &C, const JobAction &JA,
Mike Stump11289f42009-09-09 15:08:12 +0000565 const InputInfo &Output,
566 const InputInfoList &Inputs,
567 const ArgList &TCArgs,
Daniel Dunbarcc912342009-05-02 18:28:39 +0000568 const char *LinkingOutput) const;
569 };
Duncan Sandsaf260b92010-05-11 20:16:05 +0000570 class LLVM_LIBRARY_VISIBILITY Link : public Tool {
Daniel Dunbarcc912342009-05-02 18:28:39 +0000571 public:
Daniel Dunbar1cb532c2010-05-22 00:37:18 +0000572 Link(const ToolChain &TC) : Tool("dragonfly::Link", "linker", TC) {}
Daniel Dunbarcc912342009-05-02 18:28:39 +0000573
Daniel Dunbarcc912342009-05-02 18:28:39 +0000574 virtual bool hasIntegratedCPP() const { return false; }
Chad Rosierbee5a1d2012-03-07 00:30:40 +0000575 virtual bool isLinkJob() const { return true; }
Daniel Dunbarcc912342009-05-02 18:28:39 +0000576
577 virtual void ConstructJob(Compilation &C, const JobAction &JA,
Mike Stump11289f42009-09-09 15:08:12 +0000578 const InputInfo &Output,
579 const InputInfoList &Inputs,
580 const ArgList &TCArgs,
Daniel Dunbarcc912342009-05-02 18:28:39 +0000581 const char *LinkingOutput) const;
582 };
Edward O'Callaghan856e4ff2009-08-22 01:06:46 +0000583} // end namespace dragonfly
Daniel Dunbarcc912342009-05-02 18:28:39 +0000584
Michael J. Spencerb186bc32010-08-21 21:55:07 +0000585 /// Visual studio tools.
586namespace visualstudio {
587 class LLVM_LIBRARY_VISIBILITY Link : public Tool {
588 public:
589 Link(const ToolChain &TC) : Tool("visualstudio::Link", "linker", TC) {}
590
591 virtual bool hasIntegratedCPP() const { return false; }
Chad Rosierbee5a1d2012-03-07 00:30:40 +0000592 virtual bool isLinkJob() const { return true; }
Michael J. Spencerb186bc32010-08-21 21:55:07 +0000593
594 virtual void ConstructJob(Compilation &C, const JobAction &JA,
595 const InputInfo &Output,
596 const InputInfoList &Inputs,
597 const ArgList &TCArgs,
598 const char *LinkingOutput) const;
599 };
600} // end namespace visualstudio
601
Daniel Dunbar5903d8c2009-03-17 22:07:58 +0000602} // end namespace toolchains
603} // end namespace driver
604} // end namespace clang
605
Edward O'Callaghan856e4ff2009-08-22 01:06:46 +0000606#endif // CLANG_LIB_DRIVER_TOOLS_H_