blob: d6471716e660989ab9165706fc95b94f7621996a [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"
Daniel Dunbar9c073ff2009-03-17 22:07:58 +000017#include "llvm/Support/Compiler.h"
18
19namespace clang {
John McCall260611a2012-06-20 06:18:46 +000020 class ObjCRuntime;
21
Daniel Dunbar9c073ff2009-03-17 22:07:58 +000022namespace driver {
Douglas Gregordf91ef32009-04-18 00:34:01 +000023 class Driver;
24
Daniel Dunbar02633b52009-03-26 16:23:12 +000025namespace toolchains {
Daniel Dunbarf3955282009-09-04 18:34:51 +000026 class Darwin;
Daniel Dunbar02633b52009-03-26 16:23:12 +000027}
28
Daniel Dunbar985b8252009-03-17 22:18:43 +000029namespace tools {
Daniel Dunbar9c073ff2009-03-17 22:07:58 +000030
Daniel Dunbar20a9aa52010-05-20 21:30:13 +000031 /// \brief Clang compiler tool.
Duncan Sands92dd1912010-05-11 20:16:05 +000032 class LLVM_LIBRARY_VISIBILITY Clang : public Tool {
Eric Christopher27e2b982012-12-18 00:31:10 +000033 public:
Bob Wilson66b8a662012-11-23 06:14:39 +000034 static const char *getBaseInputName(const ArgList &Args,
35 const InputInfoList &Inputs);
36 static const char *getBaseInputStem(const ArgList &Args,
37 const InputInfoList &Inputs);
38 static const char *getDependencyFileName(const ArgList &Args,
39 const InputInfoList &Inputs);
40
Eric Christopher27e2b982012-12-18 00:31:10 +000041 private:
Peter Collingbourne54db68b2011-11-06 00:40:05 +000042 void AddPreprocessingOptions(Compilation &C,
Chad Rosier9d718632013-01-24 19:14:47 +000043 const JobAction &JA,
Peter Collingbourne54db68b2011-11-06 00:40:05 +000044 const Driver &D,
Douglas Gregordf91ef32009-04-18 00:34:01 +000045 const ArgList &Args,
Daniel Dunbarc21c4852009-04-08 23:54:23 +000046 ArgStringList &CmdArgs,
47 const InputInfo &Output,
48 const InputInfoList &Inputs) const;
49
Daniel Dunbarfa41d692011-03-17 17:10:06 +000050 void AddARMTargetArgs(const ArgList &Args, ArgStringList &CmdArgs,
51 bool KernelOrKext) const;
Eric Christophered734732010-03-02 02:41:08 +000052 void AddMIPSTargetArgs(const ArgList &Args, ArgStringList &CmdArgs) const;
Hal Finkel02a84272012-06-11 22:35:19 +000053 void AddPPCTargetArgs(const ArgList &Args, ArgStringList &CmdArgs) const;
Tom Stellarde25d2f62013-04-01 20:56:53 +000054 void AddR600TargetArgs(const ArgList &Args, ArgStringList &CmdArgs) const;
Bruno Cardoso Lopes9284d212010-11-09 17:21:19 +000055 void AddSparcTargetArgs(const ArgList &Args, ArgStringList &CmdArgs) const;
Daniel Dunbar6acda162009-09-09 22:33:08 +000056 void AddX86TargetArgs(const ArgList &Args, ArgStringList &CmdArgs) const;
Tony Linthicum96319392011-12-12 21:14:55 +000057 void AddHexagonTargetArgs (const ArgList &Args, ArgStringList &CmdArgs) const;
Daniel Dunbar6acda162009-09-09 22:33:08 +000058
John McCall260611a2012-06-20 06:18:46 +000059 enum RewriteKind { RK_None, RK_Fragile, RK_NonFragile };
60
61 ObjCRuntime AddObjCRuntimeArgs(const ArgList &args, ArgStringList &cmdArgs,
62 RewriteKind rewrite) const;
63
Daniel Dunbar9c073ff2009-03-17 22:07:58 +000064 public:
Daniel Dunbar30382042010-05-22 00:37:18 +000065 Clang(const ToolChain &TC) : Tool("clang", "clang frontend", TC) {}
Daniel Dunbar9c073ff2009-03-17 22:07:58 +000066
Daniel Dunbar60a53f22010-04-06 17:07:49 +000067 virtual bool hasGoodDiagnostics() const { return true; }
Daniel Dunbar8767cbc2010-02-03 03:07:56 +000068 virtual bool hasIntegratedAssembler() const { return true; }
Daniel Dunbar9c073ff2009-03-17 22:07:58 +000069 virtual bool hasIntegratedCPP() const { return true; }
Daniel Dunbar47ac7d22009-03-18 06:00:36 +000070
71 virtual void ConstructJob(Compilation &C, const JobAction &JA,
Mike Stump1eb44332009-09-09 15:08:12 +000072 const InputInfo &Output,
73 const InputInfoList &Inputs,
74 const ArgList &TCArgs,
Daniel Dunbar47ac7d22009-03-18 06:00:36 +000075 const char *LinkingOutput) const;
Daniel Dunbar9c073ff2009-03-17 22:07:58 +000076 };
77
Daniel Dunbar20a9aa52010-05-20 21:30:13 +000078 /// \brief Clang integrated assembler tool.
79 class LLVM_LIBRARY_VISIBILITY ClangAs : public Tool {
Jim Grosbachfc308292012-02-10 20:37:10 +000080 void AddARMTargetArgs(const ArgList &Args, ArgStringList &CmdArgs) const;
Benjamin Kramerefc5b672013-02-22 20:55:17 +000081 void AddX86TargetArgs(const ArgList &Args, ArgStringList &CmdArgs) const;
Daniel Dunbar20a9aa52010-05-20 21:30:13 +000082 public:
Daniel Dunbar30382042010-05-22 00:37:18 +000083 ClangAs(const ToolChain &TC) : Tool("clang::as",
84 "clang integrated assembler", TC) {}
Daniel Dunbar20a9aa52010-05-20 21:30:13 +000085
Daniel Dunbar20a9aa52010-05-20 21:30:13 +000086 virtual bool hasGoodDiagnostics() const { return true; }
87 virtual bool hasIntegratedAssembler() const { return false; }
88 virtual bool hasIntegratedCPP() const { return false; }
89
90 virtual void ConstructJob(Compilation &C, const JobAction &JA,
Daniel Dunbar20a9aa52010-05-20 21:30:13 +000091 const InputInfo &Output,
92 const InputInfoList &Inputs,
93 const ArgList &TCArgs,
94 const char *LinkingOutput) const;
95 };
96
Daniel Dunbar31b1e542009-03-17 22:45:24 +000097 /// gcc - Generic GCC tool implementations.
98namespace gcc {
Duncan Sands92dd1912010-05-11 20:16:05 +000099 class LLVM_LIBRARY_VISIBILITY Common : public Tool {
Daniel Dunbar9c073ff2009-03-17 22:07:58 +0000100 public:
Daniel Dunbar30382042010-05-22 00:37:18 +0000101 Common(const char *Name, const char *ShortName,
102 const ToolChain &TC) : Tool(Name, ShortName, TC) {}
Daniel Dunbarb488c1d2009-03-18 08:07:30 +0000103
104 virtual void ConstructJob(Compilation &C, const JobAction &JA,
Mike Stump1eb44332009-09-09 15:08:12 +0000105 const InputInfo &Output,
106 const InputInfoList &Inputs,
107 const ArgList &TCArgs,
Daniel Dunbarb488c1d2009-03-18 08:07:30 +0000108 const char *LinkingOutput) const;
109
110 /// RenderExtraToolArgs - Render any arguments necessary to force
111 /// the particular tool mode.
Daniel Dunbar82b51cc2010-01-25 22:35:08 +0000112 virtual void RenderExtraToolArgs(const JobAction &JA,
113 ArgStringList &CmdArgs) const = 0;
Daniel Dunbarb488c1d2009-03-18 08:07:30 +0000114 };
115
Mike Stump1eb44332009-09-09 15:08:12 +0000116
Duncan Sands92dd1912010-05-11 20:16:05 +0000117 class LLVM_LIBRARY_VISIBILITY Preprocess : public Common {
Daniel Dunbarb488c1d2009-03-18 08:07:30 +0000118 public:
Daniel Dunbar30382042010-05-22 00:37:18 +0000119 Preprocess(const ToolChain &TC) : Common("gcc::Preprocess",
120 "gcc preprocessor", TC) {}
Daniel Dunbar9c073ff2009-03-17 22:07:58 +0000121
Daniel Dunbar60a53f22010-04-06 17:07:49 +0000122 virtual bool hasGoodDiagnostics() const { return true; }
Daniel Dunbar9c073ff2009-03-17 22:07:58 +0000123 virtual bool hasIntegratedCPP() const { return false; }
Daniel Dunbar47ac7d22009-03-18 06:00:36 +0000124
Daniel Dunbar82b51cc2010-01-25 22:35:08 +0000125 virtual void RenderExtraToolArgs(const JobAction &JA,
126 ArgStringList &CmdArgs) const;
Daniel Dunbar9c073ff2009-03-17 22:07:58 +0000127 };
128
Duncan Sands92dd1912010-05-11 20:16:05 +0000129 class LLVM_LIBRARY_VISIBILITY Precompile : public Common {
Daniel Dunbar9c073ff2009-03-17 22:07:58 +0000130 public:
Daniel Dunbar30382042010-05-22 00:37:18 +0000131 Precompile(const ToolChain &TC) : Common("gcc::Precompile",
132 "gcc precompile", TC) {}
Daniel Dunbar9c073ff2009-03-17 22:07:58 +0000133
Daniel Dunbar60a53f22010-04-06 17:07:49 +0000134 virtual bool hasGoodDiagnostics() const { return true; }
Daniel Dunbar9c073ff2009-03-17 22:07:58 +0000135 virtual bool hasIntegratedCPP() const { return true; }
Daniel Dunbar47ac7d22009-03-18 06:00:36 +0000136
Daniel Dunbar82b51cc2010-01-25 22:35:08 +0000137 virtual void RenderExtraToolArgs(const JobAction &JA,
138 ArgStringList &CmdArgs) const;
Daniel Dunbar9c073ff2009-03-17 22:07:58 +0000139 };
140
Duncan Sands92dd1912010-05-11 20:16:05 +0000141 class LLVM_LIBRARY_VISIBILITY Compile : public Common {
Daniel Dunbar9c073ff2009-03-17 22:07:58 +0000142 public:
Daniel Dunbar30382042010-05-22 00:37:18 +0000143 Compile(const ToolChain &TC) : Common("gcc::Compile",
144 "gcc frontend", TC) {}
Daniel Dunbar9c073ff2009-03-17 22:07:58 +0000145
Daniel Dunbar60a53f22010-04-06 17:07:49 +0000146 virtual bool hasGoodDiagnostics() const { return true; }
Daniel Dunbar9c073ff2009-03-17 22:07:58 +0000147 virtual bool hasIntegratedCPP() const { return true; }
Daniel Dunbar47ac7d22009-03-18 06:00:36 +0000148
Daniel Dunbar82b51cc2010-01-25 22:35:08 +0000149 virtual void RenderExtraToolArgs(const JobAction &JA,
150 ArgStringList &CmdArgs) const;
Daniel Dunbar9c073ff2009-03-17 22:07:58 +0000151 };
152
Duncan Sands92dd1912010-05-11 20:16:05 +0000153 class LLVM_LIBRARY_VISIBILITY Assemble : public Common {
Daniel Dunbar9c073ff2009-03-17 22:07:58 +0000154 public:
Daniel Dunbar30382042010-05-22 00:37:18 +0000155 Assemble(const ToolChain &TC) : Common("gcc::Assemble",
156 "assembler (via gcc)", TC) {}
Daniel Dunbar9c073ff2009-03-17 22:07:58 +0000157
Daniel Dunbar9c073ff2009-03-17 22:07:58 +0000158 virtual bool hasIntegratedCPP() const { return false; }
Daniel Dunbar47ac7d22009-03-18 06:00:36 +0000159
Daniel Dunbar82b51cc2010-01-25 22:35:08 +0000160 virtual void RenderExtraToolArgs(const JobAction &JA,
161 ArgStringList &CmdArgs) const;
Daniel Dunbar9c073ff2009-03-17 22:07:58 +0000162 };
163
Duncan Sands92dd1912010-05-11 20:16:05 +0000164 class LLVM_LIBRARY_VISIBILITY Link : public Common {
Daniel Dunbar9c073ff2009-03-17 22:07:58 +0000165 public:
Daniel Dunbar30382042010-05-22 00:37:18 +0000166 Link(const ToolChain &TC) : Common("gcc::Link",
167 "linker (via gcc)", TC) {}
Daniel Dunbar9c073ff2009-03-17 22:07:58 +0000168
Daniel Dunbar9c073ff2009-03-17 22:07:58 +0000169 virtual bool hasIntegratedCPP() const { return false; }
Chad Rosier8ba9a622012-03-07 00:30:40 +0000170 virtual bool isLinkJob() const { return true; }
Daniel Dunbar47ac7d22009-03-18 06:00:36 +0000171
Daniel Dunbar82b51cc2010-01-25 22:35:08 +0000172 virtual void RenderExtraToolArgs(const JobAction &JA,
173 ArgStringList &CmdArgs) const;
Daniel Dunbar9c073ff2009-03-17 22:07:58 +0000174 };
Daniel Dunbar31b1e542009-03-17 22:45:24 +0000175} // end namespace gcc
Daniel Dunbar9c073ff2009-03-17 22:07:58 +0000176
Tony Linthicum96319392011-12-12 21:14:55 +0000177namespace hexagon {
178 // For Hexagon, we do not need to instantiate tools for PreProcess, PreCompile and Compile.
179 // We simply use "clang -cc1" for those actions.
180 class LLVM_LIBRARY_VISIBILITY Assemble : public Tool {
181 public:
182 Assemble(const ToolChain &TC) : Tool("hexagon::Assemble",
183 "hexagon-as", TC) {}
184
185 virtual bool hasIntegratedCPP() const { return false; }
186
187 virtual void RenderExtraToolArgs(const JobAction &JA,
188 ArgStringList &CmdArgs) const;
189 virtual void ConstructJob(Compilation &C, const JobAction &JA,
190 const InputInfo &Output,
191 const InputInfoList &Inputs,
192 const ArgList &TCArgs,
193 const char *LinkingOutput) const;
194 };
195
196 class LLVM_LIBRARY_VISIBILITY Link : public Tool {
197 public:
198 Link(const ToolChain &TC) : Tool("hexagon::Link",
199 "hexagon-ld", TC) {}
200
201 virtual bool hasIntegratedCPP() const { return false; }
Chad Rosier8ba9a622012-03-07 00:30:40 +0000202 virtual bool isLinkJob() const { return true; }
Tony Linthicum96319392011-12-12 21:14:55 +0000203
204 virtual void RenderExtraToolArgs(const JobAction &JA,
205 ArgStringList &CmdArgs) const;
206 virtual void ConstructJob(Compilation &C, const JobAction &JA,
207 const InputInfo &Output,
208 const InputInfoList &Inputs,
209 const ArgList &TCArgs,
210 const char *LinkingOutput) const;
211 };
212} // end namespace hexagon.
213
214
Daniel Dunbarff7488d2009-03-20 00:52:38 +0000215namespace darwin {
Rafael Espindolacfed8282012-10-31 18:51:07 +0000216 llvm::Triple::ArchType getArchTypeForDarwinArchName(StringRef Str);
217
Duncan Sands92dd1912010-05-11 20:16:05 +0000218 class LLVM_LIBRARY_VISIBILITY DarwinTool : public Tool {
David Blaikie99ba9e32011-12-20 02:48:34 +0000219 virtual void anchor();
Daniel Dunbarfbefe6b2009-09-09 18:36:20 +0000220 protected:
221 void AddDarwinArch(const ArgList &Args, ArgStringList &CmdArgs) const;
Daniel Dunbarfbefe6b2009-09-09 18:36:20 +0000222
223 const toolchains::Darwin &getDarwinToolChain() const {
224 return reinterpret_cast<const toolchains::Darwin&>(getToolChain());
225 }
226
227 public:
Daniel Dunbar30382042010-05-22 00:37:18 +0000228 DarwinTool(const char *Name, const char *ShortName,
229 const ToolChain &TC) : Tool(Name, ShortName, TC) {}
Daniel Dunbarfbefe6b2009-09-09 18:36:20 +0000230 };
231
Duncan Sands92dd1912010-05-11 20:16:05 +0000232 class LLVM_LIBRARY_VISIBILITY Assemble : public DarwinTool {
Daniel Dunbar8cac5f72009-03-20 16:06:39 +0000233 public:
Daniel Dunbar30382042010-05-22 00:37:18 +0000234 Assemble(const ToolChain &TC) : DarwinTool("darwin::Assemble",
235 "assembler", TC) {}
Daniel Dunbar8cac5f72009-03-20 16:06:39 +0000236
Daniel Dunbar8cac5f72009-03-20 16:06:39 +0000237 virtual bool hasIntegratedCPP() const { return false; }
238
239 virtual void ConstructJob(Compilation &C, const JobAction &JA,
Mike Stump1eb44332009-09-09 15:08:12 +0000240 const InputInfo &Output,
241 const InputInfoList &Inputs,
242 const ArgList &TCArgs,
Daniel Dunbar8cac5f72009-03-20 16:06:39 +0000243 const char *LinkingOutput) const;
244 };
245
Duncan Sands92dd1912010-05-11 20:16:05 +0000246 class LLVM_LIBRARY_VISIBILITY Link : public DarwinTool {
Bill Wendling6acf8b42012-10-02 18:02:50 +0000247 bool NeedsTempPath(const InputInfoList &Inputs) const;
Daniel Dunbar748de8e2010-09-09 21:51:05 +0000248 void AddLinkArgs(Compilation &C, const ArgList &Args,
Bill Wendling6acf8b42012-10-02 18:02:50 +0000249 ArgStringList &CmdArgs, const InputInfoList &Inputs) const;
Daniel Dunbar02633b52009-03-26 16:23:12 +0000250
Daniel Dunbar02633b52009-03-26 16:23:12 +0000251 public:
Daniel Dunbar30382042010-05-22 00:37:18 +0000252 Link(const ToolChain &TC) : DarwinTool("darwin::Link", "linker", TC) {}
Daniel Dunbar02633b52009-03-26 16:23:12 +0000253
Daniel Dunbar02633b52009-03-26 16:23:12 +0000254 virtual bool hasIntegratedCPP() const { return false; }
Chad Rosier8ba9a622012-03-07 00:30:40 +0000255 virtual bool isLinkJob() const { return true; }
Daniel Dunbar02633b52009-03-26 16:23:12 +0000256
257 virtual void ConstructJob(Compilation &C, const JobAction &JA,
Mike Stump1eb44332009-09-09 15:08:12 +0000258 const InputInfo &Output,
259 const InputInfoList &Inputs,
260 const ArgList &TCArgs,
Daniel Dunbar02633b52009-03-26 16:23:12 +0000261 const char *LinkingOutput) const;
262 };
263
Duncan Sands92dd1912010-05-11 20:16:05 +0000264 class LLVM_LIBRARY_VISIBILITY Lipo : public DarwinTool {
Daniel Dunbarff7488d2009-03-20 00:52:38 +0000265 public:
Daniel Dunbar30382042010-05-22 00:37:18 +0000266 Lipo(const ToolChain &TC) : DarwinTool("darwin::Lipo", "lipo", TC) {}
Daniel Dunbarff7488d2009-03-20 00:52:38 +0000267
Daniel Dunbarff7488d2009-03-20 00:52:38 +0000268 virtual bool hasIntegratedCPP() const { return false; }
269
270 virtual void ConstructJob(Compilation &C, const JobAction &JA,
Mike Stump1eb44332009-09-09 15:08:12 +0000271 const InputInfo &Output,
272 const InputInfoList &Inputs,
273 const ArgList &TCArgs,
Daniel Dunbarff7488d2009-03-20 00:52:38 +0000274 const char *LinkingOutput) const;
275 };
Daniel Dunbar6e0f2542010-06-04 18:28:36 +0000276
277 class LLVM_LIBRARY_VISIBILITY Dsymutil : public DarwinTool {
278 public:
279 Dsymutil(const ToolChain &TC) : DarwinTool("darwin::Dsymutil",
280 "dsymutil", TC) {}
281
Daniel Dunbar6e0f2542010-06-04 18:28:36 +0000282 virtual bool hasIntegratedCPP() const { return false; }
Chad Rosier75dbc712013-02-01 18:30:26 +0000283 virtual bool isDsymutilJob() const { return true; }
Daniel Dunbar6e0f2542010-06-04 18:28:36 +0000284
285 virtual void ConstructJob(Compilation &C, const JobAction &JA,
Daniel Dunbar6e0f2542010-06-04 18:28:36 +0000286 const InputInfo &Output,
287 const InputInfoList &Inputs,
288 const ArgList &TCArgs,
289 const char *LinkingOutput) const;
290 };
Eric Christopherf8571862011-08-23 17:56:55 +0000291
292 class LLVM_LIBRARY_VISIBILITY VerifyDebug : public DarwinTool {
293 public:
294 VerifyDebug(const ToolChain &TC) : DarwinTool("darwin::VerifyDebug",
Eric Christopher27e2b982012-12-18 00:31:10 +0000295 "dwarfdump", TC) {}
Eric Christopherf8571862011-08-23 17:56:55 +0000296
297 virtual bool hasIntegratedCPP() const { return false; }
298
299 virtual void ConstructJob(Compilation &C, const JobAction &JA,
Eric Christopher27e2b982012-12-18 00:31:10 +0000300 const InputInfo &Output,
301 const InputInfoList &Inputs,
302 const ArgList &TCArgs,
303 const char *LinkingOutput) const;
Eric Christopherf8571862011-08-23 17:56:55 +0000304 };
305
Daniel Dunbarff7488d2009-03-20 00:52:38 +0000306}
307
Daniel Dunbarf7b8eec2009-06-29 20:52:51 +0000308 /// openbsd -- Directly call GNU Binutils assembler and linker
309namespace openbsd {
Duncan Sands92dd1912010-05-11 20:16:05 +0000310 class LLVM_LIBRARY_VISIBILITY Assemble : public Tool {
Daniel Dunbarf7b8eec2009-06-29 20:52:51 +0000311 public:
Daniel Dunbar30382042010-05-22 00:37:18 +0000312 Assemble(const ToolChain &TC) : Tool("openbsd::Assemble", "assembler",
313 TC) {}
Daniel Dunbarf7b8eec2009-06-29 20:52:51 +0000314
Daniel Dunbarf7b8eec2009-06-29 20:52:51 +0000315 virtual bool hasIntegratedCPP() const { return false; }
316
317 virtual void ConstructJob(Compilation &C, const JobAction &JA,
Mike Stump1eb44332009-09-09 15:08:12 +0000318 const InputInfo &Output,
319 const InputInfoList &Inputs,
320 const ArgList &TCArgs,
Daniel Dunbarf7b8eec2009-06-29 20:52:51 +0000321 const char *LinkingOutput) const;
322 };
Duncan Sands92dd1912010-05-11 20:16:05 +0000323 class LLVM_LIBRARY_VISIBILITY Link : public Tool {
Daniel Dunbarf7b8eec2009-06-29 20:52:51 +0000324 public:
Daniel Dunbar30382042010-05-22 00:37:18 +0000325 Link(const ToolChain &TC) : Tool("openbsd::Link", "linker", TC) {}
Daniel Dunbarf7b8eec2009-06-29 20:52:51 +0000326
Daniel Dunbarf7b8eec2009-06-29 20:52:51 +0000327 virtual bool hasIntegratedCPP() const { return false; }
Chad Rosier8ba9a622012-03-07 00:30:40 +0000328 virtual bool isLinkJob() const { return true; }
Daniel Dunbarf7b8eec2009-06-29 20:52:51 +0000329
330 virtual void ConstructJob(Compilation &C, const JobAction &JA,
Mike Stump1eb44332009-09-09 15:08:12 +0000331 const InputInfo &Output,
332 const InputInfoList &Inputs,
333 const ArgList &TCArgs,
Daniel Dunbarf7b8eec2009-06-29 20:52:51 +0000334 const char *LinkingOutput) const;
335 };
Edward O'Callaghane7925a02009-08-22 01:06:46 +0000336} // end namespace openbsd
Daniel Dunbarf7b8eec2009-06-29 20:52:51 +0000337
Eli Friedman42f74f22012-08-08 23:57:20 +0000338 /// bitrig -- Directly call GNU Binutils assembler and linker
339namespace bitrig {
340 class LLVM_LIBRARY_VISIBILITY Assemble : public Tool {
341 public:
342 Assemble(const ToolChain &TC) : Tool("bitrig::Assemble", "assembler",
343 TC) {}
344
345 virtual bool hasIntegratedCPP() const { return false; }
346
347 virtual void ConstructJob(Compilation &C, const JobAction &JA,
348 const InputInfo &Output,
349 const InputInfoList &Inputs,
350 const ArgList &TCArgs,
351 const char *LinkingOutput) const;
352 };
353 class LLVM_LIBRARY_VISIBILITY Link : public Tool {
354 public:
355 Link(const ToolChain &TC) : Tool("bitrig::Link", "linker", TC) {}
356
357 virtual bool hasIntegratedCPP() const { return false; }
358 virtual bool isLinkJob() const { return true; }
359
360 virtual void ConstructJob(Compilation &C, const JobAction &JA,
361 const InputInfo &Output,
362 const InputInfoList &Inputs,
363 const ArgList &TCArgs,
364 const char *LinkingOutput) const;
365 };
366} // end namespace bitrig
367
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; }
Chad Rosier8ba9a622012-03-07 00:30:40 +0000388 virtual bool isLinkJob() const { return true; }
Daniel Dunbar008f54a2009-04-01 19:36:32 +0000389
390 virtual void ConstructJob(Compilation &C, const JobAction &JA,
Mike Stump1eb44332009-09-09 15:08:12 +0000391 const InputInfo &Output,
392 const InputInfoList &Inputs,
393 const ArgList &TCArgs,
Daniel Dunbar008f54a2009-04-01 19:36:32 +0000394 const char *LinkingOutput) const;
395 };
Edward O'Callaghane7925a02009-08-22 01:06:46 +0000396} // end namespace freebsd
397
Benjamin Kramer8e50a962011-02-02 18:59:27 +0000398 /// netbsd -- Directly call GNU Binutils assembler and linker
399namespace netbsd {
400 class LLVM_LIBRARY_VISIBILITY Assemble : public Tool {
Joerg Sonnenberger182564c2011-05-16 13:35:02 +0000401
Benjamin Kramer8e50a962011-02-02 18:59:27 +0000402 public:
Joerg Sonnenberger1bd91372012-01-26 22:27:52 +0000403 Assemble(const ToolChain &TC)
404 : Tool("netbsd::Assemble", "assembler", TC) {}
Benjamin Kramer8e50a962011-02-02 18:59:27 +0000405
406 virtual bool hasIntegratedCPP() const { return false; }
407
408 virtual void ConstructJob(Compilation &C, const JobAction &JA,
409 const InputInfo &Output,
410 const InputInfoList &Inputs,
411 const ArgList &TCArgs,
412 const char *LinkingOutput) const;
413 };
414 class LLVM_LIBRARY_VISIBILITY Link : public Tool {
Joerg Sonnenberger182564c2011-05-16 13:35:02 +0000415
Benjamin Kramer8e50a962011-02-02 18:59:27 +0000416 public:
Joerg Sonnenberger1bd91372012-01-26 22:27:52 +0000417 Link(const ToolChain &TC)
418 : Tool("netbsd::Link", "linker", TC) {}
Benjamin Kramer8e50a962011-02-02 18:59:27 +0000419
420 virtual bool hasIntegratedCPP() const { return false; }
Chad Rosier8ba9a622012-03-07 00:30:40 +0000421 virtual bool isLinkJob() const { return true; }
Benjamin Kramer8e50a962011-02-02 18:59:27 +0000422
423 virtual void ConstructJob(Compilation &C, const JobAction &JA,
424 const InputInfo &Output,
425 const InputInfoList &Inputs,
426 const ArgList &TCArgs,
427 const char *LinkingOutput) const;
428 };
429} // end namespace netbsd
430
Thomas Schwinge577bb0a2013-03-28 19:04:25 +0000431 /// Directly call GNU Binutils' assembler and linker.
432namespace gnutools {
Rafael Espindolaba30bbe2010-08-10 00:25:48 +0000433 class LLVM_LIBRARY_VISIBILITY Assemble : public Tool {
434 public:
Thomas Schwinge577bb0a2013-03-28 19:04:25 +0000435 Assemble(const ToolChain &TC) : Tool("GNU::Assemble", "assembler", TC) {}
Rafael Espindolaba30bbe2010-08-10 00:25:48 +0000436
437 virtual bool hasIntegratedCPP() const { return false; }
438
439 virtual void ConstructJob(Compilation &C, const JobAction &JA,
440 const InputInfo &Output,
441 const InputInfoList &Inputs,
442 const ArgList &TCArgs,
443 const char *LinkingOutput) const;
444 };
Rafael Espindolac1da9812010-11-07 20:14:31 +0000445 class LLVM_LIBRARY_VISIBILITY Link : public Tool {
446 public:
Thomas Schwinge577bb0a2013-03-28 19:04:25 +0000447 Link(const ToolChain &TC) : Tool("GNU::Link", "linker", TC) {}
Rafael Espindolac1da9812010-11-07 20:14:31 +0000448
449 virtual bool hasIntegratedCPP() const { return false; }
Chad Rosier8ba9a622012-03-07 00:30:40 +0000450 virtual bool isLinkJob() const { return true; }
Rafael Espindolac1da9812010-11-07 20:14:31 +0000451
452 virtual void ConstructJob(Compilation &C, const JobAction &JA,
453 const InputInfo &Output,
454 const InputInfoList &Inputs,
455 const ArgList &TCArgs,
456 const char *LinkingOutput) const;
457 };
Rafael Espindolaba30bbe2010-08-10 00:25:48 +0000458}
Chris Lattner38e317d2010-07-07 16:01:42 +0000459 /// minix -- Directly call GNU Binutils assembler and linker
460namespace minix {
461 class LLVM_LIBRARY_VISIBILITY Assemble : public Tool {
462 public:
463 Assemble(const ToolChain &TC) : Tool("minix::Assemble", "assembler",
464 TC) {}
465
Chris Lattner38e317d2010-07-07 16:01:42 +0000466 virtual bool hasIntegratedCPP() const { return false; }
467
468 virtual void ConstructJob(Compilation &C, const JobAction &JA,
Chris Lattner38e317d2010-07-07 16:01:42 +0000469 const InputInfo &Output,
470 const InputInfoList &Inputs,
471 const ArgList &TCArgs,
472 const char *LinkingOutput) const;
473 };
474 class LLVM_LIBRARY_VISIBILITY Link : public Tool {
475 public:
476 Link(const ToolChain &TC) : Tool("minix::Link", "linker", TC) {}
477
Chris Lattner38e317d2010-07-07 16:01:42 +0000478 virtual bool hasIntegratedCPP() const { return false; }
Chad Rosier8ba9a622012-03-07 00:30:40 +0000479 virtual bool isLinkJob() const { return true; }
Chris Lattner38e317d2010-07-07 16:01:42 +0000480
481 virtual void ConstructJob(Compilation &C, const JobAction &JA,
Chris Lattner38e317d2010-07-07 16:01:42 +0000482 const InputInfo &Output,
483 const InputInfoList &Inputs,
484 const ArgList &TCArgs,
485 const char *LinkingOutput) const;
486 };
487} // end namespace minix
488
David Chisnall31c46902012-02-15 13:39:01 +0000489 /// solaris -- Directly call Solaris assembler and linker
490namespace solaris {
491 class LLVM_LIBRARY_VISIBILITY Assemble : public Tool {
492 public:
493 Assemble(const ToolChain &TC) : Tool("solaris::Assemble", "assembler",
494 TC) {}
495
496 virtual bool hasIntegratedCPP() const { return false; }
497
498 virtual void ConstructJob(Compilation &C, const JobAction &JA,
499 const InputInfo &Output,
500 const InputInfoList &Inputs,
501 const ArgList &TCArgs,
502 const char *LinkingOutput) const;
503 };
504 class LLVM_LIBRARY_VISIBILITY Link : public Tool {
505 public:
506 Link(const ToolChain &TC) : Tool("solaris::Link", "linker", TC) {}
507
508 virtual bool hasIntegratedCPP() const { return false; }
Chad Rosier8ba9a622012-03-07 00:30:40 +0000509 virtual bool isLinkJob() const { return true; }
David Chisnall31c46902012-02-15 13:39:01 +0000510
511 virtual void ConstructJob(Compilation &C, const JobAction &JA,
512 const InputInfo &Output,
513 const InputInfoList &Inputs,
514 const ArgList &TCArgs,
515 const char *LinkingOutput) const;
516 };
David Chisnallbadb6cd2012-02-15 16:25:46 +0000517} // end namespace solaris
David Chisnall31c46902012-02-15 13:39:01 +0000518
Edward O'Callaghane7925a02009-08-22 01:06:46 +0000519 /// auroraux -- Directly call GNU Binutils assembler and linker
520namespace auroraux {
Duncan Sands92dd1912010-05-11 20:16:05 +0000521 class LLVM_LIBRARY_VISIBILITY Assemble : public Tool {
Edward O'Callaghane7925a02009-08-22 01:06:46 +0000522 public:
Daniel Dunbar30382042010-05-22 00:37:18 +0000523 Assemble(const ToolChain &TC) : Tool("auroraux::Assemble", "assembler",
524 TC) {}
Edward O'Callaghane7925a02009-08-22 01:06:46 +0000525
Edward O'Callaghane7925a02009-08-22 01:06:46 +0000526 virtual bool hasIntegratedCPP() const { return false; }
527
528 virtual void ConstructJob(Compilation &C, const JobAction &JA,
Mike Stump1eb44332009-09-09 15:08:12 +0000529 const InputInfo &Output,
530 const InputInfoList &Inputs,
531 const ArgList &TCArgs,
Edward O'Callaghane7925a02009-08-22 01:06:46 +0000532 const char *LinkingOutput) const;
533 };
Duncan Sands92dd1912010-05-11 20:16:05 +0000534 class LLVM_LIBRARY_VISIBILITY Link : public Tool {
Edward O'Callaghane7925a02009-08-22 01:06:46 +0000535 public:
Daniel Dunbar30382042010-05-22 00:37:18 +0000536 Link(const ToolChain &TC) : Tool("auroraux::Link", "linker", TC) {}
Edward O'Callaghane7925a02009-08-22 01:06:46 +0000537
Edward O'Callaghane7925a02009-08-22 01:06:46 +0000538 virtual bool hasIntegratedCPP() const { return false; }
Chad Rosier8ba9a622012-03-07 00:30:40 +0000539 virtual bool isLinkJob() const { return true; }
Edward O'Callaghane7925a02009-08-22 01:06:46 +0000540
541 virtual void ConstructJob(Compilation &C, const JobAction &JA,
Mike Stump1eb44332009-09-09 15:08:12 +0000542 const InputInfo &Output,
543 const InputInfoList &Inputs,
544 const ArgList &TCArgs,
Edward O'Callaghane7925a02009-08-22 01:06:46 +0000545 const char *LinkingOutput) const;
546 };
547} // end namespace auroraux
Daniel Dunbar68a31d42009-03-31 17:45:15 +0000548
Daniel Dunbar11e1b402009-05-02 18:28:39 +0000549 /// dragonfly -- Directly call GNU Binutils assembler and linker
550namespace dragonfly {
Duncan Sands92dd1912010-05-11 20:16:05 +0000551 class LLVM_LIBRARY_VISIBILITY Assemble : public Tool {
Daniel Dunbar11e1b402009-05-02 18:28:39 +0000552 public:
Daniel Dunbar30382042010-05-22 00:37:18 +0000553 Assemble(const ToolChain &TC) : Tool("dragonfly::Assemble", "assembler",
554 TC) {}
Daniel Dunbar11e1b402009-05-02 18:28:39 +0000555
Daniel Dunbar11e1b402009-05-02 18:28:39 +0000556 virtual bool hasIntegratedCPP() const { return false; }
557
558 virtual void ConstructJob(Compilation &C, const JobAction &JA,
Mike Stump1eb44332009-09-09 15:08:12 +0000559 const InputInfo &Output,
560 const InputInfoList &Inputs,
561 const ArgList &TCArgs,
Daniel Dunbar11e1b402009-05-02 18:28:39 +0000562 const char *LinkingOutput) const;
563 };
Duncan Sands92dd1912010-05-11 20:16:05 +0000564 class LLVM_LIBRARY_VISIBILITY Link : public Tool {
Daniel Dunbar11e1b402009-05-02 18:28:39 +0000565 public:
Daniel Dunbar30382042010-05-22 00:37:18 +0000566 Link(const ToolChain &TC) : Tool("dragonfly::Link", "linker", TC) {}
Daniel Dunbar11e1b402009-05-02 18:28:39 +0000567
Daniel Dunbar11e1b402009-05-02 18:28:39 +0000568 virtual bool hasIntegratedCPP() const { return false; }
Chad Rosier8ba9a622012-03-07 00:30:40 +0000569 virtual bool isLinkJob() const { return true; }
Daniel Dunbar11e1b402009-05-02 18:28:39 +0000570
571 virtual void ConstructJob(Compilation &C, const JobAction &JA,
Mike Stump1eb44332009-09-09 15:08:12 +0000572 const InputInfo &Output,
573 const InputInfoList &Inputs,
574 const ArgList &TCArgs,
Daniel Dunbar11e1b402009-05-02 18:28:39 +0000575 const char *LinkingOutput) const;
576 };
Edward O'Callaghane7925a02009-08-22 01:06:46 +0000577} // end namespace dragonfly
Daniel Dunbar11e1b402009-05-02 18:28:39 +0000578
Michael J. Spencerff58e362010-08-21 21:55:07 +0000579 /// Visual studio tools.
580namespace visualstudio {
581 class LLVM_LIBRARY_VISIBILITY Link : public Tool {
582 public:
583 Link(const ToolChain &TC) : Tool("visualstudio::Link", "linker", TC) {}
584
585 virtual bool hasIntegratedCPP() const { return false; }
Chad Rosier8ba9a622012-03-07 00:30:40 +0000586 virtual bool isLinkJob() const { return true; }
Michael J. Spencerff58e362010-08-21 21:55:07 +0000587
588 virtual void ConstructJob(Compilation &C, const JobAction &JA,
589 const InputInfo &Output,
590 const InputInfoList &Inputs,
591 const ArgList &TCArgs,
592 const char *LinkingOutput) const;
593 };
594} // end namespace visualstudio
595
Daniel Dunbar9c073ff2009-03-17 22:07:58 +0000596} // end namespace toolchains
597} // end namespace driver
598} // end namespace clang
599
Edward O'Callaghane7925a02009-08-22 01:06:46 +0000600#endif // CLANG_LIB_DRIVER_TOOLS_H_