blob: 8250527202958d1b5e2c7459f976748dbebca2c3 [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"
Joerg Sonnenberger182564c2011-05-16 13:35:02 +000016#include "llvm/ADT/Triple.h"
Reid Klecknerb1e25a12013-06-14 17:17:23 +000017#include "llvm/Option/Option.h"
Daniel Dunbar9c073ff2009-03-17 22:07:58 +000018#include "llvm/Support/Compiler.h"
19
20namespace clang {
John McCall260611a2012-06-20 06:18:46 +000021 class ObjCRuntime;
22
Daniel Dunbar9c073ff2009-03-17 22:07:58 +000023namespace driver {
Douglas Gregordf91ef32009-04-18 00:34:01 +000024 class Driver;
25
Daniel Dunbar02633b52009-03-26 16:23:12 +000026namespace toolchains {
Daniel Dunbarf3955282009-09-04 18:34:51 +000027 class Darwin;
Daniel Dunbar02633b52009-03-26 16:23:12 +000028}
29
Daniel Dunbar985b8252009-03-17 22:18:43 +000030namespace tools {
Reid Klecknerb1e25a12013-06-14 17:17:23 +000031using llvm::opt::ArgStringList;
Daniel Dunbar9c073ff2009-03-17 22:07:58 +000032
Daniel Dunbar20a9aa52010-05-20 21:30:13 +000033 /// \brief Clang compiler tool.
Duncan Sands92dd1912010-05-11 20:16:05 +000034 class LLVM_LIBRARY_VISIBILITY Clang : public Tool {
Eric Christopher27e2b982012-12-18 00:31:10 +000035 public:
Bob Wilson66b8a662012-11-23 06:14:39 +000036 static const char *getBaseInputName(const ArgList &Args,
37 const InputInfoList &Inputs);
38 static const char *getBaseInputStem(const ArgList &Args,
39 const InputInfoList &Inputs);
40 static const char *getDependencyFileName(const ArgList &Args,
41 const InputInfoList &Inputs);
42
Eric Christopher27e2b982012-12-18 00:31:10 +000043 private:
Peter Collingbourne54db68b2011-11-06 00:40:05 +000044 void AddPreprocessingOptions(Compilation &C,
Chad Rosier9d718632013-01-24 19:14:47 +000045 const JobAction &JA,
Peter Collingbourne54db68b2011-11-06 00:40:05 +000046 const Driver &D,
Douglas Gregordf91ef32009-04-18 00:34:01 +000047 const ArgList &Args,
Daniel Dunbarc21c4852009-04-08 23:54:23 +000048 ArgStringList &CmdArgs,
49 const InputInfo &Output,
50 const InputInfoList &Inputs) const;
51
Daniel Dunbarfa41d692011-03-17 17:10:06 +000052 void AddARMTargetArgs(const ArgList &Args, ArgStringList &CmdArgs,
53 bool KernelOrKext) const;
Eric Christophered734732010-03-02 02:41:08 +000054 void AddMIPSTargetArgs(const ArgList &Args, ArgStringList &CmdArgs) const;
Hal Finkel02a84272012-06-11 22:35:19 +000055 void AddPPCTargetArgs(const ArgList &Args, ArgStringList &CmdArgs) const;
Tom Stellarde25d2f62013-04-01 20:56:53 +000056 void AddR600TargetArgs(const ArgList &Args, ArgStringList &CmdArgs) const;
Bruno Cardoso Lopes9284d212010-11-09 17:21:19 +000057 void AddSparcTargetArgs(const ArgList &Args, ArgStringList &CmdArgs) const;
Daniel Dunbar6acda162009-09-09 22:33:08 +000058 void AddX86TargetArgs(const ArgList &Args, ArgStringList &CmdArgs) const;
Tony Linthicum96319392011-12-12 21:14:55 +000059 void AddHexagonTargetArgs (const ArgList &Args, ArgStringList &CmdArgs) const;
Daniel Dunbar6acda162009-09-09 22:33:08 +000060
John McCall260611a2012-06-20 06:18:46 +000061 enum RewriteKind { RK_None, RK_Fragile, RK_NonFragile };
62
63 ObjCRuntime AddObjCRuntimeArgs(const ArgList &args, ArgStringList &cmdArgs,
64 RewriteKind rewrite) const;
65
Daniel Dunbar9c073ff2009-03-17 22:07:58 +000066 public:
Daniel Dunbar30382042010-05-22 00:37:18 +000067 Clang(const ToolChain &TC) : Tool("clang", "clang frontend", TC) {}
Daniel Dunbar9c073ff2009-03-17 22:07:58 +000068
Daniel Dunbar60a53f22010-04-06 17:07:49 +000069 virtual bool hasGoodDiagnostics() const { return true; }
Daniel Dunbar8767cbc2010-02-03 03:07:56 +000070 virtual bool hasIntegratedAssembler() const { return true; }
Daniel Dunbar9c073ff2009-03-17 22:07:58 +000071 virtual bool hasIntegratedCPP() const { return true; }
Daniel Dunbar47ac7d22009-03-18 06:00:36 +000072
73 virtual void ConstructJob(Compilation &C, const JobAction &JA,
Mike Stump1eb44332009-09-09 15:08:12 +000074 const InputInfo &Output,
75 const InputInfoList &Inputs,
76 const ArgList &TCArgs,
Daniel Dunbar47ac7d22009-03-18 06:00:36 +000077 const char *LinkingOutput) const;
Daniel Dunbar9c073ff2009-03-17 22:07:58 +000078 };
79
Daniel Dunbar20a9aa52010-05-20 21:30:13 +000080 /// \brief Clang integrated assembler tool.
81 class LLVM_LIBRARY_VISIBILITY ClangAs : public Tool {
Jim Grosbachfc308292012-02-10 20:37:10 +000082 void AddARMTargetArgs(const ArgList &Args, ArgStringList &CmdArgs) const;
Benjamin Kramerefc5b672013-02-22 20:55:17 +000083 void AddX86TargetArgs(const ArgList &Args, ArgStringList &CmdArgs) const;
Daniel Dunbar20a9aa52010-05-20 21:30:13 +000084 public:
Daniel Dunbar30382042010-05-22 00:37:18 +000085 ClangAs(const ToolChain &TC) : Tool("clang::as",
86 "clang integrated assembler", TC) {}
Daniel Dunbar20a9aa52010-05-20 21:30:13 +000087
Daniel Dunbar20a9aa52010-05-20 21:30:13 +000088 virtual bool hasGoodDiagnostics() const { return true; }
89 virtual bool hasIntegratedAssembler() const { return false; }
90 virtual bool hasIntegratedCPP() const { return false; }
91
92 virtual void ConstructJob(Compilation &C, const JobAction &JA,
Daniel Dunbar20a9aa52010-05-20 21:30:13 +000093 const InputInfo &Output,
94 const InputInfoList &Inputs,
95 const ArgList &TCArgs,
96 const char *LinkingOutput) const;
97 };
98
Daniel Dunbar31b1e542009-03-17 22:45:24 +000099 /// gcc - Generic GCC tool implementations.
100namespace gcc {
Duncan Sands92dd1912010-05-11 20:16:05 +0000101 class LLVM_LIBRARY_VISIBILITY Common : public Tool {
Daniel Dunbar9c073ff2009-03-17 22:07:58 +0000102 public:
Daniel Dunbar30382042010-05-22 00:37:18 +0000103 Common(const char *Name, const char *ShortName,
104 const ToolChain &TC) : Tool(Name, ShortName, TC) {}
Daniel Dunbarb488c1d2009-03-18 08:07:30 +0000105
106 virtual void ConstructJob(Compilation &C, const JobAction &JA,
Mike Stump1eb44332009-09-09 15:08:12 +0000107 const InputInfo &Output,
108 const InputInfoList &Inputs,
109 const ArgList &TCArgs,
Daniel Dunbarb488c1d2009-03-18 08:07:30 +0000110 const char *LinkingOutput) const;
111
112 /// RenderExtraToolArgs - Render any arguments necessary to force
113 /// the particular tool mode.
Daniel Dunbar82b51cc2010-01-25 22:35:08 +0000114 virtual void RenderExtraToolArgs(const JobAction &JA,
115 ArgStringList &CmdArgs) const = 0;
Daniel Dunbarb488c1d2009-03-18 08:07:30 +0000116 };
117
Mike Stump1eb44332009-09-09 15:08:12 +0000118
Duncan Sands92dd1912010-05-11 20:16:05 +0000119 class LLVM_LIBRARY_VISIBILITY Preprocess : public Common {
Daniel Dunbarb488c1d2009-03-18 08:07:30 +0000120 public:
Daniel Dunbar30382042010-05-22 00:37:18 +0000121 Preprocess(const ToolChain &TC) : Common("gcc::Preprocess",
122 "gcc preprocessor", TC) {}
Daniel Dunbar9c073ff2009-03-17 22:07:58 +0000123
Daniel Dunbar60a53f22010-04-06 17:07:49 +0000124 virtual bool hasGoodDiagnostics() const { return true; }
Daniel Dunbar9c073ff2009-03-17 22:07:58 +0000125 virtual bool hasIntegratedCPP() const { return false; }
Daniel Dunbar47ac7d22009-03-18 06:00:36 +0000126
Daniel Dunbar82b51cc2010-01-25 22:35:08 +0000127 virtual void RenderExtraToolArgs(const JobAction &JA,
128 ArgStringList &CmdArgs) const;
Daniel Dunbar9c073ff2009-03-17 22:07:58 +0000129 };
130
Duncan Sands92dd1912010-05-11 20:16:05 +0000131 class LLVM_LIBRARY_VISIBILITY Precompile : public Common {
Daniel Dunbar9c073ff2009-03-17 22:07:58 +0000132 public:
Daniel Dunbar30382042010-05-22 00:37:18 +0000133 Precompile(const ToolChain &TC) : Common("gcc::Precompile",
134 "gcc precompile", TC) {}
Daniel Dunbar9c073ff2009-03-17 22:07:58 +0000135
Daniel Dunbar60a53f22010-04-06 17:07:49 +0000136 virtual bool hasGoodDiagnostics() const { return true; }
Daniel Dunbar9c073ff2009-03-17 22:07:58 +0000137 virtual bool hasIntegratedCPP() const { return true; }
Daniel Dunbar47ac7d22009-03-18 06:00:36 +0000138
Daniel Dunbar82b51cc2010-01-25 22:35:08 +0000139 virtual void RenderExtraToolArgs(const JobAction &JA,
140 ArgStringList &CmdArgs) const;
Daniel Dunbar9c073ff2009-03-17 22:07:58 +0000141 };
142
Duncan Sands92dd1912010-05-11 20:16:05 +0000143 class LLVM_LIBRARY_VISIBILITY Compile : public Common {
Daniel Dunbar9c073ff2009-03-17 22:07:58 +0000144 public:
Daniel Dunbar30382042010-05-22 00:37:18 +0000145 Compile(const ToolChain &TC) : Common("gcc::Compile",
146 "gcc frontend", TC) {}
Daniel Dunbar9c073ff2009-03-17 22:07:58 +0000147
Daniel Dunbar60a53f22010-04-06 17:07:49 +0000148 virtual bool hasGoodDiagnostics() const { return true; }
Daniel Dunbar9c073ff2009-03-17 22:07:58 +0000149 virtual bool hasIntegratedCPP() const { return true; }
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 };
154
Duncan Sands92dd1912010-05-11 20:16:05 +0000155 class LLVM_LIBRARY_VISIBILITY Assemble : public Common {
Daniel Dunbar9c073ff2009-03-17 22:07:58 +0000156 public:
Daniel Dunbar30382042010-05-22 00:37:18 +0000157 Assemble(const ToolChain &TC) : Common("gcc::Assemble",
158 "assembler (via gcc)", TC) {}
Daniel Dunbar9c073ff2009-03-17 22:07:58 +0000159
Daniel Dunbar9c073ff2009-03-17 22:07:58 +0000160 virtual bool hasIntegratedCPP() const { return false; }
Daniel Dunbar47ac7d22009-03-18 06:00:36 +0000161
Daniel Dunbar82b51cc2010-01-25 22:35:08 +0000162 virtual void RenderExtraToolArgs(const JobAction &JA,
163 ArgStringList &CmdArgs) const;
Daniel Dunbar9c073ff2009-03-17 22:07:58 +0000164 };
165
Duncan Sands92dd1912010-05-11 20:16:05 +0000166 class LLVM_LIBRARY_VISIBILITY Link : public Common {
Daniel Dunbar9c073ff2009-03-17 22:07:58 +0000167 public:
Daniel Dunbar30382042010-05-22 00:37:18 +0000168 Link(const ToolChain &TC) : Common("gcc::Link",
169 "linker (via gcc)", TC) {}
Daniel Dunbar9c073ff2009-03-17 22:07:58 +0000170
Daniel Dunbar9c073ff2009-03-17 22:07:58 +0000171 virtual bool hasIntegratedCPP() const { return false; }
Chad Rosier8ba9a622012-03-07 00:30:40 +0000172 virtual bool isLinkJob() const { return true; }
Daniel Dunbar47ac7d22009-03-18 06:00:36 +0000173
Daniel Dunbar82b51cc2010-01-25 22:35:08 +0000174 virtual void RenderExtraToolArgs(const JobAction &JA,
175 ArgStringList &CmdArgs) const;
Daniel Dunbar9c073ff2009-03-17 22:07:58 +0000176 };
Daniel Dunbar31b1e542009-03-17 22:45:24 +0000177} // end namespace gcc
Daniel Dunbar9c073ff2009-03-17 22:07:58 +0000178
Tony Linthicum96319392011-12-12 21:14:55 +0000179namespace hexagon {
180 // For Hexagon, we do not need to instantiate tools for PreProcess, PreCompile and Compile.
181 // We simply use "clang -cc1" for those actions.
182 class LLVM_LIBRARY_VISIBILITY Assemble : public Tool {
183 public:
184 Assemble(const ToolChain &TC) : Tool("hexagon::Assemble",
185 "hexagon-as", TC) {}
186
187 virtual bool hasIntegratedCPP() const { return false; }
188
189 virtual void RenderExtraToolArgs(const JobAction &JA,
190 ArgStringList &CmdArgs) const;
191 virtual void ConstructJob(Compilation &C, const JobAction &JA,
192 const InputInfo &Output,
193 const InputInfoList &Inputs,
194 const ArgList &TCArgs,
195 const char *LinkingOutput) const;
196 };
197
198 class LLVM_LIBRARY_VISIBILITY Link : public Tool {
199 public:
200 Link(const ToolChain &TC) : Tool("hexagon::Link",
201 "hexagon-ld", TC) {}
202
203 virtual bool hasIntegratedCPP() const { return false; }
Chad Rosier8ba9a622012-03-07 00:30:40 +0000204 virtual bool isLinkJob() const { return true; }
Tony Linthicum96319392011-12-12 21:14:55 +0000205
206 virtual void RenderExtraToolArgs(const JobAction &JA,
207 ArgStringList &CmdArgs) const;
208 virtual void ConstructJob(Compilation &C, const JobAction &JA,
209 const InputInfo &Output,
210 const InputInfoList &Inputs,
211 const ArgList &TCArgs,
212 const char *LinkingOutput) const;
213 };
214} // end namespace hexagon.
215
216
Daniel Dunbarff7488d2009-03-20 00:52:38 +0000217namespace darwin {
Rafael Espindolacfed8282012-10-31 18:51:07 +0000218 llvm::Triple::ArchType getArchTypeForDarwinArchName(StringRef Str);
219
Duncan Sands92dd1912010-05-11 20:16:05 +0000220 class LLVM_LIBRARY_VISIBILITY DarwinTool : public Tool {
David Blaikie99ba9e32011-12-20 02:48:34 +0000221 virtual void anchor();
Daniel Dunbarfbefe6b2009-09-09 18:36:20 +0000222 protected:
223 void AddDarwinArch(const ArgList &Args, ArgStringList &CmdArgs) const;
Daniel Dunbarfbefe6b2009-09-09 18:36:20 +0000224
225 const toolchains::Darwin &getDarwinToolChain() const {
226 return reinterpret_cast<const toolchains::Darwin&>(getToolChain());
227 }
228
229 public:
Daniel Dunbar30382042010-05-22 00:37:18 +0000230 DarwinTool(const char *Name, const char *ShortName,
231 const ToolChain &TC) : Tool(Name, ShortName, TC) {}
Daniel Dunbarfbefe6b2009-09-09 18:36:20 +0000232 };
233
Duncan Sands92dd1912010-05-11 20:16:05 +0000234 class LLVM_LIBRARY_VISIBILITY Assemble : public DarwinTool {
Daniel Dunbar8cac5f72009-03-20 16:06:39 +0000235 public:
Daniel Dunbar30382042010-05-22 00:37:18 +0000236 Assemble(const ToolChain &TC) : DarwinTool("darwin::Assemble",
237 "assembler", TC) {}
Daniel Dunbar8cac5f72009-03-20 16:06:39 +0000238
Daniel Dunbar8cac5f72009-03-20 16:06:39 +0000239 virtual bool hasIntegratedCPP() const { return false; }
240
241 virtual void ConstructJob(Compilation &C, const JobAction &JA,
Mike Stump1eb44332009-09-09 15:08:12 +0000242 const InputInfo &Output,
243 const InputInfoList &Inputs,
244 const ArgList &TCArgs,
Daniel Dunbar8cac5f72009-03-20 16:06:39 +0000245 const char *LinkingOutput) const;
246 };
247
Duncan Sands92dd1912010-05-11 20:16:05 +0000248 class LLVM_LIBRARY_VISIBILITY Link : public DarwinTool {
Bill Wendling6acf8b42012-10-02 18:02:50 +0000249 bool NeedsTempPath(const InputInfoList &Inputs) const;
Daniel Dunbar748de8e2010-09-09 21:51:05 +0000250 void AddLinkArgs(Compilation &C, const ArgList &Args,
Bill Wendling6acf8b42012-10-02 18:02:50 +0000251 ArgStringList &CmdArgs, const InputInfoList &Inputs) const;
Daniel Dunbar02633b52009-03-26 16:23:12 +0000252
Daniel Dunbar02633b52009-03-26 16:23:12 +0000253 public:
Daniel Dunbar30382042010-05-22 00:37:18 +0000254 Link(const ToolChain &TC) : DarwinTool("darwin::Link", "linker", TC) {}
Daniel Dunbar02633b52009-03-26 16:23:12 +0000255
Daniel Dunbar02633b52009-03-26 16:23:12 +0000256 virtual bool hasIntegratedCPP() const { return false; }
Chad Rosier8ba9a622012-03-07 00:30:40 +0000257 virtual bool isLinkJob() const { return true; }
Daniel Dunbar02633b52009-03-26 16:23:12 +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 Dunbar02633b52009-03-26 16:23:12 +0000263 const char *LinkingOutput) const;
264 };
265
Duncan Sands92dd1912010-05-11 20:16:05 +0000266 class LLVM_LIBRARY_VISIBILITY Lipo : public DarwinTool {
Daniel Dunbarff7488d2009-03-20 00:52:38 +0000267 public:
Daniel Dunbar30382042010-05-22 00:37:18 +0000268 Lipo(const ToolChain &TC) : DarwinTool("darwin::Lipo", "lipo", TC) {}
Daniel Dunbarff7488d2009-03-20 00:52:38 +0000269
Daniel Dunbarff7488d2009-03-20 00:52:38 +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 Dunbarff7488d2009-03-20 00:52:38 +0000276 const char *LinkingOutput) const;
277 };
Daniel Dunbar6e0f2542010-06-04 18:28:36 +0000278
279 class LLVM_LIBRARY_VISIBILITY Dsymutil : public DarwinTool {
280 public:
281 Dsymutil(const ToolChain &TC) : DarwinTool("darwin::Dsymutil",
282 "dsymutil", TC) {}
283
Daniel Dunbar6e0f2542010-06-04 18:28:36 +0000284 virtual bool hasIntegratedCPP() const { return false; }
Chad Rosier75dbc712013-02-01 18:30:26 +0000285 virtual bool isDsymutilJob() const { return true; }
Daniel Dunbar6e0f2542010-06-04 18:28:36 +0000286
287 virtual void ConstructJob(Compilation &C, const JobAction &JA,
Daniel Dunbar6e0f2542010-06-04 18:28:36 +0000288 const InputInfo &Output,
289 const InputInfoList &Inputs,
290 const ArgList &TCArgs,
291 const char *LinkingOutput) const;
292 };
Eric Christopherf8571862011-08-23 17:56:55 +0000293
294 class LLVM_LIBRARY_VISIBILITY VerifyDebug : public DarwinTool {
295 public:
296 VerifyDebug(const ToolChain &TC) : DarwinTool("darwin::VerifyDebug",
Eric Christopher27e2b982012-12-18 00:31:10 +0000297 "dwarfdump", TC) {}
Eric Christopherf8571862011-08-23 17:56:55 +0000298
299 virtual bool hasIntegratedCPP() const { return false; }
300
301 virtual void ConstructJob(Compilation &C, const JobAction &JA,
Eric Christopher27e2b982012-12-18 00:31:10 +0000302 const InputInfo &Output,
303 const InputInfoList &Inputs,
304 const ArgList &TCArgs,
305 const char *LinkingOutput) const;
Eric Christopherf8571862011-08-23 17:56:55 +0000306 };
307
Daniel Dunbarff7488d2009-03-20 00:52:38 +0000308}
309
Daniel Dunbarf7b8eec2009-06-29 20:52:51 +0000310 /// openbsd -- Directly call GNU Binutils assembler and linker
311namespace openbsd {
Duncan Sands92dd1912010-05-11 20:16:05 +0000312 class LLVM_LIBRARY_VISIBILITY Assemble : public Tool {
Daniel Dunbarf7b8eec2009-06-29 20:52:51 +0000313 public:
Daniel Dunbar30382042010-05-22 00:37:18 +0000314 Assemble(const ToolChain &TC) : Tool("openbsd::Assemble", "assembler",
315 TC) {}
Daniel Dunbarf7b8eec2009-06-29 20:52:51 +0000316
Daniel Dunbarf7b8eec2009-06-29 20:52:51 +0000317 virtual bool hasIntegratedCPP() const { return false; }
318
319 virtual void ConstructJob(Compilation &C, const JobAction &JA,
Mike Stump1eb44332009-09-09 15:08:12 +0000320 const InputInfo &Output,
321 const InputInfoList &Inputs,
322 const ArgList &TCArgs,
Daniel Dunbarf7b8eec2009-06-29 20:52:51 +0000323 const char *LinkingOutput) const;
324 };
Duncan Sands92dd1912010-05-11 20:16:05 +0000325 class LLVM_LIBRARY_VISIBILITY Link : public Tool {
Daniel Dunbarf7b8eec2009-06-29 20:52:51 +0000326 public:
Daniel Dunbar30382042010-05-22 00:37:18 +0000327 Link(const ToolChain &TC) : Tool("openbsd::Link", "linker", TC) {}
Daniel Dunbarf7b8eec2009-06-29 20:52:51 +0000328
Daniel Dunbarf7b8eec2009-06-29 20:52:51 +0000329 virtual bool hasIntegratedCPP() const { return false; }
Chad Rosier8ba9a622012-03-07 00:30:40 +0000330 virtual bool isLinkJob() const { return true; }
Daniel Dunbarf7b8eec2009-06-29 20:52:51 +0000331
332 virtual void ConstructJob(Compilation &C, const JobAction &JA,
Mike Stump1eb44332009-09-09 15:08:12 +0000333 const InputInfo &Output,
334 const InputInfoList &Inputs,
335 const ArgList &TCArgs,
Daniel Dunbarf7b8eec2009-06-29 20:52:51 +0000336 const char *LinkingOutput) const;
337 };
Edward O'Callaghane7925a02009-08-22 01:06:46 +0000338} // end namespace openbsd
Daniel Dunbarf7b8eec2009-06-29 20:52:51 +0000339
Eli Friedman42f74f22012-08-08 23:57:20 +0000340 /// bitrig -- Directly call GNU Binutils assembler and linker
341namespace bitrig {
342 class LLVM_LIBRARY_VISIBILITY Assemble : public Tool {
343 public:
344 Assemble(const ToolChain &TC) : Tool("bitrig::Assemble", "assembler",
345 TC) {}
346
347 virtual bool hasIntegratedCPP() const { return false; }
348
349 virtual void ConstructJob(Compilation &C, const JobAction &JA,
350 const InputInfo &Output,
351 const InputInfoList &Inputs,
352 const ArgList &TCArgs,
353 const char *LinkingOutput) const;
354 };
355 class LLVM_LIBRARY_VISIBILITY Link : public Tool {
356 public:
357 Link(const ToolChain &TC) : Tool("bitrig::Link", "linker", TC) {}
358
359 virtual bool hasIntegratedCPP() const { return false; }
360 virtual bool isLinkJob() const { return true; }
361
362 virtual void ConstructJob(Compilation &C, const JobAction &JA,
363 const InputInfo &Output,
364 const InputInfoList &Inputs,
365 const ArgList &TCArgs,
366 const char *LinkingOutput) const;
367 };
368} // end namespace bitrig
369
Daniel Dunbar68a31d42009-03-31 17:45:15 +0000370 /// freebsd -- Directly call GNU Binutils assembler and linker
371namespace freebsd {
Duncan Sands92dd1912010-05-11 20:16:05 +0000372 class LLVM_LIBRARY_VISIBILITY Assemble : public Tool {
Daniel Dunbar68a31d42009-03-31 17:45:15 +0000373 public:
Daniel Dunbar30382042010-05-22 00:37:18 +0000374 Assemble(const ToolChain &TC) : Tool("freebsd::Assemble", "assembler",
375 TC) {}
Daniel Dunbar68a31d42009-03-31 17:45:15 +0000376
Daniel Dunbar68a31d42009-03-31 17:45:15 +0000377 virtual bool hasIntegratedCPP() const { return false; }
378
379 virtual void ConstructJob(Compilation &C, const JobAction &JA,
Mike Stump1eb44332009-09-09 15:08:12 +0000380 const InputInfo &Output,
381 const InputInfoList &Inputs,
382 const ArgList &TCArgs,
Daniel Dunbar68a31d42009-03-31 17:45:15 +0000383 const char *LinkingOutput) const;
384 };
Duncan Sands92dd1912010-05-11 20:16:05 +0000385 class LLVM_LIBRARY_VISIBILITY Link : public Tool {
Daniel Dunbar008f54a2009-04-01 19:36:32 +0000386 public:
Daniel Dunbar30382042010-05-22 00:37:18 +0000387 Link(const ToolChain &TC) : Tool("freebsd::Link", "linker", TC) {}
Daniel Dunbar008f54a2009-04-01 19:36:32 +0000388
Daniel Dunbar008f54a2009-04-01 19:36:32 +0000389 virtual bool hasIntegratedCPP() const { return false; }
Chad Rosier8ba9a622012-03-07 00:30:40 +0000390 virtual bool isLinkJob() const { return true; }
Daniel Dunbar008f54a2009-04-01 19:36:32 +0000391
392 virtual void ConstructJob(Compilation &C, const JobAction &JA,
Mike Stump1eb44332009-09-09 15:08:12 +0000393 const InputInfo &Output,
394 const InputInfoList &Inputs,
395 const ArgList &TCArgs,
Daniel Dunbar008f54a2009-04-01 19:36:32 +0000396 const char *LinkingOutput) const;
397 };
Edward O'Callaghane7925a02009-08-22 01:06:46 +0000398} // end namespace freebsd
399
Benjamin Kramer8e50a962011-02-02 18:59:27 +0000400 /// netbsd -- Directly call GNU Binutils assembler and linker
401namespace netbsd {
402 class LLVM_LIBRARY_VISIBILITY Assemble : public Tool {
Joerg Sonnenberger182564c2011-05-16 13:35:02 +0000403
Benjamin Kramer8e50a962011-02-02 18:59:27 +0000404 public:
Joerg Sonnenberger1bd91372012-01-26 22:27:52 +0000405 Assemble(const ToolChain &TC)
406 : Tool("netbsd::Assemble", "assembler", TC) {}
Benjamin Kramer8e50a962011-02-02 18:59:27 +0000407
408 virtual bool hasIntegratedCPP() const { return false; }
409
410 virtual void ConstructJob(Compilation &C, const JobAction &JA,
411 const InputInfo &Output,
412 const InputInfoList &Inputs,
413 const ArgList &TCArgs,
414 const char *LinkingOutput) const;
415 };
416 class LLVM_LIBRARY_VISIBILITY Link : public Tool {
Joerg Sonnenberger182564c2011-05-16 13:35:02 +0000417
Benjamin Kramer8e50a962011-02-02 18:59:27 +0000418 public:
Joerg Sonnenberger1bd91372012-01-26 22:27:52 +0000419 Link(const ToolChain &TC)
420 : Tool("netbsd::Link", "linker", TC) {}
Benjamin Kramer8e50a962011-02-02 18:59:27 +0000421
422 virtual bool hasIntegratedCPP() const { return false; }
Chad Rosier8ba9a622012-03-07 00:30:40 +0000423 virtual bool isLinkJob() const { return true; }
Benjamin Kramer8e50a962011-02-02 18:59:27 +0000424
425 virtual void ConstructJob(Compilation &C, const JobAction &JA,
426 const InputInfo &Output,
427 const InputInfoList &Inputs,
428 const ArgList &TCArgs,
429 const char *LinkingOutput) const;
430 };
431} // end namespace netbsd
432
Thomas Schwinge577bb0a2013-03-28 19:04:25 +0000433 /// Directly call GNU Binutils' assembler and linker.
434namespace gnutools {
Rafael Espindolaba30bbe2010-08-10 00:25:48 +0000435 class LLVM_LIBRARY_VISIBILITY Assemble : public Tool {
436 public:
Thomas Schwinge577bb0a2013-03-28 19:04:25 +0000437 Assemble(const ToolChain &TC) : Tool("GNU::Assemble", "assembler", TC) {}
Rafael Espindolaba30bbe2010-08-10 00:25:48 +0000438
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:
Thomas Schwinge577bb0a2013-03-28 19:04:25 +0000449 Link(const ToolChain &TC) : Tool("GNU::Link", "linker", TC) {}
Rafael Espindolac1da9812010-11-07 20:14:31 +0000450
451 virtual bool hasIntegratedCPP() const { return false; }
Chad Rosier8ba9a622012-03-07 00:30:40 +0000452 virtual bool isLinkJob() const { return true; }
Rafael Espindolac1da9812010-11-07 20:14:31 +0000453
454 virtual void ConstructJob(Compilation &C, const JobAction &JA,
455 const InputInfo &Output,
456 const InputInfoList &Inputs,
457 const ArgList &TCArgs,
458 const char *LinkingOutput) const;
459 };
Rafael Espindolaba30bbe2010-08-10 00:25:48 +0000460}
Chris Lattner38e317d2010-07-07 16:01:42 +0000461 /// minix -- Directly call GNU Binutils assembler and linker
462namespace minix {
463 class LLVM_LIBRARY_VISIBILITY Assemble : public Tool {
464 public:
465 Assemble(const ToolChain &TC) : Tool("minix::Assemble", "assembler",
466 TC) {}
467
Chris Lattner38e317d2010-07-07 16:01:42 +0000468 virtual bool hasIntegratedCPP() const { return false; }
469
470 virtual void ConstructJob(Compilation &C, const JobAction &JA,
Chris Lattner38e317d2010-07-07 16:01:42 +0000471 const InputInfo &Output,
472 const InputInfoList &Inputs,
473 const ArgList &TCArgs,
474 const char *LinkingOutput) const;
475 };
476 class LLVM_LIBRARY_VISIBILITY Link : public Tool {
477 public:
478 Link(const ToolChain &TC) : Tool("minix::Link", "linker", TC) {}
479
Chris Lattner38e317d2010-07-07 16:01:42 +0000480 virtual bool hasIntegratedCPP() const { return false; }
Chad Rosier8ba9a622012-03-07 00:30:40 +0000481 virtual bool isLinkJob() const { return true; }
Chris Lattner38e317d2010-07-07 16:01:42 +0000482
483 virtual void ConstructJob(Compilation &C, const JobAction &JA,
Chris Lattner38e317d2010-07-07 16:01:42 +0000484 const InputInfo &Output,
485 const InputInfoList &Inputs,
486 const ArgList &TCArgs,
487 const char *LinkingOutput) const;
488 };
489} // end namespace minix
490
David Chisnall31c46902012-02-15 13:39:01 +0000491 /// solaris -- Directly call Solaris assembler and linker
492namespace solaris {
493 class LLVM_LIBRARY_VISIBILITY Assemble : public Tool {
494 public:
495 Assemble(const ToolChain &TC) : Tool("solaris::Assemble", "assembler",
496 TC) {}
497
498 virtual bool hasIntegratedCPP() const { return false; }
499
500 virtual void ConstructJob(Compilation &C, const JobAction &JA,
501 const InputInfo &Output,
502 const InputInfoList &Inputs,
503 const ArgList &TCArgs,
504 const char *LinkingOutput) const;
505 };
506 class LLVM_LIBRARY_VISIBILITY Link : public Tool {
507 public:
508 Link(const ToolChain &TC) : Tool("solaris::Link", "linker", TC) {}
509
510 virtual bool hasIntegratedCPP() const { return false; }
Chad Rosier8ba9a622012-03-07 00:30:40 +0000511 virtual bool isLinkJob() const { return true; }
David Chisnall31c46902012-02-15 13:39:01 +0000512
513 virtual void ConstructJob(Compilation &C, const JobAction &JA,
514 const InputInfo &Output,
515 const InputInfoList &Inputs,
516 const ArgList &TCArgs,
517 const char *LinkingOutput) const;
518 };
David Chisnallbadb6cd2012-02-15 16:25:46 +0000519} // end namespace solaris
David Chisnall31c46902012-02-15 13:39:01 +0000520
Edward O'Callaghane7925a02009-08-22 01:06:46 +0000521 /// auroraux -- Directly call GNU Binutils assembler and linker
522namespace auroraux {
Duncan Sands92dd1912010-05-11 20:16:05 +0000523 class LLVM_LIBRARY_VISIBILITY Assemble : public Tool {
Edward O'Callaghane7925a02009-08-22 01:06:46 +0000524 public:
Daniel Dunbar30382042010-05-22 00:37:18 +0000525 Assemble(const ToolChain &TC) : Tool("auroraux::Assemble", "assembler",
526 TC) {}
Edward O'Callaghane7925a02009-08-22 01:06:46 +0000527
Edward O'Callaghane7925a02009-08-22 01:06:46 +0000528 virtual bool hasIntegratedCPP() const { return false; }
529
530 virtual void ConstructJob(Compilation &C, const JobAction &JA,
Mike Stump1eb44332009-09-09 15:08:12 +0000531 const InputInfo &Output,
532 const InputInfoList &Inputs,
533 const ArgList &TCArgs,
Edward O'Callaghane7925a02009-08-22 01:06:46 +0000534 const char *LinkingOutput) const;
535 };
Duncan Sands92dd1912010-05-11 20:16:05 +0000536 class LLVM_LIBRARY_VISIBILITY Link : public Tool {
Edward O'Callaghane7925a02009-08-22 01:06:46 +0000537 public:
Daniel Dunbar30382042010-05-22 00:37:18 +0000538 Link(const ToolChain &TC) : Tool("auroraux::Link", "linker", TC) {}
Edward O'Callaghane7925a02009-08-22 01:06:46 +0000539
Edward O'Callaghane7925a02009-08-22 01:06:46 +0000540 virtual bool hasIntegratedCPP() const { return false; }
Chad Rosier8ba9a622012-03-07 00:30:40 +0000541 virtual bool isLinkJob() const { return true; }
Edward O'Callaghane7925a02009-08-22 01:06:46 +0000542
543 virtual void ConstructJob(Compilation &C, const JobAction &JA,
Mike Stump1eb44332009-09-09 15:08:12 +0000544 const InputInfo &Output,
545 const InputInfoList &Inputs,
546 const ArgList &TCArgs,
Edward O'Callaghane7925a02009-08-22 01:06:46 +0000547 const char *LinkingOutput) const;
548 };
549} // end namespace auroraux
Daniel Dunbar68a31d42009-03-31 17:45:15 +0000550
Daniel Dunbar11e1b402009-05-02 18:28:39 +0000551 /// dragonfly -- Directly call GNU Binutils assembler and linker
552namespace dragonfly {
Duncan Sands92dd1912010-05-11 20:16:05 +0000553 class LLVM_LIBRARY_VISIBILITY Assemble : public Tool {
Daniel Dunbar11e1b402009-05-02 18:28:39 +0000554 public:
Daniel Dunbar30382042010-05-22 00:37:18 +0000555 Assemble(const ToolChain &TC) : Tool("dragonfly::Assemble", "assembler",
556 TC) {}
Daniel Dunbar11e1b402009-05-02 18:28:39 +0000557
Daniel Dunbar11e1b402009-05-02 18:28:39 +0000558 virtual bool hasIntegratedCPP() const { return false; }
559
560 virtual void ConstructJob(Compilation &C, const JobAction &JA,
Mike Stump1eb44332009-09-09 15:08:12 +0000561 const InputInfo &Output,
562 const InputInfoList &Inputs,
563 const ArgList &TCArgs,
Daniel Dunbar11e1b402009-05-02 18:28:39 +0000564 const char *LinkingOutput) const;
565 };
Duncan Sands92dd1912010-05-11 20:16:05 +0000566 class LLVM_LIBRARY_VISIBILITY Link : public Tool {
Daniel Dunbar11e1b402009-05-02 18:28:39 +0000567 public:
Daniel Dunbar30382042010-05-22 00:37:18 +0000568 Link(const ToolChain &TC) : Tool("dragonfly::Link", "linker", TC) {}
Daniel Dunbar11e1b402009-05-02 18:28:39 +0000569
Daniel Dunbar11e1b402009-05-02 18:28:39 +0000570 virtual bool hasIntegratedCPP() const { return false; }
Chad Rosier8ba9a622012-03-07 00:30:40 +0000571 virtual bool isLinkJob() const { return true; }
Daniel Dunbar11e1b402009-05-02 18:28:39 +0000572
573 virtual void ConstructJob(Compilation &C, const JobAction &JA,
Mike Stump1eb44332009-09-09 15:08:12 +0000574 const InputInfo &Output,
575 const InputInfoList &Inputs,
576 const ArgList &TCArgs,
Daniel Dunbar11e1b402009-05-02 18:28:39 +0000577 const char *LinkingOutput) const;
578 };
Edward O'Callaghane7925a02009-08-22 01:06:46 +0000579} // end namespace dragonfly
Daniel Dunbar11e1b402009-05-02 18:28:39 +0000580
Michael J. Spencerff58e362010-08-21 21:55:07 +0000581 /// Visual studio tools.
582namespace visualstudio {
583 class LLVM_LIBRARY_VISIBILITY Link : public Tool {
584 public:
585 Link(const ToolChain &TC) : Tool("visualstudio::Link", "linker", TC) {}
586
587 virtual bool hasIntegratedCPP() const { return false; }
Chad Rosier8ba9a622012-03-07 00:30:40 +0000588 virtual bool isLinkJob() const { return true; }
Michael J. Spencerff58e362010-08-21 21:55:07 +0000589
590 virtual void ConstructJob(Compilation &C, const JobAction &JA,
591 const InputInfo &Output,
592 const InputInfoList &Inputs,
593 const ArgList &TCArgs,
594 const char *LinkingOutput) const;
595 };
596} // end namespace visualstudio
597
Daniel Dunbar9c073ff2009-03-17 22:07:58 +0000598} // end namespace toolchains
599} // end namespace driver
600} // end namespace clang
601
Edward O'Callaghane7925a02009-08-22 01:06:46 +0000602#endif // CLANG_LIB_DRIVER_TOOLS_H_