blob: 651a8f2963ce5d8f88f147f2cac292f2065b1152 [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
Joerg Sonnenberger637603a2011-05-16 13:35:02 +000017#include "llvm/ADT/Triple.h"
Daniel Dunbar5903d8c2009-03-17 22:07:58 +000018#include "llvm/Support/Compiler.h"
19
20namespace clang {
21namespace driver {
Douglas Gregor111af7d2009-04-18 00:34:01 +000022 class Driver;
23
Daniel Dunbarc1964212009-03-26 16:23:12 +000024namespace toolchains {
Daniel Dunbarf0a5b9b2009-09-04 18:34:51 +000025 class Darwin;
Daniel Dunbarc1964212009-03-26 16:23:12 +000026}
27
Daniel Dunbar15abb2e2009-03-17 22:18:43 +000028namespace tools {
Daniel Dunbar5903d8c2009-03-17 22:07:58 +000029
Daniel Dunbar4f5e79c2010-05-20 21:30:13 +000030 /// \brief Clang compiler tool.
Duncan Sandsaf260b92010-05-11 20:16:05 +000031 class LLVM_LIBRARY_VISIBILITY Clang : public Tool {
Peter Collingbourne9b515cb2011-11-06 00:40:05 +000032 void AddPreprocessingOptions(Compilation &C,
33 const Driver &D,
Douglas Gregor111af7d2009-04-18 00:34:01 +000034 const ArgList &Args,
Daniel Dunbard067f7f2009-04-08 23:54:23 +000035 ArgStringList &CmdArgs,
36 const InputInfo &Output,
37 const InputInfoList &Inputs) const;
38
Daniel Dunbarc9388c12011-03-17 17:10:06 +000039 void AddARMTargetArgs(const ArgList &Args, ArgStringList &CmdArgs,
40 bool KernelOrKext) const;
Eric Christopher0b26a612010-03-02 02:41:08 +000041 void AddMIPSTargetArgs(const ArgList &Args, ArgStringList &CmdArgs) const;
Bruno Cardoso Lopese7f211c2010-11-09 17:21:19 +000042 void AddSparcTargetArgs(const ArgList &Args, ArgStringList &CmdArgs) const;
Daniel Dunbar3b3191f2009-09-09 22:33:08 +000043 void AddX86TargetArgs(const ArgList &Args, ArgStringList &CmdArgs) const;
Tony Linthicum76329bf2011-12-12 21:14:55 +000044 void AddHexagonTargetArgs (const ArgList &Args, ArgStringList &CmdArgs) const;
Daniel Dunbar3b3191f2009-09-09 22:33:08 +000045
Daniel Dunbar5903d8c2009-03-17 22:07:58 +000046 public:
Daniel Dunbar1cb532c2010-05-22 00:37:18 +000047 Clang(const ToolChain &TC) : Tool("clang", "clang frontend", TC) {}
Daniel Dunbar5903d8c2009-03-17 22:07:58 +000048
Daniel Dunbar3d45e172010-04-06 17:07:49 +000049 virtual bool hasGoodDiagnostics() const { return true; }
Daniel Dunbarc4343942010-02-03 03:07:56 +000050 virtual bool hasIntegratedAssembler() const { return true; }
Daniel Dunbar5903d8c2009-03-17 22:07:58 +000051 virtual bool hasIntegratedCPP() const { return true; }
Daniel Dunbar1a093d22009-03-18 06:00:36 +000052
53 virtual void ConstructJob(Compilation &C, const JobAction &JA,
Mike Stump11289f42009-09-09 15:08:12 +000054 const InputInfo &Output,
55 const InputInfoList &Inputs,
56 const ArgList &TCArgs,
Daniel Dunbar1a093d22009-03-18 06:00:36 +000057 const char *LinkingOutput) const;
Daniel Dunbar5903d8c2009-03-17 22:07:58 +000058 };
59
Daniel Dunbar4f5e79c2010-05-20 21:30:13 +000060 /// \brief Clang integrated assembler tool.
61 class LLVM_LIBRARY_VISIBILITY ClangAs : public Tool {
Jim Grosbach576452b2012-02-10 20:37:10 +000062 void AddARMTargetArgs(const ArgList &Args, ArgStringList &CmdArgs) const;
Daniel Dunbar4f5e79c2010-05-20 21:30:13 +000063 public:
Daniel Dunbar1cb532c2010-05-22 00:37:18 +000064 ClangAs(const ToolChain &TC) : Tool("clang::as",
65 "clang integrated assembler", TC) {}
Daniel Dunbar4f5e79c2010-05-20 21:30:13 +000066
Daniel Dunbar4f5e79c2010-05-20 21:30:13 +000067 virtual bool hasGoodDiagnostics() const { return true; }
68 virtual bool hasIntegratedAssembler() const { return false; }
69 virtual bool hasIntegratedCPP() const { return false; }
70
71 virtual void ConstructJob(Compilation &C, const JobAction &JA,
Daniel Dunbar4f5e79c2010-05-20 21:30:13 +000072 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,
Mike Stump11289f42009-09-09 15:08:12 +000086 const InputInfo &Output,
87 const InputInfoList &Inputs,
88 const ArgList &TCArgs,
Daniel Dunbara3246a02009-03-18 08:07:30 +000089 const char *LinkingOutput) const;
90
91 /// RenderExtraToolArgs - Render any arguments necessary to force
92 /// the particular tool mode.
Daniel Dunbar4e295052010-01-25 22:35:08 +000093 virtual void RenderExtraToolArgs(const JobAction &JA,
94 ArgStringList &CmdArgs) const = 0;
Daniel Dunbara3246a02009-03-18 08:07:30 +000095 };
96
Mike Stump11289f42009-09-09 15:08:12 +000097
Duncan Sandsaf260b92010-05-11 20:16:05 +000098 class LLVM_LIBRARY_VISIBILITY Preprocess : public Common {
Daniel Dunbara3246a02009-03-18 08:07:30 +000099 public:
Daniel Dunbar1cb532c2010-05-22 00:37:18 +0000100 Preprocess(const ToolChain &TC) : Common("gcc::Preprocess",
101 "gcc preprocessor", TC) {}
Daniel Dunbar5903d8c2009-03-17 22:07:58 +0000102
Daniel Dunbar3d45e172010-04-06 17:07:49 +0000103 virtual bool hasGoodDiagnostics() const { return true; }
Daniel Dunbar5903d8c2009-03-17 22:07:58 +0000104 virtual bool hasIntegratedCPP() const { return false; }
Daniel Dunbar1a093d22009-03-18 06:00:36 +0000105
Daniel Dunbar4e295052010-01-25 22:35:08 +0000106 virtual void RenderExtraToolArgs(const JobAction &JA,
107 ArgStringList &CmdArgs) const;
Daniel Dunbar5903d8c2009-03-17 22:07:58 +0000108 };
109
Duncan Sandsaf260b92010-05-11 20:16:05 +0000110 class LLVM_LIBRARY_VISIBILITY Precompile : public Common {
Daniel Dunbar5903d8c2009-03-17 22:07:58 +0000111 public:
Daniel Dunbar1cb532c2010-05-22 00:37:18 +0000112 Precompile(const ToolChain &TC) : Common("gcc::Precompile",
113 "gcc precompile", TC) {}
Daniel Dunbar5903d8c2009-03-17 22:07:58 +0000114
Daniel Dunbar3d45e172010-04-06 17:07:49 +0000115 virtual bool hasGoodDiagnostics() const { return true; }
Daniel Dunbar5903d8c2009-03-17 22:07:58 +0000116 virtual bool hasIntegratedCPP() const { return true; }
Daniel Dunbar1a093d22009-03-18 06:00:36 +0000117
Daniel Dunbar4e295052010-01-25 22:35:08 +0000118 virtual void RenderExtraToolArgs(const JobAction &JA,
119 ArgStringList &CmdArgs) const;
Daniel Dunbar5903d8c2009-03-17 22:07:58 +0000120 };
121
Duncan Sandsaf260b92010-05-11 20:16:05 +0000122 class LLVM_LIBRARY_VISIBILITY Compile : public Common {
Daniel Dunbar5903d8c2009-03-17 22:07:58 +0000123 public:
Daniel Dunbar1cb532c2010-05-22 00:37:18 +0000124 Compile(const ToolChain &TC) : Common("gcc::Compile",
125 "gcc frontend", TC) {}
Daniel Dunbar5903d8c2009-03-17 22:07:58 +0000126
Daniel Dunbar3d45e172010-04-06 17:07:49 +0000127 virtual bool hasGoodDiagnostics() const { return true; }
Daniel Dunbar5903d8c2009-03-17 22:07:58 +0000128 virtual bool hasIntegratedCPP() const { return true; }
Daniel Dunbar1a093d22009-03-18 06:00:36 +0000129
Daniel Dunbar4e295052010-01-25 22:35:08 +0000130 virtual void RenderExtraToolArgs(const JobAction &JA,
131 ArgStringList &CmdArgs) const;
Daniel Dunbar5903d8c2009-03-17 22:07:58 +0000132 };
133
Duncan Sandsaf260b92010-05-11 20:16:05 +0000134 class LLVM_LIBRARY_VISIBILITY Assemble : public Common {
Daniel Dunbar5903d8c2009-03-17 22:07:58 +0000135 public:
Daniel Dunbar1cb532c2010-05-22 00:37:18 +0000136 Assemble(const ToolChain &TC) : Common("gcc::Assemble",
137 "assembler (via gcc)", TC) {}
Daniel Dunbar5903d8c2009-03-17 22:07:58 +0000138
Daniel Dunbar5903d8c2009-03-17 22:07:58 +0000139 virtual bool hasIntegratedCPP() const { return false; }
Daniel Dunbar1a093d22009-03-18 06:00:36 +0000140
Daniel Dunbar4e295052010-01-25 22:35:08 +0000141 virtual void RenderExtraToolArgs(const JobAction &JA,
142 ArgStringList &CmdArgs) const;
Daniel Dunbar5903d8c2009-03-17 22:07:58 +0000143 };
144
Duncan Sandsaf260b92010-05-11 20:16:05 +0000145 class LLVM_LIBRARY_VISIBILITY Link : public Common {
Daniel Dunbar5903d8c2009-03-17 22:07:58 +0000146 public:
Daniel Dunbar1cb532c2010-05-22 00:37:18 +0000147 Link(const ToolChain &TC) : Common("gcc::Link",
148 "linker (via gcc)", TC) {}
Daniel Dunbar5903d8c2009-03-17 22:07:58 +0000149
Daniel Dunbar5903d8c2009-03-17 22:07:58 +0000150 virtual bool hasIntegratedCPP() const { return false; }
Chad Rosierbee5a1d2012-03-07 00:30:40 +0000151 virtual bool isLinkJob() const { return true; }
Daniel Dunbar1a093d22009-03-18 06:00:36 +0000152
Daniel Dunbar4e295052010-01-25 22:35:08 +0000153 virtual void RenderExtraToolArgs(const JobAction &JA,
154 ArgStringList &CmdArgs) const;
Daniel Dunbar5903d8c2009-03-17 22:07:58 +0000155 };
Daniel Dunbar82116f82009-03-17 22:45:24 +0000156} // end namespace gcc
Daniel Dunbar5903d8c2009-03-17 22:07:58 +0000157
Tony Linthicum76329bf2011-12-12 21:14:55 +0000158namespace hexagon {
159 // For Hexagon, we do not need to instantiate tools for PreProcess, PreCompile and Compile.
160 // We simply use "clang -cc1" for those actions.
161 class LLVM_LIBRARY_VISIBILITY Assemble : public Tool {
162 public:
163 Assemble(const ToolChain &TC) : Tool("hexagon::Assemble",
164 "hexagon-as", TC) {}
165
166 virtual bool hasIntegratedCPP() const { return false; }
167
168 virtual void RenderExtraToolArgs(const JobAction &JA,
169 ArgStringList &CmdArgs) const;
170 virtual void ConstructJob(Compilation &C, const JobAction &JA,
171 const InputInfo &Output,
172 const InputInfoList &Inputs,
173 const ArgList &TCArgs,
174 const char *LinkingOutput) const;
175 };
176
177 class LLVM_LIBRARY_VISIBILITY Link : public Tool {
178 public:
179 Link(const ToolChain &TC) : Tool("hexagon::Link",
180 "hexagon-ld", TC) {}
181
182 virtual bool hasIntegratedCPP() const { return false; }
Chad Rosierbee5a1d2012-03-07 00:30:40 +0000183 virtual bool isLinkJob() const { return true; }
Tony Linthicum76329bf2011-12-12 21:14:55 +0000184
185 virtual void RenderExtraToolArgs(const JobAction &JA,
186 ArgStringList &CmdArgs) const;
187 virtual void ConstructJob(Compilation &C, const JobAction &JA,
188 const InputInfo &Output,
189 const InputInfoList &Inputs,
190 const ArgList &TCArgs,
191 const char *LinkingOutput) const;
192 };
193} // end namespace hexagon.
194
195
Daniel Dunbar64ed5e32009-03-20 00:52:38 +0000196namespace darwin {
Duncan Sandsaf260b92010-05-11 20:16:05 +0000197 class LLVM_LIBRARY_VISIBILITY DarwinTool : public Tool {
David Blaikie68e081d2011-12-20 02:48:34 +0000198 virtual void anchor();
Daniel Dunbare9ded432009-09-09 18:36:20 +0000199 protected:
200 void AddDarwinArch(const ArgList &Args, ArgStringList &CmdArgs) const;
Daniel Dunbare9ded432009-09-09 18:36:20 +0000201
202 const toolchains::Darwin &getDarwinToolChain() const {
203 return reinterpret_cast<const toolchains::Darwin&>(getToolChain());
204 }
205
206 public:
Daniel Dunbar1cb532c2010-05-22 00:37:18 +0000207 DarwinTool(const char *Name, const char *ShortName,
208 const ToolChain &TC) : Tool(Name, ShortName, TC) {}
Daniel Dunbare9ded432009-09-09 18:36:20 +0000209 };
210
Duncan Sandsaf260b92010-05-11 20:16:05 +0000211 class LLVM_LIBRARY_VISIBILITY CC1 : public DarwinTool {
David Blaikie68e081d2011-12-20 02:48:34 +0000212 virtual void anchor();
Daniel Dunbar52e96cc2009-03-30 00:34:04 +0000213 public:
Mike Stump11289f42009-09-09 15:08:12 +0000214 static const char *getBaseInputName(const ArgList &Args,
Daniel Dunbar52e96cc2009-03-30 00:34:04 +0000215 const InputInfoList &Input);
Mike Stump11289f42009-09-09 15:08:12 +0000216 static const char *getBaseInputStem(const ArgList &Args,
Daniel Dunbar52e96cc2009-03-30 00:34:04 +0000217 const InputInfoList &Input);
Mike Stump11289f42009-09-09 15:08:12 +0000218 static const char *getDependencyFileName(const ArgList &Args,
Daniel Dunbar52e96cc2009-03-30 00:34:04 +0000219 const InputInfoList &Inputs);
220
Daniel Dunbare6adeee2009-03-29 17:08:39 +0000221 protected:
222 const char *getCC1Name(types::ID Type) const;
223
Daniel Dunbarafec1f52009-03-29 18:40:18 +0000224 void AddCC1Args(const ArgList &Args, ArgStringList &CmdArgs) const;
Chad Rosierbc5ea3d2011-08-17 18:24:55 +0000225 void RemoveCC1UnsupportedArgs(ArgStringList &CmdArgs) const;
Daniel Dunbare6adeee2009-03-29 17:08:39 +0000226 void AddCC1OptionsArgs(const ArgList &Args, ArgStringList &CmdArgs,
227 const InputInfoList &Inputs,
Daniel Dunbarafec1f52009-03-29 18:40:18 +0000228 const ArgStringList &OutputArgs) const;
Daniel Dunbare6adeee2009-03-29 17:08:39 +0000229 void AddCPPOptionsArgs(const ArgList &Args, ArgStringList &CmdArgs,
230 const InputInfoList &Inputs,
Daniel Dunbarafec1f52009-03-29 18:40:18 +0000231 const ArgStringList &OutputArgs) const;
Mike Stump11289f42009-09-09 15:08:12 +0000232 void AddCPPUniqueOptionsArgs(const ArgList &Args,
Daniel Dunbarafec1f52009-03-29 18:40:18 +0000233 ArgStringList &CmdArgs,
234 const InputInfoList &Inputs) const;
235 void AddCPPArgs(const ArgList &Args, ArgStringList &CmdArgs) const;
Daniel Dunbare6adeee2009-03-29 17:08:39 +0000236
237 public:
Daniel Dunbar1cb532c2010-05-22 00:37:18 +0000238 CC1(const char *Name, const char *ShortName,
239 const ToolChain &TC) : DarwinTool(Name, ShortName, TC) {}
Daniel Dunbare6adeee2009-03-29 17:08:39 +0000240
Daniel Dunbar3d45e172010-04-06 17:07:49 +0000241 virtual bool hasGoodDiagnostics() const { return true; }
Daniel Dunbare6adeee2009-03-29 17:08:39 +0000242 virtual bool hasIntegratedCPP() const { return true; }
243 };
244
Duncan Sandsaf260b92010-05-11 20:16:05 +0000245 class LLVM_LIBRARY_VISIBILITY Preprocess : public CC1 {
Daniel Dunbare6adeee2009-03-29 17:08:39 +0000246 public:
Daniel Dunbar1cb532c2010-05-22 00:37:18 +0000247 Preprocess(const ToolChain &TC) : CC1("darwin::Preprocess",
248 "gcc preprocessor", TC) {}
Daniel Dunbare6adeee2009-03-29 17:08:39 +0000249
250 virtual void ConstructJob(Compilation &C, const JobAction &JA,
Mike Stump11289f42009-09-09 15:08:12 +0000251 const InputInfo &Output,
252 const InputInfoList &Inputs,
253 const ArgList &TCArgs,
Daniel Dunbare6adeee2009-03-29 17:08:39 +0000254 const char *LinkingOutput) const;
255 };
256
Duncan Sandsaf260b92010-05-11 20:16:05 +0000257 class LLVM_LIBRARY_VISIBILITY Compile : public CC1 {
Daniel Dunbare6adeee2009-03-29 17:08:39 +0000258 public:
Daniel Dunbar1cb532c2010-05-22 00:37:18 +0000259 Compile(const ToolChain &TC) : CC1("darwin::Compile", "gcc frontend", TC) {}
Daniel Dunbare6adeee2009-03-29 17:08:39 +0000260
261 virtual void ConstructJob(Compilation &C, const JobAction &JA,
Mike Stump11289f42009-09-09 15:08:12 +0000262 const InputInfo &Output,
263 const InputInfoList &Inputs,
264 const ArgList &TCArgs,
Daniel Dunbare6adeee2009-03-29 17:08:39 +0000265 const char *LinkingOutput) const;
266 };
267
Duncan Sandsaf260b92010-05-11 20:16:05 +0000268 class LLVM_LIBRARY_VISIBILITY Assemble : public DarwinTool {
Daniel Dunbarbe220842009-03-20 16:06:39 +0000269 public:
Daniel Dunbar1cb532c2010-05-22 00:37:18 +0000270 Assemble(const ToolChain &TC) : DarwinTool("darwin::Assemble",
271 "assembler", TC) {}
Daniel Dunbarbe220842009-03-20 16:06:39 +0000272
Daniel Dunbarbe220842009-03-20 16:06:39 +0000273 virtual bool hasIntegratedCPP() const { return false; }
274
275 virtual void ConstructJob(Compilation &C, const JobAction &JA,
Mike Stump11289f42009-09-09 15:08:12 +0000276 const InputInfo &Output,
277 const InputInfoList &Inputs,
278 const ArgList &TCArgs,
Daniel Dunbarbe220842009-03-20 16:06:39 +0000279 const char *LinkingOutput) const;
280 };
281
Duncan Sandsaf260b92010-05-11 20:16:05 +0000282 class LLVM_LIBRARY_VISIBILITY Link : public DarwinTool {
Daniel Dunbarccbc4522010-09-09 21:51:05 +0000283 void AddLinkArgs(Compilation &C, const ArgList &Args,
284 ArgStringList &CmdArgs) const;
Daniel Dunbarc1964212009-03-26 16:23:12 +0000285
Daniel Dunbarc1964212009-03-26 16:23:12 +0000286 public:
Daniel Dunbar1cb532c2010-05-22 00:37:18 +0000287 Link(const ToolChain &TC) : DarwinTool("darwin::Link", "linker", TC) {}
Daniel Dunbarc1964212009-03-26 16:23:12 +0000288
Daniel Dunbarc1964212009-03-26 16:23:12 +0000289 virtual bool hasIntegratedCPP() const { return false; }
Chad Rosierbee5a1d2012-03-07 00:30:40 +0000290 virtual bool isLinkJob() const { return true; }
Daniel Dunbarc1964212009-03-26 16:23:12 +0000291
292 virtual void ConstructJob(Compilation &C, const JobAction &JA,
Mike Stump11289f42009-09-09 15:08:12 +0000293 const InputInfo &Output,
294 const InputInfoList &Inputs,
295 const ArgList &TCArgs,
Daniel Dunbarc1964212009-03-26 16:23:12 +0000296 const char *LinkingOutput) const;
297 };
298
Duncan Sandsaf260b92010-05-11 20:16:05 +0000299 class LLVM_LIBRARY_VISIBILITY Lipo : public DarwinTool {
Daniel Dunbar64ed5e32009-03-20 00:52:38 +0000300 public:
Daniel Dunbar1cb532c2010-05-22 00:37:18 +0000301 Lipo(const ToolChain &TC) : DarwinTool("darwin::Lipo", "lipo", TC) {}
Daniel Dunbar64ed5e32009-03-20 00:52:38 +0000302
Daniel Dunbar64ed5e32009-03-20 00:52:38 +0000303 virtual bool hasIntegratedCPP() const { return false; }
304
305 virtual void ConstructJob(Compilation &C, const JobAction &JA,
Mike Stump11289f42009-09-09 15:08:12 +0000306 const InputInfo &Output,
307 const InputInfoList &Inputs,
308 const ArgList &TCArgs,
Daniel Dunbar64ed5e32009-03-20 00:52:38 +0000309 const char *LinkingOutput) const;
310 };
Daniel Dunbar88299622010-06-04 18:28:36 +0000311
312 class LLVM_LIBRARY_VISIBILITY Dsymutil : public DarwinTool {
313 public:
314 Dsymutil(const ToolChain &TC) : DarwinTool("darwin::Dsymutil",
315 "dsymutil", TC) {}
316
Daniel Dunbar88299622010-06-04 18:28:36 +0000317 virtual bool hasIntegratedCPP() const { return false; }
318
319 virtual void ConstructJob(Compilation &C, const JobAction &JA,
Daniel Dunbar88299622010-06-04 18:28:36 +0000320 const InputInfo &Output,
321 const InputInfoList &Inputs,
322 const ArgList &TCArgs,
323 const char *LinkingOutput) const;
324 };
Eric Christopher551ef452011-08-23 17:56:55 +0000325
326 class LLVM_LIBRARY_VISIBILITY VerifyDebug : public DarwinTool {
327 public:
328 VerifyDebug(const ToolChain &TC) : DarwinTool("darwin::VerifyDebug",
329 "dwarfdump", TC) {}
330
331 virtual bool hasIntegratedCPP() const { return false; }
332
333 virtual void ConstructJob(Compilation &C, const JobAction &JA,
334 const InputInfo &Output,
335 const InputInfoList &Inputs,
336 const ArgList &TCArgs,
337 const char *LinkingOutput) const;
338 };
339
Daniel Dunbar64ed5e32009-03-20 00:52:38 +0000340}
341
Daniel Dunbar10de9e62009-06-29 20:52:51 +0000342 /// openbsd -- Directly call GNU Binutils assembler and linker
343namespace openbsd {
Duncan Sandsaf260b92010-05-11 20:16:05 +0000344 class LLVM_LIBRARY_VISIBILITY Assemble : public Tool {
Daniel Dunbar10de9e62009-06-29 20:52:51 +0000345 public:
Daniel Dunbar1cb532c2010-05-22 00:37:18 +0000346 Assemble(const ToolChain &TC) : Tool("openbsd::Assemble", "assembler",
347 TC) {}
Daniel Dunbar10de9e62009-06-29 20:52:51 +0000348
Daniel Dunbar10de9e62009-06-29 20:52:51 +0000349 virtual bool hasIntegratedCPP() const { return false; }
350
351 virtual void ConstructJob(Compilation &C, const JobAction &JA,
Mike Stump11289f42009-09-09 15:08:12 +0000352 const InputInfo &Output,
353 const InputInfoList &Inputs,
354 const ArgList &TCArgs,
Daniel Dunbar10de9e62009-06-29 20:52:51 +0000355 const char *LinkingOutput) const;
356 };
Duncan Sandsaf260b92010-05-11 20:16:05 +0000357 class LLVM_LIBRARY_VISIBILITY Link : public Tool {
Daniel Dunbar10de9e62009-06-29 20:52:51 +0000358 public:
Daniel Dunbar1cb532c2010-05-22 00:37:18 +0000359 Link(const ToolChain &TC) : Tool("openbsd::Link", "linker", TC) {}
Daniel Dunbar10de9e62009-06-29 20:52:51 +0000360
Daniel Dunbar10de9e62009-06-29 20:52:51 +0000361 virtual bool hasIntegratedCPP() const { return false; }
Chad Rosierbee5a1d2012-03-07 00:30:40 +0000362 virtual bool isLinkJob() const { return true; }
Daniel Dunbar10de9e62009-06-29 20:52:51 +0000363
364 virtual void ConstructJob(Compilation &C, const JobAction &JA,
Mike Stump11289f42009-09-09 15:08:12 +0000365 const InputInfo &Output,
366 const InputInfoList &Inputs,
367 const ArgList &TCArgs,
Daniel Dunbar10de9e62009-06-29 20:52:51 +0000368 const char *LinkingOutput) const;
369 };
Edward O'Callaghan856e4ff2009-08-22 01:06:46 +0000370} // end namespace openbsd
Daniel Dunbar10de9e62009-06-29 20:52:51 +0000371
Daniel Dunbar8eb473c2009-03-31 17:45:15 +0000372 /// freebsd -- Directly call GNU Binutils assembler and linker
373namespace freebsd {
Duncan Sandsaf260b92010-05-11 20:16:05 +0000374 class LLVM_LIBRARY_VISIBILITY Assemble : public Tool {
Daniel Dunbar8eb473c2009-03-31 17:45:15 +0000375 public:
Daniel Dunbar1cb532c2010-05-22 00:37:18 +0000376 Assemble(const ToolChain &TC) : Tool("freebsd::Assemble", "assembler",
377 TC) {}
Daniel Dunbar8eb473c2009-03-31 17:45:15 +0000378
Daniel Dunbar8eb473c2009-03-31 17:45:15 +0000379 virtual bool hasIntegratedCPP() const { return false; }
380
381 virtual void ConstructJob(Compilation &C, const JobAction &JA,
Mike Stump11289f42009-09-09 15:08:12 +0000382 const InputInfo &Output,
383 const InputInfoList &Inputs,
384 const ArgList &TCArgs,
Daniel Dunbar8eb473c2009-03-31 17:45:15 +0000385 const char *LinkingOutput) const;
386 };
Duncan Sandsaf260b92010-05-11 20:16:05 +0000387 class LLVM_LIBRARY_VISIBILITY Link : public Tool {
Daniel Dunbard854c8d2009-04-01 19:36:32 +0000388 public:
Daniel Dunbar1cb532c2010-05-22 00:37:18 +0000389 Link(const ToolChain &TC) : Tool("freebsd::Link", "linker", TC) {}
Daniel Dunbard854c8d2009-04-01 19:36:32 +0000390
Daniel Dunbard854c8d2009-04-01 19:36:32 +0000391 virtual bool hasIntegratedCPP() const { return false; }
Chad Rosierbee5a1d2012-03-07 00:30:40 +0000392 virtual bool isLinkJob() const { return true; }
Daniel Dunbard854c8d2009-04-01 19:36:32 +0000393
394 virtual void ConstructJob(Compilation &C, const JobAction &JA,
Mike Stump11289f42009-09-09 15:08:12 +0000395 const InputInfo &Output,
396 const InputInfoList &Inputs,
397 const ArgList &TCArgs,
Daniel Dunbard854c8d2009-04-01 19:36:32 +0000398 const char *LinkingOutput) const;
399 };
Edward O'Callaghan856e4ff2009-08-22 01:06:46 +0000400} // end namespace freebsd
401
Benjamin Kramer24f1d3e2011-02-02 18:59:27 +0000402 /// netbsd -- Directly call GNU Binutils assembler and linker
403namespace netbsd {
404 class LLVM_LIBRARY_VISIBILITY Assemble : public Tool {
Joerg Sonnenberger637603a2011-05-16 13:35:02 +0000405
Benjamin Kramer24f1d3e2011-02-02 18:59:27 +0000406 public:
Joerg Sonnenbergerd64c60e2012-01-26 22:27:52 +0000407 Assemble(const ToolChain &TC)
408 : Tool("netbsd::Assemble", "assembler", TC) {}
Benjamin Kramer24f1d3e2011-02-02 18:59:27 +0000409
410 virtual bool hasIntegratedCPP() const { return false; }
411
412 virtual void ConstructJob(Compilation &C, const JobAction &JA,
413 const InputInfo &Output,
414 const InputInfoList &Inputs,
415 const ArgList &TCArgs,
416 const char *LinkingOutput) const;
417 };
418 class LLVM_LIBRARY_VISIBILITY Link : public Tool {
Joerg Sonnenberger637603a2011-05-16 13:35:02 +0000419
Benjamin Kramer24f1d3e2011-02-02 18:59:27 +0000420 public:
Joerg Sonnenbergerd64c60e2012-01-26 22:27:52 +0000421 Link(const ToolChain &TC)
422 : Tool("netbsd::Link", "linker", TC) {}
Benjamin Kramer24f1d3e2011-02-02 18:59:27 +0000423
424 virtual bool hasIntegratedCPP() const { return false; }
Chad Rosierbee5a1d2012-03-07 00:30:40 +0000425 virtual bool isLinkJob() const { return true; }
Benjamin Kramer24f1d3e2011-02-02 18:59:27 +0000426
427 virtual void ConstructJob(Compilation &C, const JobAction &JA,
428 const InputInfo &Output,
429 const InputInfoList &Inputs,
430 const ArgList &TCArgs,
431 const char *LinkingOutput) const;
432 };
433} // end namespace netbsd
434
Rafael Espindola92b00932010-08-10 00:25:48 +0000435 /// linux -- Directly call GNU Binutils assembler and linker
436namespace linuxtools {
437 class LLVM_LIBRARY_VISIBILITY Assemble : public Tool {
438 public:
439 Assemble(const ToolChain &TC) : Tool("linux::Assemble", "assembler",
440 TC) {}
441
442 virtual bool hasIntegratedCPP() const { return false; }
443
444 virtual void ConstructJob(Compilation &C, const JobAction &JA,
445 const InputInfo &Output,
446 const InputInfoList &Inputs,
447 const ArgList &TCArgs,
448 const char *LinkingOutput) const;
449 };
Rafael Espindolac8f008f2010-11-07 20:14:31 +0000450 class LLVM_LIBRARY_VISIBILITY Link : public Tool {
451 public:
452 Link(const ToolChain &TC) : Tool("linux::Link", "linker", TC) {}
453
454 virtual bool hasIntegratedCPP() const { return false; }
Chad Rosierbee5a1d2012-03-07 00:30:40 +0000455 virtual bool isLinkJob() const { return true; }
Rafael Espindolac8f008f2010-11-07 20:14:31 +0000456
457 virtual void ConstructJob(Compilation &C, const JobAction &JA,
458 const InputInfo &Output,
459 const InputInfoList &Inputs,
460 const ArgList &TCArgs,
461 const char *LinkingOutput) const;
462 };
Rafael Espindola92b00932010-08-10 00:25:48 +0000463}
Chris Lattner3e2ee142010-07-07 16:01:42 +0000464 /// minix -- Directly call GNU Binutils assembler and linker
465namespace minix {
466 class LLVM_LIBRARY_VISIBILITY Assemble : public Tool {
467 public:
468 Assemble(const ToolChain &TC) : Tool("minix::Assemble", "assembler",
469 TC) {}
470
Chris Lattner3e2ee142010-07-07 16:01:42 +0000471 virtual bool hasIntegratedCPP() const { return false; }
472
473 virtual void ConstructJob(Compilation &C, const JobAction &JA,
Chris Lattner3e2ee142010-07-07 16:01:42 +0000474 const InputInfo &Output,
475 const InputInfoList &Inputs,
476 const ArgList &TCArgs,
477 const char *LinkingOutput) const;
478 };
479 class LLVM_LIBRARY_VISIBILITY Link : public Tool {
480 public:
481 Link(const ToolChain &TC) : Tool("minix::Link", "linker", TC) {}
482
Chris Lattner3e2ee142010-07-07 16:01:42 +0000483 virtual bool hasIntegratedCPP() const { return false; }
Chad Rosierbee5a1d2012-03-07 00:30:40 +0000484 virtual bool isLinkJob() const { return true; }
Chris Lattner3e2ee142010-07-07 16:01:42 +0000485
486 virtual void ConstructJob(Compilation &C, const JobAction &JA,
Chris Lattner3e2ee142010-07-07 16:01:42 +0000487 const InputInfo &Output,
488 const InputInfoList &Inputs,
489 const ArgList &TCArgs,
490 const char *LinkingOutput) const;
491 };
492} // end namespace minix
493
David Chisnallf571cde2012-02-15 13:39:01 +0000494 /// solaris -- Directly call Solaris assembler and linker
495namespace solaris {
496 class LLVM_LIBRARY_VISIBILITY Assemble : public Tool {
497 public:
498 Assemble(const ToolChain &TC) : Tool("solaris::Assemble", "assembler",
499 TC) {}
500
501 virtual bool hasIntegratedCPP() const { return false; }
502
503 virtual void ConstructJob(Compilation &C, const JobAction &JA,
504 const InputInfo &Output,
505 const InputInfoList &Inputs,
506 const ArgList &TCArgs,
507 const char *LinkingOutput) const;
508 };
509 class LLVM_LIBRARY_VISIBILITY Link : public Tool {
510 public:
511 Link(const ToolChain &TC) : Tool("solaris::Link", "linker", TC) {}
512
513 virtual bool hasIntegratedCPP() const { return false; }
Chad Rosierbee5a1d2012-03-07 00:30:40 +0000514 virtual bool isLinkJob() const { return true; }
David Chisnallf571cde2012-02-15 13:39:01 +0000515
516 virtual void ConstructJob(Compilation &C, const JobAction &JA,
517 const InputInfo &Output,
518 const InputInfoList &Inputs,
519 const ArgList &TCArgs,
520 const char *LinkingOutput) const;
521 };
David Chisnalla9ed5d72012-02-15 16:25:46 +0000522} // end namespace solaris
David Chisnallf571cde2012-02-15 13:39:01 +0000523
Edward O'Callaghan856e4ff2009-08-22 01:06:46 +0000524 /// auroraux -- Directly call GNU Binutils assembler and linker
525namespace auroraux {
Duncan Sandsaf260b92010-05-11 20:16:05 +0000526 class LLVM_LIBRARY_VISIBILITY Assemble : public Tool {
Edward O'Callaghan856e4ff2009-08-22 01:06:46 +0000527 public:
Daniel Dunbar1cb532c2010-05-22 00:37:18 +0000528 Assemble(const ToolChain &TC) : Tool("auroraux::Assemble", "assembler",
529 TC) {}
Edward O'Callaghan856e4ff2009-08-22 01:06:46 +0000530
Edward O'Callaghan856e4ff2009-08-22 01:06:46 +0000531 virtual bool hasIntegratedCPP() const { return false; }
532
533 virtual void ConstructJob(Compilation &C, const JobAction &JA,
Mike Stump11289f42009-09-09 15:08:12 +0000534 const InputInfo &Output,
535 const InputInfoList &Inputs,
536 const ArgList &TCArgs,
Edward O'Callaghan856e4ff2009-08-22 01:06:46 +0000537 const char *LinkingOutput) const;
538 };
Duncan Sandsaf260b92010-05-11 20:16:05 +0000539 class LLVM_LIBRARY_VISIBILITY Link : public Tool {
Edward O'Callaghan856e4ff2009-08-22 01:06:46 +0000540 public:
Daniel Dunbar1cb532c2010-05-22 00:37:18 +0000541 Link(const ToolChain &TC) : Tool("auroraux::Link", "linker", TC) {}
Edward O'Callaghan856e4ff2009-08-22 01:06:46 +0000542
Edward O'Callaghan856e4ff2009-08-22 01:06:46 +0000543 virtual bool hasIntegratedCPP() const { return false; }
Chad Rosierbee5a1d2012-03-07 00:30:40 +0000544 virtual bool isLinkJob() const { return true; }
Edward O'Callaghan856e4ff2009-08-22 01:06:46 +0000545
546 virtual void ConstructJob(Compilation &C, const JobAction &JA,
Mike Stump11289f42009-09-09 15:08:12 +0000547 const InputInfo &Output,
548 const InputInfoList &Inputs,
549 const ArgList &TCArgs,
Edward O'Callaghan856e4ff2009-08-22 01:06:46 +0000550 const char *LinkingOutput) const;
551 };
552} // end namespace auroraux
Daniel Dunbar8eb473c2009-03-31 17:45:15 +0000553
Daniel Dunbarcc912342009-05-02 18:28:39 +0000554 /// dragonfly -- Directly call GNU Binutils assembler and linker
555namespace dragonfly {
Duncan Sandsaf260b92010-05-11 20:16:05 +0000556 class LLVM_LIBRARY_VISIBILITY Assemble : public Tool {
Daniel Dunbarcc912342009-05-02 18:28:39 +0000557 public:
Daniel Dunbar1cb532c2010-05-22 00:37:18 +0000558 Assemble(const ToolChain &TC) : Tool("dragonfly::Assemble", "assembler",
559 TC) {}
Daniel Dunbarcc912342009-05-02 18:28:39 +0000560
Daniel Dunbarcc912342009-05-02 18:28:39 +0000561 virtual bool hasIntegratedCPP() const { return false; }
562
563 virtual void ConstructJob(Compilation &C, const JobAction &JA,
Mike Stump11289f42009-09-09 15:08:12 +0000564 const InputInfo &Output,
565 const InputInfoList &Inputs,
566 const ArgList &TCArgs,
Daniel Dunbarcc912342009-05-02 18:28:39 +0000567 const char *LinkingOutput) const;
568 };
Duncan Sandsaf260b92010-05-11 20:16:05 +0000569 class LLVM_LIBRARY_VISIBILITY Link : public Tool {
Daniel Dunbarcc912342009-05-02 18:28:39 +0000570 public:
Daniel Dunbar1cb532c2010-05-22 00:37:18 +0000571 Link(const ToolChain &TC) : Tool("dragonfly::Link", "linker", TC) {}
Daniel Dunbarcc912342009-05-02 18:28:39 +0000572
Daniel Dunbarcc912342009-05-02 18:28:39 +0000573 virtual bool hasIntegratedCPP() const { return false; }
Chad Rosierbee5a1d2012-03-07 00:30:40 +0000574 virtual bool isLinkJob() const { return true; }
Daniel Dunbarcc912342009-05-02 18:28:39 +0000575
576 virtual void ConstructJob(Compilation &C, const JobAction &JA,
Mike Stump11289f42009-09-09 15:08:12 +0000577 const InputInfo &Output,
578 const InputInfoList &Inputs,
579 const ArgList &TCArgs,
Daniel Dunbarcc912342009-05-02 18:28:39 +0000580 const char *LinkingOutput) const;
581 };
Edward O'Callaghan856e4ff2009-08-22 01:06:46 +0000582} // end namespace dragonfly
Daniel Dunbarcc912342009-05-02 18:28:39 +0000583
Michael J. Spencerb186bc32010-08-21 21:55:07 +0000584 /// Visual studio tools.
585namespace visualstudio {
586 class LLVM_LIBRARY_VISIBILITY Link : public Tool {
587 public:
588 Link(const ToolChain &TC) : Tool("visualstudio::Link", "linker", TC) {}
589
590 virtual bool hasIntegratedCPP() const { return false; }
Chad Rosierbee5a1d2012-03-07 00:30:40 +0000591 virtual bool isLinkJob() const { return true; }
Michael J. Spencerb186bc32010-08-21 21:55:07 +0000592
593 virtual void ConstructJob(Compilation &C, const JobAction &JA,
594 const InputInfo &Output,
595 const InputInfoList &Inputs,
596 const ArgList &TCArgs,
597 const char *LinkingOutput) const;
598 };
599} // end namespace visualstudio
600
Daniel Dunbar5903d8c2009-03-17 22:07:58 +0000601} // end namespace toolchains
602} // end namespace driver
603} // end namespace clang
604
Edward O'Callaghan856e4ff2009-08-22 01:06:46 +0000605#endif // CLANG_LIB_DRIVER_TOOLS_H_