blob: 091fec380622db578257f1db4e80fe56cda76e7c [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 Dunbar15abb2e2009-03-17 22:18:43 +000029 class VISIBILITY_HIDDEN Clang : public Tool {
Douglas Gregor111af7d2009-04-18 00:34:01 +000030 void AddPreprocessingOptions(const Driver &D,
31 const ArgList &Args,
Daniel Dunbard067f7f2009-04-08 23:54:23 +000032 ArgStringList &CmdArgs,
33 const InputInfo &Output,
34 const InputInfoList &Inputs) const;
35
Daniel Dunbar0f5c5422009-09-10 04:57:17 +000036 void AddARMTargetArgs(const ArgList &Args, ArgStringList &CmdArgs) const;
Eric Christopher0b26a612010-03-02 02:41:08 +000037 void AddMIPSTargetArgs(const ArgList &Args, ArgStringList &CmdArgs) const;
Daniel Dunbar3b3191f2009-09-09 22:33:08 +000038 void AddX86TargetArgs(const ArgList &Args, ArgStringList &CmdArgs) const;
39
Daniel Dunbar5903d8c2009-03-17 22:07:58 +000040 public:
Daniel Dunbar82116f82009-03-17 22:45:24 +000041 Clang(const ToolChain &TC) : Tool("clang", TC) {}
Daniel Dunbar5903d8c2009-03-17 22:07:58 +000042
43 virtual bool acceptsPipedInput() const { return true; }
44 virtual bool canPipeOutput() const { return true; }
Daniel Dunbar3d45e172010-04-06 17:07:49 +000045 virtual bool hasGoodDiagnostics() const { return true; }
Daniel Dunbarc4343942010-02-03 03:07:56 +000046 virtual bool hasIntegratedAssembler() const { return true; }
Daniel Dunbar5903d8c2009-03-17 22:07:58 +000047 virtual bool hasIntegratedCPP() const { return true; }
Daniel Dunbar1a093d22009-03-18 06:00:36 +000048
49 virtual void ConstructJob(Compilation &C, const JobAction &JA,
Daniel Dunbar04c4c2c2009-03-18 07:06:02 +000050 Job &Dest,
Mike Stump11289f42009-09-09 15:08:12 +000051 const InputInfo &Output,
52 const InputInfoList &Inputs,
53 const ArgList &TCArgs,
Daniel Dunbar1a093d22009-03-18 06:00:36 +000054 const char *LinkingOutput) const;
Daniel Dunbar5903d8c2009-03-17 22:07:58 +000055 };
56
Daniel Dunbar82116f82009-03-17 22:45:24 +000057 /// gcc - Generic GCC tool implementations.
58namespace gcc {
Daniel Dunbara3246a02009-03-18 08:07:30 +000059 class VISIBILITY_HIDDEN Common : public Tool {
Daniel Dunbar5903d8c2009-03-17 22:07:58 +000060 public:
Daniel Dunbara3246a02009-03-18 08:07:30 +000061 Common(const char *Name, const ToolChain &TC) : Tool(Name, TC) {}
62
63 virtual void ConstructJob(Compilation &C, const JobAction &JA,
64 Job &Dest,
Mike Stump11289f42009-09-09 15:08:12 +000065 const InputInfo &Output,
66 const InputInfoList &Inputs,
67 const ArgList &TCArgs,
Daniel Dunbara3246a02009-03-18 08:07:30 +000068 const char *LinkingOutput) const;
69
70 /// RenderExtraToolArgs - Render any arguments necessary to force
71 /// the particular tool mode.
Daniel Dunbar4e295052010-01-25 22:35:08 +000072 virtual void RenderExtraToolArgs(const JobAction &JA,
73 ArgStringList &CmdArgs) const = 0;
Daniel Dunbara3246a02009-03-18 08:07:30 +000074 };
75
Mike Stump11289f42009-09-09 15:08:12 +000076
Daniel Dunbara3246a02009-03-18 08:07:30 +000077 class VISIBILITY_HIDDEN Preprocess : public Common {
78 public:
79 Preprocess(const ToolChain &TC) : Common("gcc::Preprocess", TC) {}
Daniel Dunbar5903d8c2009-03-17 22:07:58 +000080
81 virtual bool acceptsPipedInput() const { return true; }
82 virtual bool canPipeOutput() const { return true; }
Daniel Dunbar3d45e172010-04-06 17:07:49 +000083 virtual bool hasGoodDiagnostics() const { return true; }
Daniel Dunbar5903d8c2009-03-17 22:07:58 +000084 virtual bool hasIntegratedCPP() const { return false; }
Daniel Dunbar1a093d22009-03-18 06:00:36 +000085
Daniel Dunbar4e295052010-01-25 22:35:08 +000086 virtual void RenderExtraToolArgs(const JobAction &JA,
87 ArgStringList &CmdArgs) const;
Daniel Dunbar5903d8c2009-03-17 22:07:58 +000088 };
89
Daniel Dunbara3246a02009-03-18 08:07:30 +000090 class VISIBILITY_HIDDEN Precompile : public Common {
Daniel Dunbar5903d8c2009-03-17 22:07:58 +000091 public:
Daniel Dunbara3246a02009-03-18 08:07:30 +000092 Precompile(const ToolChain &TC) : Common("gcc::Precompile", TC) {}
Daniel Dunbar5903d8c2009-03-17 22:07:58 +000093
94 virtual bool acceptsPipedInput() const { return true; }
95 virtual bool canPipeOutput() const { return false; }
Daniel Dunbar3d45e172010-04-06 17:07:49 +000096 virtual bool hasGoodDiagnostics() const { return true; }
Daniel Dunbar5903d8c2009-03-17 22:07:58 +000097 virtual bool hasIntegratedCPP() const { return true; }
Daniel Dunbar1a093d22009-03-18 06:00:36 +000098
Daniel Dunbar4e295052010-01-25 22:35:08 +000099 virtual void RenderExtraToolArgs(const JobAction &JA,
100 ArgStringList &CmdArgs) const;
Daniel Dunbar5903d8c2009-03-17 22:07:58 +0000101 };
102
Daniel Dunbara3246a02009-03-18 08:07:30 +0000103 class VISIBILITY_HIDDEN Compile : public Common {
Daniel Dunbar5903d8c2009-03-17 22:07:58 +0000104 public:
Daniel Dunbara3246a02009-03-18 08:07:30 +0000105 Compile(const ToolChain &TC) : Common("gcc::Compile", TC) {}
Daniel Dunbar5903d8c2009-03-17 22:07:58 +0000106
107 virtual bool acceptsPipedInput() const { return true; }
108 virtual bool canPipeOutput() const { return true; }
Daniel Dunbar3d45e172010-04-06 17:07:49 +0000109 virtual bool hasGoodDiagnostics() const { return true; }
Daniel Dunbar5903d8c2009-03-17 22:07:58 +0000110 virtual bool hasIntegratedCPP() const { return true; }
Daniel Dunbar1a093d22009-03-18 06:00:36 +0000111
Daniel Dunbar4e295052010-01-25 22:35:08 +0000112 virtual void RenderExtraToolArgs(const JobAction &JA,
113 ArgStringList &CmdArgs) const;
Daniel Dunbar5903d8c2009-03-17 22:07:58 +0000114 };
115
Daniel Dunbara3246a02009-03-18 08:07:30 +0000116 class VISIBILITY_HIDDEN Assemble : public Common {
Daniel Dunbar5903d8c2009-03-17 22:07:58 +0000117 public:
Daniel Dunbara3246a02009-03-18 08:07:30 +0000118 Assemble(const ToolChain &TC) : Common("gcc::Assemble", TC) {}
Daniel Dunbar5903d8c2009-03-17 22:07:58 +0000119
120 virtual bool acceptsPipedInput() const { return true; }
121 virtual bool canPipeOutput() const { return false; }
122 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
Daniel Dunbara3246a02009-03-18 08:07:30 +0000128 class VISIBILITY_HIDDEN Link : public Common {
Daniel Dunbar5903d8c2009-03-17 22:07:58 +0000129 public:
Daniel Dunbara3246a02009-03-18 08:07:30 +0000130 Link(const ToolChain &TC) : Common("gcc::Link", TC) {}
Daniel Dunbar5903d8c2009-03-17 22:07:58 +0000131
132 virtual bool acceptsPipedInput() const { return false; }
133 virtual bool canPipeOutput() const { return false; }
134 virtual bool hasIntegratedCPP() const { return false; }
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 };
Daniel Dunbar82116f82009-03-17 22:45:24 +0000139} // end namespace gcc
Daniel Dunbar5903d8c2009-03-17 22:07:58 +0000140
Daniel Dunbar64ed5e32009-03-20 00:52:38 +0000141namespace darwin {
Daniel Dunbare9ded432009-09-09 18:36:20 +0000142 class VISIBILITY_HIDDEN DarwinTool : public Tool {
143 protected:
144 void AddDarwinArch(const ArgList &Args, ArgStringList &CmdArgs) const;
Daniel Dunbare9ded432009-09-09 18:36:20 +0000145
146 const toolchains::Darwin &getDarwinToolChain() const {
147 return reinterpret_cast<const toolchains::Darwin&>(getToolChain());
148 }
149
150 public:
Daniel Dunbare017ecc2009-12-19 17:50:07 +0000151 DarwinTool(const char *Name, const ToolChain &TC) : Tool(Name, TC) {}
Daniel Dunbare9ded432009-09-09 18:36:20 +0000152 };
153
154 class VISIBILITY_HIDDEN CC1 : public DarwinTool {
Daniel Dunbar52e96cc2009-03-30 00:34:04 +0000155 public:
Mike Stump11289f42009-09-09 15:08:12 +0000156 static const char *getBaseInputName(const ArgList &Args,
Daniel Dunbar52e96cc2009-03-30 00:34:04 +0000157 const InputInfoList &Input);
Mike Stump11289f42009-09-09 15:08:12 +0000158 static const char *getBaseInputStem(const ArgList &Args,
Daniel Dunbar52e96cc2009-03-30 00:34:04 +0000159 const InputInfoList &Input);
Mike Stump11289f42009-09-09 15:08:12 +0000160 static const char *getDependencyFileName(const ArgList &Args,
Daniel Dunbar52e96cc2009-03-30 00:34:04 +0000161 const InputInfoList &Inputs);
162
Daniel Dunbare6adeee2009-03-29 17:08:39 +0000163 protected:
164 const char *getCC1Name(types::ID Type) const;
165
Daniel Dunbarafec1f52009-03-29 18:40:18 +0000166 void AddCC1Args(const ArgList &Args, ArgStringList &CmdArgs) const;
Daniel Dunbare6adeee2009-03-29 17:08:39 +0000167 void AddCC1OptionsArgs(const ArgList &Args, ArgStringList &CmdArgs,
168 const InputInfoList &Inputs,
Daniel Dunbarafec1f52009-03-29 18:40:18 +0000169 const ArgStringList &OutputArgs) const;
Daniel Dunbare6adeee2009-03-29 17:08:39 +0000170 void AddCPPOptionsArgs(const ArgList &Args, ArgStringList &CmdArgs,
171 const InputInfoList &Inputs,
Daniel Dunbarafec1f52009-03-29 18:40:18 +0000172 const ArgStringList &OutputArgs) const;
Mike Stump11289f42009-09-09 15:08:12 +0000173 void AddCPPUniqueOptionsArgs(const ArgList &Args,
Daniel Dunbarafec1f52009-03-29 18:40:18 +0000174 ArgStringList &CmdArgs,
175 const InputInfoList &Inputs) const;
176 void AddCPPArgs(const ArgList &Args, ArgStringList &CmdArgs) const;
Daniel Dunbare6adeee2009-03-29 17:08:39 +0000177
178 public:
Daniel Dunbare9ded432009-09-09 18:36:20 +0000179 CC1(const char *Name, const ToolChain &TC) : DarwinTool(Name, TC) {}
Daniel Dunbare6adeee2009-03-29 17:08:39 +0000180
181 virtual bool acceptsPipedInput() const { return true; }
182 virtual bool canPipeOutput() const { return true; }
Daniel Dunbar3d45e172010-04-06 17:07:49 +0000183 virtual bool hasGoodDiagnostics() const { return true; }
Daniel Dunbare6adeee2009-03-29 17:08:39 +0000184 virtual bool hasIntegratedCPP() const { return true; }
185 };
186
187 class VISIBILITY_HIDDEN Preprocess : public CC1 {
188 public:
189 Preprocess(const ToolChain &TC) : CC1("darwin::Preprocess", TC) {}
190
191 virtual void ConstructJob(Compilation &C, const JobAction &JA,
192 Job &Dest,
Mike Stump11289f42009-09-09 15:08:12 +0000193 const InputInfo &Output,
194 const InputInfoList &Inputs,
195 const ArgList &TCArgs,
Daniel Dunbare6adeee2009-03-29 17:08:39 +0000196 const char *LinkingOutput) const;
197 };
198
199 class VISIBILITY_HIDDEN Compile : public CC1 {
200 public:
201 Compile(const ToolChain &TC) : CC1("darwin::Compile", TC) {}
202
203 virtual void ConstructJob(Compilation &C, const JobAction &JA,
204 Job &Dest,
Mike Stump11289f42009-09-09 15:08:12 +0000205 const InputInfo &Output,
206 const InputInfoList &Inputs,
207 const ArgList &TCArgs,
Daniel Dunbare6adeee2009-03-29 17:08:39 +0000208 const char *LinkingOutput) const;
209 };
210
Daniel Dunbare9ded432009-09-09 18:36:20 +0000211 class VISIBILITY_HIDDEN Assemble : public DarwinTool {
Daniel Dunbarbe220842009-03-20 16:06:39 +0000212 public:
Daniel Dunbare9ded432009-09-09 18:36:20 +0000213 Assemble(const ToolChain &TC) : DarwinTool("darwin::Assemble", TC) {}
Daniel Dunbarbe220842009-03-20 16:06:39 +0000214
215 virtual bool acceptsPipedInput() const { return true; }
216 virtual bool canPipeOutput() const { return false; }
217 virtual bool hasIntegratedCPP() const { return false; }
218
219 virtual void ConstructJob(Compilation &C, const JobAction &JA,
220 Job &Dest,
Mike Stump11289f42009-09-09 15:08:12 +0000221 const InputInfo &Output,
222 const InputInfoList &Inputs,
223 const ArgList &TCArgs,
Daniel Dunbarbe220842009-03-20 16:06:39 +0000224 const char *LinkingOutput) const;
225 };
226
Daniel Dunbare9ded432009-09-09 18:36:20 +0000227 class VISIBILITY_HIDDEN Link : public DarwinTool {
Daniel Dunbarc1964212009-03-26 16:23:12 +0000228 void AddLinkArgs(const ArgList &Args, ArgStringList &CmdArgs) const;
229
Daniel Dunbarc1964212009-03-26 16:23:12 +0000230 public:
Daniel Dunbare9ded432009-09-09 18:36:20 +0000231 Link(const ToolChain &TC) : DarwinTool("darwin::Link", TC) {}
Daniel Dunbarc1964212009-03-26 16:23:12 +0000232
233 virtual bool acceptsPipedInput() const { return false; }
234 virtual bool canPipeOutput() const { return false; }
235 virtual bool hasIntegratedCPP() const { return false; }
236
237 virtual void ConstructJob(Compilation &C, const JobAction &JA,
238 Job &Dest,
Mike Stump11289f42009-09-09 15:08:12 +0000239 const InputInfo &Output,
240 const InputInfoList &Inputs,
241 const ArgList &TCArgs,
Daniel Dunbarc1964212009-03-26 16:23:12 +0000242 const char *LinkingOutput) const;
243 };
244
Daniel Dunbare9ded432009-09-09 18:36:20 +0000245 class VISIBILITY_HIDDEN Lipo : public DarwinTool {
Daniel Dunbar64ed5e32009-03-20 00:52:38 +0000246 public:
Daniel Dunbare9ded432009-09-09 18:36:20 +0000247 Lipo(const ToolChain &TC) : DarwinTool("darwin::Lipo", TC) {}
Daniel Dunbar64ed5e32009-03-20 00:52:38 +0000248
249 virtual bool acceptsPipedInput() const { return false; }
250 virtual bool canPipeOutput() const { return false; }
251 virtual bool hasIntegratedCPP() const { return false; }
252
253 virtual void ConstructJob(Compilation &C, const JobAction &JA,
254 Job &Dest,
Mike Stump11289f42009-09-09 15:08:12 +0000255 const InputInfo &Output,
256 const InputInfoList &Inputs,
257 const ArgList &TCArgs,
Daniel Dunbar64ed5e32009-03-20 00:52:38 +0000258 const char *LinkingOutput) const;
259 };
260}
261
Daniel Dunbar10de9e62009-06-29 20:52:51 +0000262 /// openbsd -- Directly call GNU Binutils assembler and linker
263namespace openbsd {
264 class VISIBILITY_HIDDEN Assemble : public Tool {
265 public:
266 Assemble(const ToolChain &TC) : Tool("openbsd::Assemble", TC) {}
267
268 virtual bool acceptsPipedInput() const { return true; }
269 virtual bool canPipeOutput() const { return true; }
270 virtual bool hasIntegratedCPP() const { return false; }
271
272 virtual void ConstructJob(Compilation &C, const JobAction &JA,
273 Job &Dest,
Mike Stump11289f42009-09-09 15:08:12 +0000274 const InputInfo &Output,
275 const InputInfoList &Inputs,
276 const ArgList &TCArgs,
Daniel Dunbar10de9e62009-06-29 20:52:51 +0000277 const char *LinkingOutput) const;
278 };
279 class VISIBILITY_HIDDEN Link : public Tool {
280 public:
281 Link(const ToolChain &TC) : Tool("openbsd::Link", TC) {}
282
283 virtual bool acceptsPipedInput() const { return true; }
284 virtual bool canPipeOutput() const { return true; }
285 virtual bool hasIntegratedCPP() const { return false; }
286
287 virtual void ConstructJob(Compilation &C, const JobAction &JA,
288 Job &Dest,
Mike Stump11289f42009-09-09 15:08:12 +0000289 const InputInfo &Output,
290 const InputInfoList &Inputs,
291 const ArgList &TCArgs,
Daniel Dunbar10de9e62009-06-29 20:52:51 +0000292 const char *LinkingOutput) const;
293 };
Edward O'Callaghan856e4ff2009-08-22 01:06:46 +0000294} // end namespace openbsd
Daniel Dunbar10de9e62009-06-29 20:52:51 +0000295
Daniel Dunbar8eb473c2009-03-31 17:45:15 +0000296 /// freebsd -- Directly call GNU Binutils assembler and linker
297namespace freebsd {
298 class VISIBILITY_HIDDEN Assemble : public Tool {
299 public:
300 Assemble(const ToolChain &TC) : Tool("freebsd::Assemble", TC) {}
301
302 virtual bool acceptsPipedInput() const { return true; }
303 virtual bool canPipeOutput() const { return true; }
304 virtual bool hasIntegratedCPP() const { return false; }
305
306 virtual void ConstructJob(Compilation &C, const JobAction &JA,
307 Job &Dest,
Mike Stump11289f42009-09-09 15:08:12 +0000308 const InputInfo &Output,
309 const InputInfoList &Inputs,
310 const ArgList &TCArgs,
Daniel Dunbar8eb473c2009-03-31 17:45:15 +0000311 const char *LinkingOutput) const;
312 };
Daniel Dunbard854c8d2009-04-01 19:36:32 +0000313 class VISIBILITY_HIDDEN Link : public Tool {
314 public:
315 Link(const ToolChain &TC) : Tool("freebsd::Link", TC) {}
316
317 virtual bool acceptsPipedInput() const { return true; }
318 virtual bool canPipeOutput() const { return true; }
319 virtual bool hasIntegratedCPP() const { return false; }
320
321 virtual void ConstructJob(Compilation &C, const JobAction &JA,
322 Job &Dest,
Mike Stump11289f42009-09-09 15:08:12 +0000323 const InputInfo &Output,
324 const InputInfoList &Inputs,
325 const ArgList &TCArgs,
Daniel Dunbard854c8d2009-04-01 19:36:32 +0000326 const char *LinkingOutput) const;
327 };
Edward O'Callaghan856e4ff2009-08-22 01:06:46 +0000328} // end namespace freebsd
329
330 /// auroraux -- Directly call GNU Binutils assembler and linker
331namespace auroraux {
332 class VISIBILITY_HIDDEN Assemble : public Tool {
333 public:
334 Assemble(const ToolChain &TC) : Tool("auroraux::Assemble", TC) {}
335
336 virtual bool acceptsPipedInput() const { return true; }
337 virtual bool canPipeOutput() const { return true; }
338 virtual bool hasIntegratedCPP() const { return false; }
339
340 virtual void ConstructJob(Compilation &C, const JobAction &JA,
341 Job &Dest,
Mike Stump11289f42009-09-09 15:08:12 +0000342 const InputInfo &Output,
343 const InputInfoList &Inputs,
344 const ArgList &TCArgs,
Edward O'Callaghan856e4ff2009-08-22 01:06:46 +0000345 const char *LinkingOutput) const;
346 };
347 class VISIBILITY_HIDDEN Link : public Tool {
348 public:
349 Link(const ToolChain &TC) : Tool("auroraux::Link", TC) {}
350
351 virtual bool acceptsPipedInput() const { return true; }
352 virtual bool canPipeOutput() const { return true; }
353 virtual bool hasIntegratedCPP() const { return false; }
354
355 virtual void ConstructJob(Compilation &C, const JobAction &JA,
356 Job &Dest,
Mike Stump11289f42009-09-09 15:08:12 +0000357 const InputInfo &Output,
358 const InputInfoList &Inputs,
359 const ArgList &TCArgs,
Edward O'Callaghan856e4ff2009-08-22 01:06:46 +0000360 const char *LinkingOutput) const;
361 };
362} // end namespace auroraux
Daniel Dunbar8eb473c2009-03-31 17:45:15 +0000363
Daniel Dunbarcc912342009-05-02 18:28:39 +0000364 /// dragonfly -- Directly call GNU Binutils assembler and linker
365namespace dragonfly {
366 class VISIBILITY_HIDDEN Assemble : public Tool {
367 public:
368 Assemble(const ToolChain &TC) : Tool("dragonfly::Assemble", TC) {}
369
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,
Daniel Dunbarcc912342009-05-02 18:28:39 +0000379 const char *LinkingOutput) const;
380 };
381 class VISIBILITY_HIDDEN Link : public Tool {
382 public:
383 Link(const ToolChain &TC) : Tool("dragonfly::Link", TC) {}
384
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,
Daniel Dunbarcc912342009-05-02 18:28:39 +0000394 const char *LinkingOutput) const;
395 };
Edward O'Callaghan856e4ff2009-08-22 01:06:46 +0000396} // end namespace dragonfly
Daniel Dunbarcc912342009-05-02 18:28:39 +0000397
Daniel Dunbar5903d8c2009-03-17 22:07:58 +0000398} // end namespace toolchains
399} // end namespace driver
400} // end namespace clang
401
Edward O'Callaghan856e4ff2009-08-22 01:06:46 +0000402#endif // CLANG_LIB_DRIVER_TOOLS_H_