blob: 10c883900933e1406f37eee5eac35d7b15edc91d [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;
Bruno Cardoso Lopese7f211c2010-11-09 17:21:19 +000039 void AddSparcTargetArgs(const ArgList &Args, ArgStringList &CmdArgs) const;
Daniel Dunbar3b3191f2009-09-09 22:33:08 +000040 void AddX86TargetArgs(const ArgList &Args, ArgStringList &CmdArgs) const;
41
Daniel Dunbar5903d8c2009-03-17 22:07:58 +000042 public:
Daniel Dunbar1cb532c2010-05-22 00:37:18 +000043 Clang(const ToolChain &TC) : Tool("clang", "clang frontend", TC) {}
Daniel Dunbar5903d8c2009-03-17 22:07:58 +000044
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,
Mike Stump11289f42009-09-09 15:08:12 +000050 const InputInfo &Output,
51 const InputInfoList &Inputs,
52 const ArgList &TCArgs,
Daniel Dunbar1a093d22009-03-18 06:00:36 +000053 const char *LinkingOutput) const;
Daniel Dunbar5903d8c2009-03-17 22:07:58 +000054 };
55
Daniel Dunbar4f5e79c2010-05-20 21:30:13 +000056 /// \brief Clang integrated assembler tool.
57 class LLVM_LIBRARY_VISIBILITY ClangAs : public Tool {
58 public:
Daniel Dunbar1cb532c2010-05-22 00:37:18 +000059 ClangAs(const ToolChain &TC) : Tool("clang::as",
60 "clang integrated assembler", TC) {}
Daniel Dunbar4f5e79c2010-05-20 21:30:13 +000061
Daniel Dunbar4f5e79c2010-05-20 21:30:13 +000062 virtual bool hasGoodDiagnostics() const { return true; }
63 virtual bool hasIntegratedAssembler() const { return false; }
64 virtual bool hasIntegratedCPP() const { return false; }
65
66 virtual void ConstructJob(Compilation &C, const JobAction &JA,
Daniel Dunbar4f5e79c2010-05-20 21:30:13 +000067 const InputInfo &Output,
68 const InputInfoList &Inputs,
69 const ArgList &TCArgs,
70 const char *LinkingOutput) const;
71 };
72
Daniel Dunbar82116f82009-03-17 22:45:24 +000073 /// gcc - Generic GCC tool implementations.
74namespace gcc {
Duncan Sandsaf260b92010-05-11 20:16:05 +000075 class LLVM_LIBRARY_VISIBILITY Common : public Tool {
Daniel Dunbar5903d8c2009-03-17 22:07:58 +000076 public:
Daniel Dunbar1cb532c2010-05-22 00:37:18 +000077 Common(const char *Name, const char *ShortName,
78 const ToolChain &TC) : Tool(Name, ShortName, TC) {}
Daniel Dunbara3246a02009-03-18 08:07:30 +000079
80 virtual void ConstructJob(Compilation &C, const JobAction &JA,
Mike Stump11289f42009-09-09 15:08:12 +000081 const InputInfo &Output,
82 const InputInfoList &Inputs,
83 const ArgList &TCArgs,
Daniel Dunbara3246a02009-03-18 08:07:30 +000084 const char *LinkingOutput) const;
85
86 /// RenderExtraToolArgs - Render any arguments necessary to force
87 /// the particular tool mode.
Daniel Dunbar4e295052010-01-25 22:35:08 +000088 virtual void RenderExtraToolArgs(const JobAction &JA,
89 ArgStringList &CmdArgs) const = 0;
Daniel Dunbara3246a02009-03-18 08:07:30 +000090 };
91
Mike Stump11289f42009-09-09 15:08:12 +000092
Duncan Sandsaf260b92010-05-11 20:16:05 +000093 class LLVM_LIBRARY_VISIBILITY Preprocess : public Common {
Daniel Dunbara3246a02009-03-18 08:07:30 +000094 public:
Daniel Dunbar1cb532c2010-05-22 00:37:18 +000095 Preprocess(const ToolChain &TC) : Common("gcc::Preprocess",
96 "gcc preprocessor", TC) {}
Daniel Dunbar5903d8c2009-03-17 22:07:58 +000097
Daniel Dunbar3d45e172010-04-06 17:07:49 +000098 virtual bool hasGoodDiagnostics() const { return true; }
Daniel Dunbar5903d8c2009-03-17 22:07:58 +000099 virtual bool hasIntegratedCPP() const { return false; }
Daniel Dunbar1a093d22009-03-18 06:00:36 +0000100
Daniel Dunbar4e295052010-01-25 22:35:08 +0000101 virtual void RenderExtraToolArgs(const JobAction &JA,
102 ArgStringList &CmdArgs) const;
Daniel Dunbar5903d8c2009-03-17 22:07:58 +0000103 };
104
Duncan Sandsaf260b92010-05-11 20:16:05 +0000105 class LLVM_LIBRARY_VISIBILITY Precompile : public Common {
Daniel Dunbar5903d8c2009-03-17 22:07:58 +0000106 public:
Daniel Dunbar1cb532c2010-05-22 00:37:18 +0000107 Precompile(const ToolChain &TC) : Common("gcc::Precompile",
108 "gcc precompile", TC) {}
Daniel Dunbar5903d8c2009-03-17 22:07:58 +0000109
Daniel Dunbar3d45e172010-04-06 17:07:49 +0000110 virtual bool hasGoodDiagnostics() const { return true; }
Daniel Dunbar5903d8c2009-03-17 22:07:58 +0000111 virtual bool hasIntegratedCPP() const { return true; }
Daniel Dunbar1a093d22009-03-18 06:00:36 +0000112
Daniel Dunbar4e295052010-01-25 22:35:08 +0000113 virtual void RenderExtraToolArgs(const JobAction &JA,
114 ArgStringList &CmdArgs) const;
Daniel Dunbar5903d8c2009-03-17 22:07:58 +0000115 };
116
Duncan Sandsaf260b92010-05-11 20:16:05 +0000117 class LLVM_LIBRARY_VISIBILITY Compile : public Common {
Daniel Dunbar5903d8c2009-03-17 22:07:58 +0000118 public:
Daniel Dunbar1cb532c2010-05-22 00:37:18 +0000119 Compile(const ToolChain &TC) : Common("gcc::Compile",
120 "gcc frontend", TC) {}
Daniel Dunbar5903d8c2009-03-17 22:07:58 +0000121
Daniel Dunbar3d45e172010-04-06 17:07:49 +0000122 virtual bool hasGoodDiagnostics() const { return true; }
Daniel Dunbar5903d8c2009-03-17 22:07:58 +0000123 virtual bool hasIntegratedCPP() const { return true; }
Daniel Dunbar1a093d22009-03-18 06:00:36 +0000124
Daniel Dunbar4e295052010-01-25 22:35:08 +0000125 virtual void RenderExtraToolArgs(const JobAction &JA,
126 ArgStringList &CmdArgs) const;
Daniel Dunbar5903d8c2009-03-17 22:07:58 +0000127 };
128
Duncan Sandsaf260b92010-05-11 20:16:05 +0000129 class LLVM_LIBRARY_VISIBILITY Assemble : public Common {
Daniel Dunbar5903d8c2009-03-17 22:07:58 +0000130 public:
Daniel Dunbar1cb532c2010-05-22 00:37:18 +0000131 Assemble(const ToolChain &TC) : Common("gcc::Assemble",
132 "assembler (via gcc)", TC) {}
Daniel Dunbar5903d8c2009-03-17 22:07:58 +0000133
Daniel Dunbar5903d8c2009-03-17 22:07:58 +0000134 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 };
139
Duncan Sandsaf260b92010-05-11 20:16:05 +0000140 class LLVM_LIBRARY_VISIBILITY Link : public Common {
Daniel Dunbar5903d8c2009-03-17 22:07:58 +0000141 public:
Daniel Dunbar1cb532c2010-05-22 00:37:18 +0000142 Link(const ToolChain &TC) : Common("gcc::Link",
143 "linker (via gcc)", TC) {}
Daniel Dunbar5903d8c2009-03-17 22:07:58 +0000144
Daniel Dunbar5903d8c2009-03-17 22:07:58 +0000145 virtual bool hasIntegratedCPP() const { return false; }
Daniel Dunbar1a093d22009-03-18 06:00:36 +0000146
Daniel Dunbar4e295052010-01-25 22:35:08 +0000147 virtual void RenderExtraToolArgs(const JobAction &JA,
148 ArgStringList &CmdArgs) const;
Daniel Dunbar5903d8c2009-03-17 22:07:58 +0000149 };
Daniel Dunbar82116f82009-03-17 22:45:24 +0000150} // end namespace gcc
Daniel Dunbar5903d8c2009-03-17 22:07:58 +0000151
Daniel Dunbar64ed5e32009-03-20 00:52:38 +0000152namespace darwin {
Duncan Sandsaf260b92010-05-11 20:16:05 +0000153 class LLVM_LIBRARY_VISIBILITY DarwinTool : public Tool {
Daniel Dunbare9ded432009-09-09 18:36:20 +0000154 protected:
155 void AddDarwinArch(const ArgList &Args, ArgStringList &CmdArgs) const;
Daniel Dunbare9ded432009-09-09 18:36:20 +0000156
157 const toolchains::Darwin &getDarwinToolChain() const {
158 return reinterpret_cast<const toolchains::Darwin&>(getToolChain());
159 }
160
161 public:
Daniel Dunbar1cb532c2010-05-22 00:37:18 +0000162 DarwinTool(const char *Name, const char *ShortName,
163 const ToolChain &TC) : Tool(Name, ShortName, TC) {}
Daniel Dunbare9ded432009-09-09 18:36:20 +0000164 };
165
Duncan Sandsaf260b92010-05-11 20:16:05 +0000166 class LLVM_LIBRARY_VISIBILITY CC1 : public DarwinTool {
Daniel Dunbar52e96cc2009-03-30 00:34:04 +0000167 public:
Mike Stump11289f42009-09-09 15:08:12 +0000168 static const char *getBaseInputName(const ArgList &Args,
Daniel Dunbar52e96cc2009-03-30 00:34:04 +0000169 const InputInfoList &Input);
Mike Stump11289f42009-09-09 15:08:12 +0000170 static const char *getBaseInputStem(const ArgList &Args,
Daniel Dunbar52e96cc2009-03-30 00:34:04 +0000171 const InputInfoList &Input);
Mike Stump11289f42009-09-09 15:08:12 +0000172 static const char *getDependencyFileName(const ArgList &Args,
Daniel Dunbar52e96cc2009-03-30 00:34:04 +0000173 const InputInfoList &Inputs);
174
Daniel Dunbare6adeee2009-03-29 17:08:39 +0000175 protected:
176 const char *getCC1Name(types::ID Type) const;
177
Daniel Dunbarafec1f52009-03-29 18:40:18 +0000178 void AddCC1Args(const ArgList &Args, ArgStringList &CmdArgs) const;
Daniel Dunbare6adeee2009-03-29 17:08:39 +0000179 void AddCC1OptionsArgs(const ArgList &Args, ArgStringList &CmdArgs,
180 const InputInfoList &Inputs,
Daniel Dunbarafec1f52009-03-29 18:40:18 +0000181 const ArgStringList &OutputArgs) const;
Daniel Dunbare6adeee2009-03-29 17:08:39 +0000182 void AddCPPOptionsArgs(const ArgList &Args, ArgStringList &CmdArgs,
183 const InputInfoList &Inputs,
Daniel Dunbarafec1f52009-03-29 18:40:18 +0000184 const ArgStringList &OutputArgs) const;
Mike Stump11289f42009-09-09 15:08:12 +0000185 void AddCPPUniqueOptionsArgs(const ArgList &Args,
Daniel Dunbarafec1f52009-03-29 18:40:18 +0000186 ArgStringList &CmdArgs,
187 const InputInfoList &Inputs) const;
188 void AddCPPArgs(const ArgList &Args, ArgStringList &CmdArgs) const;
Daniel Dunbare6adeee2009-03-29 17:08:39 +0000189
190 public:
Daniel Dunbar1cb532c2010-05-22 00:37:18 +0000191 CC1(const char *Name, const char *ShortName,
192 const ToolChain &TC) : DarwinTool(Name, ShortName, TC) {}
Daniel Dunbare6adeee2009-03-29 17:08:39 +0000193
Daniel Dunbar3d45e172010-04-06 17:07:49 +0000194 virtual bool hasGoodDiagnostics() const { return true; }
Daniel Dunbare6adeee2009-03-29 17:08:39 +0000195 virtual bool hasIntegratedCPP() const { return true; }
196 };
197
Duncan Sandsaf260b92010-05-11 20:16:05 +0000198 class LLVM_LIBRARY_VISIBILITY Preprocess : public CC1 {
Daniel Dunbare6adeee2009-03-29 17:08:39 +0000199 public:
Daniel Dunbar1cb532c2010-05-22 00:37:18 +0000200 Preprocess(const ToolChain &TC) : CC1("darwin::Preprocess",
201 "gcc preprocessor", TC) {}
Daniel Dunbare6adeee2009-03-29 17:08:39 +0000202
203 virtual void ConstructJob(Compilation &C, const JobAction &JA,
Mike Stump11289f42009-09-09 15:08:12 +0000204 const InputInfo &Output,
205 const InputInfoList &Inputs,
206 const ArgList &TCArgs,
Daniel Dunbare6adeee2009-03-29 17:08:39 +0000207 const char *LinkingOutput) const;
208 };
209
Duncan Sandsaf260b92010-05-11 20:16:05 +0000210 class LLVM_LIBRARY_VISIBILITY Compile : public CC1 {
Daniel Dunbare6adeee2009-03-29 17:08:39 +0000211 public:
Daniel Dunbar1cb532c2010-05-22 00:37:18 +0000212 Compile(const ToolChain &TC) : CC1("darwin::Compile", "gcc frontend", TC) {}
Daniel Dunbare6adeee2009-03-29 17:08:39 +0000213
214 virtual void ConstructJob(Compilation &C, const JobAction &JA,
Mike Stump11289f42009-09-09 15:08:12 +0000215 const InputInfo &Output,
216 const InputInfoList &Inputs,
217 const ArgList &TCArgs,
Daniel Dunbare6adeee2009-03-29 17:08:39 +0000218 const char *LinkingOutput) const;
219 };
220
Duncan Sandsaf260b92010-05-11 20:16:05 +0000221 class LLVM_LIBRARY_VISIBILITY Assemble : public DarwinTool {
Daniel Dunbarbe220842009-03-20 16:06:39 +0000222 public:
Daniel Dunbar1cb532c2010-05-22 00:37:18 +0000223 Assemble(const ToolChain &TC) : DarwinTool("darwin::Assemble",
224 "assembler", TC) {}
Daniel Dunbarbe220842009-03-20 16:06:39 +0000225
Daniel Dunbarbe220842009-03-20 16:06:39 +0000226 virtual bool hasIntegratedCPP() const { return false; }
227
228 virtual void ConstructJob(Compilation &C, const JobAction &JA,
Mike Stump11289f42009-09-09 15:08:12 +0000229 const InputInfo &Output,
230 const InputInfoList &Inputs,
231 const ArgList &TCArgs,
Daniel Dunbarbe220842009-03-20 16:06:39 +0000232 const char *LinkingOutput) const;
233 };
234
Duncan Sandsaf260b92010-05-11 20:16:05 +0000235 class LLVM_LIBRARY_VISIBILITY Link : public DarwinTool {
Daniel Dunbarccbc4522010-09-09 21:51:05 +0000236 void AddLinkArgs(Compilation &C, const ArgList &Args,
237 ArgStringList &CmdArgs) const;
Daniel Dunbarc1964212009-03-26 16:23:12 +0000238
Daniel Dunbarc1964212009-03-26 16:23:12 +0000239 public:
Daniel Dunbar1cb532c2010-05-22 00:37:18 +0000240 Link(const ToolChain &TC) : DarwinTool("darwin::Link", "linker", TC) {}
Daniel Dunbarc1964212009-03-26 16:23:12 +0000241
Daniel Dunbarc1964212009-03-26 16:23:12 +0000242 virtual bool hasIntegratedCPP() const { return false; }
243
244 virtual void ConstructJob(Compilation &C, const JobAction &JA,
Mike Stump11289f42009-09-09 15:08:12 +0000245 const InputInfo &Output,
246 const InputInfoList &Inputs,
247 const ArgList &TCArgs,
Daniel Dunbarc1964212009-03-26 16:23:12 +0000248 const char *LinkingOutput) const;
249 };
250
Duncan Sandsaf260b92010-05-11 20:16:05 +0000251 class LLVM_LIBRARY_VISIBILITY Lipo : public DarwinTool {
Daniel Dunbar64ed5e32009-03-20 00:52:38 +0000252 public:
Daniel Dunbar1cb532c2010-05-22 00:37:18 +0000253 Lipo(const ToolChain &TC) : DarwinTool("darwin::Lipo", "lipo", TC) {}
Daniel Dunbar64ed5e32009-03-20 00:52:38 +0000254
Daniel Dunbar64ed5e32009-03-20 00:52:38 +0000255 virtual bool hasIntegratedCPP() const { return false; }
256
257 virtual void ConstructJob(Compilation &C, const JobAction &JA,
Mike Stump11289f42009-09-09 15:08:12 +0000258 const InputInfo &Output,
259 const InputInfoList &Inputs,
260 const ArgList &TCArgs,
Daniel Dunbar64ed5e32009-03-20 00:52:38 +0000261 const char *LinkingOutput) const;
262 };
Daniel Dunbar88299622010-06-04 18:28:36 +0000263
264 class LLVM_LIBRARY_VISIBILITY Dsymutil : public DarwinTool {
265 public:
266 Dsymutil(const ToolChain &TC) : DarwinTool("darwin::Dsymutil",
267 "dsymutil", TC) {}
268
Daniel Dunbar88299622010-06-04 18:28:36 +0000269 virtual bool hasIntegratedCPP() const { return false; }
270
271 virtual void ConstructJob(Compilation &C, const JobAction &JA,
Daniel Dunbar88299622010-06-04 18:28:36 +0000272 const InputInfo &Output,
273 const InputInfoList &Inputs,
274 const ArgList &TCArgs,
275 const char *LinkingOutput) const;
276 };
Daniel Dunbar64ed5e32009-03-20 00:52:38 +0000277}
278
Daniel Dunbar10de9e62009-06-29 20:52:51 +0000279 /// openbsd -- Directly call GNU Binutils assembler and linker
280namespace openbsd {
Duncan Sandsaf260b92010-05-11 20:16:05 +0000281 class LLVM_LIBRARY_VISIBILITY Assemble : public Tool {
Daniel Dunbar10de9e62009-06-29 20:52:51 +0000282 public:
Daniel Dunbar1cb532c2010-05-22 00:37:18 +0000283 Assemble(const ToolChain &TC) : Tool("openbsd::Assemble", "assembler",
284 TC) {}
Daniel Dunbar10de9e62009-06-29 20:52:51 +0000285
Daniel Dunbar10de9e62009-06-29 20:52:51 +0000286 virtual bool hasIntegratedCPP() const { return false; }
287
288 virtual void ConstructJob(Compilation &C, const JobAction &JA,
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 };
Duncan Sandsaf260b92010-05-11 20:16:05 +0000294 class LLVM_LIBRARY_VISIBILITY Link : public Tool {
Daniel Dunbar10de9e62009-06-29 20:52:51 +0000295 public:
Daniel Dunbar1cb532c2010-05-22 00:37:18 +0000296 Link(const ToolChain &TC) : Tool("openbsd::Link", "linker", TC) {}
Daniel Dunbar10de9e62009-06-29 20:52:51 +0000297
Daniel Dunbar10de9e62009-06-29 20:52:51 +0000298 virtual bool hasIntegratedCPP() const { return false; }
299
300 virtual void ConstructJob(Compilation &C, const JobAction &JA,
Mike Stump11289f42009-09-09 15:08:12 +0000301 const InputInfo &Output,
302 const InputInfoList &Inputs,
303 const ArgList &TCArgs,
Daniel Dunbar10de9e62009-06-29 20:52:51 +0000304 const char *LinkingOutput) const;
305 };
Edward O'Callaghan856e4ff2009-08-22 01:06:46 +0000306} // end namespace openbsd
Daniel Dunbar10de9e62009-06-29 20:52:51 +0000307
Daniel Dunbar8eb473c2009-03-31 17:45:15 +0000308 /// freebsd -- Directly call GNU Binutils assembler and linker
309namespace freebsd {
Duncan Sandsaf260b92010-05-11 20:16:05 +0000310 class LLVM_LIBRARY_VISIBILITY Assemble : public Tool {
Daniel Dunbar8eb473c2009-03-31 17:45:15 +0000311 public:
Daniel Dunbar1cb532c2010-05-22 00:37:18 +0000312 Assemble(const ToolChain &TC) : Tool("freebsd::Assemble", "assembler",
313 TC) {}
Daniel Dunbar8eb473c2009-03-31 17:45:15 +0000314
Daniel Dunbar8eb473c2009-03-31 17:45:15 +0000315 virtual bool hasIntegratedCPP() const { return false; }
316
317 virtual void ConstructJob(Compilation &C, const JobAction &JA,
Mike Stump11289f42009-09-09 15:08:12 +0000318 const InputInfo &Output,
319 const InputInfoList &Inputs,
320 const ArgList &TCArgs,
Daniel Dunbar8eb473c2009-03-31 17:45:15 +0000321 const char *LinkingOutput) const;
322 };
Duncan Sandsaf260b92010-05-11 20:16:05 +0000323 class LLVM_LIBRARY_VISIBILITY Link : public Tool {
Daniel Dunbard854c8d2009-04-01 19:36:32 +0000324 public:
Daniel Dunbar1cb532c2010-05-22 00:37:18 +0000325 Link(const ToolChain &TC) : Tool("freebsd::Link", "linker", TC) {}
Daniel Dunbard854c8d2009-04-01 19:36:32 +0000326
Daniel Dunbard854c8d2009-04-01 19:36:32 +0000327 virtual bool hasIntegratedCPP() const { return false; }
328
329 virtual void ConstructJob(Compilation &C, const JobAction &JA,
Mike Stump11289f42009-09-09 15:08:12 +0000330 const InputInfo &Output,
331 const InputInfoList &Inputs,
332 const ArgList &TCArgs,
Daniel Dunbard854c8d2009-04-01 19:36:32 +0000333 const char *LinkingOutput) const;
334 };
Edward O'Callaghan856e4ff2009-08-22 01:06:46 +0000335} // end namespace freebsd
336
Benjamin Kramer24f1d3e2011-02-02 18:59:27 +0000337 /// netbsd -- Directly call GNU Binutils assembler and linker
338namespace netbsd {
339 class LLVM_LIBRARY_VISIBILITY Assemble : public Tool {
340 public:
341 Assemble(const ToolChain &TC) : Tool("netbsd::Assemble", "assembler",
342 TC) {}
343
344 virtual bool hasIntegratedCPP() const { return false; }
345
346 virtual void ConstructJob(Compilation &C, const JobAction &JA,
347 const InputInfo &Output,
348 const InputInfoList &Inputs,
349 const ArgList &TCArgs,
350 const char *LinkingOutput) const;
351 };
352 class LLVM_LIBRARY_VISIBILITY Link : public Tool {
353 public:
354 Link(const ToolChain &TC) : Tool("netbsd::Link", "linker", TC) {}
355
356 virtual bool hasIntegratedCPP() const { return false; }
357
358 virtual void ConstructJob(Compilation &C, const JobAction &JA,
359 const InputInfo &Output,
360 const InputInfoList &Inputs,
361 const ArgList &TCArgs,
362 const char *LinkingOutput) const;
363 };
364} // end namespace netbsd
365
Rafael Espindola92b00932010-08-10 00:25:48 +0000366 /// linux -- Directly call GNU Binutils assembler and linker
367namespace linuxtools {
368 class LLVM_LIBRARY_VISIBILITY Assemble : public Tool {
369 public:
370 Assemble(const ToolChain &TC) : Tool("linux::Assemble", "assembler",
371 TC) {}
372
373 virtual bool hasIntegratedCPP() const { return false; }
374
375 virtual void ConstructJob(Compilation &C, const JobAction &JA,
376 const InputInfo &Output,
377 const InputInfoList &Inputs,
378 const ArgList &TCArgs,
379 const char *LinkingOutput) const;
380 };
Rafael Espindolac8f008f2010-11-07 20:14:31 +0000381 class LLVM_LIBRARY_VISIBILITY Link : public Tool {
382 public:
383 Link(const ToolChain &TC) : Tool("linux::Link", "linker", TC) {}
384
385 virtual bool hasIntegratedCPP() const { return false; }
386
387 virtual void ConstructJob(Compilation &C, const JobAction &JA,
388 const InputInfo &Output,
389 const InputInfoList &Inputs,
390 const ArgList &TCArgs,
391 const char *LinkingOutput) const;
392 };
Rafael Espindola92b00932010-08-10 00:25:48 +0000393}
Chris Lattner3e2ee142010-07-07 16:01:42 +0000394 /// minix -- Directly call GNU Binutils assembler and linker
395namespace minix {
396 class LLVM_LIBRARY_VISIBILITY Assemble : public Tool {
397 public:
398 Assemble(const ToolChain &TC) : Tool("minix::Assemble", "assembler",
399 TC) {}
400
Chris Lattner3e2ee142010-07-07 16:01:42 +0000401 virtual bool hasIntegratedCPP() const { return false; }
402
403 virtual void ConstructJob(Compilation &C, const JobAction &JA,
Chris Lattner3e2ee142010-07-07 16:01:42 +0000404 const InputInfo &Output,
405 const InputInfoList &Inputs,
406 const ArgList &TCArgs,
407 const char *LinkingOutput) const;
408 };
409 class LLVM_LIBRARY_VISIBILITY Link : public Tool {
410 public:
411 Link(const ToolChain &TC) : Tool("minix::Link", "linker", TC) {}
412
Chris Lattner3e2ee142010-07-07 16:01:42 +0000413 virtual bool hasIntegratedCPP() const { return false; }
414
415 virtual void ConstructJob(Compilation &C, const JobAction &JA,
Chris Lattner3e2ee142010-07-07 16:01:42 +0000416 const InputInfo &Output,
417 const InputInfoList &Inputs,
418 const ArgList &TCArgs,
419 const char *LinkingOutput) const;
420 };
421} // end namespace minix
422
Edward O'Callaghan856e4ff2009-08-22 01:06:46 +0000423 /// auroraux -- Directly call GNU Binutils assembler and linker
424namespace auroraux {
Duncan Sandsaf260b92010-05-11 20:16:05 +0000425 class LLVM_LIBRARY_VISIBILITY Assemble : public Tool {
Edward O'Callaghan856e4ff2009-08-22 01:06:46 +0000426 public:
Daniel Dunbar1cb532c2010-05-22 00:37:18 +0000427 Assemble(const ToolChain &TC) : Tool("auroraux::Assemble", "assembler",
428 TC) {}
Edward O'Callaghan856e4ff2009-08-22 01:06:46 +0000429
Edward O'Callaghan856e4ff2009-08-22 01:06:46 +0000430 virtual bool hasIntegratedCPP() const { return false; }
431
432 virtual void ConstructJob(Compilation &C, const JobAction &JA,
Mike Stump11289f42009-09-09 15:08:12 +0000433 const InputInfo &Output,
434 const InputInfoList &Inputs,
435 const ArgList &TCArgs,
Edward O'Callaghan856e4ff2009-08-22 01:06:46 +0000436 const char *LinkingOutput) const;
437 };
Duncan Sandsaf260b92010-05-11 20:16:05 +0000438 class LLVM_LIBRARY_VISIBILITY Link : public Tool {
Edward O'Callaghan856e4ff2009-08-22 01:06:46 +0000439 public:
Daniel Dunbar1cb532c2010-05-22 00:37:18 +0000440 Link(const ToolChain &TC) : Tool("auroraux::Link", "linker", TC) {}
Edward O'Callaghan856e4ff2009-08-22 01:06:46 +0000441
Edward O'Callaghan856e4ff2009-08-22 01:06:46 +0000442 virtual bool hasIntegratedCPP() const { return false; }
443
444 virtual void ConstructJob(Compilation &C, const JobAction &JA,
Mike Stump11289f42009-09-09 15:08:12 +0000445 const InputInfo &Output,
446 const InputInfoList &Inputs,
447 const ArgList &TCArgs,
Edward O'Callaghan856e4ff2009-08-22 01:06:46 +0000448 const char *LinkingOutput) const;
449 };
450} // end namespace auroraux
Daniel Dunbar8eb473c2009-03-31 17:45:15 +0000451
Daniel Dunbarcc912342009-05-02 18:28:39 +0000452 /// dragonfly -- Directly call GNU Binutils assembler and linker
453namespace dragonfly {
Duncan Sandsaf260b92010-05-11 20:16:05 +0000454 class LLVM_LIBRARY_VISIBILITY Assemble : public Tool {
Daniel Dunbarcc912342009-05-02 18:28:39 +0000455 public:
Daniel Dunbar1cb532c2010-05-22 00:37:18 +0000456 Assemble(const ToolChain &TC) : Tool("dragonfly::Assemble", "assembler",
457 TC) {}
Daniel Dunbarcc912342009-05-02 18:28:39 +0000458
Daniel Dunbarcc912342009-05-02 18:28:39 +0000459 virtual bool hasIntegratedCPP() const { return false; }
460
461 virtual void ConstructJob(Compilation &C, const JobAction &JA,
Mike Stump11289f42009-09-09 15:08:12 +0000462 const InputInfo &Output,
463 const InputInfoList &Inputs,
464 const ArgList &TCArgs,
Daniel Dunbarcc912342009-05-02 18:28:39 +0000465 const char *LinkingOutput) const;
466 };
Duncan Sandsaf260b92010-05-11 20:16:05 +0000467 class LLVM_LIBRARY_VISIBILITY Link : public Tool {
Daniel Dunbarcc912342009-05-02 18:28:39 +0000468 public:
Daniel Dunbar1cb532c2010-05-22 00:37:18 +0000469 Link(const ToolChain &TC) : Tool("dragonfly::Link", "linker", TC) {}
Daniel Dunbarcc912342009-05-02 18:28:39 +0000470
Daniel Dunbarcc912342009-05-02 18:28:39 +0000471 virtual bool hasIntegratedCPP() const { return false; }
472
473 virtual void ConstructJob(Compilation &C, const JobAction &JA,
Mike Stump11289f42009-09-09 15:08:12 +0000474 const InputInfo &Output,
475 const InputInfoList &Inputs,
476 const ArgList &TCArgs,
Daniel Dunbarcc912342009-05-02 18:28:39 +0000477 const char *LinkingOutput) const;
478 };
Edward O'Callaghan856e4ff2009-08-22 01:06:46 +0000479} // end namespace dragonfly
Daniel Dunbarcc912342009-05-02 18:28:39 +0000480
Michael J. Spencerb186bc32010-08-21 21:55:07 +0000481 /// Visual studio tools.
482namespace visualstudio {
483 class LLVM_LIBRARY_VISIBILITY Link : public Tool {
484 public:
485 Link(const ToolChain &TC) : Tool("visualstudio::Link", "linker", TC) {}
486
487 virtual bool hasIntegratedCPP() const { return false; }
488
489 virtual void ConstructJob(Compilation &C, const JobAction &JA,
490 const InputInfo &Output,
491 const InputInfoList &Inputs,
492 const ArgList &TCArgs,
493 const char *LinkingOutput) const;
494 };
495} // end namespace visualstudio
496
Daniel Dunbar5903d8c2009-03-17 22:07:58 +0000497} // end namespace toolchains
498} // end namespace driver
499} // end namespace clang
500
Edward O'Callaghan856e4ff2009-08-22 01:06:46 +0000501#endif // CLANG_LIB_DRIVER_TOOLS_H_