blob: 651a8f2963ce5d8f88f147f2cac292f2065b1152 [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; }
Chad Rosier8ba9a622012-03-07 00:30:40 +0000151 virtual bool isLinkJob() const { return true; }
Daniel Dunbar47ac7d22009-03-18 06:00:36 +0000152
Daniel Dunbar82b51cc2010-01-25 22:35:08 +0000153 virtual void RenderExtraToolArgs(const JobAction &JA,
154 ArgStringList &CmdArgs) const;
Daniel Dunbar9c073ff2009-03-17 22:07:58 +0000155 };
Daniel Dunbar31b1e542009-03-17 22:45:24 +0000156} // end namespace gcc
Daniel Dunbar9c073ff2009-03-17 22:07:58 +0000157
Tony Linthicum96319392011-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 Rosier8ba9a622012-03-07 00:30:40 +0000183 virtual bool isLinkJob() const { return true; }
Tony Linthicum96319392011-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 Dunbarff7488d2009-03-20 00:52:38 +0000196namespace darwin {
Duncan Sands92dd1912010-05-11 20:16:05 +0000197 class LLVM_LIBRARY_VISIBILITY DarwinTool : public Tool {
David Blaikie99ba9e32011-12-20 02:48:34 +0000198 virtual void anchor();
Daniel Dunbarfbefe6b2009-09-09 18:36:20 +0000199 protected:
200 void AddDarwinArch(const ArgList &Args, ArgStringList &CmdArgs) const;
Daniel Dunbarfbefe6b2009-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 Dunbar30382042010-05-22 00:37:18 +0000207 DarwinTool(const char *Name, const char *ShortName,
208 const ToolChain &TC) : Tool(Name, ShortName, TC) {}
Daniel Dunbarfbefe6b2009-09-09 18:36:20 +0000209 };
210
Duncan Sands92dd1912010-05-11 20:16:05 +0000211 class LLVM_LIBRARY_VISIBILITY CC1 : public DarwinTool {
David Blaikie99ba9e32011-12-20 02:48:34 +0000212 virtual void anchor();
Daniel Dunbara5a7bd02009-03-30 00:34:04 +0000213 public:
Mike Stump1eb44332009-09-09 15:08:12 +0000214 static const char *getBaseInputName(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 *getBaseInputStem(const ArgList &Args,
Daniel Dunbara5a7bd02009-03-30 00:34:04 +0000217 const InputInfoList &Input);
Mike Stump1eb44332009-09-09 15:08:12 +0000218 static const char *getDependencyFileName(const ArgList &Args,
Daniel Dunbara5a7bd02009-03-30 00:34:04 +0000219 const InputInfoList &Inputs);
220
Daniel Dunbar40f12652009-03-29 17:08:39 +0000221 protected:
222 const char *getCC1Name(types::ID Type) const;
223
Daniel Dunbara3ec60e2009-03-29 18:40:18 +0000224 void AddCC1Args(const ArgList &Args, ArgStringList &CmdArgs) const;
Chad Rosier285f9a22011-08-17 18:24:55 +0000225 void RemoveCC1UnsupportedArgs(ArgStringList &CmdArgs) const;
Daniel Dunbar40f12652009-03-29 17:08:39 +0000226 void AddCC1OptionsArgs(const ArgList &Args, ArgStringList &CmdArgs,
227 const InputInfoList &Inputs,
Daniel Dunbara3ec60e2009-03-29 18:40:18 +0000228 const ArgStringList &OutputArgs) const;
Daniel Dunbar40f12652009-03-29 17:08:39 +0000229 void AddCPPOptionsArgs(const ArgList &Args, ArgStringList &CmdArgs,
230 const InputInfoList &Inputs,
Daniel Dunbara3ec60e2009-03-29 18:40:18 +0000231 const ArgStringList &OutputArgs) const;
Mike Stump1eb44332009-09-09 15:08:12 +0000232 void AddCPPUniqueOptionsArgs(const ArgList &Args,
Daniel Dunbara3ec60e2009-03-29 18:40:18 +0000233 ArgStringList &CmdArgs,
234 const InputInfoList &Inputs) const;
235 void AddCPPArgs(const ArgList &Args, ArgStringList &CmdArgs) const;
Daniel Dunbar40f12652009-03-29 17:08:39 +0000236
237 public:
Daniel Dunbar30382042010-05-22 00:37:18 +0000238 CC1(const char *Name, const char *ShortName,
239 const ToolChain &TC) : DarwinTool(Name, ShortName, TC) {}
Daniel Dunbar40f12652009-03-29 17:08:39 +0000240
Daniel Dunbar60a53f22010-04-06 17:07:49 +0000241 virtual bool hasGoodDiagnostics() const { return true; }
Daniel Dunbar40f12652009-03-29 17:08:39 +0000242 virtual bool hasIntegratedCPP() const { return true; }
243 };
244
Duncan Sands92dd1912010-05-11 20:16:05 +0000245 class LLVM_LIBRARY_VISIBILITY Preprocess : public CC1 {
Daniel Dunbar40f12652009-03-29 17:08:39 +0000246 public:
Daniel Dunbar30382042010-05-22 00:37:18 +0000247 Preprocess(const ToolChain &TC) : CC1("darwin::Preprocess",
248 "gcc preprocessor", TC) {}
Daniel Dunbar40f12652009-03-29 17:08:39 +0000249
250 virtual void ConstructJob(Compilation &C, const JobAction &JA,
Mike Stump1eb44332009-09-09 15:08:12 +0000251 const InputInfo &Output,
252 const InputInfoList &Inputs,
253 const ArgList &TCArgs,
Daniel Dunbar40f12652009-03-29 17:08:39 +0000254 const char *LinkingOutput) const;
255 };
256
Duncan Sands92dd1912010-05-11 20:16:05 +0000257 class LLVM_LIBRARY_VISIBILITY Compile : public CC1 {
Daniel Dunbar40f12652009-03-29 17:08:39 +0000258 public:
Daniel Dunbar30382042010-05-22 00:37:18 +0000259 Compile(const ToolChain &TC) : CC1("darwin::Compile", "gcc frontend", TC) {}
Daniel Dunbar40f12652009-03-29 17:08:39 +0000260
261 virtual void ConstructJob(Compilation &C, const JobAction &JA,
Mike Stump1eb44332009-09-09 15:08:12 +0000262 const InputInfo &Output,
263 const InputInfoList &Inputs,
264 const ArgList &TCArgs,
Daniel Dunbar40f12652009-03-29 17:08:39 +0000265 const char *LinkingOutput) const;
266 };
267
Duncan Sands92dd1912010-05-11 20:16:05 +0000268 class LLVM_LIBRARY_VISIBILITY Assemble : public DarwinTool {
Daniel Dunbar8cac5f72009-03-20 16:06:39 +0000269 public:
Daniel Dunbar30382042010-05-22 00:37:18 +0000270 Assemble(const ToolChain &TC) : DarwinTool("darwin::Assemble",
271 "assembler", TC) {}
Daniel Dunbar8cac5f72009-03-20 16:06:39 +0000272
Daniel Dunbar8cac5f72009-03-20 16:06:39 +0000273 virtual bool hasIntegratedCPP() const { return false; }
274
275 virtual void ConstructJob(Compilation &C, const JobAction &JA,
Mike Stump1eb44332009-09-09 15:08:12 +0000276 const InputInfo &Output,
277 const InputInfoList &Inputs,
278 const ArgList &TCArgs,
Daniel Dunbar8cac5f72009-03-20 16:06:39 +0000279 const char *LinkingOutput) const;
280 };
281
Duncan Sands92dd1912010-05-11 20:16:05 +0000282 class LLVM_LIBRARY_VISIBILITY Link : public DarwinTool {
Daniel Dunbar748de8e2010-09-09 21:51:05 +0000283 void AddLinkArgs(Compilation &C, const ArgList &Args,
284 ArgStringList &CmdArgs) const;
Daniel Dunbar02633b52009-03-26 16:23:12 +0000285
Daniel Dunbar02633b52009-03-26 16:23:12 +0000286 public:
Daniel Dunbar30382042010-05-22 00:37:18 +0000287 Link(const ToolChain &TC) : DarwinTool("darwin::Link", "linker", TC) {}
Daniel Dunbar02633b52009-03-26 16:23:12 +0000288
Daniel Dunbar02633b52009-03-26 16:23:12 +0000289 virtual bool hasIntegratedCPP() const { return false; }
Chad Rosier8ba9a622012-03-07 00:30:40 +0000290 virtual bool isLinkJob() const { return true; }
Daniel Dunbar02633b52009-03-26 16:23:12 +0000291
292 virtual void ConstructJob(Compilation &C, const JobAction &JA,
Mike Stump1eb44332009-09-09 15:08:12 +0000293 const InputInfo &Output,
294 const InputInfoList &Inputs,
295 const ArgList &TCArgs,
Daniel Dunbar02633b52009-03-26 16:23:12 +0000296 const char *LinkingOutput) const;
297 };
298
Duncan Sands92dd1912010-05-11 20:16:05 +0000299 class LLVM_LIBRARY_VISIBILITY Lipo : public DarwinTool {
Daniel Dunbarff7488d2009-03-20 00:52:38 +0000300 public:
Daniel Dunbar30382042010-05-22 00:37:18 +0000301 Lipo(const ToolChain &TC) : DarwinTool("darwin::Lipo", "lipo", TC) {}
Daniel Dunbarff7488d2009-03-20 00:52:38 +0000302
Daniel Dunbarff7488d2009-03-20 00:52:38 +0000303 virtual bool hasIntegratedCPP() const { return false; }
304
305 virtual void ConstructJob(Compilation &C, const JobAction &JA,
Mike Stump1eb44332009-09-09 15:08:12 +0000306 const InputInfo &Output,
307 const InputInfoList &Inputs,
308 const ArgList &TCArgs,
Daniel Dunbarff7488d2009-03-20 00:52:38 +0000309 const char *LinkingOutput) const;
310 };
Daniel Dunbar6e0f2542010-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 Dunbar6e0f2542010-06-04 18:28:36 +0000317 virtual bool hasIntegratedCPP() const { return false; }
318
319 virtual void ConstructJob(Compilation &C, const JobAction &JA,
Daniel Dunbar6e0f2542010-06-04 18:28:36 +0000320 const InputInfo &Output,
321 const InputInfoList &Inputs,
322 const ArgList &TCArgs,
323 const char *LinkingOutput) const;
324 };
Eric Christopherf8571862011-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 Dunbarff7488d2009-03-20 00:52:38 +0000340}
341
Daniel Dunbarf7b8eec2009-06-29 20:52:51 +0000342 /// openbsd -- Directly call GNU Binutils assembler and linker
343namespace openbsd {
Duncan Sands92dd1912010-05-11 20:16:05 +0000344 class LLVM_LIBRARY_VISIBILITY Assemble : public Tool {
Daniel Dunbarf7b8eec2009-06-29 20:52:51 +0000345 public:
Daniel Dunbar30382042010-05-22 00:37:18 +0000346 Assemble(const ToolChain &TC) : Tool("openbsd::Assemble", "assembler",
347 TC) {}
Daniel Dunbarf7b8eec2009-06-29 20:52:51 +0000348
Daniel Dunbarf7b8eec2009-06-29 20:52:51 +0000349 virtual bool hasIntegratedCPP() const { return false; }
350
351 virtual void ConstructJob(Compilation &C, const JobAction &JA,
Mike Stump1eb44332009-09-09 15:08:12 +0000352 const InputInfo &Output,
353 const InputInfoList &Inputs,
354 const ArgList &TCArgs,
Daniel Dunbarf7b8eec2009-06-29 20:52:51 +0000355 const char *LinkingOutput) const;
356 };
Duncan Sands92dd1912010-05-11 20:16:05 +0000357 class LLVM_LIBRARY_VISIBILITY Link : public Tool {
Daniel Dunbarf7b8eec2009-06-29 20:52:51 +0000358 public:
Daniel Dunbar30382042010-05-22 00:37:18 +0000359 Link(const ToolChain &TC) : Tool("openbsd::Link", "linker", TC) {}
Daniel Dunbarf7b8eec2009-06-29 20:52:51 +0000360
Daniel Dunbarf7b8eec2009-06-29 20:52:51 +0000361 virtual bool hasIntegratedCPP() const { return false; }
Chad Rosier8ba9a622012-03-07 00:30:40 +0000362 virtual bool isLinkJob() const { return true; }
Daniel Dunbarf7b8eec2009-06-29 20:52:51 +0000363
364 virtual void ConstructJob(Compilation &C, const JobAction &JA,
Mike Stump1eb44332009-09-09 15:08:12 +0000365 const InputInfo &Output,
366 const InputInfoList &Inputs,
367 const ArgList &TCArgs,
Daniel Dunbarf7b8eec2009-06-29 20:52:51 +0000368 const char *LinkingOutput) const;
369 };
Edward O'Callaghane7925a02009-08-22 01:06:46 +0000370} // end namespace openbsd
Daniel Dunbarf7b8eec2009-06-29 20:52:51 +0000371
Daniel Dunbar68a31d42009-03-31 17:45:15 +0000372 /// freebsd -- Directly call GNU Binutils assembler and linker
373namespace freebsd {
Duncan Sands92dd1912010-05-11 20:16:05 +0000374 class LLVM_LIBRARY_VISIBILITY Assemble : public Tool {
Daniel Dunbar68a31d42009-03-31 17:45:15 +0000375 public:
Daniel Dunbar30382042010-05-22 00:37:18 +0000376 Assemble(const ToolChain &TC) : Tool("freebsd::Assemble", "assembler",
377 TC) {}
Daniel Dunbar68a31d42009-03-31 17:45:15 +0000378
Daniel Dunbar68a31d42009-03-31 17:45:15 +0000379 virtual bool hasIntegratedCPP() const { return false; }
380
381 virtual void ConstructJob(Compilation &C, const JobAction &JA,
Mike Stump1eb44332009-09-09 15:08:12 +0000382 const InputInfo &Output,
383 const InputInfoList &Inputs,
384 const ArgList &TCArgs,
Daniel Dunbar68a31d42009-03-31 17:45:15 +0000385 const char *LinkingOutput) const;
386 };
Duncan Sands92dd1912010-05-11 20:16:05 +0000387 class LLVM_LIBRARY_VISIBILITY Link : public Tool {
Daniel Dunbar008f54a2009-04-01 19:36:32 +0000388 public:
Daniel Dunbar30382042010-05-22 00:37:18 +0000389 Link(const ToolChain &TC) : Tool("freebsd::Link", "linker", TC) {}
Daniel Dunbar008f54a2009-04-01 19:36:32 +0000390
Daniel Dunbar008f54a2009-04-01 19:36:32 +0000391 virtual bool hasIntegratedCPP() const { return false; }
Chad Rosier8ba9a622012-03-07 00:30:40 +0000392 virtual bool isLinkJob() const { return true; }
Daniel Dunbar008f54a2009-04-01 19:36:32 +0000393
394 virtual void ConstructJob(Compilation &C, const JobAction &JA,
Mike Stump1eb44332009-09-09 15:08:12 +0000395 const InputInfo &Output,
396 const InputInfoList &Inputs,
397 const ArgList &TCArgs,
Daniel Dunbar008f54a2009-04-01 19:36:32 +0000398 const char *LinkingOutput) const;
399 };
Edward O'Callaghane7925a02009-08-22 01:06:46 +0000400} // end namespace freebsd
401
Benjamin Kramer8e50a962011-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 Sonnenberger182564c2011-05-16 13:35:02 +0000405
Benjamin Kramer8e50a962011-02-02 18:59:27 +0000406 public:
Joerg Sonnenberger1bd91372012-01-26 22:27:52 +0000407 Assemble(const ToolChain &TC)
408 : Tool("netbsd::Assemble", "assembler", TC) {}
Benjamin Kramer8e50a962011-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 Sonnenberger182564c2011-05-16 13:35:02 +0000419
Benjamin Kramer8e50a962011-02-02 18:59:27 +0000420 public:
Joerg Sonnenberger1bd91372012-01-26 22:27:52 +0000421 Link(const ToolChain &TC)
422 : Tool("netbsd::Link", "linker", TC) {}
Benjamin Kramer8e50a962011-02-02 18:59:27 +0000423
424 virtual bool hasIntegratedCPP() const { return false; }
Chad Rosier8ba9a622012-03-07 00:30:40 +0000425 virtual bool isLinkJob() const { return true; }
Benjamin Kramer8e50a962011-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 Espindolaba30bbe2010-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 Espindolac1da9812010-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 Rosier8ba9a622012-03-07 00:30:40 +0000455 virtual bool isLinkJob() const { return true; }
Rafael Espindolac1da9812010-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 Espindolaba30bbe2010-08-10 00:25:48 +0000463}
Chris Lattner38e317d2010-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 Lattner38e317d2010-07-07 16:01:42 +0000471 virtual bool hasIntegratedCPP() const { return false; }
472
473 virtual void ConstructJob(Compilation &C, const JobAction &JA,
Chris Lattner38e317d2010-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 Lattner38e317d2010-07-07 16:01:42 +0000483 virtual bool hasIntegratedCPP() const { return false; }
Chad Rosier8ba9a622012-03-07 00:30:40 +0000484 virtual bool isLinkJob() const { return true; }
Chris Lattner38e317d2010-07-07 16:01:42 +0000485
486 virtual void ConstructJob(Compilation &C, const JobAction &JA,
Chris Lattner38e317d2010-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 Chisnall31c46902012-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 Rosier8ba9a622012-03-07 00:30:40 +0000514 virtual bool isLinkJob() const { return true; }
David Chisnall31c46902012-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 Chisnallbadb6cd2012-02-15 16:25:46 +0000522} // end namespace solaris
David Chisnall31c46902012-02-15 13:39:01 +0000523
Edward O'Callaghane7925a02009-08-22 01:06:46 +0000524 /// auroraux -- Directly call GNU Binutils assembler and linker
525namespace auroraux {
Duncan Sands92dd1912010-05-11 20:16:05 +0000526 class LLVM_LIBRARY_VISIBILITY Assemble : public Tool {
Edward O'Callaghane7925a02009-08-22 01:06:46 +0000527 public:
Daniel Dunbar30382042010-05-22 00:37:18 +0000528 Assemble(const ToolChain &TC) : Tool("auroraux::Assemble", "assembler",
529 TC) {}
Edward O'Callaghane7925a02009-08-22 01:06:46 +0000530
Edward O'Callaghane7925a02009-08-22 01:06:46 +0000531 virtual bool hasIntegratedCPP() const { return false; }
532
533 virtual void ConstructJob(Compilation &C, const JobAction &JA,
Mike Stump1eb44332009-09-09 15:08:12 +0000534 const InputInfo &Output,
535 const InputInfoList &Inputs,
536 const ArgList &TCArgs,
Edward O'Callaghane7925a02009-08-22 01:06:46 +0000537 const char *LinkingOutput) const;
538 };
Duncan Sands92dd1912010-05-11 20:16:05 +0000539 class LLVM_LIBRARY_VISIBILITY Link : public Tool {
Edward O'Callaghane7925a02009-08-22 01:06:46 +0000540 public:
Daniel Dunbar30382042010-05-22 00:37:18 +0000541 Link(const ToolChain &TC) : Tool("auroraux::Link", "linker", TC) {}
Edward O'Callaghane7925a02009-08-22 01:06:46 +0000542
Edward O'Callaghane7925a02009-08-22 01:06:46 +0000543 virtual bool hasIntegratedCPP() const { return false; }
Chad Rosier8ba9a622012-03-07 00:30:40 +0000544 virtual bool isLinkJob() const { return true; }
Edward O'Callaghane7925a02009-08-22 01:06:46 +0000545
546 virtual void ConstructJob(Compilation &C, const JobAction &JA,
Mike Stump1eb44332009-09-09 15:08:12 +0000547 const InputInfo &Output,
548 const InputInfoList &Inputs,
549 const ArgList &TCArgs,
Edward O'Callaghane7925a02009-08-22 01:06:46 +0000550 const char *LinkingOutput) const;
551 };
552} // end namespace auroraux
Daniel Dunbar68a31d42009-03-31 17:45:15 +0000553
Daniel Dunbar11e1b402009-05-02 18:28:39 +0000554 /// dragonfly -- Directly call GNU Binutils assembler and linker
555namespace dragonfly {
Duncan Sands92dd1912010-05-11 20:16:05 +0000556 class LLVM_LIBRARY_VISIBILITY Assemble : public Tool {
Daniel Dunbar11e1b402009-05-02 18:28:39 +0000557 public:
Daniel Dunbar30382042010-05-22 00:37:18 +0000558 Assemble(const ToolChain &TC) : Tool("dragonfly::Assemble", "assembler",
559 TC) {}
Daniel Dunbar11e1b402009-05-02 18:28:39 +0000560
Daniel Dunbar11e1b402009-05-02 18:28:39 +0000561 virtual bool hasIntegratedCPP() const { return false; }
562
563 virtual void ConstructJob(Compilation &C, const JobAction &JA,
Mike Stump1eb44332009-09-09 15:08:12 +0000564 const InputInfo &Output,
565 const InputInfoList &Inputs,
566 const ArgList &TCArgs,
Daniel Dunbar11e1b402009-05-02 18:28:39 +0000567 const char *LinkingOutput) const;
568 };
Duncan Sands92dd1912010-05-11 20:16:05 +0000569 class LLVM_LIBRARY_VISIBILITY Link : public Tool {
Daniel Dunbar11e1b402009-05-02 18:28:39 +0000570 public:
Daniel Dunbar30382042010-05-22 00:37:18 +0000571 Link(const ToolChain &TC) : Tool("dragonfly::Link", "linker", TC) {}
Daniel Dunbar11e1b402009-05-02 18:28:39 +0000572
Daniel Dunbar11e1b402009-05-02 18:28:39 +0000573 virtual bool hasIntegratedCPP() const { return false; }
Chad Rosier8ba9a622012-03-07 00:30:40 +0000574 virtual bool isLinkJob() const { return true; }
Daniel Dunbar11e1b402009-05-02 18:28:39 +0000575
576 virtual void ConstructJob(Compilation &C, const JobAction &JA,
Mike Stump1eb44332009-09-09 15:08:12 +0000577 const InputInfo &Output,
578 const InputInfoList &Inputs,
579 const ArgList &TCArgs,
Daniel Dunbar11e1b402009-05-02 18:28:39 +0000580 const char *LinkingOutput) const;
581 };
Edward O'Callaghane7925a02009-08-22 01:06:46 +0000582} // end namespace dragonfly
Daniel Dunbar11e1b402009-05-02 18:28:39 +0000583
Michael J. Spencerff58e362010-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 Rosier8ba9a622012-03-07 00:30:40 +0000591 virtual bool isLinkJob() const { return true; }
Michael J. Spencerff58e362010-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 Dunbar9c073ff2009-03-17 22:07:58 +0000601} // end namespace toolchains
602} // end namespace driver
603} // end namespace clang
604
Edward O'Callaghane7925a02009-08-22 01:06:46 +0000605#endif // CLANG_LIB_DRIVER_TOOLS_H_