blob: d5e98dd24c4882ff650e454b175454094a7c1ffc [file] [log] [blame]
Daniel Dunbar5903d8c2009-03-17 22:07:58 +00001//===--- Tools.h - Tool Implementations -------------------------*- C++ -*-===//
2//
3// The LLVM Compiler Infrastructure
4//
5// This file is distributed under the University of Illinois Open Source
6// License. See LICENSE.TXT for details.
7//
8//===----------------------------------------------------------------------===//
9
10#ifndef CLANG_LIB_DRIVER_TOOLS_H_
11#define CLANG_LIB_DRIVER_TOOLS_H_
12
13#include "clang/Driver/Tool.h"
Daniel Dunbare6adeee2009-03-29 17:08:39 +000014#include "clang/Driver/Types.h"
Daniel Dunbara3246a02009-03-18 08:07:30 +000015#include "clang/Driver/Util.h"
Daniel Dunbar5903d8c2009-03-17 22:07:58 +000016
17#include "llvm/Support/Compiler.h"
18
19namespace clang {
20namespace driver {
Douglas Gregor111af7d2009-04-18 00:34:01 +000021 class Driver;
22
Daniel Dunbarc1964212009-03-26 16:23:12 +000023namespace toolchains {
Daniel Dunbarf0a5b9b2009-09-04 18:34:51 +000024 class Darwin;
Daniel Dunbarc1964212009-03-26 16:23:12 +000025}
26
Daniel Dunbar15abb2e2009-03-17 22:18:43 +000027namespace tools {
Daniel Dunbar5903d8c2009-03-17 22:07:58 +000028
Daniel Dunbar4f5e79c2010-05-20 21:30:13 +000029 /// \brief Clang compiler tool.
Duncan Sandsaf260b92010-05-11 20:16:05 +000030 class LLVM_LIBRARY_VISIBILITY Clang : public Tool {
Douglas Gregor111af7d2009-04-18 00:34:01 +000031 void AddPreprocessingOptions(const Driver &D,
32 const ArgList &Args,
Daniel Dunbard067f7f2009-04-08 23:54:23 +000033 ArgStringList &CmdArgs,
34 const InputInfo &Output,
35 const InputInfoList &Inputs) const;
36
Daniel Dunbar0f5c5422009-09-10 04:57:17 +000037 void AddARMTargetArgs(const ArgList &Args, ArgStringList &CmdArgs) const;
Eric Christopher0b26a612010-03-02 02:41:08 +000038 void AddMIPSTargetArgs(const ArgList &Args, ArgStringList &CmdArgs) const;
Daniel Dunbar3b3191f2009-09-09 22:33:08 +000039 void AddX86TargetArgs(const ArgList &Args, ArgStringList &CmdArgs) const;
40
Daniel Dunbar5903d8c2009-03-17 22:07:58 +000041 public:
Daniel Dunbar1cb532c2010-05-22 00:37:18 +000042 Clang(const ToolChain &TC) : Tool("clang", "clang frontend", TC) {}
Daniel Dunbar5903d8c2009-03-17 22:07:58 +000043
44 virtual bool acceptsPipedInput() const { return true; }
45 virtual bool canPipeOutput() const { return true; }
Daniel Dunbar3d45e172010-04-06 17:07:49 +000046 virtual bool hasGoodDiagnostics() const { return true; }
Daniel Dunbarc4343942010-02-03 03:07:56 +000047 virtual bool hasIntegratedAssembler() const { return true; }
Daniel Dunbar5903d8c2009-03-17 22:07:58 +000048 virtual bool hasIntegratedCPP() const { return true; }
Daniel Dunbar1a093d22009-03-18 06:00:36 +000049
50 virtual void ConstructJob(Compilation &C, const JobAction &JA,
Daniel Dunbar04c4c2c2009-03-18 07:06:02 +000051 Job &Dest,
Mike Stump11289f42009-09-09 15:08:12 +000052 const InputInfo &Output,
53 const InputInfoList &Inputs,
54 const ArgList &TCArgs,
Daniel Dunbar1a093d22009-03-18 06:00:36 +000055 const char *LinkingOutput) const;
Daniel Dunbar5903d8c2009-03-17 22:07:58 +000056 };
57
Daniel Dunbar4f5e79c2010-05-20 21:30:13 +000058 /// \brief Clang integrated assembler tool.
59 class LLVM_LIBRARY_VISIBILITY ClangAs : public Tool {
60 public:
Daniel Dunbar1cb532c2010-05-22 00:37:18 +000061 ClangAs(const ToolChain &TC) : Tool("clang::as",
62 "clang integrated assembler", TC) {}
Daniel Dunbar4f5e79c2010-05-20 21:30:13 +000063
64 virtual bool acceptsPipedInput() const { return true; }
65 virtual bool canPipeOutput() const { return true; }
66 virtual bool hasGoodDiagnostics() const { return true; }
67 virtual bool hasIntegratedAssembler() const { return false; }
68 virtual bool hasIntegratedCPP() const { return false; }
69
70 virtual void ConstructJob(Compilation &C, const JobAction &JA,
71 Job &Dest,
72 const InputInfo &Output,
73 const InputInfoList &Inputs,
74 const ArgList &TCArgs,
75 const char *LinkingOutput) const;
76 };
77
Daniel Dunbar82116f82009-03-17 22:45:24 +000078 /// gcc - Generic GCC tool implementations.
79namespace gcc {
Duncan Sandsaf260b92010-05-11 20:16:05 +000080 class LLVM_LIBRARY_VISIBILITY Common : public Tool {
Daniel Dunbar5903d8c2009-03-17 22:07:58 +000081 public:
Daniel Dunbar1cb532c2010-05-22 00:37:18 +000082 Common(const char *Name, const char *ShortName,
83 const ToolChain &TC) : Tool(Name, ShortName, TC) {}
Daniel Dunbara3246a02009-03-18 08:07:30 +000084
85 virtual void ConstructJob(Compilation &C, const JobAction &JA,
86 Job &Dest,
Mike Stump11289f42009-09-09 15:08:12 +000087 const InputInfo &Output,
88 const InputInfoList &Inputs,
89 const ArgList &TCArgs,
Daniel Dunbara3246a02009-03-18 08:07:30 +000090 const char *LinkingOutput) const;
91
92 /// RenderExtraToolArgs - Render any arguments necessary to force
93 /// the particular tool mode.
Daniel Dunbar4e295052010-01-25 22:35:08 +000094 virtual void RenderExtraToolArgs(const JobAction &JA,
95 ArgStringList &CmdArgs) const = 0;
Daniel Dunbara3246a02009-03-18 08:07:30 +000096 };
97
Mike Stump11289f42009-09-09 15:08:12 +000098
Duncan Sandsaf260b92010-05-11 20:16:05 +000099 class LLVM_LIBRARY_VISIBILITY Preprocess : public Common {
Daniel Dunbara3246a02009-03-18 08:07:30 +0000100 public:
Daniel Dunbar1cb532c2010-05-22 00:37:18 +0000101 Preprocess(const ToolChain &TC) : Common("gcc::Preprocess",
102 "gcc preprocessor", TC) {}
Daniel Dunbar5903d8c2009-03-17 22:07:58 +0000103
104 virtual bool acceptsPipedInput() const { return true; }
105 virtual bool canPipeOutput() const { return true; }
Daniel Dunbar3d45e172010-04-06 17:07:49 +0000106 virtual bool hasGoodDiagnostics() const { return true; }
Daniel Dunbar5903d8c2009-03-17 22:07:58 +0000107 virtual bool hasIntegratedCPP() const { return false; }
Daniel Dunbar1a093d22009-03-18 06:00:36 +0000108
Daniel Dunbar4e295052010-01-25 22:35:08 +0000109 virtual void RenderExtraToolArgs(const JobAction &JA,
110 ArgStringList &CmdArgs) const;
Daniel Dunbar5903d8c2009-03-17 22:07:58 +0000111 };
112
Duncan Sandsaf260b92010-05-11 20:16:05 +0000113 class LLVM_LIBRARY_VISIBILITY Precompile : public Common {
Daniel Dunbar5903d8c2009-03-17 22:07:58 +0000114 public:
Daniel Dunbar1cb532c2010-05-22 00:37:18 +0000115 Precompile(const ToolChain &TC) : Common("gcc::Precompile",
116 "gcc precompile", TC) {}
Daniel Dunbar5903d8c2009-03-17 22:07:58 +0000117
118 virtual bool acceptsPipedInput() const { return true; }
119 virtual bool canPipeOutput() const { return false; }
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 true; }
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 Compile : public Common {
Daniel Dunbar5903d8c2009-03-17 22:07:58 +0000128 public:
Daniel Dunbar1cb532c2010-05-22 00:37:18 +0000129 Compile(const ToolChain &TC) : Common("gcc::Compile",
130 "gcc frontend", TC) {}
Daniel Dunbar5903d8c2009-03-17 22:07:58 +0000131
132 virtual bool acceptsPipedInput() const { return true; }
133 virtual bool canPipeOutput() const { return true; }
Daniel Dunbar3d45e172010-04-06 17:07:49 +0000134 virtual bool hasGoodDiagnostics() const { return true; }
Daniel Dunbar5903d8c2009-03-17 22:07:58 +0000135 virtual bool hasIntegratedCPP() const { return true; }
Daniel Dunbar1a093d22009-03-18 06:00:36 +0000136
Daniel Dunbar4e295052010-01-25 22:35:08 +0000137 virtual void RenderExtraToolArgs(const JobAction &JA,
138 ArgStringList &CmdArgs) const;
Daniel Dunbar5903d8c2009-03-17 22:07:58 +0000139 };
140
Duncan Sandsaf260b92010-05-11 20:16:05 +0000141 class LLVM_LIBRARY_VISIBILITY Assemble : public Common {
Daniel Dunbar5903d8c2009-03-17 22:07:58 +0000142 public:
Daniel Dunbar1cb532c2010-05-22 00:37:18 +0000143 Assemble(const ToolChain &TC) : Common("gcc::Assemble",
144 "assembler (via gcc)", TC) {}
Daniel Dunbar5903d8c2009-03-17 22:07:58 +0000145
146 virtual bool acceptsPipedInput() const { return true; }
147 virtual bool canPipeOutput() const { return false; }
148 virtual bool hasIntegratedCPP() const { return false; }
Daniel Dunbar1a093d22009-03-18 06:00:36 +0000149
Daniel Dunbar4e295052010-01-25 22:35:08 +0000150 virtual void RenderExtraToolArgs(const JobAction &JA,
151 ArgStringList &CmdArgs) const;
Daniel Dunbar5903d8c2009-03-17 22:07:58 +0000152 };
153
Duncan Sandsaf260b92010-05-11 20:16:05 +0000154 class LLVM_LIBRARY_VISIBILITY Link : public Common {
Daniel Dunbar5903d8c2009-03-17 22:07:58 +0000155 public:
Daniel Dunbar1cb532c2010-05-22 00:37:18 +0000156 Link(const ToolChain &TC) : Common("gcc::Link",
157 "linker (via gcc)", TC) {}
Daniel Dunbar5903d8c2009-03-17 22:07:58 +0000158
159 virtual bool acceptsPipedInput() const { return false; }
160 virtual bool canPipeOutput() const { return false; }
161 virtual bool hasIntegratedCPP() const { return false; }
Daniel Dunbar1a093d22009-03-18 06:00:36 +0000162
Daniel Dunbar4e295052010-01-25 22:35:08 +0000163 virtual void RenderExtraToolArgs(const JobAction &JA,
164 ArgStringList &CmdArgs) const;
Daniel Dunbar5903d8c2009-03-17 22:07:58 +0000165 };
Daniel Dunbar82116f82009-03-17 22:45:24 +0000166} // end namespace gcc
Daniel Dunbar5903d8c2009-03-17 22:07:58 +0000167
Daniel Dunbar64ed5e32009-03-20 00:52:38 +0000168namespace darwin {
Duncan Sandsaf260b92010-05-11 20:16:05 +0000169 class LLVM_LIBRARY_VISIBILITY DarwinTool : public Tool {
Daniel Dunbare9ded432009-09-09 18:36:20 +0000170 protected:
171 void AddDarwinArch(const ArgList &Args, ArgStringList &CmdArgs) const;
Daniel Dunbare9ded432009-09-09 18:36:20 +0000172
173 const toolchains::Darwin &getDarwinToolChain() const {
174 return reinterpret_cast<const toolchains::Darwin&>(getToolChain());
175 }
176
177 public:
Daniel Dunbar1cb532c2010-05-22 00:37:18 +0000178 DarwinTool(const char *Name, const char *ShortName,
179 const ToolChain &TC) : Tool(Name, ShortName, TC) {}
Daniel Dunbare9ded432009-09-09 18:36:20 +0000180 };
181
Duncan Sandsaf260b92010-05-11 20:16:05 +0000182 class LLVM_LIBRARY_VISIBILITY CC1 : public DarwinTool {
Daniel Dunbar52e96cc2009-03-30 00:34:04 +0000183 public:
Mike Stump11289f42009-09-09 15:08:12 +0000184 static const char *getBaseInputName(const ArgList &Args,
Daniel Dunbar52e96cc2009-03-30 00:34:04 +0000185 const InputInfoList &Input);
Mike Stump11289f42009-09-09 15:08:12 +0000186 static const char *getBaseInputStem(const ArgList &Args,
Daniel Dunbar52e96cc2009-03-30 00:34:04 +0000187 const InputInfoList &Input);
Mike Stump11289f42009-09-09 15:08:12 +0000188 static const char *getDependencyFileName(const ArgList &Args,
Daniel Dunbar52e96cc2009-03-30 00:34:04 +0000189 const InputInfoList &Inputs);
190
Daniel Dunbare6adeee2009-03-29 17:08:39 +0000191 protected:
192 const char *getCC1Name(types::ID Type) const;
193
Daniel Dunbarafec1f52009-03-29 18:40:18 +0000194 void AddCC1Args(const ArgList &Args, ArgStringList &CmdArgs) const;
Daniel Dunbare6adeee2009-03-29 17:08:39 +0000195 void AddCC1OptionsArgs(const ArgList &Args, ArgStringList &CmdArgs,
196 const InputInfoList &Inputs,
Daniel Dunbarafec1f52009-03-29 18:40:18 +0000197 const ArgStringList &OutputArgs) const;
Daniel Dunbare6adeee2009-03-29 17:08:39 +0000198 void AddCPPOptionsArgs(const ArgList &Args, ArgStringList &CmdArgs,
199 const InputInfoList &Inputs,
Daniel Dunbarafec1f52009-03-29 18:40:18 +0000200 const ArgStringList &OutputArgs) const;
Mike Stump11289f42009-09-09 15:08:12 +0000201 void AddCPPUniqueOptionsArgs(const ArgList &Args,
Daniel Dunbarafec1f52009-03-29 18:40:18 +0000202 ArgStringList &CmdArgs,
203 const InputInfoList &Inputs) const;
204 void AddCPPArgs(const ArgList &Args, ArgStringList &CmdArgs) const;
Daniel Dunbare6adeee2009-03-29 17:08:39 +0000205
206 public:
Daniel Dunbar1cb532c2010-05-22 00:37:18 +0000207 CC1(const char *Name, const char *ShortName,
208 const ToolChain &TC) : DarwinTool(Name, ShortName, TC) {}
Daniel Dunbare6adeee2009-03-29 17:08:39 +0000209
210 virtual bool acceptsPipedInput() const { return true; }
211 virtual bool canPipeOutput() const { return true; }
Daniel Dunbar3d45e172010-04-06 17:07:49 +0000212 virtual bool hasGoodDiagnostics() const { return true; }
Daniel Dunbare6adeee2009-03-29 17:08:39 +0000213 virtual bool hasIntegratedCPP() const { return true; }
214 };
215
Duncan Sandsaf260b92010-05-11 20:16:05 +0000216 class LLVM_LIBRARY_VISIBILITY Preprocess : public CC1 {
Daniel Dunbare6adeee2009-03-29 17:08:39 +0000217 public:
Daniel Dunbar1cb532c2010-05-22 00:37:18 +0000218 Preprocess(const ToolChain &TC) : CC1("darwin::Preprocess",
219 "gcc preprocessor", TC) {}
Daniel Dunbare6adeee2009-03-29 17:08:39 +0000220
221 virtual void ConstructJob(Compilation &C, const JobAction &JA,
222 Job &Dest,
Mike Stump11289f42009-09-09 15:08:12 +0000223 const InputInfo &Output,
224 const InputInfoList &Inputs,
225 const ArgList &TCArgs,
Daniel Dunbare6adeee2009-03-29 17:08:39 +0000226 const char *LinkingOutput) const;
227 };
228
Duncan Sandsaf260b92010-05-11 20:16:05 +0000229 class LLVM_LIBRARY_VISIBILITY Compile : public CC1 {
Daniel Dunbare6adeee2009-03-29 17:08:39 +0000230 public:
Daniel Dunbar1cb532c2010-05-22 00:37:18 +0000231 Compile(const ToolChain &TC) : CC1("darwin::Compile", "gcc frontend", TC) {}
Daniel Dunbare6adeee2009-03-29 17:08:39 +0000232
233 virtual void ConstructJob(Compilation &C, const JobAction &JA,
234 Job &Dest,
Mike Stump11289f42009-09-09 15:08:12 +0000235 const InputInfo &Output,
236 const InputInfoList &Inputs,
237 const ArgList &TCArgs,
Daniel Dunbare6adeee2009-03-29 17:08:39 +0000238 const char *LinkingOutput) const;
239 };
240
Duncan Sandsaf260b92010-05-11 20:16:05 +0000241 class LLVM_LIBRARY_VISIBILITY Assemble : public DarwinTool {
Daniel Dunbarbe220842009-03-20 16:06:39 +0000242 public:
Daniel Dunbar1cb532c2010-05-22 00:37:18 +0000243 Assemble(const ToolChain &TC) : DarwinTool("darwin::Assemble",
244 "assembler", TC) {}
Daniel Dunbarbe220842009-03-20 16:06:39 +0000245
246 virtual bool acceptsPipedInput() const { return true; }
247 virtual bool canPipeOutput() const { return false; }
248 virtual bool hasIntegratedCPP() const { return false; }
249
250 virtual void ConstructJob(Compilation &C, const JobAction &JA,
251 Job &Dest,
Mike Stump11289f42009-09-09 15:08:12 +0000252 const InputInfo &Output,
253 const InputInfoList &Inputs,
254 const ArgList &TCArgs,
Daniel Dunbarbe220842009-03-20 16:06:39 +0000255 const char *LinkingOutput) const;
256 };
257
Duncan Sandsaf260b92010-05-11 20:16:05 +0000258 class LLVM_LIBRARY_VISIBILITY Link : public DarwinTool {
Daniel Dunbarc1964212009-03-26 16:23:12 +0000259 void AddLinkArgs(const ArgList &Args, ArgStringList &CmdArgs) const;
260
Daniel Dunbarc1964212009-03-26 16:23:12 +0000261 public:
Daniel Dunbar1cb532c2010-05-22 00:37:18 +0000262 Link(const ToolChain &TC) : DarwinTool("darwin::Link", "linker", TC) {}
Daniel Dunbarc1964212009-03-26 16:23:12 +0000263
264 virtual bool acceptsPipedInput() const { return false; }
265 virtual bool canPipeOutput() const { return false; }
266 virtual bool hasIntegratedCPP() const { return false; }
267
268 virtual void ConstructJob(Compilation &C, const JobAction &JA,
269 Job &Dest,
Mike Stump11289f42009-09-09 15:08:12 +0000270 const InputInfo &Output,
271 const InputInfoList &Inputs,
272 const ArgList &TCArgs,
Daniel Dunbarc1964212009-03-26 16:23:12 +0000273 const char *LinkingOutput) const;
274 };
275
Duncan Sandsaf260b92010-05-11 20:16:05 +0000276 class LLVM_LIBRARY_VISIBILITY Lipo : public DarwinTool {
Daniel Dunbar64ed5e32009-03-20 00:52:38 +0000277 public:
Daniel Dunbar1cb532c2010-05-22 00:37:18 +0000278 Lipo(const ToolChain &TC) : DarwinTool("darwin::Lipo", "lipo", TC) {}
Daniel Dunbar64ed5e32009-03-20 00:52:38 +0000279
280 virtual bool acceptsPipedInput() const { return false; }
281 virtual bool canPipeOutput() const { return false; }
282 virtual bool hasIntegratedCPP() const { return false; }
283
284 virtual void ConstructJob(Compilation &C, const JobAction &JA,
285 Job &Dest,
Mike Stump11289f42009-09-09 15:08:12 +0000286 const InputInfo &Output,
287 const InputInfoList &Inputs,
288 const ArgList &TCArgs,
Daniel Dunbar64ed5e32009-03-20 00:52:38 +0000289 const char *LinkingOutput) const;
290 };
291}
292
Daniel Dunbar10de9e62009-06-29 20:52:51 +0000293 /// openbsd -- Directly call GNU Binutils assembler and linker
294namespace openbsd {
Duncan Sandsaf260b92010-05-11 20:16:05 +0000295 class LLVM_LIBRARY_VISIBILITY Assemble : public Tool {
Daniel Dunbar10de9e62009-06-29 20:52:51 +0000296 public:
Daniel Dunbar1cb532c2010-05-22 00:37:18 +0000297 Assemble(const ToolChain &TC) : Tool("openbsd::Assemble", "assembler",
298 TC) {}
Daniel Dunbar10de9e62009-06-29 20:52:51 +0000299
300 virtual bool acceptsPipedInput() const { return true; }
301 virtual bool canPipeOutput() const { return true; }
302 virtual bool hasIntegratedCPP() const { return false; }
303
304 virtual void ConstructJob(Compilation &C, const JobAction &JA,
305 Job &Dest,
Mike Stump11289f42009-09-09 15:08:12 +0000306 const InputInfo &Output,
307 const InputInfoList &Inputs,
308 const ArgList &TCArgs,
Daniel Dunbar10de9e62009-06-29 20:52:51 +0000309 const char *LinkingOutput) const;
310 };
Duncan Sandsaf260b92010-05-11 20:16:05 +0000311 class LLVM_LIBRARY_VISIBILITY Link : public Tool {
Daniel Dunbar10de9e62009-06-29 20:52:51 +0000312 public:
Daniel Dunbar1cb532c2010-05-22 00:37:18 +0000313 Link(const ToolChain &TC) : Tool("openbsd::Link", "linker", TC) {}
Daniel Dunbar10de9e62009-06-29 20:52:51 +0000314
315 virtual bool acceptsPipedInput() const { return true; }
316 virtual bool canPipeOutput() const { return true; }
317 virtual bool hasIntegratedCPP() const { return false; }
318
319 virtual void ConstructJob(Compilation &C, const JobAction &JA,
320 Job &Dest,
Mike Stump11289f42009-09-09 15:08:12 +0000321 const InputInfo &Output,
322 const InputInfoList &Inputs,
323 const ArgList &TCArgs,
Daniel Dunbar10de9e62009-06-29 20:52:51 +0000324 const char *LinkingOutput) const;
325 };
Edward O'Callaghan856e4ff2009-08-22 01:06:46 +0000326} // end namespace openbsd
Daniel Dunbar10de9e62009-06-29 20:52:51 +0000327
Daniel Dunbar8eb473c2009-03-31 17:45:15 +0000328 /// freebsd -- Directly call GNU Binutils assembler and linker
329namespace freebsd {
Duncan Sandsaf260b92010-05-11 20:16:05 +0000330 class LLVM_LIBRARY_VISIBILITY Assemble : public Tool {
Daniel Dunbar8eb473c2009-03-31 17:45:15 +0000331 public:
Daniel Dunbar1cb532c2010-05-22 00:37:18 +0000332 Assemble(const ToolChain &TC) : Tool("freebsd::Assemble", "assembler",
333 TC) {}
Daniel Dunbar8eb473c2009-03-31 17:45:15 +0000334
335 virtual bool acceptsPipedInput() const { return true; }
336 virtual bool canPipeOutput() const { return true; }
337 virtual bool hasIntegratedCPP() const { return false; }
338
339 virtual void ConstructJob(Compilation &C, const JobAction &JA,
340 Job &Dest,
Mike Stump11289f42009-09-09 15:08:12 +0000341 const InputInfo &Output,
342 const InputInfoList &Inputs,
343 const ArgList &TCArgs,
Daniel Dunbar8eb473c2009-03-31 17:45:15 +0000344 const char *LinkingOutput) const;
345 };
Duncan Sandsaf260b92010-05-11 20:16:05 +0000346 class LLVM_LIBRARY_VISIBILITY Link : public Tool {
Daniel Dunbard854c8d2009-04-01 19:36:32 +0000347 public:
Daniel Dunbar1cb532c2010-05-22 00:37:18 +0000348 Link(const ToolChain &TC) : Tool("freebsd::Link", "linker", TC) {}
Daniel Dunbard854c8d2009-04-01 19:36:32 +0000349
350 virtual bool acceptsPipedInput() const { return true; }
351 virtual bool canPipeOutput() const { return true; }
352 virtual bool hasIntegratedCPP() const { return false; }
353
354 virtual void ConstructJob(Compilation &C, const JobAction &JA,
355 Job &Dest,
Mike Stump11289f42009-09-09 15:08:12 +0000356 const InputInfo &Output,
357 const InputInfoList &Inputs,
358 const ArgList &TCArgs,
Daniel Dunbard854c8d2009-04-01 19:36:32 +0000359 const char *LinkingOutput) const;
360 };
Edward O'Callaghan856e4ff2009-08-22 01:06:46 +0000361} // end namespace freebsd
362
363 /// auroraux -- Directly call GNU Binutils assembler and linker
364namespace auroraux {
Duncan Sandsaf260b92010-05-11 20:16:05 +0000365 class LLVM_LIBRARY_VISIBILITY Assemble : public Tool {
Edward O'Callaghan856e4ff2009-08-22 01:06:46 +0000366 public:
Daniel Dunbar1cb532c2010-05-22 00:37:18 +0000367 Assemble(const ToolChain &TC) : Tool("auroraux::Assemble", "assembler",
368 TC) {}
Edward O'Callaghan856e4ff2009-08-22 01:06:46 +0000369
370 virtual bool acceptsPipedInput() const { return true; }
371 virtual bool canPipeOutput() const { return true; }
372 virtual bool hasIntegratedCPP() const { return false; }
373
374 virtual void ConstructJob(Compilation &C, const JobAction &JA,
375 Job &Dest,
Mike Stump11289f42009-09-09 15:08:12 +0000376 const InputInfo &Output,
377 const InputInfoList &Inputs,
378 const ArgList &TCArgs,
Edward O'Callaghan856e4ff2009-08-22 01:06:46 +0000379 const char *LinkingOutput) const;
380 };
Duncan Sandsaf260b92010-05-11 20:16:05 +0000381 class LLVM_LIBRARY_VISIBILITY Link : public Tool {
Edward O'Callaghan856e4ff2009-08-22 01:06:46 +0000382 public:
Daniel Dunbar1cb532c2010-05-22 00:37:18 +0000383 Link(const ToolChain &TC) : Tool("auroraux::Link", "linker", TC) {}
Edward O'Callaghan856e4ff2009-08-22 01:06:46 +0000384
385 virtual bool acceptsPipedInput() const { return true; }
386 virtual bool canPipeOutput() const { return true; }
387 virtual bool hasIntegratedCPP() const { return false; }
388
389 virtual void ConstructJob(Compilation &C, const JobAction &JA,
390 Job &Dest,
Mike Stump11289f42009-09-09 15:08:12 +0000391 const InputInfo &Output,
392 const InputInfoList &Inputs,
393 const ArgList &TCArgs,
Edward O'Callaghan856e4ff2009-08-22 01:06:46 +0000394 const char *LinkingOutput) const;
395 };
396} // end namespace auroraux
Daniel Dunbar8eb473c2009-03-31 17:45:15 +0000397
Daniel Dunbarcc912342009-05-02 18:28:39 +0000398 /// dragonfly -- Directly call GNU Binutils assembler and linker
399namespace dragonfly {
Duncan Sandsaf260b92010-05-11 20:16:05 +0000400 class LLVM_LIBRARY_VISIBILITY Assemble : public Tool {
Daniel Dunbarcc912342009-05-02 18:28:39 +0000401 public:
Daniel Dunbar1cb532c2010-05-22 00:37:18 +0000402 Assemble(const ToolChain &TC) : Tool("dragonfly::Assemble", "assembler",
403 TC) {}
Daniel Dunbarcc912342009-05-02 18:28:39 +0000404
405 virtual bool acceptsPipedInput() const { return true; }
406 virtual bool canPipeOutput() const { return true; }
407 virtual bool hasIntegratedCPP() const { return false; }
408
409 virtual void ConstructJob(Compilation &C, const JobAction &JA,
410 Job &Dest,
Mike Stump11289f42009-09-09 15:08:12 +0000411 const InputInfo &Output,
412 const InputInfoList &Inputs,
413 const ArgList &TCArgs,
Daniel Dunbarcc912342009-05-02 18:28:39 +0000414 const char *LinkingOutput) const;
415 };
Duncan Sandsaf260b92010-05-11 20:16:05 +0000416 class LLVM_LIBRARY_VISIBILITY Link : public Tool {
Daniel Dunbarcc912342009-05-02 18:28:39 +0000417 public:
Daniel Dunbar1cb532c2010-05-22 00:37:18 +0000418 Link(const ToolChain &TC) : Tool("dragonfly::Link", "linker", TC) {}
Daniel Dunbarcc912342009-05-02 18:28:39 +0000419
420 virtual bool acceptsPipedInput() const { return true; }
421 virtual bool canPipeOutput() const { return true; }
422 virtual bool hasIntegratedCPP() const { return false; }
423
424 virtual void ConstructJob(Compilation &C, const JobAction &JA,
425 Job &Dest,
Mike Stump11289f42009-09-09 15:08:12 +0000426 const InputInfo &Output,
427 const InputInfoList &Inputs,
428 const ArgList &TCArgs,
Daniel Dunbarcc912342009-05-02 18:28:39 +0000429 const char *LinkingOutput) const;
430 };
Edward O'Callaghan856e4ff2009-08-22 01:06:46 +0000431} // end namespace dragonfly
Daniel Dunbarcc912342009-05-02 18:28:39 +0000432
Daniel Dunbar5903d8c2009-03-17 22:07:58 +0000433} // end namespace toolchains
434} // end namespace driver
435} // end namespace clang
436
Edward O'Callaghan856e4ff2009-08-22 01:06:46 +0000437#endif // CLANG_LIB_DRIVER_TOOLS_H_