blob: be38edb034a223b18502a063b9795438875d577d [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"
Joerg Sonnenberger637603a2011-05-16 13:35:02 +000016#include "llvm/ADT/Triple.h"
Daniel Dunbar5903d8c2009-03-17 22:07:58 +000017#include "llvm/Support/Compiler.h"
18
19namespace clang {
John McCall5fb5df92012-06-20 06:18:46 +000020 class ObjCRuntime;
21
Daniel Dunbar5903d8c2009-03-17 22:07:58 +000022namespace driver {
Douglas Gregor111af7d2009-04-18 00:34:01 +000023 class Driver;
24
Daniel Dunbarc1964212009-03-26 16:23:12 +000025namespace toolchains {
Daniel Dunbarf0a5b9b2009-09-04 18:34:51 +000026 class Darwin;
Daniel Dunbarc1964212009-03-26 16:23:12 +000027}
28
Daniel Dunbar15abb2e2009-03-17 22:18:43 +000029namespace tools {
Daniel Dunbar5903d8c2009-03-17 22:07:58 +000030
Daniel Dunbar4f5e79c2010-05-20 21:30:13 +000031 /// \brief Clang compiler tool.
Duncan Sandsaf260b92010-05-11 20:16:05 +000032 class LLVM_LIBRARY_VISIBILITY Clang : public Tool {
Bob Wilsondecc03e2012-11-23 06:14:39 +000033 static const char *getBaseInputName(const ArgList &Args,
34 const InputInfoList &Inputs);
35 static const char *getBaseInputStem(const ArgList &Args,
36 const InputInfoList &Inputs);
37 static const char *getDependencyFileName(const ArgList &Args,
38 const InputInfoList &Inputs);
39
Peter Collingbourne9b515cb2011-11-06 00:40:05 +000040 void AddPreprocessingOptions(Compilation &C,
41 const Driver &D,
Douglas Gregor111af7d2009-04-18 00:34:01 +000042 const ArgList &Args,
Daniel Dunbard067f7f2009-04-08 23:54:23 +000043 ArgStringList &CmdArgs,
44 const InputInfo &Output,
45 const InputInfoList &Inputs) const;
46
Daniel Dunbarc9388c12011-03-17 17:10:06 +000047 void AddARMTargetArgs(const ArgList &Args, ArgStringList &CmdArgs,
48 bool KernelOrKext) const;
Eric Christopher0b26a612010-03-02 02:41:08 +000049 void AddMIPSTargetArgs(const ArgList &Args, ArgStringList &CmdArgs) const;
Hal Finkel8eb59282012-06-11 22:35:19 +000050 void AddPPCTargetArgs(const ArgList &Args, ArgStringList &CmdArgs) const;
Bruno Cardoso Lopese7f211c2010-11-09 17:21:19 +000051 void AddSparcTargetArgs(const ArgList &Args, ArgStringList &CmdArgs) const;
Daniel Dunbar3b3191f2009-09-09 22:33:08 +000052 void AddX86TargetArgs(const ArgList &Args, ArgStringList &CmdArgs) const;
Tony Linthicum76329bf2011-12-12 21:14:55 +000053 void AddHexagonTargetArgs (const ArgList &Args, ArgStringList &CmdArgs) const;
Daniel Dunbar3b3191f2009-09-09 22:33:08 +000054
John McCall5fb5df92012-06-20 06:18:46 +000055 enum RewriteKind { RK_None, RK_Fragile, RK_NonFragile };
56
57 ObjCRuntime AddObjCRuntimeArgs(const ArgList &args, ArgStringList &cmdArgs,
58 RewriteKind rewrite) const;
59
Daniel Dunbar5903d8c2009-03-17 22:07:58 +000060 public:
Daniel Dunbar1cb532c2010-05-22 00:37:18 +000061 Clang(const ToolChain &TC) : Tool("clang", "clang frontend", TC) {}
Daniel Dunbar5903d8c2009-03-17 22:07:58 +000062
Daniel Dunbar3d45e172010-04-06 17:07:49 +000063 virtual bool hasGoodDiagnostics() const { return true; }
Daniel Dunbarc4343942010-02-03 03:07:56 +000064 virtual bool hasIntegratedAssembler() const { return true; }
Daniel Dunbar5903d8c2009-03-17 22:07:58 +000065 virtual bool hasIntegratedCPP() const { return true; }
Daniel Dunbar1a093d22009-03-18 06:00:36 +000066
67 virtual void ConstructJob(Compilation &C, const JobAction &JA,
Mike Stump11289f42009-09-09 15:08:12 +000068 const InputInfo &Output,
69 const InputInfoList &Inputs,
70 const ArgList &TCArgs,
Daniel Dunbar1a093d22009-03-18 06:00:36 +000071 const char *LinkingOutput) const;
Daniel Dunbar5903d8c2009-03-17 22:07:58 +000072 };
73
Daniel Dunbar4f5e79c2010-05-20 21:30:13 +000074 /// \brief Clang integrated assembler tool.
75 class LLVM_LIBRARY_VISIBILITY ClangAs : public Tool {
Jim Grosbach576452b2012-02-10 20:37:10 +000076 void AddARMTargetArgs(const ArgList &Args, ArgStringList &CmdArgs) const;
Daniel Dunbar4f5e79c2010-05-20 21:30:13 +000077 public:
Daniel Dunbar1cb532c2010-05-22 00:37:18 +000078 ClangAs(const ToolChain &TC) : Tool("clang::as",
79 "clang integrated assembler", TC) {}
Daniel Dunbar4f5e79c2010-05-20 21:30:13 +000080
Daniel Dunbar4f5e79c2010-05-20 21:30:13 +000081 virtual bool hasGoodDiagnostics() const { return true; }
82 virtual bool hasIntegratedAssembler() const { return false; }
83 virtual bool hasIntegratedCPP() const { return false; }
84
85 virtual void ConstructJob(Compilation &C, const JobAction &JA,
Daniel Dunbar4f5e79c2010-05-20 21:30:13 +000086 const InputInfo &Output,
87 const InputInfoList &Inputs,
88 const ArgList &TCArgs,
89 const char *LinkingOutput) const;
90 };
91
Daniel Dunbar82116f82009-03-17 22:45:24 +000092 /// gcc - Generic GCC tool implementations.
93namespace gcc {
Duncan Sandsaf260b92010-05-11 20:16:05 +000094 class LLVM_LIBRARY_VISIBILITY Common : public Tool {
Daniel Dunbar5903d8c2009-03-17 22:07:58 +000095 public:
Daniel Dunbar1cb532c2010-05-22 00:37:18 +000096 Common(const char *Name, const char *ShortName,
97 const ToolChain &TC) : Tool(Name, ShortName, TC) {}
Daniel Dunbara3246a02009-03-18 08:07:30 +000098
99 virtual void ConstructJob(Compilation &C, const JobAction &JA,
Mike Stump11289f42009-09-09 15:08:12 +0000100 const InputInfo &Output,
101 const InputInfoList &Inputs,
102 const ArgList &TCArgs,
Daniel Dunbara3246a02009-03-18 08:07:30 +0000103 const char *LinkingOutput) const;
104
105 /// RenderExtraToolArgs - Render any arguments necessary to force
106 /// the particular tool mode.
Daniel Dunbar4e295052010-01-25 22:35:08 +0000107 virtual void RenderExtraToolArgs(const JobAction &JA,
108 ArgStringList &CmdArgs) const = 0;
Daniel Dunbara3246a02009-03-18 08:07:30 +0000109 };
110
Mike Stump11289f42009-09-09 15:08:12 +0000111
Duncan Sandsaf260b92010-05-11 20:16:05 +0000112 class LLVM_LIBRARY_VISIBILITY Preprocess : public Common {
Daniel Dunbara3246a02009-03-18 08:07:30 +0000113 public:
Daniel Dunbar1cb532c2010-05-22 00:37:18 +0000114 Preprocess(const ToolChain &TC) : Common("gcc::Preprocess",
115 "gcc preprocessor", TC) {}
Daniel Dunbar5903d8c2009-03-17 22:07:58 +0000116
Daniel Dunbar3d45e172010-04-06 17:07:49 +0000117 virtual bool hasGoodDiagnostics() const { return true; }
Daniel Dunbar5903d8c2009-03-17 22:07:58 +0000118 virtual bool hasIntegratedCPP() const { return false; }
Daniel Dunbar1a093d22009-03-18 06:00:36 +0000119
Daniel Dunbar4e295052010-01-25 22:35:08 +0000120 virtual void RenderExtraToolArgs(const JobAction &JA,
121 ArgStringList &CmdArgs) const;
Daniel Dunbar5903d8c2009-03-17 22:07:58 +0000122 };
123
Duncan Sandsaf260b92010-05-11 20:16:05 +0000124 class LLVM_LIBRARY_VISIBILITY Precompile : public Common {
Daniel Dunbar5903d8c2009-03-17 22:07:58 +0000125 public:
Daniel Dunbar1cb532c2010-05-22 00:37:18 +0000126 Precompile(const ToolChain &TC) : Common("gcc::Precompile",
127 "gcc precompile", TC) {}
Daniel Dunbar5903d8c2009-03-17 22:07:58 +0000128
Daniel Dunbar3d45e172010-04-06 17:07:49 +0000129 virtual bool hasGoodDiagnostics() const { return true; }
Daniel Dunbar5903d8c2009-03-17 22:07:58 +0000130 virtual bool hasIntegratedCPP() const { return true; }
Daniel Dunbar1a093d22009-03-18 06:00:36 +0000131
Daniel Dunbar4e295052010-01-25 22:35:08 +0000132 virtual void RenderExtraToolArgs(const JobAction &JA,
133 ArgStringList &CmdArgs) const;
Daniel Dunbar5903d8c2009-03-17 22:07:58 +0000134 };
135
Duncan Sandsaf260b92010-05-11 20:16:05 +0000136 class LLVM_LIBRARY_VISIBILITY Compile : public Common {
Daniel Dunbar5903d8c2009-03-17 22:07:58 +0000137 public:
Daniel Dunbar1cb532c2010-05-22 00:37:18 +0000138 Compile(const ToolChain &TC) : Common("gcc::Compile",
139 "gcc frontend", TC) {}
Daniel Dunbar5903d8c2009-03-17 22:07:58 +0000140
Daniel Dunbar3d45e172010-04-06 17:07:49 +0000141 virtual bool hasGoodDiagnostics() const { return true; }
Daniel Dunbar5903d8c2009-03-17 22:07:58 +0000142 virtual bool hasIntegratedCPP() const { return true; }
Daniel Dunbar1a093d22009-03-18 06:00:36 +0000143
Daniel Dunbar4e295052010-01-25 22:35:08 +0000144 virtual void RenderExtraToolArgs(const JobAction &JA,
145 ArgStringList &CmdArgs) const;
Daniel Dunbar5903d8c2009-03-17 22:07:58 +0000146 };
147
Duncan Sandsaf260b92010-05-11 20:16:05 +0000148 class LLVM_LIBRARY_VISIBILITY Assemble : public Common {
Daniel Dunbar5903d8c2009-03-17 22:07:58 +0000149 public:
Daniel Dunbar1cb532c2010-05-22 00:37:18 +0000150 Assemble(const ToolChain &TC) : Common("gcc::Assemble",
151 "assembler (via gcc)", TC) {}
Daniel Dunbar5903d8c2009-03-17 22:07:58 +0000152
Daniel Dunbar5903d8c2009-03-17 22:07:58 +0000153 virtual bool hasIntegratedCPP() const { return false; }
Daniel Dunbar1a093d22009-03-18 06:00:36 +0000154
Daniel Dunbar4e295052010-01-25 22:35:08 +0000155 virtual void RenderExtraToolArgs(const JobAction &JA,
156 ArgStringList &CmdArgs) const;
Daniel Dunbar5903d8c2009-03-17 22:07:58 +0000157 };
158
Duncan Sandsaf260b92010-05-11 20:16:05 +0000159 class LLVM_LIBRARY_VISIBILITY Link : public Common {
Daniel Dunbar5903d8c2009-03-17 22:07:58 +0000160 public:
Daniel Dunbar1cb532c2010-05-22 00:37:18 +0000161 Link(const ToolChain &TC) : Common("gcc::Link",
162 "linker (via gcc)", TC) {}
Daniel Dunbar5903d8c2009-03-17 22:07:58 +0000163
Daniel Dunbar5903d8c2009-03-17 22:07:58 +0000164 virtual bool hasIntegratedCPP() const { return false; }
Chad Rosierbee5a1d2012-03-07 00:30:40 +0000165 virtual bool isLinkJob() const { return true; }
Daniel Dunbar1a093d22009-03-18 06:00:36 +0000166
Daniel Dunbar4e295052010-01-25 22:35:08 +0000167 virtual void RenderExtraToolArgs(const JobAction &JA,
168 ArgStringList &CmdArgs) const;
Daniel Dunbar5903d8c2009-03-17 22:07:58 +0000169 };
Daniel Dunbar82116f82009-03-17 22:45:24 +0000170} // end namespace gcc
Daniel Dunbar5903d8c2009-03-17 22:07:58 +0000171
Tony Linthicum76329bf2011-12-12 21:14:55 +0000172namespace hexagon {
173 // For Hexagon, we do not need to instantiate tools for PreProcess, PreCompile and Compile.
174 // We simply use "clang -cc1" for those actions.
175 class LLVM_LIBRARY_VISIBILITY Assemble : public Tool {
176 public:
177 Assemble(const ToolChain &TC) : Tool("hexagon::Assemble",
178 "hexagon-as", TC) {}
179
180 virtual bool hasIntegratedCPP() const { return false; }
181
182 virtual void RenderExtraToolArgs(const JobAction &JA,
183 ArgStringList &CmdArgs) const;
184 virtual void ConstructJob(Compilation &C, const JobAction &JA,
185 const InputInfo &Output,
186 const InputInfoList &Inputs,
187 const ArgList &TCArgs,
188 const char *LinkingOutput) const;
189 };
190
191 class LLVM_LIBRARY_VISIBILITY Link : public Tool {
192 public:
193 Link(const ToolChain &TC) : Tool("hexagon::Link",
194 "hexagon-ld", TC) {}
195
196 virtual bool hasIntegratedCPP() const { return false; }
Chad Rosierbee5a1d2012-03-07 00:30:40 +0000197 virtual bool isLinkJob() const { return true; }
Tony Linthicum76329bf2011-12-12 21:14:55 +0000198
199 virtual void RenderExtraToolArgs(const JobAction &JA,
200 ArgStringList &CmdArgs) const;
201 virtual void ConstructJob(Compilation &C, const JobAction &JA,
202 const InputInfo &Output,
203 const InputInfoList &Inputs,
204 const ArgList &TCArgs,
205 const char *LinkingOutput) const;
206 };
207} // end namespace hexagon.
208
209
Daniel Dunbar64ed5e32009-03-20 00:52:38 +0000210namespace darwin {
Rafael Espindoladcbf6982012-10-31 18:51:07 +0000211 llvm::Triple::ArchType getArchTypeForDarwinArchName(StringRef Str);
212
Duncan Sandsaf260b92010-05-11 20:16:05 +0000213 class LLVM_LIBRARY_VISIBILITY DarwinTool : public Tool {
David Blaikie68e081d2011-12-20 02:48:34 +0000214 virtual void anchor();
Daniel Dunbare9ded432009-09-09 18:36:20 +0000215 protected:
216 void AddDarwinArch(const ArgList &Args, ArgStringList &CmdArgs) const;
Daniel Dunbare9ded432009-09-09 18:36:20 +0000217
218 const toolchains::Darwin &getDarwinToolChain() const {
219 return reinterpret_cast<const toolchains::Darwin&>(getToolChain());
220 }
221
222 public:
Daniel Dunbar1cb532c2010-05-22 00:37:18 +0000223 DarwinTool(const char *Name, const char *ShortName,
224 const ToolChain &TC) : Tool(Name, ShortName, TC) {}
Daniel Dunbare9ded432009-09-09 18:36:20 +0000225 };
226
Duncan Sandsaf260b92010-05-11 20:16:05 +0000227 class LLVM_LIBRARY_VISIBILITY Assemble : public DarwinTool {
Daniel Dunbarbe220842009-03-20 16:06:39 +0000228 public:
Daniel Dunbar1cb532c2010-05-22 00:37:18 +0000229 Assemble(const ToolChain &TC) : DarwinTool("darwin::Assemble",
230 "assembler", TC) {}
Daniel Dunbarbe220842009-03-20 16:06:39 +0000231
Daniel Dunbarbe220842009-03-20 16:06:39 +0000232 virtual bool hasIntegratedCPP() const { return false; }
233
234 virtual void ConstructJob(Compilation &C, const JobAction &JA,
Mike Stump11289f42009-09-09 15:08:12 +0000235 const InputInfo &Output,
236 const InputInfoList &Inputs,
237 const ArgList &TCArgs,
Daniel Dunbarbe220842009-03-20 16:06:39 +0000238 const char *LinkingOutput) const;
239 };
240
Duncan Sandsaf260b92010-05-11 20:16:05 +0000241 class LLVM_LIBRARY_VISIBILITY Link : public DarwinTool {
Bill Wendling3b2000f2012-10-02 18:02:50 +0000242 bool NeedsTempPath(const InputInfoList &Inputs) const;
Daniel Dunbarccbc4522010-09-09 21:51:05 +0000243 void AddLinkArgs(Compilation &C, const ArgList &Args,
Bill Wendling3b2000f2012-10-02 18:02:50 +0000244 ArgStringList &CmdArgs, const InputInfoList &Inputs) const;
Daniel Dunbarc1964212009-03-26 16:23:12 +0000245
Daniel Dunbarc1964212009-03-26 16:23:12 +0000246 public:
Daniel Dunbar1cb532c2010-05-22 00:37:18 +0000247 Link(const ToolChain &TC) : DarwinTool("darwin::Link", "linker", TC) {}
Daniel Dunbarc1964212009-03-26 16:23:12 +0000248
Daniel Dunbarc1964212009-03-26 16:23:12 +0000249 virtual bool hasIntegratedCPP() const { return false; }
Chad Rosierbee5a1d2012-03-07 00:30:40 +0000250 virtual bool isLinkJob() const { return true; }
Daniel Dunbarc1964212009-03-26 16:23:12 +0000251
252 virtual void ConstructJob(Compilation &C, const JobAction &JA,
Mike Stump11289f42009-09-09 15:08:12 +0000253 const InputInfo &Output,
254 const InputInfoList &Inputs,
255 const ArgList &TCArgs,
Daniel Dunbarc1964212009-03-26 16:23:12 +0000256 const char *LinkingOutput) const;
257 };
258
Duncan Sandsaf260b92010-05-11 20:16:05 +0000259 class LLVM_LIBRARY_VISIBILITY Lipo : public DarwinTool {
Daniel Dunbar64ed5e32009-03-20 00:52:38 +0000260 public:
Daniel Dunbar1cb532c2010-05-22 00:37:18 +0000261 Lipo(const ToolChain &TC) : DarwinTool("darwin::Lipo", "lipo", TC) {}
Daniel Dunbar64ed5e32009-03-20 00:52:38 +0000262
Daniel Dunbar64ed5e32009-03-20 00:52:38 +0000263 virtual bool hasIntegratedCPP() const { return false; }
264
265 virtual void ConstructJob(Compilation &C, const JobAction &JA,
Mike Stump11289f42009-09-09 15:08:12 +0000266 const InputInfo &Output,
267 const InputInfoList &Inputs,
268 const ArgList &TCArgs,
Daniel Dunbar64ed5e32009-03-20 00:52:38 +0000269 const char *LinkingOutput) const;
270 };
Daniel Dunbar88299622010-06-04 18:28:36 +0000271
272 class LLVM_LIBRARY_VISIBILITY Dsymutil : public DarwinTool {
273 public:
274 Dsymutil(const ToolChain &TC) : DarwinTool("darwin::Dsymutil",
275 "dsymutil", TC) {}
276
Daniel Dunbar88299622010-06-04 18:28:36 +0000277 virtual bool hasIntegratedCPP() const { return false; }
278
279 virtual void ConstructJob(Compilation &C, const JobAction &JA,
Daniel Dunbar88299622010-06-04 18:28:36 +0000280 const InputInfo &Output,
281 const InputInfoList &Inputs,
282 const ArgList &TCArgs,
283 const char *LinkingOutput) const;
284 };
Eric Christopher551ef452011-08-23 17:56:55 +0000285
286 class LLVM_LIBRARY_VISIBILITY VerifyDebug : public DarwinTool {
287 public:
288 VerifyDebug(const ToolChain &TC) : DarwinTool("darwin::VerifyDebug",
289 "dwarfdump", TC) {}
290
291 virtual bool hasIntegratedCPP() const { return false; }
292
293 virtual void ConstructJob(Compilation &C, const JobAction &JA,
294 const InputInfo &Output,
295 const InputInfoList &Inputs,
296 const ArgList &TCArgs,
297 const char *LinkingOutput) const;
298 };
299
Daniel Dunbar64ed5e32009-03-20 00:52:38 +0000300}
301
Daniel Dunbar10de9e62009-06-29 20:52:51 +0000302 /// openbsd -- Directly call GNU Binutils assembler and linker
303namespace openbsd {
Duncan Sandsaf260b92010-05-11 20:16:05 +0000304 class LLVM_LIBRARY_VISIBILITY Assemble : public Tool {
Daniel Dunbar10de9e62009-06-29 20:52:51 +0000305 public:
Daniel Dunbar1cb532c2010-05-22 00:37:18 +0000306 Assemble(const ToolChain &TC) : Tool("openbsd::Assemble", "assembler",
307 TC) {}
Daniel Dunbar10de9e62009-06-29 20:52:51 +0000308
Daniel Dunbar10de9e62009-06-29 20:52:51 +0000309 virtual bool hasIntegratedCPP() const { return false; }
310
311 virtual void ConstructJob(Compilation &C, const JobAction &JA,
Mike Stump11289f42009-09-09 15:08:12 +0000312 const InputInfo &Output,
313 const InputInfoList &Inputs,
314 const ArgList &TCArgs,
Daniel Dunbar10de9e62009-06-29 20:52:51 +0000315 const char *LinkingOutput) const;
316 };
Duncan Sandsaf260b92010-05-11 20:16:05 +0000317 class LLVM_LIBRARY_VISIBILITY Link : public Tool {
Daniel Dunbar10de9e62009-06-29 20:52:51 +0000318 public:
Daniel Dunbar1cb532c2010-05-22 00:37:18 +0000319 Link(const ToolChain &TC) : Tool("openbsd::Link", "linker", TC) {}
Daniel Dunbar10de9e62009-06-29 20:52:51 +0000320
Daniel Dunbar10de9e62009-06-29 20:52:51 +0000321 virtual bool hasIntegratedCPP() const { return false; }
Chad Rosierbee5a1d2012-03-07 00:30:40 +0000322 virtual bool isLinkJob() const { return true; }
Daniel Dunbar10de9e62009-06-29 20:52:51 +0000323
324 virtual void ConstructJob(Compilation &C, const JobAction &JA,
Mike Stump11289f42009-09-09 15:08:12 +0000325 const InputInfo &Output,
326 const InputInfoList &Inputs,
327 const ArgList &TCArgs,
Daniel Dunbar10de9e62009-06-29 20:52:51 +0000328 const char *LinkingOutput) const;
329 };
Edward O'Callaghan856e4ff2009-08-22 01:06:46 +0000330} // end namespace openbsd
Daniel Dunbar10de9e62009-06-29 20:52:51 +0000331
Eli Friedman9fa28852012-08-08 23:57:20 +0000332 /// bitrig -- Directly call GNU Binutils assembler and linker
333namespace bitrig {
334 class LLVM_LIBRARY_VISIBILITY Assemble : public Tool {
335 public:
336 Assemble(const ToolChain &TC) : Tool("bitrig::Assemble", "assembler",
337 TC) {}
338
339 virtual bool hasIntegratedCPP() const { return false; }
340
341 virtual void ConstructJob(Compilation &C, const JobAction &JA,
342 const InputInfo &Output,
343 const InputInfoList &Inputs,
344 const ArgList &TCArgs,
345 const char *LinkingOutput) const;
346 };
347 class LLVM_LIBRARY_VISIBILITY Link : public Tool {
348 public:
349 Link(const ToolChain &TC) : Tool("bitrig::Link", "linker", TC) {}
350
351 virtual bool hasIntegratedCPP() const { return false; }
352 virtual bool isLinkJob() const { return true; }
353
354 virtual void ConstructJob(Compilation &C, const JobAction &JA,
355 const InputInfo &Output,
356 const InputInfoList &Inputs,
357 const ArgList &TCArgs,
358 const char *LinkingOutput) const;
359 };
360} // end namespace bitrig
361
Daniel Dunbar8eb473c2009-03-31 17:45:15 +0000362 /// freebsd -- Directly call GNU Binutils assembler and linker
363namespace freebsd {
Duncan Sandsaf260b92010-05-11 20:16:05 +0000364 class LLVM_LIBRARY_VISIBILITY Assemble : public Tool {
Daniel Dunbar8eb473c2009-03-31 17:45:15 +0000365 public:
Daniel Dunbar1cb532c2010-05-22 00:37:18 +0000366 Assemble(const ToolChain &TC) : Tool("freebsd::Assemble", "assembler",
367 TC) {}
Daniel Dunbar8eb473c2009-03-31 17:45:15 +0000368
Daniel Dunbar8eb473c2009-03-31 17:45:15 +0000369 virtual bool hasIntegratedCPP() const { return false; }
370
371 virtual void ConstructJob(Compilation &C, const JobAction &JA,
Mike Stump11289f42009-09-09 15:08:12 +0000372 const InputInfo &Output,
373 const InputInfoList &Inputs,
374 const ArgList &TCArgs,
Daniel Dunbar8eb473c2009-03-31 17:45:15 +0000375 const char *LinkingOutput) const;
376 };
Duncan Sandsaf260b92010-05-11 20:16:05 +0000377 class LLVM_LIBRARY_VISIBILITY Link : public Tool {
Daniel Dunbard854c8d2009-04-01 19:36:32 +0000378 public:
Daniel Dunbar1cb532c2010-05-22 00:37:18 +0000379 Link(const ToolChain &TC) : Tool("freebsd::Link", "linker", TC) {}
Daniel Dunbard854c8d2009-04-01 19:36:32 +0000380
Daniel Dunbard854c8d2009-04-01 19:36:32 +0000381 virtual bool hasIntegratedCPP() const { return false; }
Chad Rosierbee5a1d2012-03-07 00:30:40 +0000382 virtual bool isLinkJob() const { return true; }
Daniel Dunbard854c8d2009-04-01 19:36:32 +0000383
384 virtual void ConstructJob(Compilation &C, const JobAction &JA,
Mike Stump11289f42009-09-09 15:08:12 +0000385 const InputInfo &Output,
386 const InputInfoList &Inputs,
387 const ArgList &TCArgs,
Daniel Dunbard854c8d2009-04-01 19:36:32 +0000388 const char *LinkingOutput) const;
389 };
Edward O'Callaghan856e4ff2009-08-22 01:06:46 +0000390} // end namespace freebsd
391
Benjamin Kramer24f1d3e2011-02-02 18:59:27 +0000392 /// netbsd -- Directly call GNU Binutils assembler and linker
393namespace netbsd {
394 class LLVM_LIBRARY_VISIBILITY Assemble : public Tool {
Joerg Sonnenberger637603a2011-05-16 13:35:02 +0000395
Benjamin Kramer24f1d3e2011-02-02 18:59:27 +0000396 public:
Joerg Sonnenbergerd64c60e2012-01-26 22:27:52 +0000397 Assemble(const ToolChain &TC)
398 : Tool("netbsd::Assemble", "assembler", TC) {}
Benjamin Kramer24f1d3e2011-02-02 18:59:27 +0000399
400 virtual bool hasIntegratedCPP() const { return false; }
401
402 virtual void ConstructJob(Compilation &C, const JobAction &JA,
403 const InputInfo &Output,
404 const InputInfoList &Inputs,
405 const ArgList &TCArgs,
406 const char *LinkingOutput) const;
407 };
408 class LLVM_LIBRARY_VISIBILITY Link : public Tool {
Joerg Sonnenberger637603a2011-05-16 13:35:02 +0000409
Benjamin Kramer24f1d3e2011-02-02 18:59:27 +0000410 public:
Joerg Sonnenbergerd64c60e2012-01-26 22:27:52 +0000411 Link(const ToolChain &TC)
412 : Tool("netbsd::Link", "linker", TC) {}
Benjamin Kramer24f1d3e2011-02-02 18:59:27 +0000413
414 virtual bool hasIntegratedCPP() const { return false; }
Chad Rosierbee5a1d2012-03-07 00:30:40 +0000415 virtual bool isLinkJob() const { return true; }
Benjamin Kramer24f1d3e2011-02-02 18:59:27 +0000416
417 virtual void ConstructJob(Compilation &C, const JobAction &JA,
418 const InputInfo &Output,
419 const InputInfoList &Inputs,
420 const ArgList &TCArgs,
421 const char *LinkingOutput) const;
422 };
423} // end namespace netbsd
424
Rafael Espindola92b00932010-08-10 00:25:48 +0000425 /// linux -- Directly call GNU Binutils assembler and linker
426namespace linuxtools {
427 class LLVM_LIBRARY_VISIBILITY Assemble : public Tool {
428 public:
429 Assemble(const ToolChain &TC) : Tool("linux::Assemble", "assembler",
430 TC) {}
431
432 virtual bool hasIntegratedCPP() const { return false; }
433
434 virtual void ConstructJob(Compilation &C, const JobAction &JA,
435 const InputInfo &Output,
436 const InputInfoList &Inputs,
437 const ArgList &TCArgs,
438 const char *LinkingOutput) const;
439 };
Rafael Espindolac8f008f2010-11-07 20:14:31 +0000440 class LLVM_LIBRARY_VISIBILITY Link : public Tool {
441 public:
442 Link(const ToolChain &TC) : Tool("linux::Link", "linker", TC) {}
443
444 virtual bool hasIntegratedCPP() const { return false; }
Chad Rosierbee5a1d2012-03-07 00:30:40 +0000445 virtual bool isLinkJob() const { return true; }
Rafael Espindolac8f008f2010-11-07 20:14:31 +0000446
447 virtual void ConstructJob(Compilation &C, const JobAction &JA,
448 const InputInfo &Output,
449 const InputInfoList &Inputs,
450 const ArgList &TCArgs,
451 const char *LinkingOutput) const;
452 };
Rafael Espindola92b00932010-08-10 00:25:48 +0000453}
Chris Lattner3e2ee142010-07-07 16:01:42 +0000454 /// minix -- Directly call GNU Binutils assembler and linker
455namespace minix {
456 class LLVM_LIBRARY_VISIBILITY Assemble : public Tool {
457 public:
458 Assemble(const ToolChain &TC) : Tool("minix::Assemble", "assembler",
459 TC) {}
460
Chris Lattner3e2ee142010-07-07 16:01:42 +0000461 virtual bool hasIntegratedCPP() const { return false; }
462
463 virtual void ConstructJob(Compilation &C, const JobAction &JA,
Chris Lattner3e2ee142010-07-07 16:01:42 +0000464 const InputInfo &Output,
465 const InputInfoList &Inputs,
466 const ArgList &TCArgs,
467 const char *LinkingOutput) const;
468 };
469 class LLVM_LIBRARY_VISIBILITY Link : public Tool {
470 public:
471 Link(const ToolChain &TC) : Tool("minix::Link", "linker", TC) {}
472
Chris Lattner3e2ee142010-07-07 16:01:42 +0000473 virtual bool hasIntegratedCPP() const { return false; }
Chad Rosierbee5a1d2012-03-07 00:30:40 +0000474 virtual bool isLinkJob() const { return true; }
Chris Lattner3e2ee142010-07-07 16:01:42 +0000475
476 virtual void ConstructJob(Compilation &C, const JobAction &JA,
Chris Lattner3e2ee142010-07-07 16:01:42 +0000477 const InputInfo &Output,
478 const InputInfoList &Inputs,
479 const ArgList &TCArgs,
480 const char *LinkingOutput) const;
481 };
482} // end namespace minix
483
David Chisnallf571cde2012-02-15 13:39:01 +0000484 /// solaris -- Directly call Solaris assembler and linker
485namespace solaris {
486 class LLVM_LIBRARY_VISIBILITY Assemble : public Tool {
487 public:
488 Assemble(const ToolChain &TC) : Tool("solaris::Assemble", "assembler",
489 TC) {}
490
491 virtual bool hasIntegratedCPP() const { return false; }
492
493 virtual void ConstructJob(Compilation &C, const JobAction &JA,
494 const InputInfo &Output,
495 const InputInfoList &Inputs,
496 const ArgList &TCArgs,
497 const char *LinkingOutput) const;
498 };
499 class LLVM_LIBRARY_VISIBILITY Link : public Tool {
500 public:
501 Link(const ToolChain &TC) : Tool("solaris::Link", "linker", TC) {}
502
503 virtual bool hasIntegratedCPP() const { return false; }
Chad Rosierbee5a1d2012-03-07 00:30:40 +0000504 virtual bool isLinkJob() const { return true; }
David Chisnallf571cde2012-02-15 13:39:01 +0000505
506 virtual void ConstructJob(Compilation &C, const JobAction &JA,
507 const InputInfo &Output,
508 const InputInfoList &Inputs,
509 const ArgList &TCArgs,
510 const char *LinkingOutput) const;
511 };
David Chisnalla9ed5d72012-02-15 16:25:46 +0000512} // end namespace solaris
David Chisnallf571cde2012-02-15 13:39:01 +0000513
Edward O'Callaghan856e4ff2009-08-22 01:06:46 +0000514 /// auroraux -- Directly call GNU Binutils assembler and linker
515namespace auroraux {
Duncan Sandsaf260b92010-05-11 20:16:05 +0000516 class LLVM_LIBRARY_VISIBILITY Assemble : public Tool {
Edward O'Callaghan856e4ff2009-08-22 01:06:46 +0000517 public:
Daniel Dunbar1cb532c2010-05-22 00:37:18 +0000518 Assemble(const ToolChain &TC) : Tool("auroraux::Assemble", "assembler",
519 TC) {}
Edward O'Callaghan856e4ff2009-08-22 01:06:46 +0000520
Edward O'Callaghan856e4ff2009-08-22 01:06:46 +0000521 virtual bool hasIntegratedCPP() const { return false; }
522
523 virtual void ConstructJob(Compilation &C, const JobAction &JA,
Mike Stump11289f42009-09-09 15:08:12 +0000524 const InputInfo &Output,
525 const InputInfoList &Inputs,
526 const ArgList &TCArgs,
Edward O'Callaghan856e4ff2009-08-22 01:06:46 +0000527 const char *LinkingOutput) const;
528 };
Duncan Sandsaf260b92010-05-11 20:16:05 +0000529 class LLVM_LIBRARY_VISIBILITY Link : public Tool {
Edward O'Callaghan856e4ff2009-08-22 01:06:46 +0000530 public:
Daniel Dunbar1cb532c2010-05-22 00:37:18 +0000531 Link(const ToolChain &TC) : Tool("auroraux::Link", "linker", TC) {}
Edward O'Callaghan856e4ff2009-08-22 01:06:46 +0000532
Edward O'Callaghan856e4ff2009-08-22 01:06:46 +0000533 virtual bool hasIntegratedCPP() const { return false; }
Chad Rosierbee5a1d2012-03-07 00:30:40 +0000534 virtual bool isLinkJob() const { return true; }
Edward O'Callaghan856e4ff2009-08-22 01:06:46 +0000535
536 virtual void ConstructJob(Compilation &C, const JobAction &JA,
Mike Stump11289f42009-09-09 15:08:12 +0000537 const InputInfo &Output,
538 const InputInfoList &Inputs,
539 const ArgList &TCArgs,
Edward O'Callaghan856e4ff2009-08-22 01:06:46 +0000540 const char *LinkingOutput) const;
541 };
542} // end namespace auroraux
Daniel Dunbar8eb473c2009-03-31 17:45:15 +0000543
Daniel Dunbarcc912342009-05-02 18:28:39 +0000544 /// dragonfly -- Directly call GNU Binutils assembler and linker
545namespace dragonfly {
Duncan Sandsaf260b92010-05-11 20:16:05 +0000546 class LLVM_LIBRARY_VISIBILITY Assemble : public Tool {
Daniel Dunbarcc912342009-05-02 18:28:39 +0000547 public:
Daniel Dunbar1cb532c2010-05-22 00:37:18 +0000548 Assemble(const ToolChain &TC) : Tool("dragonfly::Assemble", "assembler",
549 TC) {}
Daniel Dunbarcc912342009-05-02 18:28:39 +0000550
Daniel Dunbarcc912342009-05-02 18:28:39 +0000551 virtual bool hasIntegratedCPP() const { return false; }
552
553 virtual void ConstructJob(Compilation &C, const JobAction &JA,
Mike Stump11289f42009-09-09 15:08:12 +0000554 const InputInfo &Output,
555 const InputInfoList &Inputs,
556 const ArgList &TCArgs,
Daniel Dunbarcc912342009-05-02 18:28:39 +0000557 const char *LinkingOutput) const;
558 };
Duncan Sandsaf260b92010-05-11 20:16:05 +0000559 class LLVM_LIBRARY_VISIBILITY Link : public Tool {
Daniel Dunbarcc912342009-05-02 18:28:39 +0000560 public:
Daniel Dunbar1cb532c2010-05-22 00:37:18 +0000561 Link(const ToolChain &TC) : Tool("dragonfly::Link", "linker", TC) {}
Daniel Dunbarcc912342009-05-02 18:28:39 +0000562
Daniel Dunbarcc912342009-05-02 18:28:39 +0000563 virtual bool hasIntegratedCPP() const { return false; }
Chad Rosierbee5a1d2012-03-07 00:30:40 +0000564 virtual bool isLinkJob() const { return true; }
Daniel Dunbarcc912342009-05-02 18:28:39 +0000565
566 virtual void ConstructJob(Compilation &C, const JobAction &JA,
Mike Stump11289f42009-09-09 15:08:12 +0000567 const InputInfo &Output,
568 const InputInfoList &Inputs,
569 const ArgList &TCArgs,
Daniel Dunbarcc912342009-05-02 18:28:39 +0000570 const char *LinkingOutput) const;
571 };
Edward O'Callaghan856e4ff2009-08-22 01:06:46 +0000572} // end namespace dragonfly
Daniel Dunbarcc912342009-05-02 18:28:39 +0000573
Michael J. Spencerb186bc32010-08-21 21:55:07 +0000574 /// Visual studio tools.
575namespace visualstudio {
576 class LLVM_LIBRARY_VISIBILITY Link : public Tool {
577 public:
578 Link(const ToolChain &TC) : Tool("visualstudio::Link", "linker", TC) {}
579
580 virtual bool hasIntegratedCPP() const { return false; }
Chad Rosierbee5a1d2012-03-07 00:30:40 +0000581 virtual bool isLinkJob() const { return true; }
Michael J. Spencerb186bc32010-08-21 21:55:07 +0000582
583 virtual void ConstructJob(Compilation &C, const JobAction &JA,
584 const InputInfo &Output,
585 const InputInfoList &Inputs,
586 const ArgList &TCArgs,
587 const char *LinkingOutput) const;
588 };
589} // end namespace visualstudio
590
Daniel Dunbar5903d8c2009-03-17 22:07:58 +0000591} // end namespace toolchains
592} // end namespace driver
593} // end namespace clang
594
Edward O'Callaghan856e4ff2009-08-22 01:06:46 +0000595#endif // CLANG_LIB_DRIVER_TOOLS_H_