blob: b304e9626afa5b08d5f1a0bb4590fd30ea34713b [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
Joerg Sonnenberger182564c2011-05-16 13:35:02 +000017#include "llvm/ADT/Triple.h"
Daniel Dunbar9c073ff2009-03-17 22:07:58 +000018#include "llvm/Support/Compiler.h"
19
20namespace clang {
21namespace driver {
Douglas Gregordf91ef32009-04-18 00:34:01 +000022 class Driver;
23
Daniel Dunbar02633b52009-03-26 16:23:12 +000024namespace toolchains {
Daniel Dunbarf3955282009-09-04 18:34:51 +000025 class Darwin;
Daniel Dunbar02633b52009-03-26 16:23:12 +000026}
27
Daniel Dunbar985b8252009-03-17 22:18:43 +000028namespace tools {
Daniel Dunbar9c073ff2009-03-17 22:07:58 +000029
Daniel Dunbar20a9aa52010-05-20 21:30:13 +000030 /// \brief Clang compiler tool.
Duncan Sands92dd1912010-05-11 20:16:05 +000031 class LLVM_LIBRARY_VISIBILITY Clang : public Tool {
Peter Collingbourne54db68b2011-11-06 00:40:05 +000032 void AddPreprocessingOptions(Compilation &C,
33 const Driver &D,
Douglas Gregordf91ef32009-04-18 00:34:01 +000034 const ArgList &Args,
Daniel Dunbarc21c4852009-04-08 23:54:23 +000035 ArgStringList &CmdArgs,
36 const InputInfo &Output,
37 const InputInfoList &Inputs) const;
38
Daniel Dunbarfa41d692011-03-17 17:10:06 +000039 void AddARMTargetArgs(const ArgList &Args, ArgStringList &CmdArgs,
40 bool KernelOrKext) const;
Eric Christophered734732010-03-02 02:41:08 +000041 void AddMIPSTargetArgs(const ArgList &Args, ArgStringList &CmdArgs) const;
Bruno Cardoso Lopes9284d212010-11-09 17:21:19 +000042 void AddSparcTargetArgs(const ArgList &Args, ArgStringList &CmdArgs) const;
Daniel Dunbar6acda162009-09-09 22:33:08 +000043 void AddX86TargetArgs(const ArgList &Args, ArgStringList &CmdArgs) const;
Tony Linthicum96319392011-12-12 21:14:55 +000044 void AddHexagonTargetArgs (const ArgList &Args, ArgStringList &CmdArgs) const;
Daniel Dunbar6acda162009-09-09 22:33:08 +000045
Daniel Dunbar9c073ff2009-03-17 22:07:58 +000046 public:
Daniel Dunbar30382042010-05-22 00:37:18 +000047 Clang(const ToolChain &TC) : Tool("clang", "clang frontend", TC) {}
Daniel Dunbar9c073ff2009-03-17 22:07:58 +000048
Daniel Dunbar60a53f22010-04-06 17:07:49 +000049 virtual bool hasGoodDiagnostics() const { return true; }
Daniel Dunbar8767cbc2010-02-03 03:07:56 +000050 virtual bool hasIntegratedAssembler() const { return true; }
Daniel Dunbar9c073ff2009-03-17 22:07:58 +000051 virtual bool hasIntegratedCPP() const { return true; }
Daniel Dunbar47ac7d22009-03-18 06:00:36 +000052
53 virtual void ConstructJob(Compilation &C, const JobAction &JA,
Mike Stump1eb44332009-09-09 15:08:12 +000054 const InputInfo &Output,
55 const InputInfoList &Inputs,
56 const ArgList &TCArgs,
Daniel Dunbar47ac7d22009-03-18 06:00:36 +000057 const char *LinkingOutput) const;
Daniel Dunbar9c073ff2009-03-17 22:07:58 +000058 };
59
Daniel Dunbar20a9aa52010-05-20 21:30:13 +000060 /// \brief Clang integrated assembler tool.
61 class LLVM_LIBRARY_VISIBILITY ClangAs : public Tool {
62 public:
Daniel Dunbar30382042010-05-22 00:37:18 +000063 ClangAs(const ToolChain &TC) : Tool("clang::as",
64 "clang integrated assembler", TC) {}
Daniel Dunbar20a9aa52010-05-20 21:30:13 +000065
Daniel Dunbar20a9aa52010-05-20 21:30:13 +000066 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,
Daniel Dunbar20a9aa52010-05-20 21:30:13 +000071 const InputInfo &Output,
72 const InputInfoList &Inputs,
73 const ArgList &TCArgs,
74 const char *LinkingOutput) const;
75 };
76
Daniel Dunbar31b1e542009-03-17 22:45:24 +000077 /// gcc - Generic GCC tool implementations.
78namespace gcc {
Duncan Sands92dd1912010-05-11 20:16:05 +000079 class LLVM_LIBRARY_VISIBILITY Common : public Tool {
Daniel Dunbar9c073ff2009-03-17 22:07:58 +000080 public:
Daniel Dunbar30382042010-05-22 00:37:18 +000081 Common(const char *Name, const char *ShortName,
82 const ToolChain &TC) : Tool(Name, ShortName, TC) {}
Daniel Dunbarb488c1d2009-03-18 08:07:30 +000083
84 virtual void ConstructJob(Compilation &C, const JobAction &JA,
Mike Stump1eb44332009-09-09 15:08:12 +000085 const InputInfo &Output,
86 const InputInfoList &Inputs,
87 const ArgList &TCArgs,
Daniel Dunbarb488c1d2009-03-18 08:07:30 +000088 const char *LinkingOutput) const;
89
90 /// RenderExtraToolArgs - Render any arguments necessary to force
91 /// the particular tool mode.
Daniel Dunbar82b51cc2010-01-25 22:35:08 +000092 virtual void RenderExtraToolArgs(const JobAction &JA,
93 ArgStringList &CmdArgs) const = 0;
Daniel Dunbarb488c1d2009-03-18 08:07:30 +000094 };
95
Mike Stump1eb44332009-09-09 15:08:12 +000096
Duncan Sands92dd1912010-05-11 20:16:05 +000097 class LLVM_LIBRARY_VISIBILITY Preprocess : public Common {
Daniel Dunbarb488c1d2009-03-18 08:07:30 +000098 public:
Daniel Dunbar30382042010-05-22 00:37:18 +000099 Preprocess(const ToolChain &TC) : Common("gcc::Preprocess",
100 "gcc preprocessor", TC) {}
Daniel Dunbar9c073ff2009-03-17 22:07:58 +0000101
Daniel Dunbar60a53f22010-04-06 17:07:49 +0000102 virtual bool hasGoodDiagnostics() const { return true; }
Daniel Dunbar9c073ff2009-03-17 22:07:58 +0000103 virtual bool hasIntegratedCPP() const { return false; }
Daniel Dunbar47ac7d22009-03-18 06:00:36 +0000104
Daniel Dunbar82b51cc2010-01-25 22:35:08 +0000105 virtual void RenderExtraToolArgs(const JobAction &JA,
106 ArgStringList &CmdArgs) const;
Daniel Dunbar9c073ff2009-03-17 22:07:58 +0000107 };
108
Duncan Sands92dd1912010-05-11 20:16:05 +0000109 class LLVM_LIBRARY_VISIBILITY Precompile : public Common {
Daniel Dunbar9c073ff2009-03-17 22:07:58 +0000110 public:
Daniel Dunbar30382042010-05-22 00:37:18 +0000111 Precompile(const ToolChain &TC) : Common("gcc::Precompile",
112 "gcc precompile", TC) {}
Daniel Dunbar9c073ff2009-03-17 22:07:58 +0000113
Daniel Dunbar60a53f22010-04-06 17:07:49 +0000114 virtual bool hasGoodDiagnostics() const { return true; }
Daniel Dunbar9c073ff2009-03-17 22:07:58 +0000115 virtual bool hasIntegratedCPP() const { return true; }
Daniel Dunbar47ac7d22009-03-18 06:00:36 +0000116
Daniel Dunbar82b51cc2010-01-25 22:35:08 +0000117 virtual void RenderExtraToolArgs(const JobAction &JA,
118 ArgStringList &CmdArgs) const;
Daniel Dunbar9c073ff2009-03-17 22:07:58 +0000119 };
120
Duncan Sands92dd1912010-05-11 20:16:05 +0000121 class LLVM_LIBRARY_VISIBILITY Compile : public Common {
Daniel Dunbar9c073ff2009-03-17 22:07:58 +0000122 public:
Daniel Dunbar30382042010-05-22 00:37:18 +0000123 Compile(const ToolChain &TC) : Common("gcc::Compile",
124 "gcc frontend", TC) {}
Daniel Dunbar9c073ff2009-03-17 22:07:58 +0000125
Daniel Dunbar60a53f22010-04-06 17:07:49 +0000126 virtual bool hasGoodDiagnostics() const { return true; }
Daniel Dunbar9c073ff2009-03-17 22:07:58 +0000127 virtual bool hasIntegratedCPP() const { return true; }
Daniel Dunbar47ac7d22009-03-18 06:00:36 +0000128
Daniel Dunbar82b51cc2010-01-25 22:35:08 +0000129 virtual void RenderExtraToolArgs(const JobAction &JA,
130 ArgStringList &CmdArgs) const;
Daniel Dunbar9c073ff2009-03-17 22:07:58 +0000131 };
132
Duncan Sands92dd1912010-05-11 20:16:05 +0000133 class LLVM_LIBRARY_VISIBILITY Assemble : public Common {
Daniel Dunbar9c073ff2009-03-17 22:07:58 +0000134 public:
Daniel Dunbar30382042010-05-22 00:37:18 +0000135 Assemble(const ToolChain &TC) : Common("gcc::Assemble",
136 "assembler (via gcc)", TC) {}
Daniel Dunbar9c073ff2009-03-17 22:07:58 +0000137
Daniel Dunbar9c073ff2009-03-17 22:07:58 +0000138 virtual bool hasIntegratedCPP() const { return false; }
Daniel Dunbar47ac7d22009-03-18 06:00:36 +0000139
Daniel Dunbar82b51cc2010-01-25 22:35:08 +0000140 virtual void RenderExtraToolArgs(const JobAction &JA,
141 ArgStringList &CmdArgs) const;
Daniel Dunbar9c073ff2009-03-17 22:07:58 +0000142 };
143
Duncan Sands92dd1912010-05-11 20:16:05 +0000144 class LLVM_LIBRARY_VISIBILITY Link : public Common {
Daniel Dunbar9c073ff2009-03-17 22:07:58 +0000145 public:
Daniel Dunbar30382042010-05-22 00:37:18 +0000146 Link(const ToolChain &TC) : Common("gcc::Link",
147 "linker (via gcc)", TC) {}
Daniel Dunbar9c073ff2009-03-17 22:07:58 +0000148
Daniel Dunbar9c073ff2009-03-17 22:07:58 +0000149 virtual bool hasIntegratedCPP() const { return false; }
Daniel Dunbar47ac7d22009-03-18 06:00:36 +0000150
Daniel Dunbar82b51cc2010-01-25 22:35:08 +0000151 virtual void RenderExtraToolArgs(const JobAction &JA,
152 ArgStringList &CmdArgs) const;
Daniel Dunbar9c073ff2009-03-17 22:07:58 +0000153 };
Daniel Dunbar31b1e542009-03-17 22:45:24 +0000154} // end namespace gcc
Daniel Dunbar9c073ff2009-03-17 22:07:58 +0000155
Tony Linthicum96319392011-12-12 21:14:55 +0000156namespace hexagon {
157 // For Hexagon, we do not need to instantiate tools for PreProcess, PreCompile and Compile.
158 // We simply use "clang -cc1" for those actions.
159 class LLVM_LIBRARY_VISIBILITY Assemble : public Tool {
160 public:
161 Assemble(const ToolChain &TC) : Tool("hexagon::Assemble",
162 "hexagon-as", TC) {}
163
164 virtual bool hasIntegratedCPP() const { return false; }
165
166 virtual void RenderExtraToolArgs(const JobAction &JA,
167 ArgStringList &CmdArgs) const;
168 virtual void ConstructJob(Compilation &C, const JobAction &JA,
169 const InputInfo &Output,
170 const InputInfoList &Inputs,
171 const ArgList &TCArgs,
172 const char *LinkingOutput) const;
173 };
174
175 class LLVM_LIBRARY_VISIBILITY Link : public Tool {
176 public:
177 Link(const ToolChain &TC) : Tool("hexagon::Link",
178 "hexagon-ld", TC) {}
179
180 virtual bool hasIntegratedCPP() const { return false; }
181
182 virtual void RenderExtraToolArgs(const JobAction &JA,
183 ArgStringList &CmdArgs) const;
184 virtual void ConstructJob(Compilation &C, const JobAction &JA,
185 const InputInfo &Output,
186 const InputInfoList &Inputs,
187 const ArgList &TCArgs,
188 const char *LinkingOutput) const;
189 };
190} // end namespace hexagon.
191
192
Daniel Dunbarff7488d2009-03-20 00:52:38 +0000193namespace darwin {
Duncan Sands92dd1912010-05-11 20:16:05 +0000194 class LLVM_LIBRARY_VISIBILITY DarwinTool : public Tool {
David Blaikie99ba9e32011-12-20 02:48:34 +0000195 virtual void anchor();
Daniel Dunbarfbefe6b2009-09-09 18:36:20 +0000196 protected:
197 void AddDarwinArch(const ArgList &Args, ArgStringList &CmdArgs) const;
Daniel Dunbarfbefe6b2009-09-09 18:36:20 +0000198
199 const toolchains::Darwin &getDarwinToolChain() const {
200 return reinterpret_cast<const toolchains::Darwin&>(getToolChain());
201 }
202
203 public:
Daniel Dunbar30382042010-05-22 00:37:18 +0000204 DarwinTool(const char *Name, const char *ShortName,
205 const ToolChain &TC) : Tool(Name, ShortName, TC) {}
Daniel Dunbarfbefe6b2009-09-09 18:36:20 +0000206 };
207
Duncan Sands92dd1912010-05-11 20:16:05 +0000208 class LLVM_LIBRARY_VISIBILITY CC1 : public DarwinTool {
David Blaikie99ba9e32011-12-20 02:48:34 +0000209 virtual void anchor();
Daniel Dunbara5a7bd02009-03-30 00:34:04 +0000210 public:
Mike Stump1eb44332009-09-09 15:08:12 +0000211 static const char *getBaseInputName(const ArgList &Args,
Daniel Dunbara5a7bd02009-03-30 00:34:04 +0000212 const InputInfoList &Input);
Mike Stump1eb44332009-09-09 15:08:12 +0000213 static const char *getBaseInputStem(const ArgList &Args,
Daniel Dunbara5a7bd02009-03-30 00:34:04 +0000214 const InputInfoList &Input);
Mike Stump1eb44332009-09-09 15:08:12 +0000215 static const char *getDependencyFileName(const ArgList &Args,
Daniel Dunbara5a7bd02009-03-30 00:34:04 +0000216 const InputInfoList &Inputs);
217
Daniel Dunbar40f12652009-03-29 17:08:39 +0000218 protected:
219 const char *getCC1Name(types::ID Type) const;
220
Daniel Dunbara3ec60e2009-03-29 18:40:18 +0000221 void AddCC1Args(const ArgList &Args, ArgStringList &CmdArgs) const;
Chad Rosier285f9a22011-08-17 18:24:55 +0000222 void RemoveCC1UnsupportedArgs(ArgStringList &CmdArgs) const;
Daniel Dunbar40f12652009-03-29 17:08:39 +0000223 void AddCC1OptionsArgs(const ArgList &Args, ArgStringList &CmdArgs,
224 const InputInfoList &Inputs,
Daniel Dunbara3ec60e2009-03-29 18:40:18 +0000225 const ArgStringList &OutputArgs) const;
Daniel Dunbar40f12652009-03-29 17:08:39 +0000226 void AddCPPOptionsArgs(const ArgList &Args, ArgStringList &CmdArgs,
227 const InputInfoList &Inputs,
Daniel Dunbara3ec60e2009-03-29 18:40:18 +0000228 const ArgStringList &OutputArgs) const;
Mike Stump1eb44332009-09-09 15:08:12 +0000229 void AddCPPUniqueOptionsArgs(const ArgList &Args,
Daniel Dunbara3ec60e2009-03-29 18:40:18 +0000230 ArgStringList &CmdArgs,
231 const InputInfoList &Inputs) const;
232 void AddCPPArgs(const ArgList &Args, ArgStringList &CmdArgs) const;
Daniel Dunbar40f12652009-03-29 17:08:39 +0000233
234 public:
Daniel Dunbar30382042010-05-22 00:37:18 +0000235 CC1(const char *Name, const char *ShortName,
236 const ToolChain &TC) : DarwinTool(Name, ShortName, TC) {}
Daniel Dunbar40f12652009-03-29 17:08:39 +0000237
Daniel Dunbar60a53f22010-04-06 17:07:49 +0000238 virtual bool hasGoodDiagnostics() const { return true; }
Daniel Dunbar40f12652009-03-29 17:08:39 +0000239 virtual bool hasIntegratedCPP() const { return true; }
240 };
241
Duncan Sands92dd1912010-05-11 20:16:05 +0000242 class LLVM_LIBRARY_VISIBILITY Preprocess : public CC1 {
Daniel Dunbar40f12652009-03-29 17:08:39 +0000243 public:
Daniel Dunbar30382042010-05-22 00:37:18 +0000244 Preprocess(const ToolChain &TC) : CC1("darwin::Preprocess",
245 "gcc preprocessor", TC) {}
Daniel Dunbar40f12652009-03-29 17:08:39 +0000246
247 virtual void ConstructJob(Compilation &C, const JobAction &JA,
Mike Stump1eb44332009-09-09 15:08:12 +0000248 const InputInfo &Output,
249 const InputInfoList &Inputs,
250 const ArgList &TCArgs,
Daniel Dunbar40f12652009-03-29 17:08:39 +0000251 const char *LinkingOutput) const;
252 };
253
Duncan Sands92dd1912010-05-11 20:16:05 +0000254 class LLVM_LIBRARY_VISIBILITY Compile : public CC1 {
Daniel Dunbar40f12652009-03-29 17:08:39 +0000255 public:
Daniel Dunbar30382042010-05-22 00:37:18 +0000256 Compile(const ToolChain &TC) : CC1("darwin::Compile", "gcc frontend", TC) {}
Daniel Dunbar40f12652009-03-29 17:08:39 +0000257
258 virtual void ConstructJob(Compilation &C, const JobAction &JA,
Mike Stump1eb44332009-09-09 15:08:12 +0000259 const InputInfo &Output,
260 const InputInfoList &Inputs,
261 const ArgList &TCArgs,
Daniel Dunbar40f12652009-03-29 17:08:39 +0000262 const char *LinkingOutput) const;
263 };
264
Duncan Sands92dd1912010-05-11 20:16:05 +0000265 class LLVM_LIBRARY_VISIBILITY Assemble : public DarwinTool {
Daniel Dunbar8cac5f72009-03-20 16:06:39 +0000266 public:
Daniel Dunbar30382042010-05-22 00:37:18 +0000267 Assemble(const ToolChain &TC) : DarwinTool("darwin::Assemble",
268 "assembler", TC) {}
Daniel Dunbar8cac5f72009-03-20 16:06:39 +0000269
Daniel Dunbar8cac5f72009-03-20 16:06:39 +0000270 virtual bool hasIntegratedCPP() const { return false; }
271
272 virtual void ConstructJob(Compilation &C, const JobAction &JA,
Mike Stump1eb44332009-09-09 15:08:12 +0000273 const InputInfo &Output,
274 const InputInfoList &Inputs,
275 const ArgList &TCArgs,
Daniel Dunbar8cac5f72009-03-20 16:06:39 +0000276 const char *LinkingOutput) const;
277 };
278
Duncan Sands92dd1912010-05-11 20:16:05 +0000279 class LLVM_LIBRARY_VISIBILITY Link : public DarwinTool {
Daniel Dunbar748de8e2010-09-09 21:51:05 +0000280 void AddLinkArgs(Compilation &C, const ArgList &Args,
281 ArgStringList &CmdArgs) const;
Daniel Dunbar02633b52009-03-26 16:23:12 +0000282
Daniel Dunbar02633b52009-03-26 16:23:12 +0000283 public:
Daniel Dunbar30382042010-05-22 00:37:18 +0000284 Link(const ToolChain &TC) : DarwinTool("darwin::Link", "linker", TC) {}
Daniel Dunbar02633b52009-03-26 16:23:12 +0000285
Daniel Dunbar02633b52009-03-26 16:23:12 +0000286 virtual bool hasIntegratedCPP() const { return false; }
287
288 virtual void ConstructJob(Compilation &C, const JobAction &JA,
Mike Stump1eb44332009-09-09 15:08:12 +0000289 const InputInfo &Output,
290 const InputInfoList &Inputs,
291 const ArgList &TCArgs,
Daniel Dunbar02633b52009-03-26 16:23:12 +0000292 const char *LinkingOutput) const;
293 };
294
Duncan Sands92dd1912010-05-11 20:16:05 +0000295 class LLVM_LIBRARY_VISIBILITY Lipo : public DarwinTool {
Daniel Dunbarff7488d2009-03-20 00:52:38 +0000296 public:
Daniel Dunbar30382042010-05-22 00:37:18 +0000297 Lipo(const ToolChain &TC) : DarwinTool("darwin::Lipo", "lipo", TC) {}
Daniel Dunbarff7488d2009-03-20 00:52:38 +0000298
Daniel Dunbarff7488d2009-03-20 00:52:38 +0000299 virtual bool hasIntegratedCPP() const { return false; }
300
301 virtual void ConstructJob(Compilation &C, const JobAction &JA,
Mike Stump1eb44332009-09-09 15:08:12 +0000302 const InputInfo &Output,
303 const InputInfoList &Inputs,
304 const ArgList &TCArgs,
Daniel Dunbarff7488d2009-03-20 00:52:38 +0000305 const char *LinkingOutput) const;
306 };
Daniel Dunbar6e0f2542010-06-04 18:28:36 +0000307
308 class LLVM_LIBRARY_VISIBILITY Dsymutil : public DarwinTool {
309 public:
310 Dsymutil(const ToolChain &TC) : DarwinTool("darwin::Dsymutil",
311 "dsymutil", TC) {}
312
Daniel Dunbar6e0f2542010-06-04 18:28:36 +0000313 virtual bool hasIntegratedCPP() const { return false; }
314
315 virtual void ConstructJob(Compilation &C, const JobAction &JA,
Daniel Dunbar6e0f2542010-06-04 18:28:36 +0000316 const InputInfo &Output,
317 const InputInfoList &Inputs,
318 const ArgList &TCArgs,
319 const char *LinkingOutput) const;
320 };
Eric Christopherf8571862011-08-23 17:56:55 +0000321
322 class LLVM_LIBRARY_VISIBILITY VerifyDebug : public DarwinTool {
323 public:
324 VerifyDebug(const ToolChain &TC) : DarwinTool("darwin::VerifyDebug",
325 "dwarfdump", TC) {}
326
327 virtual bool hasIntegratedCPP() const { return false; }
328
329 virtual void ConstructJob(Compilation &C, const JobAction &JA,
330 const InputInfo &Output,
331 const InputInfoList &Inputs,
332 const ArgList &TCArgs,
333 const char *LinkingOutput) const;
334 };
335
Daniel Dunbarff7488d2009-03-20 00:52:38 +0000336}
337
Daniel Dunbarf7b8eec2009-06-29 20:52:51 +0000338 /// openbsd -- Directly call GNU Binutils assembler and linker
339namespace openbsd {
Duncan Sands92dd1912010-05-11 20:16:05 +0000340 class LLVM_LIBRARY_VISIBILITY Assemble : public Tool {
Daniel Dunbarf7b8eec2009-06-29 20:52:51 +0000341 public:
Daniel Dunbar30382042010-05-22 00:37:18 +0000342 Assemble(const ToolChain &TC) : Tool("openbsd::Assemble", "assembler",
343 TC) {}
Daniel Dunbarf7b8eec2009-06-29 20:52:51 +0000344
Daniel Dunbarf7b8eec2009-06-29 20:52:51 +0000345 virtual bool hasIntegratedCPP() const { return false; }
346
347 virtual void ConstructJob(Compilation &C, const JobAction &JA,
Mike Stump1eb44332009-09-09 15:08:12 +0000348 const InputInfo &Output,
349 const InputInfoList &Inputs,
350 const ArgList &TCArgs,
Daniel Dunbarf7b8eec2009-06-29 20:52:51 +0000351 const char *LinkingOutput) const;
352 };
Duncan Sands92dd1912010-05-11 20:16:05 +0000353 class LLVM_LIBRARY_VISIBILITY Link : public Tool {
Daniel Dunbarf7b8eec2009-06-29 20:52:51 +0000354 public:
Daniel Dunbar30382042010-05-22 00:37:18 +0000355 Link(const ToolChain &TC) : Tool("openbsd::Link", "linker", TC) {}
Daniel Dunbarf7b8eec2009-06-29 20:52:51 +0000356
Daniel Dunbarf7b8eec2009-06-29 20:52:51 +0000357 virtual bool hasIntegratedCPP() const { return false; }
358
359 virtual void ConstructJob(Compilation &C, const JobAction &JA,
Mike Stump1eb44332009-09-09 15:08:12 +0000360 const InputInfo &Output,
361 const InputInfoList &Inputs,
362 const ArgList &TCArgs,
Daniel Dunbarf7b8eec2009-06-29 20:52:51 +0000363 const char *LinkingOutput) const;
364 };
Edward O'Callaghane7925a02009-08-22 01:06:46 +0000365} // end namespace openbsd
Daniel Dunbarf7b8eec2009-06-29 20:52:51 +0000366
Daniel Dunbar68a31d42009-03-31 17:45:15 +0000367 /// freebsd -- Directly call GNU Binutils assembler and linker
368namespace freebsd {
Duncan Sands92dd1912010-05-11 20:16:05 +0000369 class LLVM_LIBRARY_VISIBILITY Assemble : public Tool {
Daniel Dunbar68a31d42009-03-31 17:45:15 +0000370 public:
Daniel Dunbar30382042010-05-22 00:37:18 +0000371 Assemble(const ToolChain &TC) : Tool("freebsd::Assemble", "assembler",
372 TC) {}
Daniel Dunbar68a31d42009-03-31 17:45:15 +0000373
Daniel Dunbar68a31d42009-03-31 17:45:15 +0000374 virtual bool hasIntegratedCPP() const { return false; }
375
376 virtual void ConstructJob(Compilation &C, const JobAction &JA,
Mike Stump1eb44332009-09-09 15:08:12 +0000377 const InputInfo &Output,
378 const InputInfoList &Inputs,
379 const ArgList &TCArgs,
Daniel Dunbar68a31d42009-03-31 17:45:15 +0000380 const char *LinkingOutput) const;
381 };
Duncan Sands92dd1912010-05-11 20:16:05 +0000382 class LLVM_LIBRARY_VISIBILITY Link : public Tool {
Daniel Dunbar008f54a2009-04-01 19:36:32 +0000383 public:
Daniel Dunbar30382042010-05-22 00:37:18 +0000384 Link(const ToolChain &TC) : Tool("freebsd::Link", "linker", TC) {}
Daniel Dunbar008f54a2009-04-01 19:36:32 +0000385
Daniel Dunbar008f54a2009-04-01 19:36:32 +0000386 virtual bool hasIntegratedCPP() const { return false; }
387
388 virtual void ConstructJob(Compilation &C, const JobAction &JA,
Mike Stump1eb44332009-09-09 15:08:12 +0000389 const InputInfo &Output,
390 const InputInfoList &Inputs,
391 const ArgList &TCArgs,
Daniel Dunbar008f54a2009-04-01 19:36:32 +0000392 const char *LinkingOutput) const;
393 };
Edward O'Callaghane7925a02009-08-22 01:06:46 +0000394} // end namespace freebsd
395
Benjamin Kramer8e50a962011-02-02 18:59:27 +0000396 /// netbsd -- Directly call GNU Binutils assembler and linker
397namespace netbsd {
398 class LLVM_LIBRARY_VISIBILITY Assemble : public Tool {
Joerg Sonnenberger182564c2011-05-16 13:35:02 +0000399 private:
400 const llvm::Triple ToolTriple;
401
Benjamin Kramer8e50a962011-02-02 18:59:27 +0000402 public:
Joerg Sonnenberger182564c2011-05-16 13:35:02 +0000403 Assemble(const ToolChain &TC, const llvm::Triple &ToolTriple)
404 : Tool("netbsd::Assemble", "assembler", TC), ToolTriple(ToolTriple) {}
Benjamin Kramer8e50a962011-02-02 18:59:27 +0000405
406 virtual bool hasIntegratedCPP() const { return false; }
407
408 virtual void ConstructJob(Compilation &C, const JobAction &JA,
409 const InputInfo &Output,
410 const InputInfoList &Inputs,
411 const ArgList &TCArgs,
412 const char *LinkingOutput) const;
413 };
414 class LLVM_LIBRARY_VISIBILITY Link : public Tool {
Joerg Sonnenberger182564c2011-05-16 13:35:02 +0000415 private:
416 const llvm::Triple ToolTriple;
417
Benjamin Kramer8e50a962011-02-02 18:59:27 +0000418 public:
Joerg Sonnenberger182564c2011-05-16 13:35:02 +0000419 Link(const ToolChain &TC, const llvm::Triple &ToolTriple)
Joerg Sonnenberger468eb7d2011-06-21 08:45:08 +0000420 : Tool("netbsd::Link", "linker", TC), ToolTriple(ToolTriple) {}
Benjamin Kramer8e50a962011-02-02 18:59:27 +0000421
422 virtual bool hasIntegratedCPP() const { return false; }
423
424 virtual void ConstructJob(Compilation &C, const JobAction &JA,
425 const InputInfo &Output,
426 const InputInfoList &Inputs,
427 const ArgList &TCArgs,
428 const char *LinkingOutput) const;
429 };
430} // end namespace netbsd
431
Rafael Espindolaba30bbe2010-08-10 00:25:48 +0000432 /// linux -- Directly call GNU Binutils assembler and linker
433namespace linuxtools {
434 class LLVM_LIBRARY_VISIBILITY Assemble : public Tool {
435 public:
436 Assemble(const ToolChain &TC) : Tool("linux::Assemble", "assembler",
437 TC) {}
438
439 virtual bool hasIntegratedCPP() const { return false; }
440
441 virtual void ConstructJob(Compilation &C, const JobAction &JA,
442 const InputInfo &Output,
443 const InputInfoList &Inputs,
444 const ArgList &TCArgs,
445 const char *LinkingOutput) const;
446 };
Rafael Espindolac1da9812010-11-07 20:14:31 +0000447 class LLVM_LIBRARY_VISIBILITY Link : public Tool {
448 public:
449 Link(const ToolChain &TC) : Tool("linux::Link", "linker", TC) {}
450
451 virtual bool hasIntegratedCPP() const { return false; }
452
453 virtual void ConstructJob(Compilation &C, const JobAction &JA,
454 const InputInfo &Output,
455 const InputInfoList &Inputs,
456 const ArgList &TCArgs,
457 const char *LinkingOutput) const;
458 };
Rafael Espindolaba30bbe2010-08-10 00:25:48 +0000459}
Chris Lattner38e317d2010-07-07 16:01:42 +0000460 /// minix -- Directly call GNU Binutils assembler and linker
461namespace minix {
462 class LLVM_LIBRARY_VISIBILITY Assemble : public Tool {
463 public:
464 Assemble(const ToolChain &TC) : Tool("minix::Assemble", "assembler",
465 TC) {}
466
Chris Lattner38e317d2010-07-07 16:01:42 +0000467 virtual bool hasIntegratedCPP() const { return false; }
468
469 virtual void ConstructJob(Compilation &C, const JobAction &JA,
Chris Lattner38e317d2010-07-07 16:01:42 +0000470 const InputInfo &Output,
471 const InputInfoList &Inputs,
472 const ArgList &TCArgs,
473 const char *LinkingOutput) const;
474 };
475 class LLVM_LIBRARY_VISIBILITY Link : public Tool {
476 public:
477 Link(const ToolChain &TC) : Tool("minix::Link", "linker", TC) {}
478
Chris Lattner38e317d2010-07-07 16:01:42 +0000479 virtual bool hasIntegratedCPP() const { return false; }
480
481 virtual void ConstructJob(Compilation &C, const JobAction &JA,
Chris Lattner38e317d2010-07-07 16:01:42 +0000482 const InputInfo &Output,
483 const InputInfoList &Inputs,
484 const ArgList &TCArgs,
485 const char *LinkingOutput) const;
486 };
487} // end namespace minix
488
Edward O'Callaghane7925a02009-08-22 01:06:46 +0000489 /// auroraux -- Directly call GNU Binutils assembler and linker
490namespace auroraux {
Duncan Sands92dd1912010-05-11 20:16:05 +0000491 class LLVM_LIBRARY_VISIBILITY Assemble : public Tool {
Edward O'Callaghane7925a02009-08-22 01:06:46 +0000492 public:
Daniel Dunbar30382042010-05-22 00:37:18 +0000493 Assemble(const ToolChain &TC) : Tool("auroraux::Assemble", "assembler",
494 TC) {}
Edward O'Callaghane7925a02009-08-22 01:06:46 +0000495
Edward O'Callaghane7925a02009-08-22 01:06:46 +0000496 virtual bool hasIntegratedCPP() const { return false; }
497
498 virtual void ConstructJob(Compilation &C, const JobAction &JA,
Mike Stump1eb44332009-09-09 15:08:12 +0000499 const InputInfo &Output,
500 const InputInfoList &Inputs,
501 const ArgList &TCArgs,
Edward O'Callaghane7925a02009-08-22 01:06:46 +0000502 const char *LinkingOutput) const;
503 };
Duncan Sands92dd1912010-05-11 20:16:05 +0000504 class LLVM_LIBRARY_VISIBILITY Link : public Tool {
Edward O'Callaghane7925a02009-08-22 01:06:46 +0000505 public:
Daniel Dunbar30382042010-05-22 00:37:18 +0000506 Link(const ToolChain &TC) : Tool("auroraux::Link", "linker", TC) {}
Edward O'Callaghane7925a02009-08-22 01:06:46 +0000507
Edward O'Callaghane7925a02009-08-22 01:06:46 +0000508 virtual bool hasIntegratedCPP() const { return false; }
509
510 virtual void ConstructJob(Compilation &C, const JobAction &JA,
Mike Stump1eb44332009-09-09 15:08:12 +0000511 const InputInfo &Output,
512 const InputInfoList &Inputs,
513 const ArgList &TCArgs,
Edward O'Callaghane7925a02009-08-22 01:06:46 +0000514 const char *LinkingOutput) const;
515 };
516} // end namespace auroraux
Daniel Dunbar68a31d42009-03-31 17:45:15 +0000517
Daniel Dunbar11e1b402009-05-02 18:28:39 +0000518 /// dragonfly -- Directly call GNU Binutils assembler and linker
519namespace dragonfly {
Duncan Sands92dd1912010-05-11 20:16:05 +0000520 class LLVM_LIBRARY_VISIBILITY Assemble : public Tool {
Daniel Dunbar11e1b402009-05-02 18:28:39 +0000521 public:
Daniel Dunbar30382042010-05-22 00:37:18 +0000522 Assemble(const ToolChain &TC) : Tool("dragonfly::Assemble", "assembler",
523 TC) {}
Daniel Dunbar11e1b402009-05-02 18:28:39 +0000524
Daniel Dunbar11e1b402009-05-02 18:28:39 +0000525 virtual bool hasIntegratedCPP() const { return false; }
526
527 virtual void ConstructJob(Compilation &C, const JobAction &JA,
Mike Stump1eb44332009-09-09 15:08:12 +0000528 const InputInfo &Output,
529 const InputInfoList &Inputs,
530 const ArgList &TCArgs,
Daniel Dunbar11e1b402009-05-02 18:28:39 +0000531 const char *LinkingOutput) const;
532 };
Duncan Sands92dd1912010-05-11 20:16:05 +0000533 class LLVM_LIBRARY_VISIBILITY Link : public Tool {
Daniel Dunbar11e1b402009-05-02 18:28:39 +0000534 public:
Daniel Dunbar30382042010-05-22 00:37:18 +0000535 Link(const ToolChain &TC) : Tool("dragonfly::Link", "linker", TC) {}
Daniel Dunbar11e1b402009-05-02 18:28:39 +0000536
Daniel Dunbar11e1b402009-05-02 18:28:39 +0000537 virtual bool hasIntegratedCPP() const { return false; }
538
539 virtual void ConstructJob(Compilation &C, const JobAction &JA,
Mike Stump1eb44332009-09-09 15:08:12 +0000540 const InputInfo &Output,
541 const InputInfoList &Inputs,
542 const ArgList &TCArgs,
Daniel Dunbar11e1b402009-05-02 18:28:39 +0000543 const char *LinkingOutput) const;
544 };
Edward O'Callaghane7925a02009-08-22 01:06:46 +0000545} // end namespace dragonfly
Daniel Dunbar11e1b402009-05-02 18:28:39 +0000546
Michael J. Spencerff58e362010-08-21 21:55:07 +0000547 /// Visual studio tools.
548namespace visualstudio {
549 class LLVM_LIBRARY_VISIBILITY Link : public Tool {
550 public:
551 Link(const ToolChain &TC) : Tool("visualstudio::Link", "linker", TC) {}
552
553 virtual bool hasIntegratedCPP() const { return false; }
554
555 virtual void ConstructJob(Compilation &C, const JobAction &JA,
556 const InputInfo &Output,
557 const InputInfoList &Inputs,
558 const ArgList &TCArgs,
559 const char *LinkingOutput) const;
560 };
561} // end namespace visualstudio
562
Daniel Dunbar9c073ff2009-03-17 22:07:58 +0000563} // end namespace toolchains
564} // end namespace driver
565} // end namespace clang
566
Edward O'Callaghane7925a02009-08-22 01:06:46 +0000567#endif // CLANG_LIB_DRIVER_TOOLS_H_