blob: 846c83403484022bd38804d4285a4ab7c60f92cf [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;
Benjamin Kramerb164d672013-02-22 20:55:17 +000080 void AddX86TargetArgs(const ArgList &Args, ArgStringList &CmdArgs) const;
Daniel Dunbar4f5e79c2010-05-20 21:30:13 +000081 public:
Daniel Dunbar1cb532c2010-05-22 00:37:18 +000082 ClangAs(const ToolChain &TC) : Tool("clang::as",
83 "clang integrated assembler", TC) {}
Daniel Dunbar4f5e79c2010-05-20 21:30:13 +000084
Daniel Dunbar4f5e79c2010-05-20 21:30:13 +000085 virtual bool hasGoodDiagnostics() const { return true; }
86 virtual bool hasIntegratedAssembler() const { return false; }
87 virtual bool hasIntegratedCPP() const { return false; }
88
89 virtual void ConstructJob(Compilation &C, const JobAction &JA,
Daniel Dunbar4f5e79c2010-05-20 21:30:13 +000090 const InputInfo &Output,
91 const InputInfoList &Inputs,
92 const ArgList &TCArgs,
93 const char *LinkingOutput) const;
94 };
95
Daniel Dunbar82116f82009-03-17 22:45:24 +000096 /// gcc - Generic GCC tool implementations.
97namespace gcc {
Duncan Sandsaf260b92010-05-11 20:16:05 +000098 class LLVM_LIBRARY_VISIBILITY Common : public Tool {
Daniel Dunbar5903d8c2009-03-17 22:07:58 +000099 public:
Daniel Dunbar1cb532c2010-05-22 00:37:18 +0000100 Common(const char *Name, const char *ShortName,
101 const ToolChain &TC) : Tool(Name, ShortName, TC) {}
Daniel Dunbara3246a02009-03-18 08:07:30 +0000102
103 virtual void ConstructJob(Compilation &C, const JobAction &JA,
Mike Stump11289f42009-09-09 15:08:12 +0000104 const InputInfo &Output,
105 const InputInfoList &Inputs,
106 const ArgList &TCArgs,
Daniel Dunbara3246a02009-03-18 08:07:30 +0000107 const char *LinkingOutput) const;
108
109 /// RenderExtraToolArgs - Render any arguments necessary to force
110 /// the particular tool mode.
Daniel Dunbar4e295052010-01-25 22:35:08 +0000111 virtual void RenderExtraToolArgs(const JobAction &JA,
112 ArgStringList &CmdArgs) const = 0;
Daniel Dunbara3246a02009-03-18 08:07:30 +0000113 };
114
Mike Stump11289f42009-09-09 15:08:12 +0000115
Duncan Sandsaf260b92010-05-11 20:16:05 +0000116 class LLVM_LIBRARY_VISIBILITY Preprocess : public Common {
Daniel Dunbara3246a02009-03-18 08:07:30 +0000117 public:
Daniel Dunbar1cb532c2010-05-22 00:37:18 +0000118 Preprocess(const ToolChain &TC) : Common("gcc::Preprocess",
119 "gcc preprocessor", TC) {}
Daniel Dunbar5903d8c2009-03-17 22:07:58 +0000120
Daniel Dunbar3d45e172010-04-06 17:07:49 +0000121 virtual bool hasGoodDiagnostics() const { return true; }
Daniel Dunbar5903d8c2009-03-17 22:07:58 +0000122 virtual bool hasIntegratedCPP() const { return false; }
Daniel Dunbar1a093d22009-03-18 06:00:36 +0000123
Daniel Dunbar4e295052010-01-25 22:35:08 +0000124 virtual void RenderExtraToolArgs(const JobAction &JA,
125 ArgStringList &CmdArgs) const;
Daniel Dunbar5903d8c2009-03-17 22:07:58 +0000126 };
127
Duncan Sandsaf260b92010-05-11 20:16:05 +0000128 class LLVM_LIBRARY_VISIBILITY Precompile : public Common {
Daniel Dunbar5903d8c2009-03-17 22:07:58 +0000129 public:
Daniel Dunbar1cb532c2010-05-22 00:37:18 +0000130 Precompile(const ToolChain &TC) : Common("gcc::Precompile",
131 "gcc precompile", TC) {}
Daniel Dunbar5903d8c2009-03-17 22:07:58 +0000132
Daniel Dunbar3d45e172010-04-06 17:07:49 +0000133 virtual bool hasGoodDiagnostics() const { return true; }
Daniel Dunbar5903d8c2009-03-17 22:07:58 +0000134 virtual bool hasIntegratedCPP() const { return true; }
Daniel Dunbar1a093d22009-03-18 06:00:36 +0000135
Daniel Dunbar4e295052010-01-25 22:35:08 +0000136 virtual void RenderExtraToolArgs(const JobAction &JA,
137 ArgStringList &CmdArgs) const;
Daniel Dunbar5903d8c2009-03-17 22:07:58 +0000138 };
139
Duncan Sandsaf260b92010-05-11 20:16:05 +0000140 class LLVM_LIBRARY_VISIBILITY Compile : public Common {
Daniel Dunbar5903d8c2009-03-17 22:07:58 +0000141 public:
Daniel Dunbar1cb532c2010-05-22 00:37:18 +0000142 Compile(const ToolChain &TC) : Common("gcc::Compile",
143 "gcc frontend", TC) {}
Daniel Dunbar5903d8c2009-03-17 22:07:58 +0000144
Daniel Dunbar3d45e172010-04-06 17:07:49 +0000145 virtual bool hasGoodDiagnostics() const { return true; }
Daniel Dunbar5903d8c2009-03-17 22:07:58 +0000146 virtual bool hasIntegratedCPP() const { return true; }
Daniel Dunbar1a093d22009-03-18 06:00:36 +0000147
Daniel Dunbar4e295052010-01-25 22:35:08 +0000148 virtual void RenderExtraToolArgs(const JobAction &JA,
149 ArgStringList &CmdArgs) const;
Daniel Dunbar5903d8c2009-03-17 22:07:58 +0000150 };
151
Duncan Sandsaf260b92010-05-11 20:16:05 +0000152 class LLVM_LIBRARY_VISIBILITY Assemble : public Common {
Daniel Dunbar5903d8c2009-03-17 22:07:58 +0000153 public:
Daniel Dunbar1cb532c2010-05-22 00:37:18 +0000154 Assemble(const ToolChain &TC) : Common("gcc::Assemble",
155 "assembler (via gcc)", TC) {}
Daniel Dunbar5903d8c2009-03-17 22:07:58 +0000156
Daniel Dunbar5903d8c2009-03-17 22:07:58 +0000157 virtual bool hasIntegratedCPP() const { return false; }
Daniel Dunbar1a093d22009-03-18 06:00:36 +0000158
Daniel Dunbar4e295052010-01-25 22:35:08 +0000159 virtual void RenderExtraToolArgs(const JobAction &JA,
160 ArgStringList &CmdArgs) const;
Daniel Dunbar5903d8c2009-03-17 22:07:58 +0000161 };
162
Duncan Sandsaf260b92010-05-11 20:16:05 +0000163 class LLVM_LIBRARY_VISIBILITY Link : public Common {
Daniel Dunbar5903d8c2009-03-17 22:07:58 +0000164 public:
Daniel Dunbar1cb532c2010-05-22 00:37:18 +0000165 Link(const ToolChain &TC) : Common("gcc::Link",
166 "linker (via gcc)", TC) {}
Daniel Dunbar5903d8c2009-03-17 22:07:58 +0000167
Daniel Dunbar5903d8c2009-03-17 22:07:58 +0000168 virtual bool hasIntegratedCPP() const { return false; }
Chad Rosierbee5a1d2012-03-07 00:30:40 +0000169 virtual bool isLinkJob() const { return true; }
Daniel Dunbar1a093d22009-03-18 06:00:36 +0000170
Daniel Dunbar4e295052010-01-25 22:35:08 +0000171 virtual void RenderExtraToolArgs(const JobAction &JA,
172 ArgStringList &CmdArgs) const;
Daniel Dunbar5903d8c2009-03-17 22:07:58 +0000173 };
Daniel Dunbar82116f82009-03-17 22:45:24 +0000174} // end namespace gcc
Daniel Dunbar5903d8c2009-03-17 22:07:58 +0000175
Tony Linthicum76329bf2011-12-12 21:14:55 +0000176namespace hexagon {
177 // For Hexagon, we do not need to instantiate tools for PreProcess, PreCompile and Compile.
178 // We simply use "clang -cc1" for those actions.
179 class LLVM_LIBRARY_VISIBILITY Assemble : public Tool {
180 public:
181 Assemble(const ToolChain &TC) : Tool("hexagon::Assemble",
182 "hexagon-as", TC) {}
183
184 virtual bool hasIntegratedCPP() const { return false; }
185
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
195 class LLVM_LIBRARY_VISIBILITY Link : public Tool {
196 public:
197 Link(const ToolChain &TC) : Tool("hexagon::Link",
198 "hexagon-ld", TC) {}
199
200 virtual bool hasIntegratedCPP() const { return false; }
Chad Rosierbee5a1d2012-03-07 00:30:40 +0000201 virtual bool isLinkJob() const { return true; }
Tony Linthicum76329bf2011-12-12 21:14:55 +0000202
203 virtual void RenderExtraToolArgs(const JobAction &JA,
204 ArgStringList &CmdArgs) const;
205 virtual void ConstructJob(Compilation &C, const JobAction &JA,
206 const InputInfo &Output,
207 const InputInfoList &Inputs,
208 const ArgList &TCArgs,
209 const char *LinkingOutput) const;
210 };
211} // end namespace hexagon.
212
213
Daniel Dunbar64ed5e32009-03-20 00:52:38 +0000214namespace darwin {
Rafael Espindoladcbf6982012-10-31 18:51:07 +0000215 llvm::Triple::ArchType getArchTypeForDarwinArchName(StringRef Str);
216
Duncan Sandsaf260b92010-05-11 20:16:05 +0000217 class LLVM_LIBRARY_VISIBILITY DarwinTool : public Tool {
David Blaikie68e081d2011-12-20 02:48:34 +0000218 virtual void anchor();
Daniel Dunbare9ded432009-09-09 18:36:20 +0000219 protected:
220 void AddDarwinArch(const ArgList &Args, ArgStringList &CmdArgs) const;
Daniel Dunbare9ded432009-09-09 18:36:20 +0000221
222 const toolchains::Darwin &getDarwinToolChain() const {
223 return reinterpret_cast<const toolchains::Darwin&>(getToolChain());
224 }
225
226 public:
Daniel Dunbar1cb532c2010-05-22 00:37:18 +0000227 DarwinTool(const char *Name, const char *ShortName,
228 const ToolChain &TC) : Tool(Name, ShortName, TC) {}
Daniel Dunbare9ded432009-09-09 18:36:20 +0000229 };
230
Duncan Sandsaf260b92010-05-11 20:16:05 +0000231 class LLVM_LIBRARY_VISIBILITY Assemble : public DarwinTool {
Daniel Dunbarbe220842009-03-20 16:06:39 +0000232 public:
Daniel Dunbar1cb532c2010-05-22 00:37:18 +0000233 Assemble(const ToolChain &TC) : DarwinTool("darwin::Assemble",
234 "assembler", TC) {}
Daniel Dunbarbe220842009-03-20 16:06:39 +0000235
Daniel Dunbarbe220842009-03-20 16:06:39 +0000236 virtual bool hasIntegratedCPP() const { return false; }
237
238 virtual void ConstructJob(Compilation &C, const JobAction &JA,
Mike Stump11289f42009-09-09 15:08:12 +0000239 const InputInfo &Output,
240 const InputInfoList &Inputs,
241 const ArgList &TCArgs,
Daniel Dunbarbe220842009-03-20 16:06:39 +0000242 const char *LinkingOutput) const;
243 };
244
Duncan Sandsaf260b92010-05-11 20:16:05 +0000245 class LLVM_LIBRARY_VISIBILITY Link : public DarwinTool {
Bill Wendling3b2000f2012-10-02 18:02:50 +0000246 bool NeedsTempPath(const InputInfoList &Inputs) const;
Daniel Dunbarccbc4522010-09-09 21:51:05 +0000247 void AddLinkArgs(Compilation &C, const ArgList &Args,
Bill Wendling3b2000f2012-10-02 18:02:50 +0000248 ArgStringList &CmdArgs, const InputInfoList &Inputs) const;
Daniel Dunbarc1964212009-03-26 16:23:12 +0000249
Daniel Dunbarc1964212009-03-26 16:23:12 +0000250 public:
Daniel Dunbar1cb532c2010-05-22 00:37:18 +0000251 Link(const ToolChain &TC) : DarwinTool("darwin::Link", "linker", TC) {}
Daniel Dunbarc1964212009-03-26 16:23:12 +0000252
Daniel Dunbarc1964212009-03-26 16:23:12 +0000253 virtual bool hasIntegratedCPP() const { return false; }
Chad Rosierbee5a1d2012-03-07 00:30:40 +0000254 virtual bool isLinkJob() const { return true; }
Daniel Dunbarc1964212009-03-26 16:23:12 +0000255
256 virtual void ConstructJob(Compilation &C, const JobAction &JA,
Mike Stump11289f42009-09-09 15:08:12 +0000257 const InputInfo &Output,
258 const InputInfoList &Inputs,
259 const ArgList &TCArgs,
Daniel Dunbarc1964212009-03-26 16:23:12 +0000260 const char *LinkingOutput) const;
261 };
262
Duncan Sandsaf260b92010-05-11 20:16:05 +0000263 class LLVM_LIBRARY_VISIBILITY Lipo : public DarwinTool {
Daniel Dunbar64ed5e32009-03-20 00:52:38 +0000264 public:
Daniel Dunbar1cb532c2010-05-22 00:37:18 +0000265 Lipo(const ToolChain &TC) : DarwinTool("darwin::Lipo", "lipo", TC) {}
Daniel Dunbar64ed5e32009-03-20 00:52:38 +0000266
Daniel Dunbar64ed5e32009-03-20 00:52:38 +0000267 virtual bool hasIntegratedCPP() const { return false; }
268
269 virtual void ConstructJob(Compilation &C, const JobAction &JA,
Mike Stump11289f42009-09-09 15:08:12 +0000270 const InputInfo &Output,
271 const InputInfoList &Inputs,
272 const ArgList &TCArgs,
Daniel Dunbar64ed5e32009-03-20 00:52:38 +0000273 const char *LinkingOutput) const;
274 };
Daniel Dunbar88299622010-06-04 18:28:36 +0000275
276 class LLVM_LIBRARY_VISIBILITY Dsymutil : public DarwinTool {
277 public:
278 Dsymutil(const ToolChain &TC) : DarwinTool("darwin::Dsymutil",
279 "dsymutil", TC) {}
280
Daniel Dunbar88299622010-06-04 18:28:36 +0000281 virtual bool hasIntegratedCPP() const { return false; }
Chad Rosierdbf46a12013-02-01 18:30:26 +0000282 virtual bool isDsymutilJob() const { return true; }
Daniel Dunbar88299622010-06-04 18:28:36 +0000283
284 virtual void ConstructJob(Compilation &C, const JobAction &JA,
Daniel Dunbar88299622010-06-04 18:28:36 +0000285 const InputInfo &Output,
286 const InputInfoList &Inputs,
287 const ArgList &TCArgs,
288 const char *LinkingOutput) const;
289 };
Eric Christopher551ef452011-08-23 17:56:55 +0000290
291 class LLVM_LIBRARY_VISIBILITY VerifyDebug : public DarwinTool {
292 public:
293 VerifyDebug(const ToolChain &TC) : DarwinTool("darwin::VerifyDebug",
Eric Christopher45f2e712012-12-18 00:31:10 +0000294 "dwarfdump", TC) {}
Eric Christopher551ef452011-08-23 17:56:55 +0000295
296 virtual bool hasIntegratedCPP() const { return false; }
297
298 virtual void ConstructJob(Compilation &C, const JobAction &JA,
Eric Christopher45f2e712012-12-18 00:31:10 +0000299 const InputInfo &Output,
300 const InputInfoList &Inputs,
301 const ArgList &TCArgs,
302 const char *LinkingOutput) const;
Eric Christopher551ef452011-08-23 17:56:55 +0000303 };
304
Daniel Dunbar64ed5e32009-03-20 00:52:38 +0000305}
306
Daniel Dunbar10de9e62009-06-29 20:52:51 +0000307 /// openbsd -- Directly call GNU Binutils assembler and linker
308namespace openbsd {
Duncan Sandsaf260b92010-05-11 20:16:05 +0000309 class LLVM_LIBRARY_VISIBILITY Assemble : public Tool {
Daniel Dunbar10de9e62009-06-29 20:52:51 +0000310 public:
Daniel Dunbar1cb532c2010-05-22 00:37:18 +0000311 Assemble(const ToolChain &TC) : Tool("openbsd::Assemble", "assembler",
312 TC) {}
Daniel Dunbar10de9e62009-06-29 20:52:51 +0000313
Daniel Dunbar10de9e62009-06-29 20:52:51 +0000314 virtual bool hasIntegratedCPP() const { return false; }
315
316 virtual void ConstructJob(Compilation &C, const JobAction &JA,
Mike Stump11289f42009-09-09 15:08:12 +0000317 const InputInfo &Output,
318 const InputInfoList &Inputs,
319 const ArgList &TCArgs,
Daniel Dunbar10de9e62009-06-29 20:52:51 +0000320 const char *LinkingOutput) const;
321 };
Duncan Sandsaf260b92010-05-11 20:16:05 +0000322 class LLVM_LIBRARY_VISIBILITY Link : public Tool {
Daniel Dunbar10de9e62009-06-29 20:52:51 +0000323 public:
Daniel Dunbar1cb532c2010-05-22 00:37:18 +0000324 Link(const ToolChain &TC) : Tool("openbsd::Link", "linker", TC) {}
Daniel Dunbar10de9e62009-06-29 20:52:51 +0000325
Daniel Dunbar10de9e62009-06-29 20:52:51 +0000326 virtual bool hasIntegratedCPP() const { return false; }
Chad Rosierbee5a1d2012-03-07 00:30:40 +0000327 virtual bool isLinkJob() const { return true; }
Daniel Dunbar10de9e62009-06-29 20:52:51 +0000328
329 virtual void ConstructJob(Compilation &C, const JobAction &JA,
Mike Stump11289f42009-09-09 15:08:12 +0000330 const InputInfo &Output,
331 const InputInfoList &Inputs,
332 const ArgList &TCArgs,
Daniel Dunbar10de9e62009-06-29 20:52:51 +0000333 const char *LinkingOutput) const;
334 };
Edward O'Callaghan856e4ff2009-08-22 01:06:46 +0000335} // end namespace openbsd
Daniel Dunbar10de9e62009-06-29 20:52:51 +0000336
Eli Friedman9fa28852012-08-08 23:57:20 +0000337 /// bitrig -- Directly call GNU Binutils assembler and linker
338namespace bitrig {
339 class LLVM_LIBRARY_VISIBILITY Assemble : public Tool {
340 public:
341 Assemble(const ToolChain &TC) : Tool("bitrig::Assemble", "assembler",
342 TC) {}
343
344 virtual bool hasIntegratedCPP() const { return false; }
345
346 virtual void ConstructJob(Compilation &C, const JobAction &JA,
347 const InputInfo &Output,
348 const InputInfoList &Inputs,
349 const ArgList &TCArgs,
350 const char *LinkingOutput) const;
351 };
352 class LLVM_LIBRARY_VISIBILITY Link : public Tool {
353 public:
354 Link(const ToolChain &TC) : Tool("bitrig::Link", "linker", TC) {}
355
356 virtual bool hasIntegratedCPP() const { return false; }
357 virtual bool isLinkJob() const { return true; }
358
359 virtual void ConstructJob(Compilation &C, const JobAction &JA,
360 const InputInfo &Output,
361 const InputInfoList &Inputs,
362 const ArgList &TCArgs,
363 const char *LinkingOutput) const;
364 };
365} // end namespace bitrig
366
Daniel Dunbar8eb473c2009-03-31 17:45:15 +0000367 /// freebsd -- Directly call GNU Binutils assembler and linker
368namespace freebsd {
Duncan Sandsaf260b92010-05-11 20:16:05 +0000369 class LLVM_LIBRARY_VISIBILITY Assemble : public Tool {
Daniel Dunbar8eb473c2009-03-31 17:45:15 +0000370 public:
Daniel Dunbar1cb532c2010-05-22 00:37:18 +0000371 Assemble(const ToolChain &TC) : Tool("freebsd::Assemble", "assembler",
372 TC) {}
Daniel Dunbar8eb473c2009-03-31 17:45:15 +0000373
Daniel Dunbar8eb473c2009-03-31 17:45:15 +0000374 virtual bool hasIntegratedCPP() const { return false; }
375
376 virtual void ConstructJob(Compilation &C, const JobAction &JA,
Mike Stump11289f42009-09-09 15:08:12 +0000377 const InputInfo &Output,
378 const InputInfoList &Inputs,
379 const ArgList &TCArgs,
Daniel Dunbar8eb473c2009-03-31 17:45:15 +0000380 const char *LinkingOutput) const;
381 };
Duncan Sandsaf260b92010-05-11 20:16:05 +0000382 class LLVM_LIBRARY_VISIBILITY Link : public Tool {
Daniel Dunbard854c8d2009-04-01 19:36:32 +0000383 public:
Daniel Dunbar1cb532c2010-05-22 00:37:18 +0000384 Link(const ToolChain &TC) : Tool("freebsd::Link", "linker", TC) {}
Daniel Dunbard854c8d2009-04-01 19:36:32 +0000385
Daniel Dunbard854c8d2009-04-01 19:36:32 +0000386 virtual bool hasIntegratedCPP() const { return false; }
Chad Rosierbee5a1d2012-03-07 00:30:40 +0000387 virtual bool isLinkJob() const { return true; }
Daniel Dunbard854c8d2009-04-01 19:36:32 +0000388
389 virtual void ConstructJob(Compilation &C, const JobAction &JA,
Mike Stump11289f42009-09-09 15:08:12 +0000390 const InputInfo &Output,
391 const InputInfoList &Inputs,
392 const ArgList &TCArgs,
Daniel Dunbard854c8d2009-04-01 19:36:32 +0000393 const char *LinkingOutput) const;
394 };
Edward O'Callaghan856e4ff2009-08-22 01:06:46 +0000395} // end namespace freebsd
396
Benjamin Kramer24f1d3e2011-02-02 18:59:27 +0000397 /// netbsd -- Directly call GNU Binutils assembler and linker
398namespace netbsd {
399 class LLVM_LIBRARY_VISIBILITY Assemble : public Tool {
Joerg Sonnenberger637603a2011-05-16 13:35:02 +0000400
Benjamin Kramer24f1d3e2011-02-02 18:59:27 +0000401 public:
Joerg Sonnenbergerd64c60e2012-01-26 22:27:52 +0000402 Assemble(const ToolChain &TC)
403 : Tool("netbsd::Assemble", "assembler", TC) {}
Benjamin Kramer24f1d3e2011-02-02 18:59:27 +0000404
405 virtual bool hasIntegratedCPP() const { return false; }
406
407 virtual void ConstructJob(Compilation &C, const JobAction &JA,
408 const InputInfo &Output,
409 const InputInfoList &Inputs,
410 const ArgList &TCArgs,
411 const char *LinkingOutput) const;
412 };
413 class LLVM_LIBRARY_VISIBILITY Link : public Tool {
Joerg Sonnenberger637603a2011-05-16 13:35:02 +0000414
Benjamin Kramer24f1d3e2011-02-02 18:59:27 +0000415 public:
Joerg Sonnenbergerd64c60e2012-01-26 22:27:52 +0000416 Link(const ToolChain &TC)
417 : Tool("netbsd::Link", "linker", TC) {}
Benjamin Kramer24f1d3e2011-02-02 18:59:27 +0000418
419 virtual bool hasIntegratedCPP() const { return false; }
Chad Rosierbee5a1d2012-03-07 00:30:40 +0000420 virtual bool isLinkJob() const { return true; }
Benjamin Kramer24f1d3e2011-02-02 18:59:27 +0000421
422 virtual void ConstructJob(Compilation &C, const JobAction &JA,
423 const InputInfo &Output,
424 const InputInfoList &Inputs,
425 const ArgList &TCArgs,
426 const char *LinkingOutput) const;
427 };
428} // end namespace netbsd
429
Rafael Espindola92b00932010-08-10 00:25:48 +0000430 /// linux -- Directly call GNU Binutils assembler and linker
431namespace linuxtools {
432 class LLVM_LIBRARY_VISIBILITY Assemble : public Tool {
433 public:
434 Assemble(const ToolChain &TC) : Tool("linux::Assemble", "assembler",
435 TC) {}
436
437 virtual bool hasIntegratedCPP() const { return false; }
438
439 virtual void ConstructJob(Compilation &C, const JobAction &JA,
440 const InputInfo &Output,
441 const InputInfoList &Inputs,
442 const ArgList &TCArgs,
443 const char *LinkingOutput) const;
444 };
Rafael Espindolac8f008f2010-11-07 20:14:31 +0000445 class LLVM_LIBRARY_VISIBILITY Link : public Tool {
446 public:
447 Link(const ToolChain &TC) : Tool("linux::Link", "linker", TC) {}
448
449 virtual bool hasIntegratedCPP() const { return false; }
Chad Rosierbee5a1d2012-03-07 00:30:40 +0000450 virtual bool isLinkJob() const { return true; }
Rafael Espindolac8f008f2010-11-07 20:14:31 +0000451
452 virtual void ConstructJob(Compilation &C, const JobAction &JA,
453 const InputInfo &Output,
454 const InputInfoList &Inputs,
455 const ArgList &TCArgs,
456 const char *LinkingOutput) const;
457 };
Rafael Espindola92b00932010-08-10 00:25:48 +0000458}
Chris Lattner3e2ee142010-07-07 16:01:42 +0000459 /// minix -- Directly call GNU Binutils assembler and linker
460namespace minix {
461 class LLVM_LIBRARY_VISIBILITY Assemble : public Tool {
462 public:
463 Assemble(const ToolChain &TC) : Tool("minix::Assemble", "assembler",
464 TC) {}
465
Chris Lattner3e2ee142010-07-07 16:01:42 +0000466 virtual bool hasIntegratedCPP() const { return false; }
467
468 virtual void ConstructJob(Compilation &C, const JobAction &JA,
Chris Lattner3e2ee142010-07-07 16:01:42 +0000469 const InputInfo &Output,
470 const InputInfoList &Inputs,
471 const ArgList &TCArgs,
472 const char *LinkingOutput) const;
473 };
474 class LLVM_LIBRARY_VISIBILITY Link : public Tool {
475 public:
476 Link(const ToolChain &TC) : Tool("minix::Link", "linker", TC) {}
477
Chris Lattner3e2ee142010-07-07 16:01:42 +0000478 virtual bool hasIntegratedCPP() const { return false; }
Chad Rosierbee5a1d2012-03-07 00:30:40 +0000479 virtual bool isLinkJob() const { return true; }
Chris Lattner3e2ee142010-07-07 16:01:42 +0000480
481 virtual void ConstructJob(Compilation &C, const JobAction &JA,
Chris Lattner3e2ee142010-07-07 16:01:42 +0000482 const InputInfo &Output,
483 const InputInfoList &Inputs,
484 const ArgList &TCArgs,
485 const char *LinkingOutput) const;
486 };
487} // end namespace minix
488
David Chisnallf571cde2012-02-15 13:39:01 +0000489 /// solaris -- Directly call Solaris assembler and linker
490namespace solaris {
491 class LLVM_LIBRARY_VISIBILITY Assemble : public Tool {
492 public:
493 Assemble(const ToolChain &TC) : Tool("solaris::Assemble", "assembler",
494 TC) {}
495
496 virtual bool hasIntegratedCPP() const { return false; }
497
498 virtual void ConstructJob(Compilation &C, const JobAction &JA,
499 const InputInfo &Output,
500 const InputInfoList &Inputs,
501 const ArgList &TCArgs,
502 const char *LinkingOutput) const;
503 };
504 class LLVM_LIBRARY_VISIBILITY Link : public Tool {
505 public:
506 Link(const ToolChain &TC) : Tool("solaris::Link", "linker", TC) {}
507
508 virtual bool hasIntegratedCPP() const { return false; }
Chad Rosierbee5a1d2012-03-07 00:30:40 +0000509 virtual bool isLinkJob() const { return true; }
David Chisnallf571cde2012-02-15 13:39:01 +0000510
511 virtual void ConstructJob(Compilation &C, const JobAction &JA,
512 const InputInfo &Output,
513 const InputInfoList &Inputs,
514 const ArgList &TCArgs,
515 const char *LinkingOutput) const;
516 };
David Chisnalla9ed5d72012-02-15 16:25:46 +0000517} // end namespace solaris
David Chisnallf571cde2012-02-15 13:39:01 +0000518
Edward O'Callaghan856e4ff2009-08-22 01:06:46 +0000519 /// auroraux -- Directly call GNU Binutils assembler and linker
520namespace auroraux {
Duncan Sandsaf260b92010-05-11 20:16:05 +0000521 class LLVM_LIBRARY_VISIBILITY Assemble : public Tool {
Edward O'Callaghan856e4ff2009-08-22 01:06:46 +0000522 public:
Daniel Dunbar1cb532c2010-05-22 00:37:18 +0000523 Assemble(const ToolChain &TC) : Tool("auroraux::Assemble", "assembler",
524 TC) {}
Edward O'Callaghan856e4ff2009-08-22 01:06:46 +0000525
Edward O'Callaghan856e4ff2009-08-22 01:06:46 +0000526 virtual bool hasIntegratedCPP() const { return false; }
527
528 virtual void ConstructJob(Compilation &C, const JobAction &JA,
Mike Stump11289f42009-09-09 15:08:12 +0000529 const InputInfo &Output,
530 const InputInfoList &Inputs,
531 const ArgList &TCArgs,
Edward O'Callaghan856e4ff2009-08-22 01:06:46 +0000532 const char *LinkingOutput) const;
533 };
Duncan Sandsaf260b92010-05-11 20:16:05 +0000534 class LLVM_LIBRARY_VISIBILITY Link : public Tool {
Edward O'Callaghan856e4ff2009-08-22 01:06:46 +0000535 public:
Daniel Dunbar1cb532c2010-05-22 00:37:18 +0000536 Link(const ToolChain &TC) : Tool("auroraux::Link", "linker", TC) {}
Edward O'Callaghan856e4ff2009-08-22 01:06:46 +0000537
Edward O'Callaghan856e4ff2009-08-22 01:06:46 +0000538 virtual bool hasIntegratedCPP() const { return false; }
Chad Rosierbee5a1d2012-03-07 00:30:40 +0000539 virtual bool isLinkJob() const { return true; }
Edward O'Callaghan856e4ff2009-08-22 01:06:46 +0000540
541 virtual void ConstructJob(Compilation &C, const JobAction &JA,
Mike Stump11289f42009-09-09 15:08:12 +0000542 const InputInfo &Output,
543 const InputInfoList &Inputs,
544 const ArgList &TCArgs,
Edward O'Callaghan856e4ff2009-08-22 01:06:46 +0000545 const char *LinkingOutput) const;
546 };
547} // end namespace auroraux
Daniel Dunbar8eb473c2009-03-31 17:45:15 +0000548
Daniel Dunbarcc912342009-05-02 18:28:39 +0000549 /// dragonfly -- Directly call GNU Binutils assembler and linker
550namespace dragonfly {
Duncan Sandsaf260b92010-05-11 20:16:05 +0000551 class LLVM_LIBRARY_VISIBILITY Assemble : public Tool {
Daniel Dunbarcc912342009-05-02 18:28:39 +0000552 public:
Daniel Dunbar1cb532c2010-05-22 00:37:18 +0000553 Assemble(const ToolChain &TC) : Tool("dragonfly::Assemble", "assembler",
554 TC) {}
Daniel Dunbarcc912342009-05-02 18:28:39 +0000555
Daniel Dunbarcc912342009-05-02 18:28:39 +0000556 virtual bool hasIntegratedCPP() const { return false; }
557
558 virtual void ConstructJob(Compilation &C, const JobAction &JA,
Mike Stump11289f42009-09-09 15:08:12 +0000559 const InputInfo &Output,
560 const InputInfoList &Inputs,
561 const ArgList &TCArgs,
Daniel Dunbarcc912342009-05-02 18:28:39 +0000562 const char *LinkingOutput) const;
563 };
Duncan Sandsaf260b92010-05-11 20:16:05 +0000564 class LLVM_LIBRARY_VISIBILITY Link : public Tool {
Daniel Dunbarcc912342009-05-02 18:28:39 +0000565 public:
Daniel Dunbar1cb532c2010-05-22 00:37:18 +0000566 Link(const ToolChain &TC) : Tool("dragonfly::Link", "linker", TC) {}
Daniel Dunbarcc912342009-05-02 18:28:39 +0000567
Daniel Dunbarcc912342009-05-02 18:28:39 +0000568 virtual bool hasIntegratedCPP() const { return false; }
Chad Rosierbee5a1d2012-03-07 00:30:40 +0000569 virtual bool isLinkJob() const { return true; }
Daniel Dunbarcc912342009-05-02 18:28:39 +0000570
571 virtual void ConstructJob(Compilation &C, const JobAction &JA,
Mike Stump11289f42009-09-09 15:08:12 +0000572 const InputInfo &Output,
573 const InputInfoList &Inputs,
574 const ArgList &TCArgs,
Daniel Dunbarcc912342009-05-02 18:28:39 +0000575 const char *LinkingOutput) const;
576 };
Edward O'Callaghan856e4ff2009-08-22 01:06:46 +0000577} // end namespace dragonfly
Daniel Dunbarcc912342009-05-02 18:28:39 +0000578
Michael J. Spencerb186bc32010-08-21 21:55:07 +0000579 /// Visual studio tools.
580namespace visualstudio {
581 class LLVM_LIBRARY_VISIBILITY Link : public Tool {
582 public:
583 Link(const ToolChain &TC) : Tool("visualstudio::Link", "linker", TC) {}
584
585 virtual bool hasIntegratedCPP() const { return false; }
Chad Rosierbee5a1d2012-03-07 00:30:40 +0000586 virtual bool isLinkJob() const { return true; }
Michael J. Spencerb186bc32010-08-21 21:55:07 +0000587
588 virtual void ConstructJob(Compilation &C, const JobAction &JA,
589 const InputInfo &Output,
590 const InputInfoList &Inputs,
591 const ArgList &TCArgs,
592 const char *LinkingOutput) const;
593 };
594} // end namespace visualstudio
595
Daniel Dunbar5903d8c2009-03-17 22:07:58 +0000596} // end namespace toolchains
597} // end namespace driver
598} // end namespace clang
599
Edward O'Callaghan856e4ff2009-08-22 01:06:46 +0000600#endif // CLANG_LIB_DRIVER_TOOLS_H_