blob: 606007d2df6f24db73e22c39528205c196ec6176 [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"
Daniel Dunbar9c073ff2009-03-17 22:07:58 +000016
17#include "llvm/Support/Compiler.h"
18
19namespace clang {
20namespace driver {
Douglas Gregordf91ef32009-04-18 00:34:01 +000021 class Driver;
22
Daniel Dunbar02633b52009-03-26 16:23:12 +000023namespace toolchains {
Daniel Dunbarf3955282009-09-04 18:34:51 +000024 class Darwin;
Daniel Dunbar02633b52009-03-26 16:23:12 +000025}
26
Daniel Dunbar985b8252009-03-17 22:18:43 +000027namespace tools {
Daniel Dunbar9c073ff2009-03-17 22:07:58 +000028
Daniel Dunbar20a9aa52010-05-20 21:30:13 +000029 /// \brief Clang compiler tool.
Duncan Sands92dd1912010-05-11 20:16:05 +000030 class LLVM_LIBRARY_VISIBILITY Clang : public Tool {
Douglas Gregordf91ef32009-04-18 00:34:01 +000031 void AddPreprocessingOptions(const Driver &D,
32 const ArgList &Args,
Daniel Dunbarc21c4852009-04-08 23:54:23 +000033 ArgStringList &CmdArgs,
34 const InputInfo &Output,
35 const InputInfoList &Inputs) const;
36
Daniel Dunbarb163ef72009-09-10 04:57:17 +000037 void AddARMTargetArgs(const ArgList &Args, ArgStringList &CmdArgs) const;
Eric Christophered734732010-03-02 02:41:08 +000038 void AddMIPSTargetArgs(const ArgList &Args, ArgStringList &CmdArgs) const;
Daniel Dunbar6acda162009-09-09 22:33:08 +000039 void AddX86TargetArgs(const ArgList &Args, ArgStringList &CmdArgs) const;
40
Daniel Dunbar9c073ff2009-03-17 22:07:58 +000041 public:
Daniel Dunbar30382042010-05-22 00:37:18 +000042 Clang(const ToolChain &TC) : Tool("clang", "clang frontend", TC) {}
Daniel Dunbar9c073ff2009-03-17 22:07:58 +000043
44 virtual bool acceptsPipedInput() const { return true; }
45 virtual bool canPipeOutput() const { return true; }
Daniel Dunbar60a53f22010-04-06 17:07:49 +000046 virtual bool hasGoodDiagnostics() const { return true; }
Daniel Dunbar8767cbc2010-02-03 03:07:56 +000047 virtual bool hasIntegratedAssembler() const { return true; }
Daniel Dunbar9c073ff2009-03-17 22:07:58 +000048 virtual bool hasIntegratedCPP() const { return true; }
Daniel Dunbar47ac7d22009-03-18 06:00:36 +000049
50 virtual void ConstructJob(Compilation &C, const JobAction &JA,
Daniel Dunbar871adcf2009-03-18 07:06:02 +000051 Job &Dest,
Mike Stump1eb44332009-09-09 15:08:12 +000052 const InputInfo &Output,
53 const InputInfoList &Inputs,
54 const ArgList &TCArgs,
Daniel Dunbar47ac7d22009-03-18 06:00:36 +000055 const char *LinkingOutput) const;
Daniel Dunbar9c073ff2009-03-17 22:07:58 +000056 };
57
Daniel Dunbar20a9aa52010-05-20 21:30:13 +000058 /// \brief Clang integrated assembler tool.
59 class LLVM_LIBRARY_VISIBILITY ClangAs : public Tool {
60 public:
Daniel Dunbar30382042010-05-22 00:37:18 +000061 ClangAs(const ToolChain &TC) : Tool("clang::as",
62 "clang integrated assembler", TC) {}
Daniel Dunbar20a9aa52010-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 Dunbar31b1e542009-03-17 22:45:24 +000078 /// gcc - Generic GCC tool implementations.
79namespace gcc {
Duncan Sands92dd1912010-05-11 20:16:05 +000080 class LLVM_LIBRARY_VISIBILITY Common : public Tool {
Daniel Dunbar9c073ff2009-03-17 22:07:58 +000081 public:
Daniel Dunbar30382042010-05-22 00:37:18 +000082 Common(const char *Name, const char *ShortName,
83 const ToolChain &TC) : Tool(Name, ShortName, TC) {}
Daniel Dunbarb488c1d2009-03-18 08:07:30 +000084
85 virtual void ConstructJob(Compilation &C, const JobAction &JA,
86 Job &Dest,
Mike Stump1eb44332009-09-09 15:08:12 +000087 const InputInfo &Output,
88 const InputInfoList &Inputs,
89 const ArgList &TCArgs,
Daniel Dunbarb488c1d2009-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 Dunbar82b51cc2010-01-25 22:35:08 +000094 virtual void RenderExtraToolArgs(const JobAction &JA,
95 ArgStringList &CmdArgs) const = 0;
Daniel Dunbarb488c1d2009-03-18 08:07:30 +000096 };
97
Mike Stump1eb44332009-09-09 15:08:12 +000098
Duncan Sands92dd1912010-05-11 20:16:05 +000099 class LLVM_LIBRARY_VISIBILITY Preprocess : public Common {
Daniel Dunbarb488c1d2009-03-18 08:07:30 +0000100 public:
Daniel Dunbar30382042010-05-22 00:37:18 +0000101 Preprocess(const ToolChain &TC) : Common("gcc::Preprocess",
102 "gcc preprocessor", TC) {}
Daniel Dunbar9c073ff2009-03-17 22:07:58 +0000103
104 virtual bool acceptsPipedInput() const { return true; }
105 virtual bool canPipeOutput() const { return true; }
Daniel Dunbar60a53f22010-04-06 17:07:49 +0000106 virtual bool hasGoodDiagnostics() const { return true; }
Daniel Dunbar9c073ff2009-03-17 22:07:58 +0000107 virtual bool hasIntegratedCPP() const { return false; }
Daniel Dunbar47ac7d22009-03-18 06:00:36 +0000108
Daniel Dunbar82b51cc2010-01-25 22:35:08 +0000109 virtual void RenderExtraToolArgs(const JobAction &JA,
110 ArgStringList &CmdArgs) const;
Daniel Dunbar9c073ff2009-03-17 22:07:58 +0000111 };
112
Duncan Sands92dd1912010-05-11 20:16:05 +0000113 class LLVM_LIBRARY_VISIBILITY Precompile : public Common {
Daniel Dunbar9c073ff2009-03-17 22:07:58 +0000114 public:
Daniel Dunbar30382042010-05-22 00:37:18 +0000115 Precompile(const ToolChain &TC) : Common("gcc::Precompile",
116 "gcc precompile", TC) {}
Daniel Dunbar9c073ff2009-03-17 22:07:58 +0000117
118 virtual bool acceptsPipedInput() const { return true; }
119 virtual bool canPipeOutput() const { return false; }
Daniel Dunbar60a53f22010-04-06 17:07:49 +0000120 virtual bool hasGoodDiagnostics() const { return true; }
Daniel Dunbar9c073ff2009-03-17 22:07:58 +0000121 virtual bool hasIntegratedCPP() const { return true; }
Daniel Dunbar47ac7d22009-03-18 06:00:36 +0000122
Daniel Dunbar82b51cc2010-01-25 22:35:08 +0000123 virtual void RenderExtraToolArgs(const JobAction &JA,
124 ArgStringList &CmdArgs) const;
Daniel Dunbar9c073ff2009-03-17 22:07:58 +0000125 };
126
Duncan Sands92dd1912010-05-11 20:16:05 +0000127 class LLVM_LIBRARY_VISIBILITY Compile : public Common {
Daniel Dunbar9c073ff2009-03-17 22:07:58 +0000128 public:
Daniel Dunbar30382042010-05-22 00:37:18 +0000129 Compile(const ToolChain &TC) : Common("gcc::Compile",
130 "gcc frontend", TC) {}
Daniel Dunbar9c073ff2009-03-17 22:07:58 +0000131
132 virtual bool acceptsPipedInput() const { return true; }
133 virtual bool canPipeOutput() const { return true; }
Daniel Dunbar60a53f22010-04-06 17:07:49 +0000134 virtual bool hasGoodDiagnostics() const { return true; }
Daniel Dunbar9c073ff2009-03-17 22:07:58 +0000135 virtual bool hasIntegratedCPP() const { return true; }
Daniel Dunbar47ac7d22009-03-18 06:00:36 +0000136
Daniel Dunbar82b51cc2010-01-25 22:35:08 +0000137 virtual void RenderExtraToolArgs(const JobAction &JA,
138 ArgStringList &CmdArgs) const;
Daniel Dunbar9c073ff2009-03-17 22:07:58 +0000139 };
140
Duncan Sands92dd1912010-05-11 20:16:05 +0000141 class LLVM_LIBRARY_VISIBILITY Assemble : public Common {
Daniel Dunbar9c073ff2009-03-17 22:07:58 +0000142 public:
Daniel Dunbar30382042010-05-22 00:37:18 +0000143 Assemble(const ToolChain &TC) : Common("gcc::Assemble",
144 "assembler (via gcc)", TC) {}
Daniel Dunbar9c073ff2009-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 Dunbar47ac7d22009-03-18 06:00:36 +0000149
Daniel Dunbar82b51cc2010-01-25 22:35:08 +0000150 virtual void RenderExtraToolArgs(const JobAction &JA,
151 ArgStringList &CmdArgs) const;
Daniel Dunbar9c073ff2009-03-17 22:07:58 +0000152 };
153
Duncan Sands92dd1912010-05-11 20:16:05 +0000154 class LLVM_LIBRARY_VISIBILITY Link : public Common {
Daniel Dunbar9c073ff2009-03-17 22:07:58 +0000155 public:
Daniel Dunbar30382042010-05-22 00:37:18 +0000156 Link(const ToolChain &TC) : Common("gcc::Link",
157 "linker (via gcc)", TC) {}
Daniel Dunbar9c073ff2009-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 Dunbar47ac7d22009-03-18 06:00:36 +0000162
Daniel Dunbar82b51cc2010-01-25 22:35:08 +0000163 virtual void RenderExtraToolArgs(const JobAction &JA,
164 ArgStringList &CmdArgs) const;
Daniel Dunbar9c073ff2009-03-17 22:07:58 +0000165 };
Daniel Dunbar31b1e542009-03-17 22:45:24 +0000166} // end namespace gcc
Daniel Dunbar9c073ff2009-03-17 22:07:58 +0000167
Daniel Dunbarff7488d2009-03-20 00:52:38 +0000168namespace darwin {
Duncan Sands92dd1912010-05-11 20:16:05 +0000169 class LLVM_LIBRARY_VISIBILITY DarwinTool : public Tool {
Daniel Dunbarfbefe6b2009-09-09 18:36:20 +0000170 protected:
171 void AddDarwinArch(const ArgList &Args, ArgStringList &CmdArgs) const;
Daniel Dunbarfbefe6b2009-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 Dunbar30382042010-05-22 00:37:18 +0000178 DarwinTool(const char *Name, const char *ShortName,
179 const ToolChain &TC) : Tool(Name, ShortName, TC) {}
Daniel Dunbarfbefe6b2009-09-09 18:36:20 +0000180 };
181
Duncan Sands92dd1912010-05-11 20:16:05 +0000182 class LLVM_LIBRARY_VISIBILITY CC1 : public DarwinTool {
Daniel Dunbara5a7bd02009-03-30 00:34:04 +0000183 public:
Mike Stump1eb44332009-09-09 15:08:12 +0000184 static const char *getBaseInputName(const ArgList &Args,
Daniel Dunbara5a7bd02009-03-30 00:34:04 +0000185 const InputInfoList &Input);
Mike Stump1eb44332009-09-09 15:08:12 +0000186 static const char *getBaseInputStem(const ArgList &Args,
Daniel Dunbara5a7bd02009-03-30 00:34:04 +0000187 const InputInfoList &Input);
Mike Stump1eb44332009-09-09 15:08:12 +0000188 static const char *getDependencyFileName(const ArgList &Args,
Daniel Dunbara5a7bd02009-03-30 00:34:04 +0000189 const InputInfoList &Inputs);
190
Daniel Dunbar40f12652009-03-29 17:08:39 +0000191 protected:
192 const char *getCC1Name(types::ID Type) const;
193
Daniel Dunbara3ec60e2009-03-29 18:40:18 +0000194 void AddCC1Args(const ArgList &Args, ArgStringList &CmdArgs) const;
Daniel Dunbar40f12652009-03-29 17:08:39 +0000195 void AddCC1OptionsArgs(const ArgList &Args, ArgStringList &CmdArgs,
196 const InputInfoList &Inputs,
Daniel Dunbara3ec60e2009-03-29 18:40:18 +0000197 const ArgStringList &OutputArgs) const;
Daniel Dunbar40f12652009-03-29 17:08:39 +0000198 void AddCPPOptionsArgs(const ArgList &Args, ArgStringList &CmdArgs,
199 const InputInfoList &Inputs,
Daniel Dunbara3ec60e2009-03-29 18:40:18 +0000200 const ArgStringList &OutputArgs) const;
Mike Stump1eb44332009-09-09 15:08:12 +0000201 void AddCPPUniqueOptionsArgs(const ArgList &Args,
Daniel Dunbara3ec60e2009-03-29 18:40:18 +0000202 ArgStringList &CmdArgs,
203 const InputInfoList &Inputs) const;
204 void AddCPPArgs(const ArgList &Args, ArgStringList &CmdArgs) const;
Daniel Dunbar40f12652009-03-29 17:08:39 +0000205
206 public:
Daniel Dunbar30382042010-05-22 00:37:18 +0000207 CC1(const char *Name, const char *ShortName,
208 const ToolChain &TC) : DarwinTool(Name, ShortName, TC) {}
Daniel Dunbar40f12652009-03-29 17:08:39 +0000209
210 virtual bool acceptsPipedInput() const { return true; }
211 virtual bool canPipeOutput() const { return true; }
Daniel Dunbar60a53f22010-04-06 17:07:49 +0000212 virtual bool hasGoodDiagnostics() const { return true; }
Daniel Dunbar40f12652009-03-29 17:08:39 +0000213 virtual bool hasIntegratedCPP() const { return true; }
214 };
215
Duncan Sands92dd1912010-05-11 20:16:05 +0000216 class LLVM_LIBRARY_VISIBILITY Preprocess : public CC1 {
Daniel Dunbar40f12652009-03-29 17:08:39 +0000217 public:
Daniel Dunbar30382042010-05-22 00:37:18 +0000218 Preprocess(const ToolChain &TC) : CC1("darwin::Preprocess",
219 "gcc preprocessor", TC) {}
Daniel Dunbar40f12652009-03-29 17:08:39 +0000220
221 virtual void ConstructJob(Compilation &C, const JobAction &JA,
222 Job &Dest,
Mike Stump1eb44332009-09-09 15:08:12 +0000223 const InputInfo &Output,
224 const InputInfoList &Inputs,
225 const ArgList &TCArgs,
Daniel Dunbar40f12652009-03-29 17:08:39 +0000226 const char *LinkingOutput) const;
227 };
228
Duncan Sands92dd1912010-05-11 20:16:05 +0000229 class LLVM_LIBRARY_VISIBILITY Compile : public CC1 {
Daniel Dunbar40f12652009-03-29 17:08:39 +0000230 public:
Daniel Dunbar30382042010-05-22 00:37:18 +0000231 Compile(const ToolChain &TC) : CC1("darwin::Compile", "gcc frontend", TC) {}
Daniel Dunbar40f12652009-03-29 17:08:39 +0000232
233 virtual void ConstructJob(Compilation &C, const JobAction &JA,
234 Job &Dest,
Mike Stump1eb44332009-09-09 15:08:12 +0000235 const InputInfo &Output,
236 const InputInfoList &Inputs,
237 const ArgList &TCArgs,
Daniel Dunbar40f12652009-03-29 17:08:39 +0000238 const char *LinkingOutput) const;
239 };
240
Duncan Sands92dd1912010-05-11 20:16:05 +0000241 class LLVM_LIBRARY_VISIBILITY Assemble : public DarwinTool {
Daniel Dunbar8cac5f72009-03-20 16:06:39 +0000242 public:
Daniel Dunbar30382042010-05-22 00:37:18 +0000243 Assemble(const ToolChain &TC) : DarwinTool("darwin::Assemble",
244 "assembler", TC) {}
Daniel Dunbar8cac5f72009-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 Stump1eb44332009-09-09 15:08:12 +0000252 const InputInfo &Output,
253 const InputInfoList &Inputs,
254 const ArgList &TCArgs,
Daniel Dunbar8cac5f72009-03-20 16:06:39 +0000255 const char *LinkingOutput) const;
256 };
257
Duncan Sands92dd1912010-05-11 20:16:05 +0000258 class LLVM_LIBRARY_VISIBILITY Link : public DarwinTool {
Daniel Dunbar02633b52009-03-26 16:23:12 +0000259 void AddLinkArgs(const ArgList &Args, ArgStringList &CmdArgs) const;
260
Daniel Dunbar02633b52009-03-26 16:23:12 +0000261 public:
Daniel Dunbar30382042010-05-22 00:37:18 +0000262 Link(const ToolChain &TC) : DarwinTool("darwin::Link", "linker", TC) {}
Daniel Dunbar02633b52009-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 Stump1eb44332009-09-09 15:08:12 +0000270 const InputInfo &Output,
271 const InputInfoList &Inputs,
272 const ArgList &TCArgs,
Daniel Dunbar02633b52009-03-26 16:23:12 +0000273 const char *LinkingOutput) const;
274 };
275
Duncan Sands92dd1912010-05-11 20:16:05 +0000276 class LLVM_LIBRARY_VISIBILITY Lipo : public DarwinTool {
Daniel Dunbarff7488d2009-03-20 00:52:38 +0000277 public:
Daniel Dunbar30382042010-05-22 00:37:18 +0000278 Lipo(const ToolChain &TC) : DarwinTool("darwin::Lipo", "lipo", TC) {}
Daniel Dunbarff7488d2009-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 Stump1eb44332009-09-09 15:08:12 +0000286 const InputInfo &Output,
287 const InputInfoList &Inputs,
288 const ArgList &TCArgs,
Daniel Dunbarff7488d2009-03-20 00:52:38 +0000289 const char *LinkingOutput) const;
290 };
Daniel Dunbar6e0f2542010-06-04 18:28:36 +0000291
292 class LLVM_LIBRARY_VISIBILITY Dsymutil : public DarwinTool {
293 public:
294 Dsymutil(const ToolChain &TC) : DarwinTool("darwin::Dsymutil",
295 "dsymutil", TC) {}
296
297 virtual bool acceptsPipedInput() const { return false; }
298 virtual bool canPipeOutput() const { return false; }
299 virtual bool hasIntegratedCPP() const { return false; }
300
301 virtual void ConstructJob(Compilation &C, const JobAction &JA,
302 Job &Dest,
303 const InputInfo &Output,
304 const InputInfoList &Inputs,
305 const ArgList &TCArgs,
306 const char *LinkingOutput) const;
307 };
Daniel Dunbarff7488d2009-03-20 00:52:38 +0000308}
309
Daniel Dunbarf7b8eec2009-06-29 20:52:51 +0000310 /// openbsd -- Directly call GNU Binutils assembler and linker
311namespace openbsd {
Duncan Sands92dd1912010-05-11 20:16:05 +0000312 class LLVM_LIBRARY_VISIBILITY Assemble : public Tool {
Daniel Dunbarf7b8eec2009-06-29 20:52:51 +0000313 public:
Daniel Dunbar30382042010-05-22 00:37:18 +0000314 Assemble(const ToolChain &TC) : Tool("openbsd::Assemble", "assembler",
315 TC) {}
Daniel Dunbarf7b8eec2009-06-29 20:52:51 +0000316
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 Stump1eb44332009-09-09 15:08:12 +0000323 const InputInfo &Output,
324 const InputInfoList &Inputs,
325 const ArgList &TCArgs,
Daniel Dunbarf7b8eec2009-06-29 20:52:51 +0000326 const char *LinkingOutput) const;
327 };
Duncan Sands92dd1912010-05-11 20:16:05 +0000328 class LLVM_LIBRARY_VISIBILITY Link : public Tool {
Daniel Dunbarf7b8eec2009-06-29 20:52:51 +0000329 public:
Daniel Dunbar30382042010-05-22 00:37:18 +0000330 Link(const ToolChain &TC) : Tool("openbsd::Link", "linker", TC) {}
Daniel Dunbarf7b8eec2009-06-29 20:52:51 +0000331
332 virtual bool acceptsPipedInput() const { return true; }
333 virtual bool canPipeOutput() const { return true; }
334 virtual bool hasIntegratedCPP() const { return false; }
335
336 virtual void ConstructJob(Compilation &C, const JobAction &JA,
337 Job &Dest,
Mike Stump1eb44332009-09-09 15:08:12 +0000338 const InputInfo &Output,
339 const InputInfoList &Inputs,
340 const ArgList &TCArgs,
Daniel Dunbarf7b8eec2009-06-29 20:52:51 +0000341 const char *LinkingOutput) const;
342 };
Edward O'Callaghane7925a02009-08-22 01:06:46 +0000343} // end namespace openbsd
Daniel Dunbarf7b8eec2009-06-29 20:52:51 +0000344
Daniel Dunbar68a31d42009-03-31 17:45:15 +0000345 /// freebsd -- Directly call GNU Binutils assembler and linker
346namespace freebsd {
Duncan Sands92dd1912010-05-11 20:16:05 +0000347 class LLVM_LIBRARY_VISIBILITY Assemble : public Tool {
Daniel Dunbar68a31d42009-03-31 17:45:15 +0000348 public:
Daniel Dunbar30382042010-05-22 00:37:18 +0000349 Assemble(const ToolChain &TC) : Tool("freebsd::Assemble", "assembler",
350 TC) {}
Daniel Dunbar68a31d42009-03-31 17:45:15 +0000351
352 virtual bool acceptsPipedInput() const { return true; }
353 virtual bool canPipeOutput() const { return true; }
354 virtual bool hasIntegratedCPP() const { return false; }
355
356 virtual void ConstructJob(Compilation &C, const JobAction &JA,
357 Job &Dest,
Mike Stump1eb44332009-09-09 15:08:12 +0000358 const InputInfo &Output,
359 const InputInfoList &Inputs,
360 const ArgList &TCArgs,
Daniel Dunbar68a31d42009-03-31 17:45:15 +0000361 const char *LinkingOutput) const;
362 };
Duncan Sands92dd1912010-05-11 20:16:05 +0000363 class LLVM_LIBRARY_VISIBILITY Link : public Tool {
Daniel Dunbar008f54a2009-04-01 19:36:32 +0000364 public:
Daniel Dunbar30382042010-05-22 00:37:18 +0000365 Link(const ToolChain &TC) : Tool("freebsd::Link", "linker", TC) {}
Daniel Dunbar008f54a2009-04-01 19:36:32 +0000366
367 virtual bool acceptsPipedInput() const { return true; }
368 virtual bool canPipeOutput() const { return true; }
369 virtual bool hasIntegratedCPP() const { return false; }
370
371 virtual void ConstructJob(Compilation &C, const JobAction &JA,
372 Job &Dest,
Mike Stump1eb44332009-09-09 15:08:12 +0000373 const InputInfo &Output,
374 const InputInfoList &Inputs,
375 const ArgList &TCArgs,
Daniel Dunbar008f54a2009-04-01 19:36:32 +0000376 const char *LinkingOutput) const;
377 };
Edward O'Callaghane7925a02009-08-22 01:06:46 +0000378} // end namespace freebsd
379
380 /// auroraux -- Directly call GNU Binutils assembler and linker
381namespace auroraux {
Duncan Sands92dd1912010-05-11 20:16:05 +0000382 class LLVM_LIBRARY_VISIBILITY Assemble : public Tool {
Edward O'Callaghane7925a02009-08-22 01:06:46 +0000383 public:
Daniel Dunbar30382042010-05-22 00:37:18 +0000384 Assemble(const ToolChain &TC) : Tool("auroraux::Assemble", "assembler",
385 TC) {}
Edward O'Callaghane7925a02009-08-22 01:06:46 +0000386
387 virtual bool acceptsPipedInput() const { return true; }
388 virtual bool canPipeOutput() const { return true; }
389 virtual bool hasIntegratedCPP() const { return false; }
390
391 virtual void ConstructJob(Compilation &C, const JobAction &JA,
392 Job &Dest,
Mike Stump1eb44332009-09-09 15:08:12 +0000393 const InputInfo &Output,
394 const InputInfoList &Inputs,
395 const ArgList &TCArgs,
Edward O'Callaghane7925a02009-08-22 01:06:46 +0000396 const char *LinkingOutput) const;
397 };
Duncan Sands92dd1912010-05-11 20:16:05 +0000398 class LLVM_LIBRARY_VISIBILITY Link : public Tool {
Edward O'Callaghane7925a02009-08-22 01:06:46 +0000399 public:
Daniel Dunbar30382042010-05-22 00:37:18 +0000400 Link(const ToolChain &TC) : Tool("auroraux::Link", "linker", TC) {}
Edward O'Callaghane7925a02009-08-22 01:06:46 +0000401
402 virtual bool acceptsPipedInput() const { return true; }
403 virtual bool canPipeOutput() const { return true; }
404 virtual bool hasIntegratedCPP() const { return false; }
405
406 virtual void ConstructJob(Compilation &C, const JobAction &JA,
407 Job &Dest,
Mike Stump1eb44332009-09-09 15:08:12 +0000408 const InputInfo &Output,
409 const InputInfoList &Inputs,
410 const ArgList &TCArgs,
Edward O'Callaghane7925a02009-08-22 01:06:46 +0000411 const char *LinkingOutput) const;
412 };
413} // end namespace auroraux
Daniel Dunbar68a31d42009-03-31 17:45:15 +0000414
Daniel Dunbar11e1b402009-05-02 18:28:39 +0000415 /// dragonfly -- Directly call GNU Binutils assembler and linker
416namespace dragonfly {
Duncan Sands92dd1912010-05-11 20:16:05 +0000417 class LLVM_LIBRARY_VISIBILITY Assemble : public Tool {
Daniel Dunbar11e1b402009-05-02 18:28:39 +0000418 public:
Daniel Dunbar30382042010-05-22 00:37:18 +0000419 Assemble(const ToolChain &TC) : Tool("dragonfly::Assemble", "assembler",
420 TC) {}
Daniel Dunbar11e1b402009-05-02 18:28:39 +0000421
422 virtual bool acceptsPipedInput() const { return true; }
423 virtual bool canPipeOutput() const { return true; }
424 virtual bool hasIntegratedCPP() const { return false; }
425
426 virtual void ConstructJob(Compilation &C, const JobAction &JA,
427 Job &Dest,
Mike Stump1eb44332009-09-09 15:08:12 +0000428 const InputInfo &Output,
429 const InputInfoList &Inputs,
430 const ArgList &TCArgs,
Daniel Dunbar11e1b402009-05-02 18:28:39 +0000431 const char *LinkingOutput) const;
432 };
Duncan Sands92dd1912010-05-11 20:16:05 +0000433 class LLVM_LIBRARY_VISIBILITY Link : public Tool {
Daniel Dunbar11e1b402009-05-02 18:28:39 +0000434 public:
Daniel Dunbar30382042010-05-22 00:37:18 +0000435 Link(const ToolChain &TC) : Tool("dragonfly::Link", "linker", TC) {}
Daniel Dunbar11e1b402009-05-02 18:28:39 +0000436
437 virtual bool acceptsPipedInput() const { return true; }
438 virtual bool canPipeOutput() const { return true; }
439 virtual bool hasIntegratedCPP() const { return false; }
440
441 virtual void ConstructJob(Compilation &C, const JobAction &JA,
442 Job &Dest,
Mike Stump1eb44332009-09-09 15:08:12 +0000443 const InputInfo &Output,
444 const InputInfoList &Inputs,
445 const ArgList &TCArgs,
Daniel Dunbar11e1b402009-05-02 18:28:39 +0000446 const char *LinkingOutput) const;
447 };
Edward O'Callaghane7925a02009-08-22 01:06:46 +0000448} // end namespace dragonfly
Daniel Dunbar11e1b402009-05-02 18:28:39 +0000449
Daniel Dunbar9c073ff2009-03-17 22:07:58 +0000450} // end namespace toolchains
451} // end namespace driver
452} // end namespace clang
453
Edward O'Callaghane7925a02009-08-22 01:06:46 +0000454#endif // CLANG_LIB_DRIVER_TOOLS_H_