blob: dcfd3114ddbba08ab4aa1a7614f6f03945bb1d1b [file] [log] [blame]
Daniel Dunbar9c073ff2009-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 Dunbar40f12652009-03-29 17:08:39 +000014#include "clang/Driver/Types.h"
Daniel Dunbarb488c1d2009-03-18 08:07:30 +000015#include "clang/Driver/Util.h"
Joerg Sonnenberger182564c2011-05-16 13:35:02 +000016#include "llvm/ADT/Triple.h"
Daniel Dunbar9c073ff2009-03-17 22:07:58 +000017#include "llvm/Support/Compiler.h"
18
19namespace clang {
John McCall260611a2012-06-20 06:18:46 +000020 class ObjCRuntime;
21
Daniel Dunbar9c073ff2009-03-17 22:07:58 +000022namespace driver {
Douglas Gregordf91ef32009-04-18 00:34:01 +000023 class Driver;
24
Daniel Dunbar02633b52009-03-26 16:23:12 +000025namespace toolchains {
Daniel Dunbarf3955282009-09-04 18:34:51 +000026 class Darwin;
Daniel Dunbar02633b52009-03-26 16:23:12 +000027}
28
Daniel Dunbar985b8252009-03-17 22:18:43 +000029namespace tools {
Daniel Dunbar9c073ff2009-03-17 22:07:58 +000030
Daniel Dunbar20a9aa52010-05-20 21:30:13 +000031 /// \brief Clang compiler tool.
Duncan Sands92dd1912010-05-11 20:16:05 +000032 class LLVM_LIBRARY_VISIBILITY Clang : public Tool {
Eric Christopher27e2b982012-12-18 00:31:10 +000033 public:
Bob Wilson66b8a662012-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 Christopher27e2b982012-12-18 00:31:10 +000041 private:
Peter Collingbourne54db68b2011-11-06 00:40:05 +000042 void AddPreprocessingOptions(Compilation &C,
43 const Driver &D,
Douglas Gregordf91ef32009-04-18 00:34:01 +000044 const ArgList &Args,
Daniel Dunbarc21c4852009-04-08 23:54:23 +000045 ArgStringList &CmdArgs,
46 const InputInfo &Output,
47 const InputInfoList &Inputs) const;
48
Daniel Dunbarfa41d692011-03-17 17:10:06 +000049 void AddARMTargetArgs(const ArgList &Args, ArgStringList &CmdArgs,
50 bool KernelOrKext) const;
Eric Christophered734732010-03-02 02:41:08 +000051 void AddMIPSTargetArgs(const ArgList &Args, ArgStringList &CmdArgs) const;
Hal Finkel02a84272012-06-11 22:35:19 +000052 void AddPPCTargetArgs(const ArgList &Args, ArgStringList &CmdArgs) const;
Bruno Cardoso Lopes9284d212010-11-09 17:21:19 +000053 void AddSparcTargetArgs(const ArgList &Args, ArgStringList &CmdArgs) const;
Daniel Dunbar6acda162009-09-09 22:33:08 +000054 void AddX86TargetArgs(const ArgList &Args, ArgStringList &CmdArgs) const;
Tony Linthicum96319392011-12-12 21:14:55 +000055 void AddHexagonTargetArgs (const ArgList &Args, ArgStringList &CmdArgs) const;
Daniel Dunbar6acda162009-09-09 22:33:08 +000056
John McCall260611a2012-06-20 06:18:46 +000057 enum RewriteKind { RK_None, RK_Fragile, RK_NonFragile };
58
59 ObjCRuntime AddObjCRuntimeArgs(const ArgList &args, ArgStringList &cmdArgs,
60 RewriteKind rewrite) const;
61
Daniel Dunbar9c073ff2009-03-17 22:07:58 +000062 public:
Daniel Dunbar30382042010-05-22 00:37:18 +000063 Clang(const ToolChain &TC) : Tool("clang", "clang frontend", TC) {}
Daniel Dunbar9c073ff2009-03-17 22:07:58 +000064
Daniel Dunbar60a53f22010-04-06 17:07:49 +000065 virtual bool hasGoodDiagnostics() const { return true; }
Daniel Dunbar8767cbc2010-02-03 03:07:56 +000066 virtual bool hasIntegratedAssembler() const { return true; }
Daniel Dunbar9c073ff2009-03-17 22:07:58 +000067 virtual bool hasIntegratedCPP() const { return true; }
Daniel Dunbar47ac7d22009-03-18 06:00:36 +000068
69 virtual void ConstructJob(Compilation &C, const JobAction &JA,
Mike Stump1eb44332009-09-09 15:08:12 +000070 const InputInfo &Output,
71 const InputInfoList &Inputs,
72 const ArgList &TCArgs,
Daniel Dunbar47ac7d22009-03-18 06:00:36 +000073 const char *LinkingOutput) const;
Daniel Dunbar9c073ff2009-03-17 22:07:58 +000074 };
75
Daniel Dunbar20a9aa52010-05-20 21:30:13 +000076 /// \brief Clang integrated assembler tool.
77 class LLVM_LIBRARY_VISIBILITY ClangAs : public Tool {
Jim Grosbachfc308292012-02-10 20:37:10 +000078 void AddARMTargetArgs(const ArgList &Args, ArgStringList &CmdArgs) const;
Daniel Dunbar20a9aa52010-05-20 21:30:13 +000079 public:
Daniel Dunbar30382042010-05-22 00:37:18 +000080 ClangAs(const ToolChain &TC) : Tool("clang::as",
81 "clang integrated assembler", TC) {}
Daniel Dunbar20a9aa52010-05-20 21:30:13 +000082
Daniel Dunbar20a9aa52010-05-20 21:30:13 +000083 virtual bool hasGoodDiagnostics() const { return true; }
84 virtual bool hasIntegratedAssembler() const { return false; }
85 virtual bool hasIntegratedCPP() const { return false; }
86
87 virtual void ConstructJob(Compilation &C, const JobAction &JA,
Daniel Dunbar20a9aa52010-05-20 21:30:13 +000088 const InputInfo &Output,
89 const InputInfoList &Inputs,
90 const ArgList &TCArgs,
91 const char *LinkingOutput) const;
92 };
93
Daniel Dunbar31b1e542009-03-17 22:45:24 +000094 /// gcc - Generic GCC tool implementations.
95namespace gcc {
Duncan Sands92dd1912010-05-11 20:16:05 +000096 class LLVM_LIBRARY_VISIBILITY Common : public Tool {
Daniel Dunbar9c073ff2009-03-17 22:07:58 +000097 public:
Daniel Dunbar30382042010-05-22 00:37:18 +000098 Common(const char *Name, const char *ShortName,
99 const ToolChain &TC) : Tool(Name, ShortName, TC) {}
Daniel Dunbarb488c1d2009-03-18 08:07:30 +0000100
101 virtual void ConstructJob(Compilation &C, const JobAction &JA,
Mike Stump1eb44332009-09-09 15:08:12 +0000102 const InputInfo &Output,
103 const InputInfoList &Inputs,
104 const ArgList &TCArgs,
Daniel Dunbarb488c1d2009-03-18 08:07:30 +0000105 const char *LinkingOutput) const;
106
107 /// RenderExtraToolArgs - Render any arguments necessary to force
108 /// the particular tool mode.
Daniel Dunbar82b51cc2010-01-25 22:35:08 +0000109 virtual void RenderExtraToolArgs(const JobAction &JA,
110 ArgStringList &CmdArgs) const = 0;
Daniel Dunbarb488c1d2009-03-18 08:07:30 +0000111 };
112
Mike Stump1eb44332009-09-09 15:08:12 +0000113
Duncan Sands92dd1912010-05-11 20:16:05 +0000114 class LLVM_LIBRARY_VISIBILITY Preprocess : public Common {
Daniel Dunbarb488c1d2009-03-18 08:07:30 +0000115 public:
Daniel Dunbar30382042010-05-22 00:37:18 +0000116 Preprocess(const ToolChain &TC) : Common("gcc::Preprocess",
117 "gcc preprocessor", TC) {}
Daniel Dunbar9c073ff2009-03-17 22:07:58 +0000118
Daniel Dunbar60a53f22010-04-06 17:07:49 +0000119 virtual bool hasGoodDiagnostics() const { return true; }
Daniel Dunbar9c073ff2009-03-17 22:07:58 +0000120 virtual bool hasIntegratedCPP() const { return false; }
Daniel Dunbar47ac7d22009-03-18 06:00:36 +0000121
Daniel Dunbar82b51cc2010-01-25 22:35:08 +0000122 virtual void RenderExtraToolArgs(const JobAction &JA,
123 ArgStringList &CmdArgs) const;
Daniel Dunbar9c073ff2009-03-17 22:07:58 +0000124 };
125
Duncan Sands92dd1912010-05-11 20:16:05 +0000126 class LLVM_LIBRARY_VISIBILITY Precompile : public Common {
Daniel Dunbar9c073ff2009-03-17 22:07:58 +0000127 public:
Daniel Dunbar30382042010-05-22 00:37:18 +0000128 Precompile(const ToolChain &TC) : Common("gcc::Precompile",
129 "gcc precompile", TC) {}
Daniel Dunbar9c073ff2009-03-17 22:07:58 +0000130
Daniel Dunbar60a53f22010-04-06 17:07:49 +0000131 virtual bool hasGoodDiagnostics() const { return true; }
Daniel Dunbar9c073ff2009-03-17 22:07:58 +0000132 virtual bool hasIntegratedCPP() const { return true; }
Daniel Dunbar47ac7d22009-03-18 06:00:36 +0000133
Daniel Dunbar82b51cc2010-01-25 22:35:08 +0000134 virtual void RenderExtraToolArgs(const JobAction &JA,
135 ArgStringList &CmdArgs) const;
Daniel Dunbar9c073ff2009-03-17 22:07:58 +0000136 };
137
Duncan Sands92dd1912010-05-11 20:16:05 +0000138 class LLVM_LIBRARY_VISIBILITY Compile : public Common {
Daniel Dunbar9c073ff2009-03-17 22:07:58 +0000139 public:
Daniel Dunbar30382042010-05-22 00:37:18 +0000140 Compile(const ToolChain &TC) : Common("gcc::Compile",
141 "gcc frontend", TC) {}
Daniel Dunbar9c073ff2009-03-17 22:07:58 +0000142
Daniel Dunbar60a53f22010-04-06 17:07:49 +0000143 virtual bool hasGoodDiagnostics() const { return true; }
Daniel Dunbar9c073ff2009-03-17 22:07:58 +0000144 virtual bool hasIntegratedCPP() const { return true; }
Daniel Dunbar47ac7d22009-03-18 06:00:36 +0000145
Daniel Dunbar82b51cc2010-01-25 22:35:08 +0000146 virtual void RenderExtraToolArgs(const JobAction &JA,
147 ArgStringList &CmdArgs) const;
Daniel Dunbar9c073ff2009-03-17 22:07:58 +0000148 };
149
Duncan Sands92dd1912010-05-11 20:16:05 +0000150 class LLVM_LIBRARY_VISIBILITY Assemble : public Common {
Daniel Dunbar9c073ff2009-03-17 22:07:58 +0000151 public:
Daniel Dunbar30382042010-05-22 00:37:18 +0000152 Assemble(const ToolChain &TC) : Common("gcc::Assemble",
153 "assembler (via gcc)", TC) {}
Daniel Dunbar9c073ff2009-03-17 22:07:58 +0000154
Daniel Dunbar9c073ff2009-03-17 22:07:58 +0000155 virtual bool hasIntegratedCPP() const { return false; }
Daniel Dunbar47ac7d22009-03-18 06:00:36 +0000156
Daniel Dunbar82b51cc2010-01-25 22:35:08 +0000157 virtual void RenderExtraToolArgs(const JobAction &JA,
158 ArgStringList &CmdArgs) const;
Daniel Dunbar9c073ff2009-03-17 22:07:58 +0000159 };
160
Duncan Sands92dd1912010-05-11 20:16:05 +0000161 class LLVM_LIBRARY_VISIBILITY Link : public Common {
Daniel Dunbar9c073ff2009-03-17 22:07:58 +0000162 public:
Daniel Dunbar30382042010-05-22 00:37:18 +0000163 Link(const ToolChain &TC) : Common("gcc::Link",
164 "linker (via gcc)", TC) {}
Daniel Dunbar9c073ff2009-03-17 22:07:58 +0000165
Daniel Dunbar9c073ff2009-03-17 22:07:58 +0000166 virtual bool hasIntegratedCPP() const { return false; }
Chad Rosier8ba9a622012-03-07 00:30:40 +0000167 virtual bool isLinkJob() const { return true; }
Daniel Dunbar47ac7d22009-03-18 06:00:36 +0000168
Daniel Dunbar82b51cc2010-01-25 22:35:08 +0000169 virtual void RenderExtraToolArgs(const JobAction &JA,
170 ArgStringList &CmdArgs) const;
Daniel Dunbar9c073ff2009-03-17 22:07:58 +0000171 };
Daniel Dunbar31b1e542009-03-17 22:45:24 +0000172} // end namespace gcc
Daniel Dunbar9c073ff2009-03-17 22:07:58 +0000173
Tony Linthicum96319392011-12-12 21:14:55 +0000174namespace hexagon {
175 // For Hexagon, we do not need to instantiate tools for PreProcess, PreCompile and Compile.
176 // We simply use "clang -cc1" for those actions.
177 class LLVM_LIBRARY_VISIBILITY Assemble : public Tool {
178 public:
179 Assemble(const ToolChain &TC) : Tool("hexagon::Assemble",
180 "hexagon-as", TC) {}
181
182 virtual bool hasIntegratedCPP() const { return false; }
183
184 virtual void RenderExtraToolArgs(const JobAction &JA,
185 ArgStringList &CmdArgs) const;
186 virtual void ConstructJob(Compilation &C, const JobAction &JA,
187 const InputInfo &Output,
188 const InputInfoList &Inputs,
189 const ArgList &TCArgs,
190 const char *LinkingOutput) const;
191 };
192
193 class LLVM_LIBRARY_VISIBILITY Link : public Tool {
194 public:
195 Link(const ToolChain &TC) : Tool("hexagon::Link",
196 "hexagon-ld", TC) {}
197
198 virtual bool hasIntegratedCPP() const { return false; }
Chad Rosier8ba9a622012-03-07 00:30:40 +0000199 virtual bool isLinkJob() const { return true; }
Tony Linthicum96319392011-12-12 21:14:55 +0000200
201 virtual void RenderExtraToolArgs(const JobAction &JA,
202 ArgStringList &CmdArgs) const;
203 virtual void ConstructJob(Compilation &C, const JobAction &JA,
204 const InputInfo &Output,
205 const InputInfoList &Inputs,
206 const ArgList &TCArgs,
207 const char *LinkingOutput) const;
208 };
209} // end namespace hexagon.
210
211
Daniel Dunbarff7488d2009-03-20 00:52:38 +0000212namespace darwin {
Rafael Espindolacfed8282012-10-31 18:51:07 +0000213 llvm::Triple::ArchType getArchTypeForDarwinArchName(StringRef Str);
214
Duncan Sands92dd1912010-05-11 20:16:05 +0000215 class LLVM_LIBRARY_VISIBILITY DarwinTool : public Tool {
David Blaikie99ba9e32011-12-20 02:48:34 +0000216 virtual void anchor();
Daniel Dunbarfbefe6b2009-09-09 18:36:20 +0000217 protected:
218 void AddDarwinArch(const ArgList &Args, ArgStringList &CmdArgs) const;
Daniel Dunbarfbefe6b2009-09-09 18:36:20 +0000219
220 const toolchains::Darwin &getDarwinToolChain() const {
221 return reinterpret_cast<const toolchains::Darwin&>(getToolChain());
222 }
223
224 public:
Daniel Dunbar30382042010-05-22 00:37:18 +0000225 DarwinTool(const char *Name, const char *ShortName,
226 const ToolChain &TC) : Tool(Name, ShortName, TC) {}
Daniel Dunbarfbefe6b2009-09-09 18:36:20 +0000227 };
228
Duncan Sands92dd1912010-05-11 20:16:05 +0000229 class LLVM_LIBRARY_VISIBILITY Assemble : public DarwinTool {
Daniel Dunbar8cac5f72009-03-20 16:06:39 +0000230 public:
Daniel Dunbar30382042010-05-22 00:37:18 +0000231 Assemble(const ToolChain &TC) : DarwinTool("darwin::Assemble",
232 "assembler", TC) {}
Daniel Dunbar8cac5f72009-03-20 16:06:39 +0000233
Daniel Dunbar8cac5f72009-03-20 16:06:39 +0000234 virtual bool hasIntegratedCPP() const { return false; }
235
236 virtual void ConstructJob(Compilation &C, const JobAction &JA,
Mike Stump1eb44332009-09-09 15:08:12 +0000237 const InputInfo &Output,
238 const InputInfoList &Inputs,
239 const ArgList &TCArgs,
Daniel Dunbar8cac5f72009-03-20 16:06:39 +0000240 const char *LinkingOutput) const;
241 };
242
Duncan Sands92dd1912010-05-11 20:16:05 +0000243 class LLVM_LIBRARY_VISIBILITY Link : public DarwinTool {
Bill Wendling6acf8b42012-10-02 18:02:50 +0000244 bool NeedsTempPath(const InputInfoList &Inputs) const;
Daniel Dunbar748de8e2010-09-09 21:51:05 +0000245 void AddLinkArgs(Compilation &C, const ArgList &Args,
Bill Wendling6acf8b42012-10-02 18:02:50 +0000246 ArgStringList &CmdArgs, const InputInfoList &Inputs) const;
Daniel Dunbar02633b52009-03-26 16:23:12 +0000247
Daniel Dunbar02633b52009-03-26 16:23:12 +0000248 public:
Daniel Dunbar30382042010-05-22 00:37:18 +0000249 Link(const ToolChain &TC) : DarwinTool("darwin::Link", "linker", TC) {}
Daniel Dunbar02633b52009-03-26 16:23:12 +0000250
Daniel Dunbar02633b52009-03-26 16:23:12 +0000251 virtual bool hasIntegratedCPP() const { return false; }
Chad Rosier8ba9a622012-03-07 00:30:40 +0000252 virtual bool isLinkJob() const { return true; }
Daniel Dunbar02633b52009-03-26 16:23:12 +0000253
254 virtual void ConstructJob(Compilation &C, const JobAction &JA,
Mike Stump1eb44332009-09-09 15:08:12 +0000255 const InputInfo &Output,
256 const InputInfoList &Inputs,
257 const ArgList &TCArgs,
Daniel Dunbar02633b52009-03-26 16:23:12 +0000258 const char *LinkingOutput) const;
259 };
260
Duncan Sands92dd1912010-05-11 20:16:05 +0000261 class LLVM_LIBRARY_VISIBILITY Lipo : public DarwinTool {
Daniel Dunbarff7488d2009-03-20 00:52:38 +0000262 public:
Daniel Dunbar30382042010-05-22 00:37:18 +0000263 Lipo(const ToolChain &TC) : DarwinTool("darwin::Lipo", "lipo", TC) {}
Daniel Dunbarff7488d2009-03-20 00:52:38 +0000264
Daniel Dunbarff7488d2009-03-20 00:52:38 +0000265 virtual bool hasIntegratedCPP() const { return false; }
266
267 virtual void ConstructJob(Compilation &C, const JobAction &JA,
Mike Stump1eb44332009-09-09 15:08:12 +0000268 const InputInfo &Output,
269 const InputInfoList &Inputs,
270 const ArgList &TCArgs,
Daniel Dunbarff7488d2009-03-20 00:52:38 +0000271 const char *LinkingOutput) const;
272 };
Daniel Dunbar6e0f2542010-06-04 18:28:36 +0000273
274 class LLVM_LIBRARY_VISIBILITY Dsymutil : public DarwinTool {
275 public:
276 Dsymutil(const ToolChain &TC) : DarwinTool("darwin::Dsymutil",
277 "dsymutil", TC) {}
278
Daniel Dunbar6e0f2542010-06-04 18:28:36 +0000279 virtual bool hasIntegratedCPP() const { return false; }
280
281 virtual void ConstructJob(Compilation &C, const JobAction &JA,
Daniel Dunbar6e0f2542010-06-04 18:28:36 +0000282 const InputInfo &Output,
283 const InputInfoList &Inputs,
284 const ArgList &TCArgs,
285 const char *LinkingOutput) const;
286 };
Eric Christopherf8571862011-08-23 17:56:55 +0000287
288 class LLVM_LIBRARY_VISIBILITY VerifyDebug : public DarwinTool {
289 public:
290 VerifyDebug(const ToolChain &TC) : DarwinTool("darwin::VerifyDebug",
Eric Christopher27e2b982012-12-18 00:31:10 +0000291 "dwarfdump", TC) {}
Eric Christopherf8571862011-08-23 17:56:55 +0000292
293 virtual bool hasIntegratedCPP() const { return false; }
294
295 virtual void ConstructJob(Compilation &C, const JobAction &JA,
Eric Christopher27e2b982012-12-18 00:31:10 +0000296 const InputInfo &Output,
297 const InputInfoList &Inputs,
298 const ArgList &TCArgs,
299 const char *LinkingOutput) const;
Eric Christopherf8571862011-08-23 17:56:55 +0000300 };
301
Daniel Dunbarff7488d2009-03-20 00:52:38 +0000302}
303
Daniel Dunbarf7b8eec2009-06-29 20:52:51 +0000304 /// openbsd -- Directly call GNU Binutils assembler and linker
305namespace openbsd {
Duncan Sands92dd1912010-05-11 20:16:05 +0000306 class LLVM_LIBRARY_VISIBILITY Assemble : public Tool {
Daniel Dunbarf7b8eec2009-06-29 20:52:51 +0000307 public:
Daniel Dunbar30382042010-05-22 00:37:18 +0000308 Assemble(const ToolChain &TC) : Tool("openbsd::Assemble", "assembler",
309 TC) {}
Daniel Dunbarf7b8eec2009-06-29 20:52:51 +0000310
Daniel Dunbarf7b8eec2009-06-29 20:52:51 +0000311 virtual bool hasIntegratedCPP() const { return false; }
312
313 virtual void ConstructJob(Compilation &C, const JobAction &JA,
Mike Stump1eb44332009-09-09 15:08:12 +0000314 const InputInfo &Output,
315 const InputInfoList &Inputs,
316 const ArgList &TCArgs,
Daniel Dunbarf7b8eec2009-06-29 20:52:51 +0000317 const char *LinkingOutput) const;
318 };
Duncan Sands92dd1912010-05-11 20:16:05 +0000319 class LLVM_LIBRARY_VISIBILITY Link : public Tool {
Daniel Dunbarf7b8eec2009-06-29 20:52:51 +0000320 public:
Daniel Dunbar30382042010-05-22 00:37:18 +0000321 Link(const ToolChain &TC) : Tool("openbsd::Link", "linker", TC) {}
Daniel Dunbarf7b8eec2009-06-29 20:52:51 +0000322
Daniel Dunbarf7b8eec2009-06-29 20:52:51 +0000323 virtual bool hasIntegratedCPP() const { return false; }
Chad Rosier8ba9a622012-03-07 00:30:40 +0000324 virtual bool isLinkJob() const { return true; }
Daniel Dunbarf7b8eec2009-06-29 20:52:51 +0000325
326 virtual void ConstructJob(Compilation &C, const JobAction &JA,
Mike Stump1eb44332009-09-09 15:08:12 +0000327 const InputInfo &Output,
328 const InputInfoList &Inputs,
329 const ArgList &TCArgs,
Daniel Dunbarf7b8eec2009-06-29 20:52:51 +0000330 const char *LinkingOutput) const;
331 };
Edward O'Callaghane7925a02009-08-22 01:06:46 +0000332} // end namespace openbsd
Daniel Dunbarf7b8eec2009-06-29 20:52:51 +0000333
Eli Friedman42f74f22012-08-08 23:57:20 +0000334 /// bitrig -- Directly call GNU Binutils assembler and linker
335namespace bitrig {
336 class LLVM_LIBRARY_VISIBILITY Assemble : public Tool {
337 public:
338 Assemble(const ToolChain &TC) : Tool("bitrig::Assemble", "assembler",
339 TC) {}
340
341 virtual bool hasIntegratedCPP() const { return false; }
342
343 virtual void ConstructJob(Compilation &C, const JobAction &JA,
344 const InputInfo &Output,
345 const InputInfoList &Inputs,
346 const ArgList &TCArgs,
347 const char *LinkingOutput) const;
348 };
349 class LLVM_LIBRARY_VISIBILITY Link : public Tool {
350 public:
351 Link(const ToolChain &TC) : Tool("bitrig::Link", "linker", TC) {}
352
353 virtual bool hasIntegratedCPP() const { return false; }
354 virtual bool isLinkJob() const { return true; }
355
356 virtual void ConstructJob(Compilation &C, const JobAction &JA,
357 const InputInfo &Output,
358 const InputInfoList &Inputs,
359 const ArgList &TCArgs,
360 const char *LinkingOutput) const;
361 };
362} // end namespace bitrig
363
Daniel Dunbar68a31d42009-03-31 17:45:15 +0000364 /// freebsd -- Directly call GNU Binutils assembler and linker
365namespace freebsd {
Duncan Sands92dd1912010-05-11 20:16:05 +0000366 class LLVM_LIBRARY_VISIBILITY Assemble : public Tool {
Daniel Dunbar68a31d42009-03-31 17:45:15 +0000367 public:
Daniel Dunbar30382042010-05-22 00:37:18 +0000368 Assemble(const ToolChain &TC) : Tool("freebsd::Assemble", "assembler",
369 TC) {}
Daniel Dunbar68a31d42009-03-31 17:45:15 +0000370
Daniel Dunbar68a31d42009-03-31 17:45:15 +0000371 virtual bool hasIntegratedCPP() const { return false; }
372
373 virtual void ConstructJob(Compilation &C, const JobAction &JA,
Mike Stump1eb44332009-09-09 15:08:12 +0000374 const InputInfo &Output,
375 const InputInfoList &Inputs,
376 const ArgList &TCArgs,
Daniel Dunbar68a31d42009-03-31 17:45:15 +0000377 const char *LinkingOutput) const;
378 };
Duncan Sands92dd1912010-05-11 20:16:05 +0000379 class LLVM_LIBRARY_VISIBILITY Link : public Tool {
Daniel Dunbar008f54a2009-04-01 19:36:32 +0000380 public:
Daniel Dunbar30382042010-05-22 00:37:18 +0000381 Link(const ToolChain &TC) : Tool("freebsd::Link", "linker", TC) {}
Daniel Dunbar008f54a2009-04-01 19:36:32 +0000382
Daniel Dunbar008f54a2009-04-01 19:36:32 +0000383 virtual bool hasIntegratedCPP() const { return false; }
Chad Rosier8ba9a622012-03-07 00:30:40 +0000384 virtual bool isLinkJob() const { return true; }
Daniel Dunbar008f54a2009-04-01 19:36:32 +0000385
386 virtual void ConstructJob(Compilation &C, const JobAction &JA,
Mike Stump1eb44332009-09-09 15:08:12 +0000387 const InputInfo &Output,
388 const InputInfoList &Inputs,
389 const ArgList &TCArgs,
Daniel Dunbar008f54a2009-04-01 19:36:32 +0000390 const char *LinkingOutput) const;
391 };
Edward O'Callaghane7925a02009-08-22 01:06:46 +0000392} // end namespace freebsd
393
Benjamin Kramer8e50a962011-02-02 18:59:27 +0000394 /// netbsd -- Directly call GNU Binutils assembler and linker
395namespace netbsd {
396 class LLVM_LIBRARY_VISIBILITY Assemble : public Tool {
Joerg Sonnenberger182564c2011-05-16 13:35:02 +0000397
Benjamin Kramer8e50a962011-02-02 18:59:27 +0000398 public:
Joerg Sonnenberger1bd91372012-01-26 22:27:52 +0000399 Assemble(const ToolChain &TC)
400 : Tool("netbsd::Assemble", "assembler", TC) {}
Benjamin Kramer8e50a962011-02-02 18:59:27 +0000401
402 virtual bool hasIntegratedCPP() const { return false; }
403
404 virtual void ConstructJob(Compilation &C, const JobAction &JA,
405 const InputInfo &Output,
406 const InputInfoList &Inputs,
407 const ArgList &TCArgs,
408 const char *LinkingOutput) const;
409 };
410 class LLVM_LIBRARY_VISIBILITY Link : public Tool {
Joerg Sonnenberger182564c2011-05-16 13:35:02 +0000411
Benjamin Kramer8e50a962011-02-02 18:59:27 +0000412 public:
Joerg Sonnenberger1bd91372012-01-26 22:27:52 +0000413 Link(const ToolChain &TC)
414 : Tool("netbsd::Link", "linker", TC) {}
Benjamin Kramer8e50a962011-02-02 18:59:27 +0000415
416 virtual bool hasIntegratedCPP() const { return false; }
Chad Rosier8ba9a622012-03-07 00:30:40 +0000417 virtual bool isLinkJob() const { return true; }
Benjamin Kramer8e50a962011-02-02 18:59:27 +0000418
419 virtual void ConstructJob(Compilation &C, const JobAction &JA,
420 const InputInfo &Output,
421 const InputInfoList &Inputs,
422 const ArgList &TCArgs,
423 const char *LinkingOutput) const;
424 };
425} // end namespace netbsd
426
Rafael Espindolaba30bbe2010-08-10 00:25:48 +0000427 /// linux -- Directly call GNU Binutils assembler and linker
428namespace linuxtools {
429 class LLVM_LIBRARY_VISIBILITY Assemble : public Tool {
430 public:
431 Assemble(const ToolChain &TC) : Tool("linux::Assemble", "assembler",
432 TC) {}
433
434 virtual bool hasIntegratedCPP() const { return false; }
435
436 virtual void ConstructJob(Compilation &C, const JobAction &JA,
437 const InputInfo &Output,
438 const InputInfoList &Inputs,
439 const ArgList &TCArgs,
440 const char *LinkingOutput) const;
441 };
Rafael Espindolac1da9812010-11-07 20:14:31 +0000442 class LLVM_LIBRARY_VISIBILITY Link : public Tool {
443 public:
444 Link(const ToolChain &TC) : Tool("linux::Link", "linker", TC) {}
445
446 virtual bool hasIntegratedCPP() const { return false; }
Chad Rosier8ba9a622012-03-07 00:30:40 +0000447 virtual bool isLinkJob() const { return true; }
Rafael Espindolac1da9812010-11-07 20:14:31 +0000448
449 virtual void ConstructJob(Compilation &C, const JobAction &JA,
450 const InputInfo &Output,
451 const InputInfoList &Inputs,
452 const ArgList &TCArgs,
453 const char *LinkingOutput) const;
454 };
Rafael Espindolaba30bbe2010-08-10 00:25:48 +0000455}
Chris Lattner38e317d2010-07-07 16:01:42 +0000456 /// minix -- Directly call GNU Binutils assembler and linker
457namespace minix {
458 class LLVM_LIBRARY_VISIBILITY Assemble : public Tool {
459 public:
460 Assemble(const ToolChain &TC) : Tool("minix::Assemble", "assembler",
461 TC) {}
462
Chris Lattner38e317d2010-07-07 16:01:42 +0000463 virtual bool hasIntegratedCPP() const { return false; }
464
465 virtual void ConstructJob(Compilation &C, const JobAction &JA,
Chris Lattner38e317d2010-07-07 16:01:42 +0000466 const InputInfo &Output,
467 const InputInfoList &Inputs,
468 const ArgList &TCArgs,
469 const char *LinkingOutput) const;
470 };
471 class LLVM_LIBRARY_VISIBILITY Link : public Tool {
472 public:
473 Link(const ToolChain &TC) : Tool("minix::Link", "linker", TC) {}
474
Chris Lattner38e317d2010-07-07 16:01:42 +0000475 virtual bool hasIntegratedCPP() const { return false; }
Chad Rosier8ba9a622012-03-07 00:30:40 +0000476 virtual bool isLinkJob() const { return true; }
Chris Lattner38e317d2010-07-07 16:01:42 +0000477
478 virtual void ConstructJob(Compilation &C, const JobAction &JA,
Chris Lattner38e317d2010-07-07 16:01:42 +0000479 const InputInfo &Output,
480 const InputInfoList &Inputs,
481 const ArgList &TCArgs,
482 const char *LinkingOutput) const;
483 };
484} // end namespace minix
485
David Chisnall31c46902012-02-15 13:39:01 +0000486 /// solaris -- Directly call Solaris assembler and linker
487namespace solaris {
488 class LLVM_LIBRARY_VISIBILITY Assemble : public Tool {
489 public:
490 Assemble(const ToolChain &TC) : Tool("solaris::Assemble", "assembler",
491 TC) {}
492
493 virtual bool hasIntegratedCPP() const { return false; }
494
495 virtual void ConstructJob(Compilation &C, const JobAction &JA,
496 const InputInfo &Output,
497 const InputInfoList &Inputs,
498 const ArgList &TCArgs,
499 const char *LinkingOutput) const;
500 };
501 class LLVM_LIBRARY_VISIBILITY Link : public Tool {
502 public:
503 Link(const ToolChain &TC) : Tool("solaris::Link", "linker", TC) {}
504
505 virtual bool hasIntegratedCPP() const { return false; }
Chad Rosier8ba9a622012-03-07 00:30:40 +0000506 virtual bool isLinkJob() const { return true; }
David Chisnall31c46902012-02-15 13:39:01 +0000507
508 virtual void ConstructJob(Compilation &C, const JobAction &JA,
509 const InputInfo &Output,
510 const InputInfoList &Inputs,
511 const ArgList &TCArgs,
512 const char *LinkingOutput) const;
513 };
David Chisnallbadb6cd2012-02-15 16:25:46 +0000514} // end namespace solaris
David Chisnall31c46902012-02-15 13:39:01 +0000515
Edward O'Callaghane7925a02009-08-22 01:06:46 +0000516 /// auroraux -- Directly call GNU Binutils assembler and linker
517namespace auroraux {
Duncan Sands92dd1912010-05-11 20:16:05 +0000518 class LLVM_LIBRARY_VISIBILITY Assemble : public Tool {
Edward O'Callaghane7925a02009-08-22 01:06:46 +0000519 public:
Daniel Dunbar30382042010-05-22 00:37:18 +0000520 Assemble(const ToolChain &TC) : Tool("auroraux::Assemble", "assembler",
521 TC) {}
Edward O'Callaghane7925a02009-08-22 01:06:46 +0000522
Edward O'Callaghane7925a02009-08-22 01:06:46 +0000523 virtual bool hasIntegratedCPP() const { return false; }
524
525 virtual void ConstructJob(Compilation &C, const JobAction &JA,
Mike Stump1eb44332009-09-09 15:08:12 +0000526 const InputInfo &Output,
527 const InputInfoList &Inputs,
528 const ArgList &TCArgs,
Edward O'Callaghane7925a02009-08-22 01:06:46 +0000529 const char *LinkingOutput) const;
530 };
Duncan Sands92dd1912010-05-11 20:16:05 +0000531 class LLVM_LIBRARY_VISIBILITY Link : public Tool {
Edward O'Callaghane7925a02009-08-22 01:06:46 +0000532 public:
Daniel Dunbar30382042010-05-22 00:37:18 +0000533 Link(const ToolChain &TC) : Tool("auroraux::Link", "linker", TC) {}
Edward O'Callaghane7925a02009-08-22 01:06:46 +0000534
Edward O'Callaghane7925a02009-08-22 01:06:46 +0000535 virtual bool hasIntegratedCPP() const { return false; }
Chad Rosier8ba9a622012-03-07 00:30:40 +0000536 virtual bool isLinkJob() const { return true; }
Edward O'Callaghane7925a02009-08-22 01:06:46 +0000537
538 virtual void ConstructJob(Compilation &C, const JobAction &JA,
Mike Stump1eb44332009-09-09 15:08:12 +0000539 const InputInfo &Output,
540 const InputInfoList &Inputs,
541 const ArgList &TCArgs,
Edward O'Callaghane7925a02009-08-22 01:06:46 +0000542 const char *LinkingOutput) const;
543 };
544} // end namespace auroraux
Daniel Dunbar68a31d42009-03-31 17:45:15 +0000545
Daniel Dunbar11e1b402009-05-02 18:28:39 +0000546 /// dragonfly -- Directly call GNU Binutils assembler and linker
547namespace dragonfly {
Duncan Sands92dd1912010-05-11 20:16:05 +0000548 class LLVM_LIBRARY_VISIBILITY Assemble : public Tool {
Daniel Dunbar11e1b402009-05-02 18:28:39 +0000549 public:
Daniel Dunbar30382042010-05-22 00:37:18 +0000550 Assemble(const ToolChain &TC) : Tool("dragonfly::Assemble", "assembler",
551 TC) {}
Daniel Dunbar11e1b402009-05-02 18:28:39 +0000552
Daniel Dunbar11e1b402009-05-02 18:28:39 +0000553 virtual bool hasIntegratedCPP() const { return false; }
554
555 virtual void ConstructJob(Compilation &C, const JobAction &JA,
Mike Stump1eb44332009-09-09 15:08:12 +0000556 const InputInfo &Output,
557 const InputInfoList &Inputs,
558 const ArgList &TCArgs,
Daniel Dunbar11e1b402009-05-02 18:28:39 +0000559 const char *LinkingOutput) const;
560 };
Duncan Sands92dd1912010-05-11 20:16:05 +0000561 class LLVM_LIBRARY_VISIBILITY Link : public Tool {
Daniel Dunbar11e1b402009-05-02 18:28:39 +0000562 public:
Daniel Dunbar30382042010-05-22 00:37:18 +0000563 Link(const ToolChain &TC) : Tool("dragonfly::Link", "linker", TC) {}
Daniel Dunbar11e1b402009-05-02 18:28:39 +0000564
Daniel Dunbar11e1b402009-05-02 18:28:39 +0000565 virtual bool hasIntegratedCPP() const { return false; }
Chad Rosier8ba9a622012-03-07 00:30:40 +0000566 virtual bool isLinkJob() const { return true; }
Daniel Dunbar11e1b402009-05-02 18:28:39 +0000567
568 virtual void ConstructJob(Compilation &C, const JobAction &JA,
Mike Stump1eb44332009-09-09 15:08:12 +0000569 const InputInfo &Output,
570 const InputInfoList &Inputs,
571 const ArgList &TCArgs,
Daniel Dunbar11e1b402009-05-02 18:28:39 +0000572 const char *LinkingOutput) const;
573 };
Edward O'Callaghane7925a02009-08-22 01:06:46 +0000574} // end namespace dragonfly
Daniel Dunbar11e1b402009-05-02 18:28:39 +0000575
Michael J. Spencerff58e362010-08-21 21:55:07 +0000576 /// Visual studio tools.
577namespace visualstudio {
578 class LLVM_LIBRARY_VISIBILITY Link : public Tool {
579 public:
580 Link(const ToolChain &TC) : Tool("visualstudio::Link", "linker", TC) {}
581
582 virtual bool hasIntegratedCPP() const { return false; }
Chad Rosier8ba9a622012-03-07 00:30:40 +0000583 virtual bool isLinkJob() const { return true; }
Michael J. Spencerff58e362010-08-21 21:55:07 +0000584
585 virtual void ConstructJob(Compilation &C, const JobAction &JA,
586 const InputInfo &Output,
587 const InputInfoList &Inputs,
588 const ArgList &TCArgs,
589 const char *LinkingOutput) const;
590 };
591} // end namespace visualstudio
592
Daniel Dunbar9c073ff2009-03-17 22:07:58 +0000593} // end namespace toolchains
594} // end namespace driver
595} // end namespace clang
596
Edward O'Callaghane7925a02009-08-22 01:06:46 +0000597#endif // CLANG_LIB_DRIVER_TOOLS_H_