blob: 8f451afc7d1468e41ee3455efb15fa3cbb9d7c94 [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 {
Jim Grosbachfc308292012-02-10 20:37:10 +000062 void AddARMTargetArgs(const ArgList &Args, ArgStringList &CmdArgs) const;
Daniel Dunbar20a9aa52010-05-20 21:30:13 +000063 public:
Daniel Dunbar30382042010-05-22 00:37:18 +000064 ClangAs(const ToolChain &TC) : Tool("clang::as",
65 "clang integrated assembler", TC) {}
Daniel Dunbar20a9aa52010-05-20 21:30:13 +000066
Daniel Dunbar20a9aa52010-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 Dunbar20a9aa52010-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 Dunbar31b1e542009-03-17 22:45:24 +000078 /// gcc - Generic GCC tool implementations.
79namespace gcc {
Duncan Sands92dd1912010-05-11 20:16:05 +000080 class LLVM_LIBRARY_VISIBILITY Common : public Tool {
Daniel Dunbar9c073ff2009-03-17 22:07:58 +000081 public:
Daniel Dunbar30382042010-05-22 00:37:18 +000082 Common(const char *Name, const char *ShortName,
83 const ToolChain &TC) : Tool(Name, ShortName, TC) {}
Daniel Dunbarb488c1d2009-03-18 08:07:30 +000084
85 virtual void ConstructJob(Compilation &C, const JobAction &JA,
Mike Stump1eb44332009-09-09 15:08:12 +000086 const InputInfo &Output,
87 const InputInfoList &Inputs,
88 const ArgList &TCArgs,
Daniel Dunbarb488c1d2009-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 Dunbar82b51cc2010-01-25 22:35:08 +000093 virtual void RenderExtraToolArgs(const JobAction &JA,
94 ArgStringList &CmdArgs) const = 0;
Daniel Dunbarb488c1d2009-03-18 08:07:30 +000095 };
96
Mike Stump1eb44332009-09-09 15:08:12 +000097
Duncan Sands92dd1912010-05-11 20:16:05 +000098 class LLVM_LIBRARY_VISIBILITY Preprocess : public Common {
Daniel Dunbarb488c1d2009-03-18 08:07:30 +000099 public:
Daniel Dunbar30382042010-05-22 00:37:18 +0000100 Preprocess(const ToolChain &TC) : Common("gcc::Preprocess",
101 "gcc preprocessor", TC) {}
Daniel Dunbar9c073ff2009-03-17 22:07:58 +0000102
Daniel Dunbar60a53f22010-04-06 17:07:49 +0000103 virtual bool hasGoodDiagnostics() const { return true; }
Daniel Dunbar9c073ff2009-03-17 22:07:58 +0000104 virtual bool hasIntegratedCPP() const { return false; }
Daniel Dunbar47ac7d22009-03-18 06:00:36 +0000105
Daniel Dunbar82b51cc2010-01-25 22:35:08 +0000106 virtual void RenderExtraToolArgs(const JobAction &JA,
107 ArgStringList &CmdArgs) const;
Daniel Dunbar9c073ff2009-03-17 22:07:58 +0000108 };
109
Duncan Sands92dd1912010-05-11 20:16:05 +0000110 class LLVM_LIBRARY_VISIBILITY Precompile : public Common {
Daniel Dunbar9c073ff2009-03-17 22:07:58 +0000111 public:
Daniel Dunbar30382042010-05-22 00:37:18 +0000112 Precompile(const ToolChain &TC) : Common("gcc::Precompile",
113 "gcc precompile", TC) {}
Daniel Dunbar9c073ff2009-03-17 22:07:58 +0000114
Daniel Dunbar60a53f22010-04-06 17:07:49 +0000115 virtual bool hasGoodDiagnostics() const { return true; }
Daniel Dunbar9c073ff2009-03-17 22:07:58 +0000116 virtual bool hasIntegratedCPP() const { return true; }
Daniel Dunbar47ac7d22009-03-18 06:00:36 +0000117
Daniel Dunbar82b51cc2010-01-25 22:35:08 +0000118 virtual void RenderExtraToolArgs(const JobAction &JA,
119 ArgStringList &CmdArgs) const;
Daniel Dunbar9c073ff2009-03-17 22:07:58 +0000120 };
121
Duncan Sands92dd1912010-05-11 20:16:05 +0000122 class LLVM_LIBRARY_VISIBILITY Compile : public Common {
Daniel Dunbar9c073ff2009-03-17 22:07:58 +0000123 public:
Daniel Dunbar30382042010-05-22 00:37:18 +0000124 Compile(const ToolChain &TC) : Common("gcc::Compile",
125 "gcc frontend", TC) {}
Daniel Dunbar9c073ff2009-03-17 22:07:58 +0000126
Daniel Dunbar60a53f22010-04-06 17:07:49 +0000127 virtual bool hasGoodDiagnostics() const { return true; }
Daniel Dunbar9c073ff2009-03-17 22:07:58 +0000128 virtual bool hasIntegratedCPP() const { return true; }
Daniel Dunbar47ac7d22009-03-18 06:00:36 +0000129
Daniel Dunbar82b51cc2010-01-25 22:35:08 +0000130 virtual void RenderExtraToolArgs(const JobAction &JA,
131 ArgStringList &CmdArgs) const;
Daniel Dunbar9c073ff2009-03-17 22:07:58 +0000132 };
133
Duncan Sands92dd1912010-05-11 20:16:05 +0000134 class LLVM_LIBRARY_VISIBILITY Assemble : public Common {
Daniel Dunbar9c073ff2009-03-17 22:07:58 +0000135 public:
Daniel Dunbar30382042010-05-22 00:37:18 +0000136 Assemble(const ToolChain &TC) : Common("gcc::Assemble",
137 "assembler (via gcc)", TC) {}
Daniel Dunbar9c073ff2009-03-17 22:07:58 +0000138
Daniel Dunbar9c073ff2009-03-17 22:07:58 +0000139 virtual bool hasIntegratedCPP() const { return false; }
Daniel Dunbar47ac7d22009-03-18 06:00:36 +0000140
Daniel Dunbar82b51cc2010-01-25 22:35:08 +0000141 virtual void RenderExtraToolArgs(const JobAction &JA,
142 ArgStringList &CmdArgs) const;
Daniel Dunbar9c073ff2009-03-17 22:07:58 +0000143 };
144
Duncan Sands92dd1912010-05-11 20:16:05 +0000145 class LLVM_LIBRARY_VISIBILITY Link : public Common {
Daniel Dunbar9c073ff2009-03-17 22:07:58 +0000146 public:
Daniel Dunbar30382042010-05-22 00:37:18 +0000147 Link(const ToolChain &TC) : Common("gcc::Link",
148 "linker (via gcc)", TC) {}
Daniel Dunbar9c073ff2009-03-17 22:07:58 +0000149
Daniel Dunbar9c073ff2009-03-17 22:07:58 +0000150 virtual bool hasIntegratedCPP() const { return false; }
Daniel Dunbar47ac7d22009-03-18 06:00:36 +0000151
Daniel Dunbar82b51cc2010-01-25 22:35:08 +0000152 virtual void RenderExtraToolArgs(const JobAction &JA,
153 ArgStringList &CmdArgs) const;
Daniel Dunbar9c073ff2009-03-17 22:07:58 +0000154 };
Daniel Dunbar31b1e542009-03-17 22:45:24 +0000155} // end namespace gcc
Daniel Dunbar9c073ff2009-03-17 22:07:58 +0000156
Tony Linthicum96319392011-12-12 21:14:55 +0000157namespace hexagon {
158 // For Hexagon, we do not need to instantiate tools for PreProcess, PreCompile and Compile.
159 // We simply use "clang -cc1" for those actions.
160 class LLVM_LIBRARY_VISIBILITY Assemble : public Tool {
161 public:
162 Assemble(const ToolChain &TC) : Tool("hexagon::Assemble",
163 "hexagon-as", TC) {}
164
165 virtual bool hasIntegratedCPP() const { return false; }
166
167 virtual void RenderExtraToolArgs(const JobAction &JA,
168 ArgStringList &CmdArgs) const;
169 virtual void ConstructJob(Compilation &C, const JobAction &JA,
170 const InputInfo &Output,
171 const InputInfoList &Inputs,
172 const ArgList &TCArgs,
173 const char *LinkingOutput) const;
174 };
175
176 class LLVM_LIBRARY_VISIBILITY Link : public Tool {
177 public:
178 Link(const ToolChain &TC) : Tool("hexagon::Link",
179 "hexagon-ld", TC) {}
180
181 virtual bool hasIntegratedCPP() const { return false; }
182
183 virtual void RenderExtraToolArgs(const JobAction &JA,
184 ArgStringList &CmdArgs) const;
185 virtual void ConstructJob(Compilation &C, const JobAction &JA,
186 const InputInfo &Output,
187 const InputInfoList &Inputs,
188 const ArgList &TCArgs,
189 const char *LinkingOutput) const;
190 };
191} // end namespace hexagon.
192
193
Daniel Dunbarff7488d2009-03-20 00:52:38 +0000194namespace darwin {
Duncan Sands92dd1912010-05-11 20:16:05 +0000195 class LLVM_LIBRARY_VISIBILITY DarwinTool : public Tool {
David Blaikie99ba9e32011-12-20 02:48:34 +0000196 virtual void anchor();
Daniel Dunbarfbefe6b2009-09-09 18:36:20 +0000197 protected:
198 void AddDarwinArch(const ArgList &Args, ArgStringList &CmdArgs) const;
Daniel Dunbarfbefe6b2009-09-09 18:36:20 +0000199
200 const toolchains::Darwin &getDarwinToolChain() const {
201 return reinterpret_cast<const toolchains::Darwin&>(getToolChain());
202 }
203
204 public:
Daniel Dunbar30382042010-05-22 00:37:18 +0000205 DarwinTool(const char *Name, const char *ShortName,
206 const ToolChain &TC) : Tool(Name, ShortName, TC) {}
Daniel Dunbarfbefe6b2009-09-09 18:36:20 +0000207 };
208
Duncan Sands92dd1912010-05-11 20:16:05 +0000209 class LLVM_LIBRARY_VISIBILITY CC1 : public DarwinTool {
David Blaikie99ba9e32011-12-20 02:48:34 +0000210 virtual void anchor();
Daniel Dunbara5a7bd02009-03-30 00:34:04 +0000211 public:
Mike Stump1eb44332009-09-09 15:08:12 +0000212 static const char *getBaseInputName(const ArgList &Args,
Daniel Dunbara5a7bd02009-03-30 00:34:04 +0000213 const InputInfoList &Input);
Mike Stump1eb44332009-09-09 15:08:12 +0000214 static const char *getBaseInputStem(const ArgList &Args,
Daniel Dunbara5a7bd02009-03-30 00:34:04 +0000215 const InputInfoList &Input);
Mike Stump1eb44332009-09-09 15:08:12 +0000216 static const char *getDependencyFileName(const ArgList &Args,
Daniel Dunbara5a7bd02009-03-30 00:34:04 +0000217 const InputInfoList &Inputs);
218
Daniel Dunbar40f12652009-03-29 17:08:39 +0000219 protected:
220 const char *getCC1Name(types::ID Type) const;
221
Daniel Dunbara3ec60e2009-03-29 18:40:18 +0000222 void AddCC1Args(const ArgList &Args, ArgStringList &CmdArgs) const;
Chad Rosier285f9a22011-08-17 18:24:55 +0000223 void RemoveCC1UnsupportedArgs(ArgStringList &CmdArgs) const;
Daniel Dunbar40f12652009-03-29 17:08:39 +0000224 void AddCC1OptionsArgs(const ArgList &Args, ArgStringList &CmdArgs,
225 const InputInfoList &Inputs,
Daniel Dunbara3ec60e2009-03-29 18:40:18 +0000226 const ArgStringList &OutputArgs) const;
Daniel Dunbar40f12652009-03-29 17:08:39 +0000227 void AddCPPOptionsArgs(const ArgList &Args, ArgStringList &CmdArgs,
228 const InputInfoList &Inputs,
Daniel Dunbara3ec60e2009-03-29 18:40:18 +0000229 const ArgStringList &OutputArgs) const;
Mike Stump1eb44332009-09-09 15:08:12 +0000230 void AddCPPUniqueOptionsArgs(const ArgList &Args,
Daniel Dunbara3ec60e2009-03-29 18:40:18 +0000231 ArgStringList &CmdArgs,
232 const InputInfoList &Inputs) const;
233 void AddCPPArgs(const ArgList &Args, ArgStringList &CmdArgs) const;
Daniel Dunbar40f12652009-03-29 17:08:39 +0000234
235 public:
Daniel Dunbar30382042010-05-22 00:37:18 +0000236 CC1(const char *Name, const char *ShortName,
237 const ToolChain &TC) : DarwinTool(Name, ShortName, TC) {}
Daniel Dunbar40f12652009-03-29 17:08:39 +0000238
Daniel Dunbar60a53f22010-04-06 17:07:49 +0000239 virtual bool hasGoodDiagnostics() const { return true; }
Daniel Dunbar40f12652009-03-29 17:08:39 +0000240 virtual bool hasIntegratedCPP() const { return true; }
241 };
242
Duncan Sands92dd1912010-05-11 20:16:05 +0000243 class LLVM_LIBRARY_VISIBILITY Preprocess : public CC1 {
Daniel Dunbar40f12652009-03-29 17:08:39 +0000244 public:
Daniel Dunbar30382042010-05-22 00:37:18 +0000245 Preprocess(const ToolChain &TC) : CC1("darwin::Preprocess",
246 "gcc preprocessor", TC) {}
Daniel Dunbar40f12652009-03-29 17:08:39 +0000247
248 virtual void ConstructJob(Compilation &C, const JobAction &JA,
Mike Stump1eb44332009-09-09 15:08:12 +0000249 const InputInfo &Output,
250 const InputInfoList &Inputs,
251 const ArgList &TCArgs,
Daniel Dunbar40f12652009-03-29 17:08:39 +0000252 const char *LinkingOutput) const;
253 };
254
Duncan Sands92dd1912010-05-11 20:16:05 +0000255 class LLVM_LIBRARY_VISIBILITY Compile : public CC1 {
Daniel Dunbar40f12652009-03-29 17:08:39 +0000256 public:
Daniel Dunbar30382042010-05-22 00:37:18 +0000257 Compile(const ToolChain &TC) : CC1("darwin::Compile", "gcc frontend", TC) {}
Daniel Dunbar40f12652009-03-29 17:08:39 +0000258
259 virtual void ConstructJob(Compilation &C, const JobAction &JA,
Mike Stump1eb44332009-09-09 15:08:12 +0000260 const InputInfo &Output,
261 const InputInfoList &Inputs,
262 const ArgList &TCArgs,
Daniel Dunbar40f12652009-03-29 17:08:39 +0000263 const char *LinkingOutput) const;
264 };
265
Duncan Sands92dd1912010-05-11 20:16:05 +0000266 class LLVM_LIBRARY_VISIBILITY Assemble : public DarwinTool {
Daniel Dunbar8cac5f72009-03-20 16:06:39 +0000267 public:
Daniel Dunbar30382042010-05-22 00:37:18 +0000268 Assemble(const ToolChain &TC) : DarwinTool("darwin::Assemble",
269 "assembler", TC) {}
Daniel Dunbar8cac5f72009-03-20 16:06:39 +0000270
Daniel Dunbar8cac5f72009-03-20 16:06:39 +0000271 virtual bool hasIntegratedCPP() const { return false; }
272
273 virtual void ConstructJob(Compilation &C, const JobAction &JA,
Mike Stump1eb44332009-09-09 15:08:12 +0000274 const InputInfo &Output,
275 const InputInfoList &Inputs,
276 const ArgList &TCArgs,
Daniel Dunbar8cac5f72009-03-20 16:06:39 +0000277 const char *LinkingOutput) const;
278 };
279
Duncan Sands92dd1912010-05-11 20:16:05 +0000280 class LLVM_LIBRARY_VISIBILITY Link : public DarwinTool {
Daniel Dunbar748de8e2010-09-09 21:51:05 +0000281 void AddLinkArgs(Compilation &C, const ArgList &Args,
282 ArgStringList &CmdArgs) const;
Daniel Dunbar02633b52009-03-26 16:23:12 +0000283
Daniel Dunbar02633b52009-03-26 16:23:12 +0000284 public:
Daniel Dunbar30382042010-05-22 00:37:18 +0000285 Link(const ToolChain &TC) : DarwinTool("darwin::Link", "linker", TC) {}
Daniel Dunbar02633b52009-03-26 16:23:12 +0000286
Daniel Dunbar02633b52009-03-26 16:23:12 +0000287 virtual bool hasIntegratedCPP() const { return false; }
288
289 virtual void ConstructJob(Compilation &C, const JobAction &JA,
Mike Stump1eb44332009-09-09 15:08:12 +0000290 const InputInfo &Output,
291 const InputInfoList &Inputs,
292 const ArgList &TCArgs,
Daniel Dunbar02633b52009-03-26 16:23:12 +0000293 const char *LinkingOutput) const;
294 };
295
Duncan Sands92dd1912010-05-11 20:16:05 +0000296 class LLVM_LIBRARY_VISIBILITY Lipo : public DarwinTool {
Daniel Dunbarff7488d2009-03-20 00:52:38 +0000297 public:
Daniel Dunbar30382042010-05-22 00:37:18 +0000298 Lipo(const ToolChain &TC) : DarwinTool("darwin::Lipo", "lipo", TC) {}
Daniel Dunbarff7488d2009-03-20 00:52:38 +0000299
Daniel Dunbarff7488d2009-03-20 00:52:38 +0000300 virtual bool hasIntegratedCPP() const { return false; }
301
302 virtual void ConstructJob(Compilation &C, const JobAction &JA,
Mike Stump1eb44332009-09-09 15:08:12 +0000303 const InputInfo &Output,
304 const InputInfoList &Inputs,
305 const ArgList &TCArgs,
Daniel Dunbarff7488d2009-03-20 00:52:38 +0000306 const char *LinkingOutput) const;
307 };
Daniel Dunbar6e0f2542010-06-04 18:28:36 +0000308
309 class LLVM_LIBRARY_VISIBILITY Dsymutil : public DarwinTool {
310 public:
311 Dsymutil(const ToolChain &TC) : DarwinTool("darwin::Dsymutil",
312 "dsymutil", TC) {}
313
Daniel Dunbar6e0f2542010-06-04 18:28:36 +0000314 virtual bool hasIntegratedCPP() const { return false; }
315
316 virtual void ConstructJob(Compilation &C, const JobAction &JA,
Daniel Dunbar6e0f2542010-06-04 18:28:36 +0000317 const InputInfo &Output,
318 const InputInfoList &Inputs,
319 const ArgList &TCArgs,
320 const char *LinkingOutput) const;
321 };
Eric Christopherf8571862011-08-23 17:56:55 +0000322
323 class LLVM_LIBRARY_VISIBILITY VerifyDebug : public DarwinTool {
324 public:
325 VerifyDebug(const ToolChain &TC) : DarwinTool("darwin::VerifyDebug",
326 "dwarfdump", TC) {}
327
328 virtual bool hasIntegratedCPP() const { return false; }
329
330 virtual void ConstructJob(Compilation &C, const JobAction &JA,
331 const InputInfo &Output,
332 const InputInfoList &Inputs,
333 const ArgList &TCArgs,
334 const char *LinkingOutput) const;
335 };
336
Daniel Dunbarff7488d2009-03-20 00:52:38 +0000337}
338
Daniel Dunbarf7b8eec2009-06-29 20:52:51 +0000339 /// openbsd -- Directly call GNU Binutils assembler and linker
340namespace openbsd {
Duncan Sands92dd1912010-05-11 20:16:05 +0000341 class LLVM_LIBRARY_VISIBILITY Assemble : public Tool {
Daniel Dunbarf7b8eec2009-06-29 20:52:51 +0000342 public:
Daniel Dunbar30382042010-05-22 00:37:18 +0000343 Assemble(const ToolChain &TC) : Tool("openbsd::Assemble", "assembler",
344 TC) {}
Daniel Dunbarf7b8eec2009-06-29 20:52:51 +0000345
Daniel Dunbarf7b8eec2009-06-29 20:52:51 +0000346 virtual bool hasIntegratedCPP() const { return false; }
347
348 virtual void ConstructJob(Compilation &C, const JobAction &JA,
Mike Stump1eb44332009-09-09 15:08:12 +0000349 const InputInfo &Output,
350 const InputInfoList &Inputs,
351 const ArgList &TCArgs,
Daniel Dunbarf7b8eec2009-06-29 20:52:51 +0000352 const char *LinkingOutput) const;
353 };
Duncan Sands92dd1912010-05-11 20:16:05 +0000354 class LLVM_LIBRARY_VISIBILITY Link : public Tool {
Daniel Dunbarf7b8eec2009-06-29 20:52:51 +0000355 public:
Daniel Dunbar30382042010-05-22 00:37:18 +0000356 Link(const ToolChain &TC) : Tool("openbsd::Link", "linker", TC) {}
Daniel Dunbarf7b8eec2009-06-29 20:52:51 +0000357
Daniel Dunbarf7b8eec2009-06-29 20:52:51 +0000358 virtual bool hasIntegratedCPP() const { return false; }
359
360 virtual void ConstructJob(Compilation &C, const JobAction &JA,
Mike Stump1eb44332009-09-09 15:08:12 +0000361 const InputInfo &Output,
362 const InputInfoList &Inputs,
363 const ArgList &TCArgs,
Daniel Dunbarf7b8eec2009-06-29 20:52:51 +0000364 const char *LinkingOutput) const;
365 };
Edward O'Callaghane7925a02009-08-22 01:06:46 +0000366} // end namespace openbsd
Daniel Dunbarf7b8eec2009-06-29 20:52:51 +0000367
Daniel Dunbar68a31d42009-03-31 17:45:15 +0000368 /// freebsd -- Directly call GNU Binutils assembler and linker
369namespace freebsd {
Duncan Sands92dd1912010-05-11 20:16:05 +0000370 class LLVM_LIBRARY_VISIBILITY Assemble : public Tool {
Daniel Dunbar68a31d42009-03-31 17:45:15 +0000371 public:
Daniel Dunbar30382042010-05-22 00:37:18 +0000372 Assemble(const ToolChain &TC) : Tool("freebsd::Assemble", "assembler",
373 TC) {}
Daniel Dunbar68a31d42009-03-31 17:45:15 +0000374
Daniel Dunbar68a31d42009-03-31 17:45:15 +0000375 virtual bool hasIntegratedCPP() const { return false; }
376
377 virtual void ConstructJob(Compilation &C, const JobAction &JA,
Mike Stump1eb44332009-09-09 15:08:12 +0000378 const InputInfo &Output,
379 const InputInfoList &Inputs,
380 const ArgList &TCArgs,
Daniel Dunbar68a31d42009-03-31 17:45:15 +0000381 const char *LinkingOutput) const;
382 };
Duncan Sands92dd1912010-05-11 20:16:05 +0000383 class LLVM_LIBRARY_VISIBILITY Link : public Tool {
Daniel Dunbar008f54a2009-04-01 19:36:32 +0000384 public:
Daniel Dunbar30382042010-05-22 00:37:18 +0000385 Link(const ToolChain &TC) : Tool("freebsd::Link", "linker", TC) {}
Daniel Dunbar008f54a2009-04-01 19:36:32 +0000386
Daniel Dunbar008f54a2009-04-01 19:36:32 +0000387 virtual bool hasIntegratedCPP() const { return false; }
388
389 virtual void ConstructJob(Compilation &C, const JobAction &JA,
Mike Stump1eb44332009-09-09 15:08:12 +0000390 const InputInfo &Output,
391 const InputInfoList &Inputs,
392 const ArgList &TCArgs,
Daniel Dunbar008f54a2009-04-01 19:36:32 +0000393 const char *LinkingOutput) const;
394 };
Edward O'Callaghane7925a02009-08-22 01:06:46 +0000395} // end namespace freebsd
396
Benjamin Kramer8e50a962011-02-02 18:59:27 +0000397 /// netbsd -- Directly call GNU Binutils assembler and linker
398namespace netbsd {
399 class LLVM_LIBRARY_VISIBILITY Assemble : public Tool {
Joerg Sonnenberger182564c2011-05-16 13:35:02 +0000400
Benjamin Kramer8e50a962011-02-02 18:59:27 +0000401 public:
Joerg Sonnenberger1bd91372012-01-26 22:27:52 +0000402 Assemble(const ToolChain &TC)
403 : Tool("netbsd::Assemble", "assembler", TC) {}
Benjamin Kramer8e50a962011-02-02 18:59:27 +0000404
405 virtual bool hasIntegratedCPP() const { return false; }
406
407 virtual void ConstructJob(Compilation &C, const JobAction &JA,
408 const InputInfo &Output,
409 const InputInfoList &Inputs,
410 const ArgList &TCArgs,
411 const char *LinkingOutput) const;
412 };
413 class LLVM_LIBRARY_VISIBILITY Link : public Tool {
Joerg Sonnenberger182564c2011-05-16 13:35:02 +0000414
Benjamin Kramer8e50a962011-02-02 18:59:27 +0000415 public:
Joerg Sonnenberger1bd91372012-01-26 22:27:52 +0000416 Link(const ToolChain &TC)
417 : Tool("netbsd::Link", "linker", TC) {}
Benjamin Kramer8e50a962011-02-02 18:59:27 +0000418
419 virtual bool hasIntegratedCPP() const { return false; }
420
421 virtual void ConstructJob(Compilation &C, const JobAction &JA,
422 const InputInfo &Output,
423 const InputInfoList &Inputs,
424 const ArgList &TCArgs,
425 const char *LinkingOutput) const;
426 };
427} // end namespace netbsd
428
Rafael Espindolaba30bbe2010-08-10 00:25:48 +0000429 /// linux -- Directly call GNU Binutils assembler and linker
430namespace linuxtools {
431 class LLVM_LIBRARY_VISIBILITY Assemble : public Tool {
432 public:
433 Assemble(const ToolChain &TC) : Tool("linux::Assemble", "assembler",
434 TC) {}
435
436 virtual bool hasIntegratedCPP() const { return false; }
437
438 virtual void ConstructJob(Compilation &C, const JobAction &JA,
439 const InputInfo &Output,
440 const InputInfoList &Inputs,
441 const ArgList &TCArgs,
442 const char *LinkingOutput) const;
443 };
Rafael Espindolac1da9812010-11-07 20:14:31 +0000444 class LLVM_LIBRARY_VISIBILITY Link : public Tool {
445 public:
446 Link(const ToolChain &TC) : Tool("linux::Link", "linker", TC) {}
447
448 virtual bool hasIntegratedCPP() const { return false; }
449
450 virtual void ConstructJob(Compilation &C, const JobAction &JA,
451 const InputInfo &Output,
452 const InputInfoList &Inputs,
453 const ArgList &TCArgs,
454 const char *LinkingOutput) const;
455 };
Rafael Espindolaba30bbe2010-08-10 00:25:48 +0000456}
Chris Lattner38e317d2010-07-07 16:01:42 +0000457 /// minix -- Directly call GNU Binutils assembler and linker
458namespace minix {
459 class LLVM_LIBRARY_VISIBILITY Assemble : public Tool {
460 public:
461 Assemble(const ToolChain &TC) : Tool("minix::Assemble", "assembler",
462 TC) {}
463
Chris Lattner38e317d2010-07-07 16:01:42 +0000464 virtual bool hasIntegratedCPP() const { return false; }
465
466 virtual void ConstructJob(Compilation &C, const JobAction &JA,
Chris Lattner38e317d2010-07-07 16:01:42 +0000467 const InputInfo &Output,
468 const InputInfoList &Inputs,
469 const ArgList &TCArgs,
470 const char *LinkingOutput) const;
471 };
472 class LLVM_LIBRARY_VISIBILITY Link : public Tool {
473 public:
474 Link(const ToolChain &TC) : Tool("minix::Link", "linker", TC) {}
475
Chris Lattner38e317d2010-07-07 16:01:42 +0000476 virtual bool hasIntegratedCPP() const { return false; }
477
478 virtual void ConstructJob(Compilation &C, const JobAction &JA,
Chris Lattner38e317d2010-07-07 16:01:42 +0000479 const InputInfo &Output,
480 const InputInfoList &Inputs,
481 const ArgList &TCArgs,
482 const char *LinkingOutput) const;
483 };
484} // end namespace minix
485
David Chisnall31c46902012-02-15 13:39:01 +0000486 /// solaris -- Directly call Solaris assembler and linker
487namespace solaris {
488 class LLVM_LIBRARY_VISIBILITY Assemble : public Tool {
489 public:
490 Assemble(const ToolChain &TC) : Tool("solaris::Assemble", "assembler",
491 TC) {}
492
493 virtual bool hasIntegratedCPP() const { return false; }
494
495 virtual void ConstructJob(Compilation &C, const JobAction &JA,
496 const InputInfo &Output,
497 const InputInfoList &Inputs,
498 const ArgList &TCArgs,
499 const char *LinkingOutput) const;
500 };
501 class LLVM_LIBRARY_VISIBILITY Link : public Tool {
502 public:
503 Link(const ToolChain &TC) : Tool("solaris::Link", "linker", TC) {}
504
505 virtual bool hasIntegratedCPP() const { return false; }
506
507 virtual void ConstructJob(Compilation &C, const JobAction &JA,
508 const InputInfo &Output,
509 const InputInfoList &Inputs,
510 const ArgList &TCArgs,
511 const char *LinkingOutput) const;
512 };
David Chisnallbadb6cd2012-02-15 16:25:46 +0000513} // end namespace solaris
David Chisnall31c46902012-02-15 13:39:01 +0000514
Edward O'Callaghane7925a02009-08-22 01:06:46 +0000515 /// auroraux -- Directly call GNU Binutils assembler and linker
516namespace auroraux {
Duncan Sands92dd1912010-05-11 20:16:05 +0000517 class LLVM_LIBRARY_VISIBILITY Assemble : public Tool {
Edward O'Callaghane7925a02009-08-22 01:06:46 +0000518 public:
Daniel Dunbar30382042010-05-22 00:37:18 +0000519 Assemble(const ToolChain &TC) : Tool("auroraux::Assemble", "assembler",
520 TC) {}
Edward O'Callaghane7925a02009-08-22 01:06:46 +0000521
Edward O'Callaghane7925a02009-08-22 01:06:46 +0000522 virtual bool hasIntegratedCPP() const { return false; }
523
524 virtual void ConstructJob(Compilation &C, const JobAction &JA,
Mike Stump1eb44332009-09-09 15:08:12 +0000525 const InputInfo &Output,
526 const InputInfoList &Inputs,
527 const ArgList &TCArgs,
Edward O'Callaghane7925a02009-08-22 01:06:46 +0000528 const char *LinkingOutput) const;
529 };
Duncan Sands92dd1912010-05-11 20:16:05 +0000530 class LLVM_LIBRARY_VISIBILITY Link : public Tool {
Edward O'Callaghane7925a02009-08-22 01:06:46 +0000531 public:
Daniel Dunbar30382042010-05-22 00:37:18 +0000532 Link(const ToolChain &TC) : Tool("auroraux::Link", "linker", TC) {}
Edward O'Callaghane7925a02009-08-22 01:06:46 +0000533
Edward O'Callaghane7925a02009-08-22 01:06:46 +0000534 virtual bool hasIntegratedCPP() const { return false; }
535
536 virtual void ConstructJob(Compilation &C, const JobAction &JA,
Mike Stump1eb44332009-09-09 15:08:12 +0000537 const InputInfo &Output,
538 const InputInfoList &Inputs,
539 const ArgList &TCArgs,
Edward O'Callaghane7925a02009-08-22 01:06:46 +0000540 const char *LinkingOutput) const;
541 };
542} // end namespace auroraux
Daniel Dunbar68a31d42009-03-31 17:45:15 +0000543
Daniel Dunbar11e1b402009-05-02 18:28:39 +0000544 /// dragonfly -- Directly call GNU Binutils assembler and linker
545namespace dragonfly {
Duncan Sands92dd1912010-05-11 20:16:05 +0000546 class LLVM_LIBRARY_VISIBILITY Assemble : public Tool {
Daniel Dunbar11e1b402009-05-02 18:28:39 +0000547 public:
Daniel Dunbar30382042010-05-22 00:37:18 +0000548 Assemble(const ToolChain &TC) : Tool("dragonfly::Assemble", "assembler",
549 TC) {}
Daniel Dunbar11e1b402009-05-02 18:28:39 +0000550
Daniel Dunbar11e1b402009-05-02 18:28:39 +0000551 virtual bool hasIntegratedCPP() const { return false; }
552
553 virtual void ConstructJob(Compilation &C, const JobAction &JA,
Mike Stump1eb44332009-09-09 15:08:12 +0000554 const InputInfo &Output,
555 const InputInfoList &Inputs,
556 const ArgList &TCArgs,
Daniel Dunbar11e1b402009-05-02 18:28:39 +0000557 const char *LinkingOutput) const;
558 };
Duncan Sands92dd1912010-05-11 20:16:05 +0000559 class LLVM_LIBRARY_VISIBILITY Link : public Tool {
Daniel Dunbar11e1b402009-05-02 18:28:39 +0000560 public:
Daniel Dunbar30382042010-05-22 00:37:18 +0000561 Link(const ToolChain &TC) : Tool("dragonfly::Link", "linker", TC) {}
Daniel Dunbar11e1b402009-05-02 18:28:39 +0000562
Daniel Dunbar11e1b402009-05-02 18:28:39 +0000563 virtual bool hasIntegratedCPP() const { return false; }
564
565 virtual void ConstructJob(Compilation &C, const JobAction &JA,
Mike Stump1eb44332009-09-09 15:08:12 +0000566 const InputInfo &Output,
567 const InputInfoList &Inputs,
568 const ArgList &TCArgs,
Daniel Dunbar11e1b402009-05-02 18:28:39 +0000569 const char *LinkingOutput) const;
570 };
Edward O'Callaghane7925a02009-08-22 01:06:46 +0000571} // end namespace dragonfly
Daniel Dunbar11e1b402009-05-02 18:28:39 +0000572
Michael J. Spencerff58e362010-08-21 21:55:07 +0000573 /// Visual studio tools.
574namespace visualstudio {
575 class LLVM_LIBRARY_VISIBILITY Link : public Tool {
576 public:
577 Link(const ToolChain &TC) : Tool("visualstudio::Link", "linker", TC) {}
578
579 virtual bool hasIntegratedCPP() const { return false; }
580
581 virtual void ConstructJob(Compilation &C, const JobAction &JA,
582 const InputInfo &Output,
583 const InputInfoList &Inputs,
584 const ArgList &TCArgs,
585 const char *LinkingOutput) const;
586 };
587} // end namespace visualstudio
588
Daniel Dunbar9c073ff2009-03-17 22:07:58 +0000589} // end namespace toolchains
590} // end namespace driver
591} // end namespace clang
592
Edward O'Callaghane7925a02009-08-22 01:06:46 +0000593#endif // CLANG_LIB_DRIVER_TOOLS_H_