blob: d81c987cf04bacd4bc8ca6cd860e1b7a94505bd4 [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;
44
Daniel Dunbar5903d8c2009-03-17 22:07:58 +000045 public:
Daniel Dunbar1cb532c2010-05-22 00:37:18 +000046 Clang(const ToolChain &TC) : Tool("clang", "clang frontend", TC) {}
Daniel Dunbar5903d8c2009-03-17 22:07:58 +000047
Daniel Dunbar3d45e172010-04-06 17:07:49 +000048 virtual bool hasGoodDiagnostics() const { return true; }
Daniel Dunbarc4343942010-02-03 03:07:56 +000049 virtual bool hasIntegratedAssembler() const { return true; }
Daniel Dunbar5903d8c2009-03-17 22:07:58 +000050 virtual bool hasIntegratedCPP() const { return true; }
Daniel Dunbar1a093d22009-03-18 06:00:36 +000051
52 virtual void ConstructJob(Compilation &C, const JobAction &JA,
Mike Stump11289f42009-09-09 15:08:12 +000053 const InputInfo &Output,
54 const InputInfoList &Inputs,
55 const ArgList &TCArgs,
Daniel Dunbar1a093d22009-03-18 06:00:36 +000056 const char *LinkingOutput) const;
Daniel Dunbar5903d8c2009-03-17 22:07:58 +000057 };
58
Daniel Dunbar4f5e79c2010-05-20 21:30:13 +000059 /// \brief Clang integrated assembler tool.
60 class LLVM_LIBRARY_VISIBILITY ClangAs : public Tool {
61 public:
Daniel Dunbar1cb532c2010-05-22 00:37:18 +000062 ClangAs(const ToolChain &TC) : Tool("clang::as",
63 "clang integrated assembler", TC) {}
Daniel Dunbar4f5e79c2010-05-20 21:30:13 +000064
Daniel Dunbar4f5e79c2010-05-20 21:30:13 +000065 virtual bool hasGoodDiagnostics() const { return true; }
66 virtual bool hasIntegratedAssembler() const { return false; }
67 virtual bool hasIntegratedCPP() const { return false; }
68
69 virtual void ConstructJob(Compilation &C, const JobAction &JA,
Daniel Dunbar4f5e79c2010-05-20 21:30:13 +000070 const InputInfo &Output,
71 const InputInfoList &Inputs,
72 const ArgList &TCArgs,
73 const char *LinkingOutput) const;
74 };
75
Daniel Dunbar82116f82009-03-17 22:45:24 +000076 /// gcc - Generic GCC tool implementations.
77namespace gcc {
Duncan Sandsaf260b92010-05-11 20:16:05 +000078 class LLVM_LIBRARY_VISIBILITY Common : public Tool {
Daniel Dunbar5903d8c2009-03-17 22:07:58 +000079 public:
Daniel Dunbar1cb532c2010-05-22 00:37:18 +000080 Common(const char *Name, const char *ShortName,
81 const ToolChain &TC) : Tool(Name, ShortName, TC) {}
Daniel Dunbara3246a02009-03-18 08:07:30 +000082
83 virtual void ConstructJob(Compilation &C, const JobAction &JA,
Mike Stump11289f42009-09-09 15:08:12 +000084 const InputInfo &Output,
85 const InputInfoList &Inputs,
86 const ArgList &TCArgs,
Daniel Dunbara3246a02009-03-18 08:07:30 +000087 const char *LinkingOutput) const;
88
89 /// RenderExtraToolArgs - Render any arguments necessary to force
90 /// the particular tool mode.
Daniel Dunbar4e295052010-01-25 22:35:08 +000091 virtual void RenderExtraToolArgs(const JobAction &JA,
92 ArgStringList &CmdArgs) const = 0;
Daniel Dunbara3246a02009-03-18 08:07:30 +000093 };
94
Mike Stump11289f42009-09-09 15:08:12 +000095
Duncan Sandsaf260b92010-05-11 20:16:05 +000096 class LLVM_LIBRARY_VISIBILITY Preprocess : public Common {
Daniel Dunbara3246a02009-03-18 08:07:30 +000097 public:
Daniel Dunbar1cb532c2010-05-22 00:37:18 +000098 Preprocess(const ToolChain &TC) : Common("gcc::Preprocess",
99 "gcc preprocessor", TC) {}
Daniel Dunbar5903d8c2009-03-17 22:07:58 +0000100
Daniel Dunbar3d45e172010-04-06 17:07:49 +0000101 virtual bool hasGoodDiagnostics() const { return true; }
Daniel Dunbar5903d8c2009-03-17 22:07:58 +0000102 virtual bool hasIntegratedCPP() const { return false; }
Daniel Dunbar1a093d22009-03-18 06:00:36 +0000103
Daniel Dunbar4e295052010-01-25 22:35:08 +0000104 virtual void RenderExtraToolArgs(const JobAction &JA,
105 ArgStringList &CmdArgs) const;
Daniel Dunbar5903d8c2009-03-17 22:07:58 +0000106 };
107
Duncan Sandsaf260b92010-05-11 20:16:05 +0000108 class LLVM_LIBRARY_VISIBILITY Precompile : public Common {
Daniel Dunbar5903d8c2009-03-17 22:07:58 +0000109 public:
Daniel Dunbar1cb532c2010-05-22 00:37:18 +0000110 Precompile(const ToolChain &TC) : Common("gcc::Precompile",
111 "gcc precompile", TC) {}
Daniel Dunbar5903d8c2009-03-17 22:07:58 +0000112
Daniel Dunbar3d45e172010-04-06 17:07:49 +0000113 virtual bool hasGoodDiagnostics() const { return true; }
Daniel Dunbar5903d8c2009-03-17 22:07:58 +0000114 virtual bool hasIntegratedCPP() const { return true; }
Daniel Dunbar1a093d22009-03-18 06:00:36 +0000115
Daniel Dunbar4e295052010-01-25 22:35:08 +0000116 virtual void RenderExtraToolArgs(const JobAction &JA,
117 ArgStringList &CmdArgs) const;
Daniel Dunbar5903d8c2009-03-17 22:07:58 +0000118 };
119
Duncan Sandsaf260b92010-05-11 20:16:05 +0000120 class LLVM_LIBRARY_VISIBILITY Compile : public Common {
Daniel Dunbar5903d8c2009-03-17 22:07:58 +0000121 public:
Daniel Dunbar1cb532c2010-05-22 00:37:18 +0000122 Compile(const ToolChain &TC) : Common("gcc::Compile",
123 "gcc frontend", TC) {}
Daniel Dunbar5903d8c2009-03-17 22:07:58 +0000124
Daniel Dunbar3d45e172010-04-06 17:07:49 +0000125 virtual bool hasGoodDiagnostics() const { return true; }
Daniel Dunbar5903d8c2009-03-17 22:07:58 +0000126 virtual bool hasIntegratedCPP() const { return true; }
Daniel Dunbar1a093d22009-03-18 06:00:36 +0000127
Daniel Dunbar4e295052010-01-25 22:35:08 +0000128 virtual void RenderExtraToolArgs(const JobAction &JA,
129 ArgStringList &CmdArgs) const;
Daniel Dunbar5903d8c2009-03-17 22:07:58 +0000130 };
131
Duncan Sandsaf260b92010-05-11 20:16:05 +0000132 class LLVM_LIBRARY_VISIBILITY Assemble : public Common {
Daniel Dunbar5903d8c2009-03-17 22:07:58 +0000133 public:
Daniel Dunbar1cb532c2010-05-22 00:37:18 +0000134 Assemble(const ToolChain &TC) : Common("gcc::Assemble",
135 "assembler (via gcc)", TC) {}
Daniel Dunbar5903d8c2009-03-17 22:07:58 +0000136
Daniel Dunbar5903d8c2009-03-17 22:07:58 +0000137 virtual bool hasIntegratedCPP() const { return false; }
Daniel Dunbar1a093d22009-03-18 06:00:36 +0000138
Daniel Dunbar4e295052010-01-25 22:35:08 +0000139 virtual void RenderExtraToolArgs(const JobAction &JA,
140 ArgStringList &CmdArgs) const;
Daniel Dunbar5903d8c2009-03-17 22:07:58 +0000141 };
142
Duncan Sandsaf260b92010-05-11 20:16:05 +0000143 class LLVM_LIBRARY_VISIBILITY Link : public Common {
Daniel Dunbar5903d8c2009-03-17 22:07:58 +0000144 public:
Daniel Dunbar1cb532c2010-05-22 00:37:18 +0000145 Link(const ToolChain &TC) : Common("gcc::Link",
146 "linker (via gcc)", TC) {}
Daniel Dunbar5903d8c2009-03-17 22:07:58 +0000147
Daniel Dunbar5903d8c2009-03-17 22:07:58 +0000148 virtual bool hasIntegratedCPP() const { return false; }
Daniel Dunbar1a093d22009-03-18 06:00:36 +0000149
Daniel Dunbar4e295052010-01-25 22:35:08 +0000150 virtual void RenderExtraToolArgs(const JobAction &JA,
151 ArgStringList &CmdArgs) const;
Daniel Dunbar5903d8c2009-03-17 22:07:58 +0000152 };
Daniel Dunbar82116f82009-03-17 22:45:24 +0000153} // end namespace gcc
Daniel Dunbar5903d8c2009-03-17 22:07:58 +0000154
Daniel Dunbar64ed5e32009-03-20 00:52:38 +0000155namespace darwin {
Duncan Sandsaf260b92010-05-11 20:16:05 +0000156 class LLVM_LIBRARY_VISIBILITY DarwinTool : public Tool {
Daniel Dunbare9ded432009-09-09 18:36:20 +0000157 protected:
158 void AddDarwinArch(const ArgList &Args, ArgStringList &CmdArgs) const;
Daniel Dunbare9ded432009-09-09 18:36:20 +0000159
160 const toolchains::Darwin &getDarwinToolChain() const {
161 return reinterpret_cast<const toolchains::Darwin&>(getToolChain());
162 }
163
164 public:
Daniel Dunbar1cb532c2010-05-22 00:37:18 +0000165 DarwinTool(const char *Name, const char *ShortName,
166 const ToolChain &TC) : Tool(Name, ShortName, TC) {}
Daniel Dunbare9ded432009-09-09 18:36:20 +0000167 };
168
Duncan Sandsaf260b92010-05-11 20:16:05 +0000169 class LLVM_LIBRARY_VISIBILITY CC1 : public DarwinTool {
Daniel Dunbar52e96cc2009-03-30 00:34:04 +0000170 public:
Mike Stump11289f42009-09-09 15:08:12 +0000171 static const char *getBaseInputName(const ArgList &Args,
Daniel Dunbar52e96cc2009-03-30 00:34:04 +0000172 const InputInfoList &Input);
Mike Stump11289f42009-09-09 15:08:12 +0000173 static const char *getBaseInputStem(const ArgList &Args,
Daniel Dunbar52e96cc2009-03-30 00:34:04 +0000174 const InputInfoList &Input);
Mike Stump11289f42009-09-09 15:08:12 +0000175 static const char *getDependencyFileName(const ArgList &Args,
Daniel Dunbar52e96cc2009-03-30 00:34:04 +0000176 const InputInfoList &Inputs);
177
Daniel Dunbare6adeee2009-03-29 17:08:39 +0000178 protected:
179 const char *getCC1Name(types::ID Type) const;
180
Daniel Dunbarafec1f52009-03-29 18:40:18 +0000181 void AddCC1Args(const ArgList &Args, ArgStringList &CmdArgs) const;
Chad Rosierbc5ea3d2011-08-17 18:24:55 +0000182 void RemoveCC1UnsupportedArgs(ArgStringList &CmdArgs) const;
Daniel Dunbare6adeee2009-03-29 17:08:39 +0000183 void AddCC1OptionsArgs(const ArgList &Args, ArgStringList &CmdArgs,
184 const InputInfoList &Inputs,
Daniel Dunbarafec1f52009-03-29 18:40:18 +0000185 const ArgStringList &OutputArgs) const;
Daniel Dunbare6adeee2009-03-29 17:08:39 +0000186 void AddCPPOptionsArgs(const ArgList &Args, ArgStringList &CmdArgs,
187 const InputInfoList &Inputs,
Daniel Dunbarafec1f52009-03-29 18:40:18 +0000188 const ArgStringList &OutputArgs) const;
Mike Stump11289f42009-09-09 15:08:12 +0000189 void AddCPPUniqueOptionsArgs(const ArgList &Args,
Daniel Dunbarafec1f52009-03-29 18:40:18 +0000190 ArgStringList &CmdArgs,
191 const InputInfoList &Inputs) const;
192 void AddCPPArgs(const ArgList &Args, ArgStringList &CmdArgs) const;
Daniel Dunbare6adeee2009-03-29 17:08:39 +0000193
194 public:
Daniel Dunbar1cb532c2010-05-22 00:37:18 +0000195 CC1(const char *Name, const char *ShortName,
196 const ToolChain &TC) : DarwinTool(Name, ShortName, TC) {}
Daniel Dunbare6adeee2009-03-29 17:08:39 +0000197
Daniel Dunbar3d45e172010-04-06 17:07:49 +0000198 virtual bool hasGoodDiagnostics() const { return true; }
Daniel Dunbare6adeee2009-03-29 17:08:39 +0000199 virtual bool hasIntegratedCPP() const { return true; }
200 };
201
Duncan Sandsaf260b92010-05-11 20:16:05 +0000202 class LLVM_LIBRARY_VISIBILITY Preprocess : public CC1 {
Daniel Dunbare6adeee2009-03-29 17:08:39 +0000203 public:
Daniel Dunbar1cb532c2010-05-22 00:37:18 +0000204 Preprocess(const ToolChain &TC) : CC1("darwin::Preprocess",
205 "gcc preprocessor", TC) {}
Daniel Dunbare6adeee2009-03-29 17:08:39 +0000206
207 virtual void ConstructJob(Compilation &C, const JobAction &JA,
Mike Stump11289f42009-09-09 15:08:12 +0000208 const InputInfo &Output,
209 const InputInfoList &Inputs,
210 const ArgList &TCArgs,
Daniel Dunbare6adeee2009-03-29 17:08:39 +0000211 const char *LinkingOutput) const;
212 };
213
Duncan Sandsaf260b92010-05-11 20:16:05 +0000214 class LLVM_LIBRARY_VISIBILITY Compile : public CC1 {
Daniel Dunbare6adeee2009-03-29 17:08:39 +0000215 public:
Daniel Dunbar1cb532c2010-05-22 00:37:18 +0000216 Compile(const ToolChain &TC) : CC1("darwin::Compile", "gcc frontend", TC) {}
Daniel Dunbare6adeee2009-03-29 17:08:39 +0000217
218 virtual void ConstructJob(Compilation &C, const JobAction &JA,
Mike Stump11289f42009-09-09 15:08:12 +0000219 const InputInfo &Output,
220 const InputInfoList &Inputs,
221 const ArgList &TCArgs,
Daniel Dunbare6adeee2009-03-29 17:08:39 +0000222 const char *LinkingOutput) const;
223 };
224
Duncan Sandsaf260b92010-05-11 20:16:05 +0000225 class LLVM_LIBRARY_VISIBILITY Assemble : public DarwinTool {
Daniel Dunbarbe220842009-03-20 16:06:39 +0000226 public:
Daniel Dunbar1cb532c2010-05-22 00:37:18 +0000227 Assemble(const ToolChain &TC) : DarwinTool("darwin::Assemble",
228 "assembler", TC) {}
Daniel Dunbarbe220842009-03-20 16:06:39 +0000229
Daniel Dunbarbe220842009-03-20 16:06:39 +0000230 virtual bool hasIntegratedCPP() const { return false; }
231
232 virtual void ConstructJob(Compilation &C, const JobAction &JA,
Mike Stump11289f42009-09-09 15:08:12 +0000233 const InputInfo &Output,
234 const InputInfoList &Inputs,
235 const ArgList &TCArgs,
Daniel Dunbarbe220842009-03-20 16:06:39 +0000236 const char *LinkingOutput) const;
237 };
238
Duncan Sandsaf260b92010-05-11 20:16:05 +0000239 class LLVM_LIBRARY_VISIBILITY Link : public DarwinTool {
Daniel Dunbarccbc4522010-09-09 21:51:05 +0000240 void AddLinkArgs(Compilation &C, const ArgList &Args,
241 ArgStringList &CmdArgs) const;
Daniel Dunbarc1964212009-03-26 16:23:12 +0000242
Daniel Dunbarc1964212009-03-26 16:23:12 +0000243 public:
Daniel Dunbar1cb532c2010-05-22 00:37:18 +0000244 Link(const ToolChain &TC) : DarwinTool("darwin::Link", "linker", TC) {}
Daniel Dunbarc1964212009-03-26 16:23:12 +0000245
Daniel Dunbarc1964212009-03-26 16:23:12 +0000246 virtual bool hasIntegratedCPP() const { return false; }
247
248 virtual void ConstructJob(Compilation &C, const JobAction &JA,
Mike Stump11289f42009-09-09 15:08:12 +0000249 const InputInfo &Output,
250 const InputInfoList &Inputs,
251 const ArgList &TCArgs,
Daniel Dunbarc1964212009-03-26 16:23:12 +0000252 const char *LinkingOutput) const;
253 };
254
Duncan Sandsaf260b92010-05-11 20:16:05 +0000255 class LLVM_LIBRARY_VISIBILITY Lipo : public DarwinTool {
Daniel Dunbar64ed5e32009-03-20 00:52:38 +0000256 public:
Daniel Dunbar1cb532c2010-05-22 00:37:18 +0000257 Lipo(const ToolChain &TC) : DarwinTool("darwin::Lipo", "lipo", TC) {}
Daniel Dunbar64ed5e32009-03-20 00:52:38 +0000258
Daniel Dunbar64ed5e32009-03-20 00:52:38 +0000259 virtual bool hasIntegratedCPP() const { return false; }
260
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 Dunbar64ed5e32009-03-20 00:52:38 +0000265 const char *LinkingOutput) const;
266 };
Daniel Dunbar88299622010-06-04 18:28:36 +0000267
268 class LLVM_LIBRARY_VISIBILITY Dsymutil : public DarwinTool {
269 public:
270 Dsymutil(const ToolChain &TC) : DarwinTool("darwin::Dsymutil",
271 "dsymutil", TC) {}
272
Daniel Dunbar88299622010-06-04 18:28:36 +0000273 virtual bool hasIntegratedCPP() const { return false; }
274
275 virtual void ConstructJob(Compilation &C, const JobAction &JA,
Daniel Dunbar88299622010-06-04 18:28:36 +0000276 const InputInfo &Output,
277 const InputInfoList &Inputs,
278 const ArgList &TCArgs,
279 const char *LinkingOutput) const;
280 };
Eric Christopher551ef452011-08-23 17:56:55 +0000281
282 class LLVM_LIBRARY_VISIBILITY VerifyDebug : public DarwinTool {
283 public:
284 VerifyDebug(const ToolChain &TC) : DarwinTool("darwin::VerifyDebug",
285 "dwarfdump", TC) {}
286
287 virtual bool hasIntegratedCPP() const { return false; }
288
289 virtual void ConstructJob(Compilation &C, const JobAction &JA,
290 const InputInfo &Output,
291 const InputInfoList &Inputs,
292 const ArgList &TCArgs,
293 const char *LinkingOutput) const;
294 };
295
Daniel Dunbar64ed5e32009-03-20 00:52:38 +0000296}
297
Daniel Dunbar10de9e62009-06-29 20:52:51 +0000298 /// openbsd -- Directly call GNU Binutils assembler and linker
299namespace openbsd {
Duncan Sandsaf260b92010-05-11 20:16:05 +0000300 class LLVM_LIBRARY_VISIBILITY Assemble : public Tool {
Daniel Dunbar10de9e62009-06-29 20:52:51 +0000301 public:
Daniel Dunbar1cb532c2010-05-22 00:37:18 +0000302 Assemble(const ToolChain &TC) : Tool("openbsd::Assemble", "assembler",
303 TC) {}
Daniel Dunbar10de9e62009-06-29 20:52:51 +0000304
Daniel Dunbar10de9e62009-06-29 20:52:51 +0000305 virtual bool hasIntegratedCPP() const { return false; }
306
307 virtual void ConstructJob(Compilation &C, const JobAction &JA,
Mike Stump11289f42009-09-09 15:08:12 +0000308 const InputInfo &Output,
309 const InputInfoList &Inputs,
310 const ArgList &TCArgs,
Daniel Dunbar10de9e62009-06-29 20:52:51 +0000311 const char *LinkingOutput) const;
312 };
Duncan Sandsaf260b92010-05-11 20:16:05 +0000313 class LLVM_LIBRARY_VISIBILITY Link : public Tool {
Daniel Dunbar10de9e62009-06-29 20:52:51 +0000314 public:
Daniel Dunbar1cb532c2010-05-22 00:37:18 +0000315 Link(const ToolChain &TC) : Tool("openbsd::Link", "linker", TC) {}
Daniel Dunbar10de9e62009-06-29 20:52:51 +0000316
Daniel Dunbar10de9e62009-06-29 20:52:51 +0000317 virtual bool hasIntegratedCPP() const { return false; }
318
319 virtual void ConstructJob(Compilation &C, const JobAction &JA,
Mike Stump11289f42009-09-09 15:08:12 +0000320 const InputInfo &Output,
321 const InputInfoList &Inputs,
322 const ArgList &TCArgs,
Daniel Dunbar10de9e62009-06-29 20:52:51 +0000323 const char *LinkingOutput) const;
324 };
Edward O'Callaghan856e4ff2009-08-22 01:06:46 +0000325} // end namespace openbsd
Daniel Dunbar10de9e62009-06-29 20:52:51 +0000326
Daniel Dunbar8eb473c2009-03-31 17:45:15 +0000327 /// freebsd -- Directly call GNU Binutils assembler and linker
328namespace freebsd {
Duncan Sandsaf260b92010-05-11 20:16:05 +0000329 class LLVM_LIBRARY_VISIBILITY Assemble : public Tool {
Daniel Dunbar8eb473c2009-03-31 17:45:15 +0000330 public:
Daniel Dunbar1cb532c2010-05-22 00:37:18 +0000331 Assemble(const ToolChain &TC) : Tool("freebsd::Assemble", "assembler",
332 TC) {}
Daniel Dunbar8eb473c2009-03-31 17:45:15 +0000333
Daniel Dunbar8eb473c2009-03-31 17:45:15 +0000334 virtual bool hasIntegratedCPP() const { return false; }
335
336 virtual void ConstructJob(Compilation &C, const JobAction &JA,
Mike Stump11289f42009-09-09 15:08:12 +0000337 const InputInfo &Output,
338 const InputInfoList &Inputs,
339 const ArgList &TCArgs,
Daniel Dunbar8eb473c2009-03-31 17:45:15 +0000340 const char *LinkingOutput) const;
341 };
Duncan Sandsaf260b92010-05-11 20:16:05 +0000342 class LLVM_LIBRARY_VISIBILITY Link : public Tool {
Daniel Dunbard854c8d2009-04-01 19:36:32 +0000343 public:
Daniel Dunbar1cb532c2010-05-22 00:37:18 +0000344 Link(const ToolChain &TC) : Tool("freebsd::Link", "linker", TC) {}
Daniel Dunbard854c8d2009-04-01 19:36:32 +0000345
Daniel Dunbard854c8d2009-04-01 19:36:32 +0000346 virtual bool hasIntegratedCPP() const { return false; }
347
348 virtual void ConstructJob(Compilation &C, const JobAction &JA,
Mike Stump11289f42009-09-09 15:08:12 +0000349 const InputInfo &Output,
350 const InputInfoList &Inputs,
351 const ArgList &TCArgs,
Daniel Dunbard854c8d2009-04-01 19:36:32 +0000352 const char *LinkingOutput) const;
353 };
Edward O'Callaghan856e4ff2009-08-22 01:06:46 +0000354} // end namespace freebsd
355
Benjamin Kramer24f1d3e2011-02-02 18:59:27 +0000356 /// netbsd -- Directly call GNU Binutils assembler and linker
357namespace netbsd {
358 class LLVM_LIBRARY_VISIBILITY Assemble : public Tool {
Joerg Sonnenberger637603a2011-05-16 13:35:02 +0000359 private:
360 const llvm::Triple ToolTriple;
361
Benjamin Kramer24f1d3e2011-02-02 18:59:27 +0000362 public:
Joerg Sonnenberger637603a2011-05-16 13:35:02 +0000363 Assemble(const ToolChain &TC, const llvm::Triple &ToolTriple)
364 : Tool("netbsd::Assemble", "assembler", TC), ToolTriple(ToolTriple) {}
Benjamin Kramer24f1d3e2011-02-02 18:59:27 +0000365
366 virtual bool hasIntegratedCPP() const { return false; }
367
368 virtual void ConstructJob(Compilation &C, const JobAction &JA,
369 const InputInfo &Output,
370 const InputInfoList &Inputs,
371 const ArgList &TCArgs,
372 const char *LinkingOutput) const;
373 };
374 class LLVM_LIBRARY_VISIBILITY Link : public Tool {
Joerg Sonnenberger637603a2011-05-16 13:35:02 +0000375 private:
376 const llvm::Triple ToolTriple;
377
Benjamin Kramer24f1d3e2011-02-02 18:59:27 +0000378 public:
Joerg Sonnenberger637603a2011-05-16 13:35:02 +0000379 Link(const ToolChain &TC, const llvm::Triple &ToolTriple)
Joerg Sonnenberger4eb724f2011-06-21 08:45:08 +0000380 : Tool("netbsd::Link", "linker", TC), ToolTriple(ToolTriple) {}
Benjamin Kramer24f1d3e2011-02-02 18:59:27 +0000381
382 virtual bool hasIntegratedCPP() const { return false; }
383
384 virtual void ConstructJob(Compilation &C, const JobAction &JA,
385 const InputInfo &Output,
386 const InputInfoList &Inputs,
387 const ArgList &TCArgs,
388 const char *LinkingOutput) const;
389 };
390} // end namespace netbsd
391
Rafael Espindola92b00932010-08-10 00:25:48 +0000392 /// linux -- Directly call GNU Binutils assembler and linker
393namespace linuxtools {
394 class LLVM_LIBRARY_VISIBILITY Assemble : public Tool {
395 public:
396 Assemble(const ToolChain &TC) : Tool("linux::Assemble", "assembler",
397 TC) {}
398
399 virtual bool hasIntegratedCPP() const { return false; }
400
401 virtual void ConstructJob(Compilation &C, const JobAction &JA,
402 const InputInfo &Output,
403 const InputInfoList &Inputs,
404 const ArgList &TCArgs,
405 const char *LinkingOutput) const;
406 };
Rafael Espindolac8f008f2010-11-07 20:14:31 +0000407 class LLVM_LIBRARY_VISIBILITY Link : public Tool {
408 public:
409 Link(const ToolChain &TC) : Tool("linux::Link", "linker", TC) {}
410
411 virtual bool hasIntegratedCPP() const { return false; }
412
413 virtual void ConstructJob(Compilation &C, const JobAction &JA,
414 const InputInfo &Output,
415 const InputInfoList &Inputs,
416 const ArgList &TCArgs,
417 const char *LinkingOutput) const;
418 };
Rafael Espindola92b00932010-08-10 00:25:48 +0000419}
Chris Lattner3e2ee142010-07-07 16:01:42 +0000420 /// minix -- Directly call GNU Binutils assembler and linker
421namespace minix {
422 class LLVM_LIBRARY_VISIBILITY Assemble : public Tool {
423 public:
424 Assemble(const ToolChain &TC) : Tool("minix::Assemble", "assembler",
425 TC) {}
426
Chris Lattner3e2ee142010-07-07 16:01:42 +0000427 virtual bool hasIntegratedCPP() const { return false; }
428
429 virtual void ConstructJob(Compilation &C, const JobAction &JA,
Chris Lattner3e2ee142010-07-07 16:01:42 +0000430 const InputInfo &Output,
431 const InputInfoList &Inputs,
432 const ArgList &TCArgs,
433 const char *LinkingOutput) const;
434 };
435 class LLVM_LIBRARY_VISIBILITY Link : public Tool {
436 public:
437 Link(const ToolChain &TC) : Tool("minix::Link", "linker", TC) {}
438
Chris Lattner3e2ee142010-07-07 16:01:42 +0000439 virtual bool hasIntegratedCPP() const { return false; }
440
441 virtual void ConstructJob(Compilation &C, const JobAction &JA,
Chris Lattner3e2ee142010-07-07 16:01:42 +0000442 const InputInfo &Output,
443 const InputInfoList &Inputs,
444 const ArgList &TCArgs,
445 const char *LinkingOutput) const;
446 };
447} // end namespace minix
448
Edward O'Callaghan856e4ff2009-08-22 01:06:46 +0000449 /// auroraux -- Directly call GNU Binutils assembler and linker
450namespace auroraux {
Duncan Sandsaf260b92010-05-11 20:16:05 +0000451 class LLVM_LIBRARY_VISIBILITY Assemble : public Tool {
Edward O'Callaghan856e4ff2009-08-22 01:06:46 +0000452 public:
Daniel Dunbar1cb532c2010-05-22 00:37:18 +0000453 Assemble(const ToolChain &TC) : Tool("auroraux::Assemble", "assembler",
454 TC) {}
Edward O'Callaghan856e4ff2009-08-22 01:06:46 +0000455
Edward O'Callaghan856e4ff2009-08-22 01:06:46 +0000456 virtual bool hasIntegratedCPP() const { return false; }
457
458 virtual void ConstructJob(Compilation &C, const JobAction &JA,
Mike Stump11289f42009-09-09 15:08:12 +0000459 const InputInfo &Output,
460 const InputInfoList &Inputs,
461 const ArgList &TCArgs,
Edward O'Callaghan856e4ff2009-08-22 01:06:46 +0000462 const char *LinkingOutput) const;
463 };
Duncan Sandsaf260b92010-05-11 20:16:05 +0000464 class LLVM_LIBRARY_VISIBILITY Link : public Tool {
Edward O'Callaghan856e4ff2009-08-22 01:06:46 +0000465 public:
Daniel Dunbar1cb532c2010-05-22 00:37:18 +0000466 Link(const ToolChain &TC) : Tool("auroraux::Link", "linker", TC) {}
Edward O'Callaghan856e4ff2009-08-22 01:06:46 +0000467
Edward O'Callaghan856e4ff2009-08-22 01:06:46 +0000468 virtual bool hasIntegratedCPP() const { return false; }
469
470 virtual void ConstructJob(Compilation &C, const JobAction &JA,
Mike Stump11289f42009-09-09 15:08:12 +0000471 const InputInfo &Output,
472 const InputInfoList &Inputs,
473 const ArgList &TCArgs,
Edward O'Callaghan856e4ff2009-08-22 01:06:46 +0000474 const char *LinkingOutput) const;
475 };
476} // end namespace auroraux
Daniel Dunbar8eb473c2009-03-31 17:45:15 +0000477
Daniel Dunbarcc912342009-05-02 18:28:39 +0000478 /// dragonfly -- Directly call GNU Binutils assembler and linker
479namespace dragonfly {
Duncan Sandsaf260b92010-05-11 20:16:05 +0000480 class LLVM_LIBRARY_VISIBILITY Assemble : public Tool {
Daniel Dunbarcc912342009-05-02 18:28:39 +0000481 public:
Daniel Dunbar1cb532c2010-05-22 00:37:18 +0000482 Assemble(const ToolChain &TC) : Tool("dragonfly::Assemble", "assembler",
483 TC) {}
Daniel Dunbarcc912342009-05-02 18:28:39 +0000484
Daniel Dunbarcc912342009-05-02 18:28:39 +0000485 virtual bool hasIntegratedCPP() const { return false; }
486
487 virtual void ConstructJob(Compilation &C, const JobAction &JA,
Mike Stump11289f42009-09-09 15:08:12 +0000488 const InputInfo &Output,
489 const InputInfoList &Inputs,
490 const ArgList &TCArgs,
Daniel Dunbarcc912342009-05-02 18:28:39 +0000491 const char *LinkingOutput) const;
492 };
Duncan Sandsaf260b92010-05-11 20:16:05 +0000493 class LLVM_LIBRARY_VISIBILITY Link : public Tool {
Daniel Dunbarcc912342009-05-02 18:28:39 +0000494 public:
Daniel Dunbar1cb532c2010-05-22 00:37:18 +0000495 Link(const ToolChain &TC) : Tool("dragonfly::Link", "linker", TC) {}
Daniel Dunbarcc912342009-05-02 18:28:39 +0000496
Daniel Dunbarcc912342009-05-02 18:28:39 +0000497 virtual bool hasIntegratedCPP() const { return false; }
498
499 virtual void ConstructJob(Compilation &C, const JobAction &JA,
Mike Stump11289f42009-09-09 15:08:12 +0000500 const InputInfo &Output,
501 const InputInfoList &Inputs,
502 const ArgList &TCArgs,
Daniel Dunbarcc912342009-05-02 18:28:39 +0000503 const char *LinkingOutput) const;
504 };
Edward O'Callaghan856e4ff2009-08-22 01:06:46 +0000505} // end namespace dragonfly
Daniel Dunbarcc912342009-05-02 18:28:39 +0000506
Michael J. Spencerb186bc32010-08-21 21:55:07 +0000507 /// Visual studio tools.
508namespace visualstudio {
509 class LLVM_LIBRARY_VISIBILITY Link : public Tool {
510 public:
511 Link(const ToolChain &TC) : Tool("visualstudio::Link", "linker", TC) {}
512
513 virtual bool hasIntegratedCPP() const { return false; }
514
515 virtual void ConstructJob(Compilation &C, const JobAction &JA,
516 const InputInfo &Output,
517 const InputInfoList &Inputs,
518 const ArgList &TCArgs,
519 const char *LinkingOutput) const;
520 };
521} // end namespace visualstudio
522
Daniel Dunbar5903d8c2009-03-17 22:07:58 +0000523} // end namespace toolchains
524} // end namespace driver
525} // end namespace clang
526
Edward O'Callaghan856e4ff2009-08-22 01:06:46 +0000527#endif // CLANG_LIB_DRIVER_TOOLS_H_