blob: f4aebd8bd25c3aff4375be1ccdd6995ceb89f72b [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 {
Eric Christopher45f2e712012-12-18 00:31:10 +000033 public:
Bob Wilsondecc03e2012-11-23 06:14:39 +000034 static const char *getBaseInputName(const ArgList &Args,
35 const InputInfoList &Inputs);
36 static const char *getBaseInputStem(const ArgList &Args,
37 const InputInfoList &Inputs);
38 static const char *getDependencyFileName(const ArgList &Args,
39 const InputInfoList &Inputs);
40
Eric Christopher45f2e712012-12-18 00:31:10 +000041 private:
Peter Collingbourne9b515cb2011-11-06 00:40:05 +000042 void AddPreprocessingOptions(Compilation &C,
Chad Rosier633dcdc2013-01-24 19:14:47 +000043 const JobAction &JA,
Peter Collingbourne9b515cb2011-11-06 00:40:05 +000044 const Driver &D,
Douglas Gregor111af7d2009-04-18 00:34:01 +000045 const ArgList &Args,
Daniel Dunbard067f7f2009-04-08 23:54:23 +000046 ArgStringList &CmdArgs,
47 const InputInfo &Output,
48 const InputInfoList &Inputs) const;
49
Daniel Dunbarc9388c12011-03-17 17:10:06 +000050 void AddARMTargetArgs(const ArgList &Args, ArgStringList &CmdArgs,
51 bool KernelOrKext) const;
Eric Christopher0b26a612010-03-02 02:41:08 +000052 void AddMIPSTargetArgs(const ArgList &Args, ArgStringList &CmdArgs) const;
Hal Finkel8eb59282012-06-11 22:35:19 +000053 void AddPPCTargetArgs(const ArgList &Args, ArgStringList &CmdArgs) const;
Bruno Cardoso Lopese7f211c2010-11-09 17:21:19 +000054 void AddSparcTargetArgs(const ArgList &Args, ArgStringList &CmdArgs) const;
Daniel Dunbar3b3191f2009-09-09 22:33:08 +000055 void AddX86TargetArgs(const ArgList &Args, ArgStringList &CmdArgs) const;
Tony Linthicum76329bf2011-12-12 21:14:55 +000056 void AddHexagonTargetArgs (const ArgList &Args, ArgStringList &CmdArgs) const;
Daniel Dunbar3b3191f2009-09-09 22:33:08 +000057
John McCall5fb5df92012-06-20 06:18:46 +000058 enum RewriteKind { RK_None, RK_Fragile, RK_NonFragile };
59
60 ObjCRuntime AddObjCRuntimeArgs(const ArgList &args, ArgStringList &cmdArgs,
61 RewriteKind rewrite) const;
62
Daniel Dunbar5903d8c2009-03-17 22:07:58 +000063 public:
Daniel Dunbar1cb532c2010-05-22 00:37:18 +000064 Clang(const ToolChain &TC) : Tool("clang", "clang frontend", TC) {}
Daniel Dunbar5903d8c2009-03-17 22:07:58 +000065
Daniel Dunbar3d45e172010-04-06 17:07:49 +000066 virtual bool hasGoodDiagnostics() const { return true; }
Daniel Dunbarc4343942010-02-03 03:07:56 +000067 virtual bool hasIntegratedAssembler() const { return true; }
Daniel Dunbar5903d8c2009-03-17 22:07:58 +000068 virtual bool hasIntegratedCPP() const { return true; }
Daniel Dunbar1a093d22009-03-18 06:00:36 +000069
70 virtual void ConstructJob(Compilation &C, const JobAction &JA,
Mike Stump11289f42009-09-09 15:08:12 +000071 const InputInfo &Output,
72 const InputInfoList &Inputs,
73 const ArgList &TCArgs,
Daniel Dunbar1a093d22009-03-18 06:00:36 +000074 const char *LinkingOutput) const;
Daniel Dunbar5903d8c2009-03-17 22:07:58 +000075 };
76
Daniel Dunbar4f5e79c2010-05-20 21:30:13 +000077 /// \brief Clang integrated assembler tool.
78 class LLVM_LIBRARY_VISIBILITY ClangAs : public Tool {
Jim Grosbach576452b2012-02-10 20:37:10 +000079 void AddARMTargetArgs(const ArgList &Args, ArgStringList &CmdArgs) const;
Daniel Dunbar4f5e79c2010-05-20 21:30:13 +000080 public:
Daniel Dunbar1cb532c2010-05-22 00:37:18 +000081 ClangAs(const ToolChain &TC) : Tool("clang::as",
82 "clang integrated assembler", TC) {}
Daniel Dunbar4f5e79c2010-05-20 21:30:13 +000083
Daniel Dunbar4f5e79c2010-05-20 21:30:13 +000084 virtual bool hasGoodDiagnostics() const { return true; }
85 virtual bool hasIntegratedAssembler() const { return false; }
86 virtual bool hasIntegratedCPP() const { return false; }
87
88 virtual void ConstructJob(Compilation &C, const JobAction &JA,
Daniel Dunbar4f5e79c2010-05-20 21:30:13 +000089 const InputInfo &Output,
90 const InputInfoList &Inputs,
91 const ArgList &TCArgs,
92 const char *LinkingOutput) const;
93 };
94
Daniel Dunbar82116f82009-03-17 22:45:24 +000095 /// gcc - Generic GCC tool implementations.
96namespace gcc {
Duncan Sandsaf260b92010-05-11 20:16:05 +000097 class LLVM_LIBRARY_VISIBILITY Common : public Tool {
Daniel Dunbar5903d8c2009-03-17 22:07:58 +000098 public:
Daniel Dunbar1cb532c2010-05-22 00:37:18 +000099 Common(const char *Name, const char *ShortName,
100 const ToolChain &TC) : Tool(Name, ShortName, TC) {}
Daniel Dunbara3246a02009-03-18 08:07:30 +0000101
102 virtual void ConstructJob(Compilation &C, const JobAction &JA,
Mike Stump11289f42009-09-09 15:08:12 +0000103 const InputInfo &Output,
104 const InputInfoList &Inputs,
105 const ArgList &TCArgs,
Daniel Dunbara3246a02009-03-18 08:07:30 +0000106 const char *LinkingOutput) const;
107
108 /// RenderExtraToolArgs - Render any arguments necessary to force
109 /// the particular tool mode.
Daniel Dunbar4e295052010-01-25 22:35:08 +0000110 virtual void RenderExtraToolArgs(const JobAction &JA,
111 ArgStringList &CmdArgs) const = 0;
Daniel Dunbara3246a02009-03-18 08:07:30 +0000112 };
113
Mike Stump11289f42009-09-09 15:08:12 +0000114
Duncan Sandsaf260b92010-05-11 20:16:05 +0000115 class LLVM_LIBRARY_VISIBILITY Preprocess : public Common {
Daniel Dunbara3246a02009-03-18 08:07:30 +0000116 public:
Daniel Dunbar1cb532c2010-05-22 00:37:18 +0000117 Preprocess(const ToolChain &TC) : Common("gcc::Preprocess",
118 "gcc preprocessor", TC) {}
Daniel Dunbar5903d8c2009-03-17 22:07:58 +0000119
Daniel Dunbar3d45e172010-04-06 17:07:49 +0000120 virtual bool hasGoodDiagnostics() const { return true; }
Daniel Dunbar5903d8c2009-03-17 22:07:58 +0000121 virtual bool hasIntegratedCPP() const { return false; }
Daniel Dunbar1a093d22009-03-18 06:00:36 +0000122
Daniel Dunbar4e295052010-01-25 22:35:08 +0000123 virtual void RenderExtraToolArgs(const JobAction &JA,
124 ArgStringList &CmdArgs) const;
Daniel Dunbar5903d8c2009-03-17 22:07:58 +0000125 };
126
Duncan Sandsaf260b92010-05-11 20:16:05 +0000127 class LLVM_LIBRARY_VISIBILITY Precompile : public Common {
Daniel Dunbar5903d8c2009-03-17 22:07:58 +0000128 public:
Daniel Dunbar1cb532c2010-05-22 00:37:18 +0000129 Precompile(const ToolChain &TC) : Common("gcc::Precompile",
130 "gcc precompile", TC) {}
Daniel Dunbar5903d8c2009-03-17 22:07:58 +0000131
Daniel Dunbar3d45e172010-04-06 17:07:49 +0000132 virtual bool hasGoodDiagnostics() const { return true; }
Daniel Dunbar5903d8c2009-03-17 22:07:58 +0000133 virtual bool hasIntegratedCPP() const { return true; }
Daniel Dunbar1a093d22009-03-18 06:00:36 +0000134
Daniel Dunbar4e295052010-01-25 22:35:08 +0000135 virtual void RenderExtraToolArgs(const JobAction &JA,
136 ArgStringList &CmdArgs) const;
Daniel Dunbar5903d8c2009-03-17 22:07:58 +0000137 };
138
Duncan Sandsaf260b92010-05-11 20:16:05 +0000139 class LLVM_LIBRARY_VISIBILITY Compile : public Common {
Daniel Dunbar5903d8c2009-03-17 22:07:58 +0000140 public:
Daniel Dunbar1cb532c2010-05-22 00:37:18 +0000141 Compile(const ToolChain &TC) : Common("gcc::Compile",
142 "gcc frontend", TC) {}
Daniel Dunbar5903d8c2009-03-17 22:07:58 +0000143
Daniel Dunbar3d45e172010-04-06 17:07:49 +0000144 virtual bool hasGoodDiagnostics() const { return true; }
Daniel Dunbar5903d8c2009-03-17 22:07:58 +0000145 virtual bool hasIntegratedCPP() const { return true; }
Daniel Dunbar1a093d22009-03-18 06:00:36 +0000146
Daniel Dunbar4e295052010-01-25 22:35:08 +0000147 virtual void RenderExtraToolArgs(const JobAction &JA,
148 ArgStringList &CmdArgs) const;
Daniel Dunbar5903d8c2009-03-17 22:07:58 +0000149 };
150
Duncan Sandsaf260b92010-05-11 20:16:05 +0000151 class LLVM_LIBRARY_VISIBILITY Assemble : public Common {
Daniel Dunbar5903d8c2009-03-17 22:07:58 +0000152 public:
Daniel Dunbar1cb532c2010-05-22 00:37:18 +0000153 Assemble(const ToolChain &TC) : Common("gcc::Assemble",
154 "assembler (via gcc)", TC) {}
Daniel Dunbar5903d8c2009-03-17 22:07:58 +0000155
Daniel Dunbar5903d8c2009-03-17 22:07:58 +0000156 virtual bool hasIntegratedCPP() const { return false; }
Daniel Dunbar1a093d22009-03-18 06:00:36 +0000157
Daniel Dunbar4e295052010-01-25 22:35:08 +0000158 virtual void RenderExtraToolArgs(const JobAction &JA,
159 ArgStringList &CmdArgs) const;
Daniel Dunbar5903d8c2009-03-17 22:07:58 +0000160 };
161
Duncan Sandsaf260b92010-05-11 20:16:05 +0000162 class LLVM_LIBRARY_VISIBILITY Link : public Common {
Daniel Dunbar5903d8c2009-03-17 22:07:58 +0000163 public:
Daniel Dunbar1cb532c2010-05-22 00:37:18 +0000164 Link(const ToolChain &TC) : Common("gcc::Link",
165 "linker (via gcc)", TC) {}
Daniel Dunbar5903d8c2009-03-17 22:07:58 +0000166
Daniel Dunbar5903d8c2009-03-17 22:07:58 +0000167 virtual bool hasIntegratedCPP() const { return false; }
Chad Rosierbee5a1d2012-03-07 00:30:40 +0000168 virtual bool isLinkJob() const { return true; }
Daniel Dunbar1a093d22009-03-18 06:00:36 +0000169
Daniel Dunbar4e295052010-01-25 22:35:08 +0000170 virtual void RenderExtraToolArgs(const JobAction &JA,
171 ArgStringList &CmdArgs) const;
Daniel Dunbar5903d8c2009-03-17 22:07:58 +0000172 };
Daniel Dunbar82116f82009-03-17 22:45:24 +0000173} // end namespace gcc
Daniel Dunbar5903d8c2009-03-17 22:07:58 +0000174
Tony Linthicum76329bf2011-12-12 21:14:55 +0000175namespace hexagon {
176 // For Hexagon, we do not need to instantiate tools for PreProcess, PreCompile and Compile.
177 // We simply use "clang -cc1" for those actions.
178 class LLVM_LIBRARY_VISIBILITY Assemble : public Tool {
179 public:
180 Assemble(const ToolChain &TC) : Tool("hexagon::Assemble",
181 "hexagon-as", TC) {}
182
183 virtual bool hasIntegratedCPP() const { return false; }
184
185 virtual void RenderExtraToolArgs(const JobAction &JA,
186 ArgStringList &CmdArgs) const;
187 virtual void ConstructJob(Compilation &C, const JobAction &JA,
188 const InputInfo &Output,
189 const InputInfoList &Inputs,
190 const ArgList &TCArgs,
191 const char *LinkingOutput) const;
192 };
193
194 class LLVM_LIBRARY_VISIBILITY Link : public Tool {
195 public:
196 Link(const ToolChain &TC) : Tool("hexagon::Link",
197 "hexagon-ld", TC) {}
198
199 virtual bool hasIntegratedCPP() const { return false; }
Chad Rosierbee5a1d2012-03-07 00:30:40 +0000200 virtual bool isLinkJob() const { return true; }
Tony Linthicum76329bf2011-12-12 21:14:55 +0000201
202 virtual void RenderExtraToolArgs(const JobAction &JA,
203 ArgStringList &CmdArgs) const;
204 virtual void ConstructJob(Compilation &C, const JobAction &JA,
205 const InputInfo &Output,
206 const InputInfoList &Inputs,
207 const ArgList &TCArgs,
208 const char *LinkingOutput) const;
209 };
210} // end namespace hexagon.
211
212
Daniel Dunbar64ed5e32009-03-20 00:52:38 +0000213namespace darwin {
Rafael Espindoladcbf6982012-10-31 18:51:07 +0000214 llvm::Triple::ArchType getArchTypeForDarwinArchName(StringRef Str);
215
Duncan Sandsaf260b92010-05-11 20:16:05 +0000216 class LLVM_LIBRARY_VISIBILITY DarwinTool : public Tool {
David Blaikie68e081d2011-12-20 02:48:34 +0000217 virtual void anchor();
Daniel Dunbare9ded432009-09-09 18:36:20 +0000218 protected:
219 void AddDarwinArch(const ArgList &Args, ArgStringList &CmdArgs) const;
Daniel Dunbare9ded432009-09-09 18:36:20 +0000220
221 const toolchains::Darwin &getDarwinToolChain() const {
222 return reinterpret_cast<const toolchains::Darwin&>(getToolChain());
223 }
224
225 public:
Daniel Dunbar1cb532c2010-05-22 00:37:18 +0000226 DarwinTool(const char *Name, const char *ShortName,
227 const ToolChain &TC) : Tool(Name, ShortName, TC) {}
Daniel Dunbare9ded432009-09-09 18:36:20 +0000228 };
229
Duncan Sandsaf260b92010-05-11 20:16:05 +0000230 class LLVM_LIBRARY_VISIBILITY Assemble : public DarwinTool {
Daniel Dunbarbe220842009-03-20 16:06:39 +0000231 public:
Daniel Dunbar1cb532c2010-05-22 00:37:18 +0000232 Assemble(const ToolChain &TC) : DarwinTool("darwin::Assemble",
233 "assembler", TC) {}
Daniel Dunbarbe220842009-03-20 16:06:39 +0000234
Daniel Dunbarbe220842009-03-20 16:06:39 +0000235 virtual bool hasIntegratedCPP() const { return false; }
236
237 virtual void ConstructJob(Compilation &C, const JobAction &JA,
Mike Stump11289f42009-09-09 15:08:12 +0000238 const InputInfo &Output,
239 const InputInfoList &Inputs,
240 const ArgList &TCArgs,
Daniel Dunbarbe220842009-03-20 16:06:39 +0000241 const char *LinkingOutput) const;
242 };
243
Duncan Sandsaf260b92010-05-11 20:16:05 +0000244 class LLVM_LIBRARY_VISIBILITY Link : public DarwinTool {
Bill Wendling3b2000f2012-10-02 18:02:50 +0000245 bool NeedsTempPath(const InputInfoList &Inputs) const;
Daniel Dunbarccbc4522010-09-09 21:51:05 +0000246 void AddLinkArgs(Compilation &C, const ArgList &Args,
Bill Wendling3b2000f2012-10-02 18:02:50 +0000247 ArgStringList &CmdArgs, const InputInfoList &Inputs) const;
Daniel Dunbarc1964212009-03-26 16:23:12 +0000248
Daniel Dunbarc1964212009-03-26 16:23:12 +0000249 public:
Daniel Dunbar1cb532c2010-05-22 00:37:18 +0000250 Link(const ToolChain &TC) : DarwinTool("darwin::Link", "linker", TC) {}
Daniel Dunbarc1964212009-03-26 16:23:12 +0000251
Daniel Dunbarc1964212009-03-26 16:23:12 +0000252 virtual bool hasIntegratedCPP() const { return false; }
Chad Rosierbee5a1d2012-03-07 00:30:40 +0000253 virtual bool isLinkJob() const { return true; }
Daniel Dunbarc1964212009-03-26 16:23:12 +0000254
255 virtual void ConstructJob(Compilation &C, const JobAction &JA,
Mike Stump11289f42009-09-09 15:08:12 +0000256 const InputInfo &Output,
257 const InputInfoList &Inputs,
258 const ArgList &TCArgs,
Daniel Dunbarc1964212009-03-26 16:23:12 +0000259 const char *LinkingOutput) const;
260 };
261
Duncan Sandsaf260b92010-05-11 20:16:05 +0000262 class LLVM_LIBRARY_VISIBILITY Lipo : public DarwinTool {
Daniel Dunbar64ed5e32009-03-20 00:52:38 +0000263 public:
Daniel Dunbar1cb532c2010-05-22 00:37:18 +0000264 Lipo(const ToolChain &TC) : DarwinTool("darwin::Lipo", "lipo", TC) {}
Daniel Dunbar64ed5e32009-03-20 00:52:38 +0000265
Daniel Dunbar64ed5e32009-03-20 00:52:38 +0000266 virtual bool hasIntegratedCPP() const { return false; }
267
268 virtual void ConstructJob(Compilation &C, const JobAction &JA,
Mike Stump11289f42009-09-09 15:08:12 +0000269 const InputInfo &Output,
270 const InputInfoList &Inputs,
271 const ArgList &TCArgs,
Daniel Dunbar64ed5e32009-03-20 00:52:38 +0000272 const char *LinkingOutput) const;
273 };
Daniel Dunbar88299622010-06-04 18:28:36 +0000274
275 class LLVM_LIBRARY_VISIBILITY Dsymutil : public DarwinTool {
276 public:
277 Dsymutil(const ToolChain &TC) : DarwinTool("darwin::Dsymutil",
278 "dsymutil", TC) {}
279
Daniel Dunbar88299622010-06-04 18:28:36 +0000280 virtual bool hasIntegratedCPP() const { return false; }
Chad Rosierdbf46a12013-02-01 18:30:26 +0000281 virtual bool isDsymutilJob() const { return true; }
Daniel Dunbar88299622010-06-04 18:28:36 +0000282
283 virtual void ConstructJob(Compilation &C, const JobAction &JA,
Daniel Dunbar88299622010-06-04 18:28:36 +0000284 const InputInfo &Output,
285 const InputInfoList &Inputs,
286 const ArgList &TCArgs,
287 const char *LinkingOutput) const;
288 };
Eric Christopher551ef452011-08-23 17:56:55 +0000289
290 class LLVM_LIBRARY_VISIBILITY VerifyDebug : public DarwinTool {
291 public:
292 VerifyDebug(const ToolChain &TC) : DarwinTool("darwin::VerifyDebug",
Eric Christopher45f2e712012-12-18 00:31:10 +0000293 "dwarfdump", TC) {}
Eric Christopher551ef452011-08-23 17:56:55 +0000294
295 virtual bool hasIntegratedCPP() const { return false; }
296
297 virtual void ConstructJob(Compilation &C, const JobAction &JA,
Eric Christopher45f2e712012-12-18 00:31:10 +0000298 const InputInfo &Output,
299 const InputInfoList &Inputs,
300 const ArgList &TCArgs,
301 const char *LinkingOutput) const;
Eric Christopher551ef452011-08-23 17:56:55 +0000302 };
303
Daniel Dunbar64ed5e32009-03-20 00:52:38 +0000304}
305
Daniel Dunbar10de9e62009-06-29 20:52:51 +0000306 /// openbsd -- Directly call GNU Binutils assembler and linker
307namespace openbsd {
Duncan Sandsaf260b92010-05-11 20:16:05 +0000308 class LLVM_LIBRARY_VISIBILITY Assemble : public Tool {
Daniel Dunbar10de9e62009-06-29 20:52:51 +0000309 public:
Daniel Dunbar1cb532c2010-05-22 00:37:18 +0000310 Assemble(const ToolChain &TC) : Tool("openbsd::Assemble", "assembler",
311 TC) {}
Daniel Dunbar10de9e62009-06-29 20:52:51 +0000312
Daniel Dunbar10de9e62009-06-29 20:52:51 +0000313 virtual bool hasIntegratedCPP() const { return false; }
314
315 virtual void ConstructJob(Compilation &C, const JobAction &JA,
Mike Stump11289f42009-09-09 15:08:12 +0000316 const InputInfo &Output,
317 const InputInfoList &Inputs,
318 const ArgList &TCArgs,
Daniel Dunbar10de9e62009-06-29 20:52:51 +0000319 const char *LinkingOutput) const;
320 };
Duncan Sandsaf260b92010-05-11 20:16:05 +0000321 class LLVM_LIBRARY_VISIBILITY Link : public Tool {
Daniel Dunbar10de9e62009-06-29 20:52:51 +0000322 public:
Daniel Dunbar1cb532c2010-05-22 00:37:18 +0000323 Link(const ToolChain &TC) : Tool("openbsd::Link", "linker", TC) {}
Daniel Dunbar10de9e62009-06-29 20:52:51 +0000324
Daniel Dunbar10de9e62009-06-29 20:52:51 +0000325 virtual bool hasIntegratedCPP() const { return false; }
Chad Rosierbee5a1d2012-03-07 00:30:40 +0000326 virtual bool isLinkJob() const { return true; }
Daniel Dunbar10de9e62009-06-29 20:52:51 +0000327
328 virtual void ConstructJob(Compilation &C, const JobAction &JA,
Mike Stump11289f42009-09-09 15:08:12 +0000329 const InputInfo &Output,
330 const InputInfoList &Inputs,
331 const ArgList &TCArgs,
Daniel Dunbar10de9e62009-06-29 20:52:51 +0000332 const char *LinkingOutput) const;
333 };
Edward O'Callaghan856e4ff2009-08-22 01:06:46 +0000334} // end namespace openbsd
Daniel Dunbar10de9e62009-06-29 20:52:51 +0000335
Eli Friedman9fa28852012-08-08 23:57:20 +0000336 /// bitrig -- Directly call GNU Binutils assembler and linker
337namespace bitrig {
338 class LLVM_LIBRARY_VISIBILITY Assemble : public Tool {
339 public:
340 Assemble(const ToolChain &TC) : Tool("bitrig::Assemble", "assembler",
341 TC) {}
342
343 virtual bool hasIntegratedCPP() const { return false; }
344
345 virtual void ConstructJob(Compilation &C, const JobAction &JA,
346 const InputInfo &Output,
347 const InputInfoList &Inputs,
348 const ArgList &TCArgs,
349 const char *LinkingOutput) const;
350 };
351 class LLVM_LIBRARY_VISIBILITY Link : public Tool {
352 public:
353 Link(const ToolChain &TC) : Tool("bitrig::Link", "linker", TC) {}
354
355 virtual bool hasIntegratedCPP() const { return false; }
356 virtual bool isLinkJob() const { return true; }
357
358 virtual void ConstructJob(Compilation &C, const JobAction &JA,
359 const InputInfo &Output,
360 const InputInfoList &Inputs,
361 const ArgList &TCArgs,
362 const char *LinkingOutput) const;
363 };
364} // end namespace bitrig
365
Daniel Dunbar8eb473c2009-03-31 17:45:15 +0000366 /// freebsd -- Directly call GNU Binutils assembler and linker
367namespace freebsd {
Duncan Sandsaf260b92010-05-11 20:16:05 +0000368 class LLVM_LIBRARY_VISIBILITY Assemble : public Tool {
Daniel Dunbar8eb473c2009-03-31 17:45:15 +0000369 public:
Daniel Dunbar1cb532c2010-05-22 00:37:18 +0000370 Assemble(const ToolChain &TC) : Tool("freebsd::Assemble", "assembler",
371 TC) {}
Daniel Dunbar8eb473c2009-03-31 17:45:15 +0000372
Daniel Dunbar8eb473c2009-03-31 17:45:15 +0000373 virtual bool hasIntegratedCPP() const { return false; }
374
375 virtual void ConstructJob(Compilation &C, const JobAction &JA,
Mike Stump11289f42009-09-09 15:08:12 +0000376 const InputInfo &Output,
377 const InputInfoList &Inputs,
378 const ArgList &TCArgs,
Daniel Dunbar8eb473c2009-03-31 17:45:15 +0000379 const char *LinkingOutput) const;
380 };
Duncan Sandsaf260b92010-05-11 20:16:05 +0000381 class LLVM_LIBRARY_VISIBILITY Link : public Tool {
Daniel Dunbard854c8d2009-04-01 19:36:32 +0000382 public:
Daniel Dunbar1cb532c2010-05-22 00:37:18 +0000383 Link(const ToolChain &TC) : Tool("freebsd::Link", "linker", TC) {}
Daniel Dunbard854c8d2009-04-01 19:36:32 +0000384
Daniel Dunbard854c8d2009-04-01 19:36:32 +0000385 virtual bool hasIntegratedCPP() const { return false; }
Chad Rosierbee5a1d2012-03-07 00:30:40 +0000386 virtual bool isLinkJob() const { return true; }
Daniel Dunbard854c8d2009-04-01 19:36:32 +0000387
388 virtual void ConstructJob(Compilation &C, const JobAction &JA,
Mike Stump11289f42009-09-09 15:08:12 +0000389 const InputInfo &Output,
390 const InputInfoList &Inputs,
391 const ArgList &TCArgs,
Daniel Dunbard854c8d2009-04-01 19:36:32 +0000392 const char *LinkingOutput) const;
393 };
Edward O'Callaghan856e4ff2009-08-22 01:06:46 +0000394} // end namespace freebsd
395
Benjamin Kramer24f1d3e2011-02-02 18:59:27 +0000396 /// netbsd -- Directly call GNU Binutils assembler and linker
397namespace netbsd {
398 class LLVM_LIBRARY_VISIBILITY Assemble : public Tool {
Joerg Sonnenberger637603a2011-05-16 13:35:02 +0000399
Benjamin Kramer24f1d3e2011-02-02 18:59:27 +0000400 public:
Joerg Sonnenbergerd64c60e2012-01-26 22:27:52 +0000401 Assemble(const ToolChain &TC)
402 : Tool("netbsd::Assemble", "assembler", TC) {}
Benjamin Kramer24f1d3e2011-02-02 18:59:27 +0000403
404 virtual bool hasIntegratedCPP() const { return false; }
405
406 virtual void ConstructJob(Compilation &C, const JobAction &JA,
407 const InputInfo &Output,
408 const InputInfoList &Inputs,
409 const ArgList &TCArgs,
410 const char *LinkingOutput) const;
411 };
412 class LLVM_LIBRARY_VISIBILITY Link : public Tool {
Joerg Sonnenberger637603a2011-05-16 13:35:02 +0000413
Benjamin Kramer24f1d3e2011-02-02 18:59:27 +0000414 public:
Joerg Sonnenbergerd64c60e2012-01-26 22:27:52 +0000415 Link(const ToolChain &TC)
416 : Tool("netbsd::Link", "linker", TC) {}
Benjamin Kramer24f1d3e2011-02-02 18:59:27 +0000417
418 virtual bool hasIntegratedCPP() const { return false; }
Chad Rosierbee5a1d2012-03-07 00:30:40 +0000419 virtual bool isLinkJob() const { return true; }
Benjamin Kramer24f1d3e2011-02-02 18:59:27 +0000420
421 virtual void ConstructJob(Compilation &C, const JobAction &JA,
422 const InputInfo &Output,
423 const InputInfoList &Inputs,
424 const ArgList &TCArgs,
425 const char *LinkingOutput) const;
426 };
427} // end namespace netbsd
428
Rafael Espindola92b00932010-08-10 00:25:48 +0000429 /// linux -- Directly call GNU Binutils assembler and linker
430namespace linuxtools {
431 class LLVM_LIBRARY_VISIBILITY Assemble : public Tool {
432 public:
433 Assemble(const ToolChain &TC) : Tool("linux::Assemble", "assembler",
434 TC) {}
435
436 virtual bool hasIntegratedCPP() const { return false; }
437
438 virtual void ConstructJob(Compilation &C, const JobAction &JA,
439 const InputInfo &Output,
440 const InputInfoList &Inputs,
441 const ArgList &TCArgs,
442 const char *LinkingOutput) const;
443 };
Rafael Espindolac8f008f2010-11-07 20:14:31 +0000444 class LLVM_LIBRARY_VISIBILITY Link : public Tool {
445 public:
446 Link(const ToolChain &TC) : Tool("linux::Link", "linker", TC) {}
447
448 virtual bool hasIntegratedCPP() const { return false; }
Chad Rosierbee5a1d2012-03-07 00:30:40 +0000449 virtual bool isLinkJob() const { return true; }
Rafael Espindolac8f008f2010-11-07 20:14:31 +0000450
451 virtual void ConstructJob(Compilation &C, const JobAction &JA,
452 const InputInfo &Output,
453 const InputInfoList &Inputs,
454 const ArgList &TCArgs,
455 const char *LinkingOutput) const;
456 };
Rafael Espindola92b00932010-08-10 00:25:48 +0000457}
Chris Lattner3e2ee142010-07-07 16:01:42 +0000458 /// minix -- Directly call GNU Binutils assembler and linker
459namespace minix {
460 class LLVM_LIBRARY_VISIBILITY Assemble : public Tool {
461 public:
462 Assemble(const ToolChain &TC) : Tool("minix::Assemble", "assembler",
463 TC) {}
464
Chris Lattner3e2ee142010-07-07 16:01:42 +0000465 virtual bool hasIntegratedCPP() const { return false; }
466
467 virtual void ConstructJob(Compilation &C, const JobAction &JA,
Chris Lattner3e2ee142010-07-07 16:01:42 +0000468 const InputInfo &Output,
469 const InputInfoList &Inputs,
470 const ArgList &TCArgs,
471 const char *LinkingOutput) const;
472 };
473 class LLVM_LIBRARY_VISIBILITY Link : public Tool {
474 public:
475 Link(const ToolChain &TC) : Tool("minix::Link", "linker", TC) {}
476
Chris Lattner3e2ee142010-07-07 16:01:42 +0000477 virtual bool hasIntegratedCPP() const { return false; }
Chad Rosierbee5a1d2012-03-07 00:30:40 +0000478 virtual bool isLinkJob() const { return true; }
Chris Lattner3e2ee142010-07-07 16:01:42 +0000479
480 virtual void ConstructJob(Compilation &C, const JobAction &JA,
Chris Lattner3e2ee142010-07-07 16:01:42 +0000481 const InputInfo &Output,
482 const InputInfoList &Inputs,
483 const ArgList &TCArgs,
484 const char *LinkingOutput) const;
485 };
486} // end namespace minix
487
David Chisnallf571cde2012-02-15 13:39:01 +0000488 /// solaris -- Directly call Solaris assembler and linker
489namespace solaris {
490 class LLVM_LIBRARY_VISIBILITY Assemble : public Tool {
491 public:
492 Assemble(const ToolChain &TC) : Tool("solaris::Assemble", "assembler",
493 TC) {}
494
495 virtual bool hasIntegratedCPP() const { return false; }
496
497 virtual void ConstructJob(Compilation &C, const JobAction &JA,
498 const InputInfo &Output,
499 const InputInfoList &Inputs,
500 const ArgList &TCArgs,
501 const char *LinkingOutput) const;
502 };
503 class LLVM_LIBRARY_VISIBILITY Link : public Tool {
504 public:
505 Link(const ToolChain &TC) : Tool("solaris::Link", "linker", TC) {}
506
507 virtual bool hasIntegratedCPP() const { return false; }
Chad Rosierbee5a1d2012-03-07 00:30:40 +0000508 virtual bool isLinkJob() const { return true; }
David Chisnallf571cde2012-02-15 13:39:01 +0000509
510 virtual void ConstructJob(Compilation &C, const JobAction &JA,
511 const InputInfo &Output,
512 const InputInfoList &Inputs,
513 const ArgList &TCArgs,
514 const char *LinkingOutput) const;
515 };
David Chisnalla9ed5d72012-02-15 16:25:46 +0000516} // end namespace solaris
David Chisnallf571cde2012-02-15 13:39:01 +0000517
Edward O'Callaghan856e4ff2009-08-22 01:06:46 +0000518 /// auroraux -- Directly call GNU Binutils assembler and linker
519namespace auroraux {
Duncan Sandsaf260b92010-05-11 20:16:05 +0000520 class LLVM_LIBRARY_VISIBILITY Assemble : public Tool {
Edward O'Callaghan856e4ff2009-08-22 01:06:46 +0000521 public:
Daniel Dunbar1cb532c2010-05-22 00:37:18 +0000522 Assemble(const ToolChain &TC) : Tool("auroraux::Assemble", "assembler",
523 TC) {}
Edward O'Callaghan856e4ff2009-08-22 01:06:46 +0000524
Edward O'Callaghan856e4ff2009-08-22 01:06:46 +0000525 virtual bool hasIntegratedCPP() const { return false; }
526
527 virtual void ConstructJob(Compilation &C, const JobAction &JA,
Mike Stump11289f42009-09-09 15:08:12 +0000528 const InputInfo &Output,
529 const InputInfoList &Inputs,
530 const ArgList &TCArgs,
Edward O'Callaghan856e4ff2009-08-22 01:06:46 +0000531 const char *LinkingOutput) const;
532 };
Duncan Sandsaf260b92010-05-11 20:16:05 +0000533 class LLVM_LIBRARY_VISIBILITY Link : public Tool {
Edward O'Callaghan856e4ff2009-08-22 01:06:46 +0000534 public:
Daniel Dunbar1cb532c2010-05-22 00:37:18 +0000535 Link(const ToolChain &TC) : Tool("auroraux::Link", "linker", TC) {}
Edward O'Callaghan856e4ff2009-08-22 01:06:46 +0000536
Edward O'Callaghan856e4ff2009-08-22 01:06:46 +0000537 virtual bool hasIntegratedCPP() const { return false; }
Chad Rosierbee5a1d2012-03-07 00:30:40 +0000538 virtual bool isLinkJob() const { return true; }
Edward O'Callaghan856e4ff2009-08-22 01:06:46 +0000539
540 virtual void ConstructJob(Compilation &C, const JobAction &JA,
Mike Stump11289f42009-09-09 15:08:12 +0000541 const InputInfo &Output,
542 const InputInfoList &Inputs,
543 const ArgList &TCArgs,
Edward O'Callaghan856e4ff2009-08-22 01:06:46 +0000544 const char *LinkingOutput) const;
545 };
546} // end namespace auroraux
Daniel Dunbar8eb473c2009-03-31 17:45:15 +0000547
Daniel Dunbarcc912342009-05-02 18:28:39 +0000548 /// dragonfly -- Directly call GNU Binutils assembler and linker
549namespace dragonfly {
Duncan Sandsaf260b92010-05-11 20:16:05 +0000550 class LLVM_LIBRARY_VISIBILITY Assemble : public Tool {
Daniel Dunbarcc912342009-05-02 18:28:39 +0000551 public:
Daniel Dunbar1cb532c2010-05-22 00:37:18 +0000552 Assemble(const ToolChain &TC) : Tool("dragonfly::Assemble", "assembler",
553 TC) {}
Daniel Dunbarcc912342009-05-02 18:28:39 +0000554
Daniel Dunbarcc912342009-05-02 18:28:39 +0000555 virtual bool hasIntegratedCPP() const { return false; }
556
557 virtual void ConstructJob(Compilation &C, const JobAction &JA,
Mike Stump11289f42009-09-09 15:08:12 +0000558 const InputInfo &Output,
559 const InputInfoList &Inputs,
560 const ArgList &TCArgs,
Daniel Dunbarcc912342009-05-02 18:28:39 +0000561 const char *LinkingOutput) const;
562 };
Duncan Sandsaf260b92010-05-11 20:16:05 +0000563 class LLVM_LIBRARY_VISIBILITY Link : public Tool {
Daniel Dunbarcc912342009-05-02 18:28:39 +0000564 public:
Daniel Dunbar1cb532c2010-05-22 00:37:18 +0000565 Link(const ToolChain &TC) : Tool("dragonfly::Link", "linker", TC) {}
Daniel Dunbarcc912342009-05-02 18:28:39 +0000566
Daniel Dunbarcc912342009-05-02 18:28:39 +0000567 virtual bool hasIntegratedCPP() const { return false; }
Chad Rosierbee5a1d2012-03-07 00:30:40 +0000568 virtual bool isLinkJob() const { return true; }
Daniel Dunbarcc912342009-05-02 18:28:39 +0000569
570 virtual void ConstructJob(Compilation &C, const JobAction &JA,
Mike Stump11289f42009-09-09 15:08:12 +0000571 const InputInfo &Output,
572 const InputInfoList &Inputs,
573 const ArgList &TCArgs,
Daniel Dunbarcc912342009-05-02 18:28:39 +0000574 const char *LinkingOutput) const;
575 };
Edward O'Callaghan856e4ff2009-08-22 01:06:46 +0000576} // end namespace dragonfly
Daniel Dunbarcc912342009-05-02 18:28:39 +0000577
Michael J. Spencerb186bc32010-08-21 21:55:07 +0000578 /// Visual studio tools.
579namespace visualstudio {
580 class LLVM_LIBRARY_VISIBILITY Link : public Tool {
581 public:
582 Link(const ToolChain &TC) : Tool("visualstudio::Link", "linker", TC) {}
583
584 virtual bool hasIntegratedCPP() const { return false; }
Chad Rosierbee5a1d2012-03-07 00:30:40 +0000585 virtual bool isLinkJob() const { return true; }
Michael J. Spencerb186bc32010-08-21 21:55:07 +0000586
587 virtual void ConstructJob(Compilation &C, const JobAction &JA,
588 const InputInfo &Output,
589 const InputInfoList &Inputs,
590 const ArgList &TCArgs,
591 const char *LinkingOutput) const;
592 };
593} // end namespace visualstudio
594
Daniel Dunbar5903d8c2009-03-17 22:07:58 +0000595} // end namespace toolchains
596} // end namespace driver
597} // end namespace clang
598
Edward O'Callaghan856e4ff2009-08-22 01:06:46 +0000599#endif // CLANG_LIB_DRIVER_TOOLS_H_