blob: 5898c660a4994b31f5a34c0839ebbd203e3815b8 [file] [log] [blame]
Daniel Dunbar5903d8c2009-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 Dunbare6adeee2009-03-29 17:08:39 +000014#include "clang/Driver/Types.h"
Daniel Dunbara3246a02009-03-18 08:07:30 +000015#include "clang/Driver/Util.h"
Daniel Dunbar5903d8c2009-03-17 22:07:58 +000016
Joerg Sonnenberger637603a2011-05-16 13:35:02 +000017#include "llvm/ADT/Triple.h"
Daniel Dunbar5903d8c2009-03-17 22:07:58 +000018#include "llvm/Support/Compiler.h"
19
20namespace clang {
John McCall5fb5df92012-06-20 06:18:46 +000021 class ObjCRuntime;
22
Daniel Dunbar5903d8c2009-03-17 22:07:58 +000023namespace driver {
Douglas Gregor111af7d2009-04-18 00:34:01 +000024 class Driver;
25
Daniel Dunbarc1964212009-03-26 16:23:12 +000026namespace toolchains {
Daniel Dunbarf0a5b9b2009-09-04 18:34:51 +000027 class Darwin;
Daniel Dunbarc1964212009-03-26 16:23:12 +000028}
29
Daniel Dunbar15abb2e2009-03-17 22:18:43 +000030namespace tools {
Daniel Dunbar5903d8c2009-03-17 22:07:58 +000031
Daniel Dunbar4f5e79c2010-05-20 21:30:13 +000032 /// \brief Clang compiler tool.
Duncan Sandsaf260b92010-05-11 20:16:05 +000033 class LLVM_LIBRARY_VISIBILITY Clang : public Tool {
Peter Collingbourne9b515cb2011-11-06 00:40:05 +000034 void AddPreprocessingOptions(Compilation &C,
35 const Driver &D,
Douglas Gregor111af7d2009-04-18 00:34:01 +000036 const ArgList &Args,
Daniel Dunbard067f7f2009-04-08 23:54:23 +000037 ArgStringList &CmdArgs,
38 const InputInfo &Output,
39 const InputInfoList &Inputs) const;
40
Daniel Dunbarc9388c12011-03-17 17:10:06 +000041 void AddARMTargetArgs(const ArgList &Args, ArgStringList &CmdArgs,
42 bool KernelOrKext) const;
Eric Christopher0b26a612010-03-02 02:41:08 +000043 void AddMIPSTargetArgs(const ArgList &Args, ArgStringList &CmdArgs) const;
Hal Finkel8eb59282012-06-11 22:35:19 +000044 void AddPPCTargetArgs(const ArgList &Args, ArgStringList &CmdArgs) const;
Bruno Cardoso Lopese7f211c2010-11-09 17:21:19 +000045 void AddSparcTargetArgs(const ArgList &Args, ArgStringList &CmdArgs) const;
Daniel Dunbar3b3191f2009-09-09 22:33:08 +000046 void AddX86TargetArgs(const ArgList &Args, ArgStringList &CmdArgs) const;
Tony Linthicum76329bf2011-12-12 21:14:55 +000047 void AddHexagonTargetArgs (const ArgList &Args, ArgStringList &CmdArgs) const;
Daniel Dunbar3b3191f2009-09-09 22:33:08 +000048
John McCall5fb5df92012-06-20 06:18:46 +000049 enum RewriteKind { RK_None, RK_Fragile, RK_NonFragile };
50
51 ObjCRuntime AddObjCRuntimeArgs(const ArgList &args, ArgStringList &cmdArgs,
52 RewriteKind rewrite) const;
53
Daniel Dunbar5903d8c2009-03-17 22:07:58 +000054 public:
Daniel Dunbar1cb532c2010-05-22 00:37:18 +000055 Clang(const ToolChain &TC) : Tool("clang", "clang frontend", TC) {}
Daniel Dunbar5903d8c2009-03-17 22:07:58 +000056
Daniel Dunbar3d45e172010-04-06 17:07:49 +000057 virtual bool hasGoodDiagnostics() const { return true; }
Daniel Dunbarc4343942010-02-03 03:07:56 +000058 virtual bool hasIntegratedAssembler() const { return true; }
Daniel Dunbar5903d8c2009-03-17 22:07:58 +000059 virtual bool hasIntegratedCPP() const { return true; }
Daniel Dunbar1a093d22009-03-18 06:00:36 +000060
61 virtual void ConstructJob(Compilation &C, const JobAction &JA,
Mike Stump11289f42009-09-09 15:08:12 +000062 const InputInfo &Output,
63 const InputInfoList &Inputs,
64 const ArgList &TCArgs,
Daniel Dunbar1a093d22009-03-18 06:00:36 +000065 const char *LinkingOutput) const;
Daniel Dunbar5903d8c2009-03-17 22:07:58 +000066 };
67
Daniel Dunbar4f5e79c2010-05-20 21:30:13 +000068 /// \brief Clang integrated assembler tool.
69 class LLVM_LIBRARY_VISIBILITY ClangAs : public Tool {
Jim Grosbach576452b2012-02-10 20:37:10 +000070 void AddARMTargetArgs(const ArgList &Args, ArgStringList &CmdArgs) const;
Daniel Dunbar4f5e79c2010-05-20 21:30:13 +000071 public:
Daniel Dunbar1cb532c2010-05-22 00:37:18 +000072 ClangAs(const ToolChain &TC) : Tool("clang::as",
73 "clang integrated assembler", TC) {}
Daniel Dunbar4f5e79c2010-05-20 21:30:13 +000074
Daniel Dunbar4f5e79c2010-05-20 21:30:13 +000075 virtual bool hasGoodDiagnostics() const { return true; }
76 virtual bool hasIntegratedAssembler() const { return false; }
77 virtual bool hasIntegratedCPP() const { return false; }
78
79 virtual void ConstructJob(Compilation &C, const JobAction &JA,
Daniel Dunbar4f5e79c2010-05-20 21:30:13 +000080 const InputInfo &Output,
81 const InputInfoList &Inputs,
82 const ArgList &TCArgs,
83 const char *LinkingOutput) const;
84 };
85
Daniel Dunbar82116f82009-03-17 22:45:24 +000086 /// gcc - Generic GCC tool implementations.
87namespace gcc {
Duncan Sandsaf260b92010-05-11 20:16:05 +000088 class LLVM_LIBRARY_VISIBILITY Common : public Tool {
Daniel Dunbar5903d8c2009-03-17 22:07:58 +000089 public:
Daniel Dunbar1cb532c2010-05-22 00:37:18 +000090 Common(const char *Name, const char *ShortName,
91 const ToolChain &TC) : Tool(Name, ShortName, TC) {}
Daniel Dunbara3246a02009-03-18 08:07:30 +000092
93 virtual void ConstructJob(Compilation &C, const JobAction &JA,
Mike Stump11289f42009-09-09 15:08:12 +000094 const InputInfo &Output,
95 const InputInfoList &Inputs,
96 const ArgList &TCArgs,
Daniel Dunbara3246a02009-03-18 08:07:30 +000097 const char *LinkingOutput) const;
98
99 /// RenderExtraToolArgs - Render any arguments necessary to force
100 /// the particular tool mode.
Daniel Dunbar4e295052010-01-25 22:35:08 +0000101 virtual void RenderExtraToolArgs(const JobAction &JA,
102 ArgStringList &CmdArgs) const = 0;
Daniel Dunbara3246a02009-03-18 08:07:30 +0000103 };
104
Mike Stump11289f42009-09-09 15:08:12 +0000105
Duncan Sandsaf260b92010-05-11 20:16:05 +0000106 class LLVM_LIBRARY_VISIBILITY Preprocess : public Common {
Daniel Dunbara3246a02009-03-18 08:07:30 +0000107 public:
Daniel Dunbar1cb532c2010-05-22 00:37:18 +0000108 Preprocess(const ToolChain &TC) : Common("gcc::Preprocess",
109 "gcc preprocessor", TC) {}
Daniel Dunbar5903d8c2009-03-17 22:07:58 +0000110
Daniel Dunbar3d45e172010-04-06 17:07:49 +0000111 virtual bool hasGoodDiagnostics() const { return true; }
Daniel Dunbar5903d8c2009-03-17 22:07:58 +0000112 virtual bool hasIntegratedCPP() const { return false; }
Daniel Dunbar1a093d22009-03-18 06:00:36 +0000113
Daniel Dunbar4e295052010-01-25 22:35:08 +0000114 virtual void RenderExtraToolArgs(const JobAction &JA,
115 ArgStringList &CmdArgs) const;
Daniel Dunbar5903d8c2009-03-17 22:07:58 +0000116 };
117
Duncan Sandsaf260b92010-05-11 20:16:05 +0000118 class LLVM_LIBRARY_VISIBILITY Precompile : public Common {
Daniel Dunbar5903d8c2009-03-17 22:07:58 +0000119 public:
Daniel Dunbar1cb532c2010-05-22 00:37:18 +0000120 Precompile(const ToolChain &TC) : Common("gcc::Precompile",
121 "gcc precompile", TC) {}
Daniel Dunbar5903d8c2009-03-17 22:07:58 +0000122
Daniel Dunbar3d45e172010-04-06 17:07:49 +0000123 virtual bool hasGoodDiagnostics() const { return true; }
Daniel Dunbar5903d8c2009-03-17 22:07:58 +0000124 virtual bool hasIntegratedCPP() const { return true; }
Daniel Dunbar1a093d22009-03-18 06:00:36 +0000125
Daniel Dunbar4e295052010-01-25 22:35:08 +0000126 virtual void RenderExtraToolArgs(const JobAction &JA,
127 ArgStringList &CmdArgs) const;
Daniel Dunbar5903d8c2009-03-17 22:07:58 +0000128 };
129
Duncan Sandsaf260b92010-05-11 20:16:05 +0000130 class LLVM_LIBRARY_VISIBILITY Compile : public Common {
Daniel Dunbar5903d8c2009-03-17 22:07:58 +0000131 public:
Daniel Dunbar1cb532c2010-05-22 00:37:18 +0000132 Compile(const ToolChain &TC) : Common("gcc::Compile",
133 "gcc frontend", TC) {}
Daniel Dunbar5903d8c2009-03-17 22:07:58 +0000134
Daniel Dunbar3d45e172010-04-06 17:07:49 +0000135 virtual bool hasGoodDiagnostics() const { return true; }
Daniel Dunbar5903d8c2009-03-17 22:07:58 +0000136 virtual bool hasIntegratedCPP() const { return true; }
Daniel Dunbar1a093d22009-03-18 06:00:36 +0000137
Daniel Dunbar4e295052010-01-25 22:35:08 +0000138 virtual void RenderExtraToolArgs(const JobAction &JA,
139 ArgStringList &CmdArgs) const;
Daniel Dunbar5903d8c2009-03-17 22:07:58 +0000140 };
141
Duncan Sandsaf260b92010-05-11 20:16:05 +0000142 class LLVM_LIBRARY_VISIBILITY Assemble : public Common {
Daniel Dunbar5903d8c2009-03-17 22:07:58 +0000143 public:
Daniel Dunbar1cb532c2010-05-22 00:37:18 +0000144 Assemble(const ToolChain &TC) : Common("gcc::Assemble",
145 "assembler (via gcc)", TC) {}
Daniel Dunbar5903d8c2009-03-17 22:07:58 +0000146
Daniel Dunbar5903d8c2009-03-17 22:07:58 +0000147 virtual bool hasIntegratedCPP() const { return false; }
Daniel Dunbar1a093d22009-03-18 06:00:36 +0000148
Daniel Dunbar4e295052010-01-25 22:35:08 +0000149 virtual void RenderExtraToolArgs(const JobAction &JA,
150 ArgStringList &CmdArgs) const;
Daniel Dunbar5903d8c2009-03-17 22:07:58 +0000151 };
152
Duncan Sandsaf260b92010-05-11 20:16:05 +0000153 class LLVM_LIBRARY_VISIBILITY Link : public Common {
Daniel Dunbar5903d8c2009-03-17 22:07:58 +0000154 public:
Daniel Dunbar1cb532c2010-05-22 00:37:18 +0000155 Link(const ToolChain &TC) : Common("gcc::Link",
156 "linker (via gcc)", TC) {}
Daniel Dunbar5903d8c2009-03-17 22:07:58 +0000157
Daniel Dunbar5903d8c2009-03-17 22:07:58 +0000158 virtual bool hasIntegratedCPP() const { return false; }
Chad Rosierbee5a1d2012-03-07 00:30:40 +0000159 virtual bool isLinkJob() const { return true; }
Daniel Dunbar1a093d22009-03-18 06:00:36 +0000160
Daniel Dunbar4e295052010-01-25 22:35:08 +0000161 virtual void RenderExtraToolArgs(const JobAction &JA,
162 ArgStringList &CmdArgs) const;
Daniel Dunbar5903d8c2009-03-17 22:07:58 +0000163 };
Daniel Dunbar82116f82009-03-17 22:45:24 +0000164} // end namespace gcc
Daniel Dunbar5903d8c2009-03-17 22:07:58 +0000165
Tony Linthicum76329bf2011-12-12 21:14:55 +0000166namespace hexagon {
167 // For Hexagon, we do not need to instantiate tools for PreProcess, PreCompile and Compile.
168 // We simply use "clang -cc1" for those actions.
169 class LLVM_LIBRARY_VISIBILITY Assemble : public Tool {
170 public:
171 Assemble(const ToolChain &TC) : Tool("hexagon::Assemble",
172 "hexagon-as", TC) {}
173
174 virtual bool hasIntegratedCPP() const { return false; }
175
176 virtual void RenderExtraToolArgs(const JobAction &JA,
177 ArgStringList &CmdArgs) const;
178 virtual void ConstructJob(Compilation &C, const JobAction &JA,
179 const InputInfo &Output,
180 const InputInfoList &Inputs,
181 const ArgList &TCArgs,
182 const char *LinkingOutput) const;
183 };
184
185 class LLVM_LIBRARY_VISIBILITY Link : public Tool {
186 public:
187 Link(const ToolChain &TC) : Tool("hexagon::Link",
188 "hexagon-ld", TC) {}
189
190 virtual bool hasIntegratedCPP() const { return false; }
Chad Rosierbee5a1d2012-03-07 00:30:40 +0000191 virtual bool isLinkJob() const { return true; }
Tony Linthicum76329bf2011-12-12 21:14:55 +0000192
193 virtual void RenderExtraToolArgs(const JobAction &JA,
194 ArgStringList &CmdArgs) const;
195 virtual void ConstructJob(Compilation &C, const JobAction &JA,
196 const InputInfo &Output,
197 const InputInfoList &Inputs,
198 const ArgList &TCArgs,
199 const char *LinkingOutput) const;
200 };
201} // end namespace hexagon.
202
203
Daniel Dunbar64ed5e32009-03-20 00:52:38 +0000204namespace darwin {
Rafael Espindoladcbf6982012-10-31 18:51:07 +0000205 llvm::Triple::ArchType getArchTypeForDarwinArchName(StringRef Str);
206
Duncan Sandsaf260b92010-05-11 20:16:05 +0000207 class LLVM_LIBRARY_VISIBILITY DarwinTool : public Tool {
David Blaikie68e081d2011-12-20 02:48:34 +0000208 virtual void anchor();
Daniel Dunbare9ded432009-09-09 18:36:20 +0000209 protected:
210 void AddDarwinArch(const ArgList &Args, ArgStringList &CmdArgs) const;
Daniel Dunbare9ded432009-09-09 18:36:20 +0000211
212 const toolchains::Darwin &getDarwinToolChain() const {
213 return reinterpret_cast<const toolchains::Darwin&>(getToolChain());
214 }
215
216 public:
Daniel Dunbar1cb532c2010-05-22 00:37:18 +0000217 DarwinTool(const char *Name, const char *ShortName,
218 const ToolChain &TC) : Tool(Name, ShortName, TC) {}
Daniel Dunbare9ded432009-09-09 18:36:20 +0000219 };
220
Duncan Sandsaf260b92010-05-11 20:16:05 +0000221 class LLVM_LIBRARY_VISIBILITY CC1 : public DarwinTool {
David Blaikie68e081d2011-12-20 02:48:34 +0000222 virtual void anchor();
Daniel Dunbar52e96cc2009-03-30 00:34:04 +0000223 public:
Mike Stump11289f42009-09-09 15:08:12 +0000224 static const char *getBaseInputName(const ArgList &Args,
Daniel Dunbar52e96cc2009-03-30 00:34:04 +0000225 const InputInfoList &Input);
Mike Stump11289f42009-09-09 15:08:12 +0000226 static const char *getBaseInputStem(const ArgList &Args,
Daniel Dunbar52e96cc2009-03-30 00:34:04 +0000227 const InputInfoList &Input);
Mike Stump11289f42009-09-09 15:08:12 +0000228 static const char *getDependencyFileName(const ArgList &Args,
Daniel Dunbar52e96cc2009-03-30 00:34:04 +0000229 const InputInfoList &Inputs);
230
Daniel Dunbare6adeee2009-03-29 17:08:39 +0000231 protected:
232 const char *getCC1Name(types::ID Type) const;
233
Daniel Dunbarafec1f52009-03-29 18:40:18 +0000234 void AddCC1Args(const ArgList &Args, ArgStringList &CmdArgs) const;
Chad Rosierbc5ea3d2011-08-17 18:24:55 +0000235 void RemoveCC1UnsupportedArgs(ArgStringList &CmdArgs) const;
Daniel Dunbare6adeee2009-03-29 17:08:39 +0000236 void AddCC1OptionsArgs(const ArgList &Args, ArgStringList &CmdArgs,
237 const InputInfoList &Inputs,
Daniel Dunbarafec1f52009-03-29 18:40:18 +0000238 const ArgStringList &OutputArgs) const;
Daniel Dunbare6adeee2009-03-29 17:08:39 +0000239 void AddCPPOptionsArgs(const ArgList &Args, ArgStringList &CmdArgs,
240 const InputInfoList &Inputs,
Daniel Dunbarafec1f52009-03-29 18:40:18 +0000241 const ArgStringList &OutputArgs) const;
Mike Stump11289f42009-09-09 15:08:12 +0000242 void AddCPPUniqueOptionsArgs(const ArgList &Args,
Daniel Dunbarafec1f52009-03-29 18:40:18 +0000243 ArgStringList &CmdArgs,
244 const InputInfoList &Inputs) const;
245 void AddCPPArgs(const ArgList &Args, ArgStringList &CmdArgs) const;
Daniel Dunbare6adeee2009-03-29 17:08:39 +0000246
247 public:
Daniel Dunbar1cb532c2010-05-22 00:37:18 +0000248 CC1(const char *Name, const char *ShortName,
249 const ToolChain &TC) : DarwinTool(Name, ShortName, TC) {}
Daniel Dunbare6adeee2009-03-29 17:08:39 +0000250
Daniel Dunbar3d45e172010-04-06 17:07:49 +0000251 virtual bool hasGoodDiagnostics() const { return true; }
Daniel Dunbare6adeee2009-03-29 17:08:39 +0000252 virtual bool hasIntegratedCPP() const { return true; }
253 };
254
Duncan Sandsaf260b92010-05-11 20:16:05 +0000255 class LLVM_LIBRARY_VISIBILITY Preprocess : public CC1 {
Daniel Dunbare6adeee2009-03-29 17:08:39 +0000256 public:
Daniel Dunbar1cb532c2010-05-22 00:37:18 +0000257 Preprocess(const ToolChain &TC) : CC1("darwin::Preprocess",
258 "gcc preprocessor", TC) {}
Daniel Dunbare6adeee2009-03-29 17:08:39 +0000259
260 virtual void ConstructJob(Compilation &C, const JobAction &JA,
Mike Stump11289f42009-09-09 15:08:12 +0000261 const InputInfo &Output,
262 const InputInfoList &Inputs,
263 const ArgList &TCArgs,
Daniel Dunbare6adeee2009-03-29 17:08:39 +0000264 const char *LinkingOutput) const;
265 };
266
Duncan Sandsaf260b92010-05-11 20:16:05 +0000267 class LLVM_LIBRARY_VISIBILITY Compile : public CC1 {
Daniel Dunbare6adeee2009-03-29 17:08:39 +0000268 public:
Daniel Dunbar1cb532c2010-05-22 00:37:18 +0000269 Compile(const ToolChain &TC) : CC1("darwin::Compile", "gcc frontend", TC) {}
Daniel Dunbare6adeee2009-03-29 17:08:39 +0000270
271 virtual void ConstructJob(Compilation &C, const JobAction &JA,
Mike Stump11289f42009-09-09 15:08:12 +0000272 const InputInfo &Output,
273 const InputInfoList &Inputs,
274 const ArgList &TCArgs,
Daniel Dunbare6adeee2009-03-29 17:08:39 +0000275 const char *LinkingOutput) const;
276 };
277
Duncan Sandsaf260b92010-05-11 20:16:05 +0000278 class LLVM_LIBRARY_VISIBILITY Assemble : public DarwinTool {
Daniel Dunbarbe220842009-03-20 16:06:39 +0000279 public:
Daniel Dunbar1cb532c2010-05-22 00:37:18 +0000280 Assemble(const ToolChain &TC) : DarwinTool("darwin::Assemble",
281 "assembler", TC) {}
Daniel Dunbarbe220842009-03-20 16:06:39 +0000282
Daniel Dunbarbe220842009-03-20 16:06:39 +0000283 virtual bool hasIntegratedCPP() const { return false; }
284
285 virtual void ConstructJob(Compilation &C, const JobAction &JA,
Mike Stump11289f42009-09-09 15:08:12 +0000286 const InputInfo &Output,
287 const InputInfoList &Inputs,
288 const ArgList &TCArgs,
Daniel Dunbarbe220842009-03-20 16:06:39 +0000289 const char *LinkingOutput) const;
290 };
291
Duncan Sandsaf260b92010-05-11 20:16:05 +0000292 class LLVM_LIBRARY_VISIBILITY Link : public DarwinTool {
Bill Wendling3b2000f2012-10-02 18:02:50 +0000293 bool NeedsTempPath(const InputInfoList &Inputs) const;
Daniel Dunbarccbc4522010-09-09 21:51:05 +0000294 void AddLinkArgs(Compilation &C, const ArgList &Args,
Bill Wendling3b2000f2012-10-02 18:02:50 +0000295 ArgStringList &CmdArgs, const InputInfoList &Inputs) const;
Daniel Dunbarc1964212009-03-26 16:23:12 +0000296
Daniel Dunbarc1964212009-03-26 16:23:12 +0000297 public:
Daniel Dunbar1cb532c2010-05-22 00:37:18 +0000298 Link(const ToolChain &TC) : DarwinTool("darwin::Link", "linker", TC) {}
Daniel Dunbarc1964212009-03-26 16:23:12 +0000299
Daniel Dunbarc1964212009-03-26 16:23:12 +0000300 virtual bool hasIntegratedCPP() const { return false; }
Chad Rosierbee5a1d2012-03-07 00:30:40 +0000301 virtual bool isLinkJob() const { return true; }
Daniel Dunbarc1964212009-03-26 16:23:12 +0000302
303 virtual void ConstructJob(Compilation &C, const JobAction &JA,
Mike Stump11289f42009-09-09 15:08:12 +0000304 const InputInfo &Output,
305 const InputInfoList &Inputs,
306 const ArgList &TCArgs,
Daniel Dunbarc1964212009-03-26 16:23:12 +0000307 const char *LinkingOutput) const;
308 };
309
Duncan Sandsaf260b92010-05-11 20:16:05 +0000310 class LLVM_LIBRARY_VISIBILITY Lipo : public DarwinTool {
Daniel Dunbar64ed5e32009-03-20 00:52:38 +0000311 public:
Daniel Dunbar1cb532c2010-05-22 00:37:18 +0000312 Lipo(const ToolChain &TC) : DarwinTool("darwin::Lipo", "lipo", TC) {}
Daniel Dunbar64ed5e32009-03-20 00:52:38 +0000313
Daniel Dunbar64ed5e32009-03-20 00:52:38 +0000314 virtual bool hasIntegratedCPP() const { return false; }
315
316 virtual void ConstructJob(Compilation &C, const JobAction &JA,
Mike Stump11289f42009-09-09 15:08:12 +0000317 const InputInfo &Output,
318 const InputInfoList &Inputs,
319 const ArgList &TCArgs,
Daniel Dunbar64ed5e32009-03-20 00:52:38 +0000320 const char *LinkingOutput) const;
321 };
Daniel Dunbar88299622010-06-04 18:28:36 +0000322
323 class LLVM_LIBRARY_VISIBILITY Dsymutil : public DarwinTool {
324 public:
325 Dsymutil(const ToolChain &TC) : DarwinTool("darwin::Dsymutil",
326 "dsymutil", TC) {}
327
Daniel Dunbar88299622010-06-04 18:28:36 +0000328 virtual bool hasIntegratedCPP() const { return false; }
329
330 virtual void ConstructJob(Compilation &C, const JobAction &JA,
Daniel Dunbar88299622010-06-04 18:28:36 +0000331 const InputInfo &Output,
332 const InputInfoList &Inputs,
333 const ArgList &TCArgs,
334 const char *LinkingOutput) const;
335 };
Eric Christopher551ef452011-08-23 17:56:55 +0000336
337 class LLVM_LIBRARY_VISIBILITY VerifyDebug : public DarwinTool {
338 public:
339 VerifyDebug(const ToolChain &TC) : DarwinTool("darwin::VerifyDebug",
340 "dwarfdump", TC) {}
341
342 virtual bool hasIntegratedCPP() const { return false; }
343
344 virtual void ConstructJob(Compilation &C, const JobAction &JA,
345 const InputInfo &Output,
346 const InputInfoList &Inputs,
347 const ArgList &TCArgs,
348 const char *LinkingOutput) const;
349 };
350
Daniel Dunbar64ed5e32009-03-20 00:52:38 +0000351}
352
Daniel Dunbar10de9e62009-06-29 20:52:51 +0000353 /// openbsd -- Directly call GNU Binutils assembler and linker
354namespace openbsd {
Duncan Sandsaf260b92010-05-11 20:16:05 +0000355 class LLVM_LIBRARY_VISIBILITY Assemble : public Tool {
Daniel Dunbar10de9e62009-06-29 20:52:51 +0000356 public:
Daniel Dunbar1cb532c2010-05-22 00:37:18 +0000357 Assemble(const ToolChain &TC) : Tool("openbsd::Assemble", "assembler",
358 TC) {}
Daniel Dunbar10de9e62009-06-29 20:52:51 +0000359
Daniel Dunbar10de9e62009-06-29 20:52:51 +0000360 virtual bool hasIntegratedCPP() const { return false; }
361
362 virtual void ConstructJob(Compilation &C, const JobAction &JA,
Mike Stump11289f42009-09-09 15:08:12 +0000363 const InputInfo &Output,
364 const InputInfoList &Inputs,
365 const ArgList &TCArgs,
Daniel Dunbar10de9e62009-06-29 20:52:51 +0000366 const char *LinkingOutput) const;
367 };
Duncan Sandsaf260b92010-05-11 20:16:05 +0000368 class LLVM_LIBRARY_VISIBILITY Link : public Tool {
Daniel Dunbar10de9e62009-06-29 20:52:51 +0000369 public:
Daniel Dunbar1cb532c2010-05-22 00:37:18 +0000370 Link(const ToolChain &TC) : Tool("openbsd::Link", "linker", TC) {}
Daniel Dunbar10de9e62009-06-29 20:52:51 +0000371
Daniel Dunbar10de9e62009-06-29 20:52:51 +0000372 virtual bool hasIntegratedCPP() const { return false; }
Chad Rosierbee5a1d2012-03-07 00:30:40 +0000373 virtual bool isLinkJob() const { return true; }
Daniel Dunbar10de9e62009-06-29 20:52:51 +0000374
375 virtual void ConstructJob(Compilation &C, const JobAction &JA,
Mike Stump11289f42009-09-09 15:08:12 +0000376 const InputInfo &Output,
377 const InputInfoList &Inputs,
378 const ArgList &TCArgs,
Daniel Dunbar10de9e62009-06-29 20:52:51 +0000379 const char *LinkingOutput) const;
380 };
Edward O'Callaghan856e4ff2009-08-22 01:06:46 +0000381} // end namespace openbsd
Daniel Dunbar10de9e62009-06-29 20:52:51 +0000382
Eli Friedman9fa28852012-08-08 23:57:20 +0000383 /// bitrig -- Directly call GNU Binutils assembler and linker
384namespace bitrig {
385 class LLVM_LIBRARY_VISIBILITY Assemble : public Tool {
386 public:
387 Assemble(const ToolChain &TC) : Tool("bitrig::Assemble", "assembler",
388 TC) {}
389
390 virtual bool hasIntegratedCPP() const { return false; }
391
392 virtual void ConstructJob(Compilation &C, const JobAction &JA,
393 const InputInfo &Output,
394 const InputInfoList &Inputs,
395 const ArgList &TCArgs,
396 const char *LinkingOutput) const;
397 };
398 class LLVM_LIBRARY_VISIBILITY Link : public Tool {
399 public:
400 Link(const ToolChain &TC) : Tool("bitrig::Link", "linker", TC) {}
401
402 virtual bool hasIntegratedCPP() const { return false; }
403 virtual bool isLinkJob() const { return true; }
404
405 virtual void ConstructJob(Compilation &C, const JobAction &JA,
406 const InputInfo &Output,
407 const InputInfoList &Inputs,
408 const ArgList &TCArgs,
409 const char *LinkingOutput) const;
410 };
411} // end namespace bitrig
412
Daniel Dunbar8eb473c2009-03-31 17:45:15 +0000413 /// freebsd -- Directly call GNU Binutils assembler and linker
414namespace freebsd {
Duncan Sandsaf260b92010-05-11 20:16:05 +0000415 class LLVM_LIBRARY_VISIBILITY Assemble : public Tool {
Daniel Dunbar8eb473c2009-03-31 17:45:15 +0000416 public:
Daniel Dunbar1cb532c2010-05-22 00:37:18 +0000417 Assemble(const ToolChain &TC) : Tool("freebsd::Assemble", "assembler",
418 TC) {}
Daniel Dunbar8eb473c2009-03-31 17:45:15 +0000419
Daniel Dunbar8eb473c2009-03-31 17:45:15 +0000420 virtual bool hasIntegratedCPP() const { return false; }
421
422 virtual void ConstructJob(Compilation &C, const JobAction &JA,
Mike Stump11289f42009-09-09 15:08:12 +0000423 const InputInfo &Output,
424 const InputInfoList &Inputs,
425 const ArgList &TCArgs,
Daniel Dunbar8eb473c2009-03-31 17:45:15 +0000426 const char *LinkingOutput) const;
427 };
Duncan Sandsaf260b92010-05-11 20:16:05 +0000428 class LLVM_LIBRARY_VISIBILITY Link : public Tool {
Daniel Dunbard854c8d2009-04-01 19:36:32 +0000429 public:
Daniel Dunbar1cb532c2010-05-22 00:37:18 +0000430 Link(const ToolChain &TC) : Tool("freebsd::Link", "linker", TC) {}
Daniel Dunbard854c8d2009-04-01 19:36:32 +0000431
Daniel Dunbard854c8d2009-04-01 19:36:32 +0000432 virtual bool hasIntegratedCPP() const { return false; }
Chad Rosierbee5a1d2012-03-07 00:30:40 +0000433 virtual bool isLinkJob() const { return true; }
Daniel Dunbard854c8d2009-04-01 19:36:32 +0000434
435 virtual void ConstructJob(Compilation &C, const JobAction &JA,
Mike Stump11289f42009-09-09 15:08:12 +0000436 const InputInfo &Output,
437 const InputInfoList &Inputs,
438 const ArgList &TCArgs,
Daniel Dunbard854c8d2009-04-01 19:36:32 +0000439 const char *LinkingOutput) const;
440 };
Edward O'Callaghan856e4ff2009-08-22 01:06:46 +0000441} // end namespace freebsd
442
Benjamin Kramer24f1d3e2011-02-02 18:59:27 +0000443 /// netbsd -- Directly call GNU Binutils assembler and linker
444namespace netbsd {
445 class LLVM_LIBRARY_VISIBILITY Assemble : public Tool {
Joerg Sonnenberger637603a2011-05-16 13:35:02 +0000446
Benjamin Kramer24f1d3e2011-02-02 18:59:27 +0000447 public:
Joerg Sonnenbergerd64c60e2012-01-26 22:27:52 +0000448 Assemble(const ToolChain &TC)
449 : Tool("netbsd::Assemble", "assembler", TC) {}
Benjamin Kramer24f1d3e2011-02-02 18:59:27 +0000450
451 virtual bool hasIntegratedCPP() const { return false; }
452
453 virtual void ConstructJob(Compilation &C, const JobAction &JA,
454 const InputInfo &Output,
455 const InputInfoList &Inputs,
456 const ArgList &TCArgs,
457 const char *LinkingOutput) const;
458 };
459 class LLVM_LIBRARY_VISIBILITY Link : public Tool {
Joerg Sonnenberger637603a2011-05-16 13:35:02 +0000460
Benjamin Kramer24f1d3e2011-02-02 18:59:27 +0000461 public:
Joerg Sonnenbergerd64c60e2012-01-26 22:27:52 +0000462 Link(const ToolChain &TC)
463 : Tool("netbsd::Link", "linker", TC) {}
Benjamin Kramer24f1d3e2011-02-02 18:59:27 +0000464
465 virtual bool hasIntegratedCPP() const { return false; }
Chad Rosierbee5a1d2012-03-07 00:30:40 +0000466 virtual bool isLinkJob() const { return true; }
Benjamin Kramer24f1d3e2011-02-02 18:59:27 +0000467
468 virtual void ConstructJob(Compilation &C, const JobAction &JA,
469 const InputInfo &Output,
470 const InputInfoList &Inputs,
471 const ArgList &TCArgs,
472 const char *LinkingOutput) const;
473 };
474} // end namespace netbsd
475
Rafael Espindola92b00932010-08-10 00:25:48 +0000476 /// linux -- Directly call GNU Binutils assembler and linker
477namespace linuxtools {
478 class LLVM_LIBRARY_VISIBILITY Assemble : public Tool {
479 public:
480 Assemble(const ToolChain &TC) : Tool("linux::Assemble", "assembler",
481 TC) {}
482
483 virtual bool hasIntegratedCPP() const { return false; }
484
485 virtual void ConstructJob(Compilation &C, const JobAction &JA,
486 const InputInfo &Output,
487 const InputInfoList &Inputs,
488 const ArgList &TCArgs,
489 const char *LinkingOutput) const;
490 };
Rafael Espindolac8f008f2010-11-07 20:14:31 +0000491 class LLVM_LIBRARY_VISIBILITY Link : public Tool {
492 public:
493 Link(const ToolChain &TC) : Tool("linux::Link", "linker", TC) {}
494
495 virtual bool hasIntegratedCPP() const { return false; }
Chad Rosierbee5a1d2012-03-07 00:30:40 +0000496 virtual bool isLinkJob() const { return true; }
Rafael Espindolac8f008f2010-11-07 20:14:31 +0000497
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 };
Rafael Espindola92b00932010-08-10 00:25:48 +0000504}
Chris Lattner3e2ee142010-07-07 16:01:42 +0000505 /// minix -- Directly call GNU Binutils assembler and linker
506namespace minix {
507 class LLVM_LIBRARY_VISIBILITY Assemble : public Tool {
508 public:
509 Assemble(const ToolChain &TC) : Tool("minix::Assemble", "assembler",
510 TC) {}
511
Chris Lattner3e2ee142010-07-07 16:01:42 +0000512 virtual bool hasIntegratedCPP() const { return false; }
513
514 virtual void ConstructJob(Compilation &C, const JobAction &JA,
Chris Lattner3e2ee142010-07-07 16:01:42 +0000515 const InputInfo &Output,
516 const InputInfoList &Inputs,
517 const ArgList &TCArgs,
518 const char *LinkingOutput) const;
519 };
520 class LLVM_LIBRARY_VISIBILITY Link : public Tool {
521 public:
522 Link(const ToolChain &TC) : Tool("minix::Link", "linker", TC) {}
523
Chris Lattner3e2ee142010-07-07 16:01:42 +0000524 virtual bool hasIntegratedCPP() const { return false; }
Chad Rosierbee5a1d2012-03-07 00:30:40 +0000525 virtual bool isLinkJob() const { return true; }
Chris Lattner3e2ee142010-07-07 16:01:42 +0000526
527 virtual void ConstructJob(Compilation &C, const JobAction &JA,
Chris Lattner3e2ee142010-07-07 16:01:42 +0000528 const InputInfo &Output,
529 const InputInfoList &Inputs,
530 const ArgList &TCArgs,
531 const char *LinkingOutput) const;
532 };
533} // end namespace minix
534
David Chisnallf571cde2012-02-15 13:39:01 +0000535 /// solaris -- Directly call Solaris assembler and linker
536namespace solaris {
537 class LLVM_LIBRARY_VISIBILITY Assemble : public Tool {
538 public:
539 Assemble(const ToolChain &TC) : Tool("solaris::Assemble", "assembler",
540 TC) {}
541
542 virtual bool hasIntegratedCPP() const { return false; }
543
544 virtual void ConstructJob(Compilation &C, const JobAction &JA,
545 const InputInfo &Output,
546 const InputInfoList &Inputs,
547 const ArgList &TCArgs,
548 const char *LinkingOutput) const;
549 };
550 class LLVM_LIBRARY_VISIBILITY Link : public Tool {
551 public:
552 Link(const ToolChain &TC) : Tool("solaris::Link", "linker", TC) {}
553
554 virtual bool hasIntegratedCPP() const { return false; }
Chad Rosierbee5a1d2012-03-07 00:30:40 +0000555 virtual bool isLinkJob() const { return true; }
David Chisnallf571cde2012-02-15 13:39:01 +0000556
557 virtual void ConstructJob(Compilation &C, const JobAction &JA,
558 const InputInfo &Output,
559 const InputInfoList &Inputs,
560 const ArgList &TCArgs,
561 const char *LinkingOutput) const;
562 };
David Chisnalla9ed5d72012-02-15 16:25:46 +0000563} // end namespace solaris
David Chisnallf571cde2012-02-15 13:39:01 +0000564
Edward O'Callaghan856e4ff2009-08-22 01:06:46 +0000565 /// auroraux -- Directly call GNU Binutils assembler and linker
566namespace auroraux {
Duncan Sandsaf260b92010-05-11 20:16:05 +0000567 class LLVM_LIBRARY_VISIBILITY Assemble : public Tool {
Edward O'Callaghan856e4ff2009-08-22 01:06:46 +0000568 public:
Daniel Dunbar1cb532c2010-05-22 00:37:18 +0000569 Assemble(const ToolChain &TC) : Tool("auroraux::Assemble", "assembler",
570 TC) {}
Edward O'Callaghan856e4ff2009-08-22 01:06:46 +0000571
Edward O'Callaghan856e4ff2009-08-22 01:06:46 +0000572 virtual bool hasIntegratedCPP() const { return false; }
573
574 virtual void ConstructJob(Compilation &C, const JobAction &JA,
Mike Stump11289f42009-09-09 15:08:12 +0000575 const InputInfo &Output,
576 const InputInfoList &Inputs,
577 const ArgList &TCArgs,
Edward O'Callaghan856e4ff2009-08-22 01:06:46 +0000578 const char *LinkingOutput) const;
579 };
Duncan Sandsaf260b92010-05-11 20:16:05 +0000580 class LLVM_LIBRARY_VISIBILITY Link : public Tool {
Edward O'Callaghan856e4ff2009-08-22 01:06:46 +0000581 public:
Daniel Dunbar1cb532c2010-05-22 00:37:18 +0000582 Link(const ToolChain &TC) : Tool("auroraux::Link", "linker", TC) {}
Edward O'Callaghan856e4ff2009-08-22 01:06:46 +0000583
Edward O'Callaghan856e4ff2009-08-22 01:06:46 +0000584 virtual bool hasIntegratedCPP() const { return false; }
Chad Rosierbee5a1d2012-03-07 00:30:40 +0000585 virtual bool isLinkJob() const { return true; }
Edward O'Callaghan856e4ff2009-08-22 01:06:46 +0000586
587 virtual void ConstructJob(Compilation &C, const JobAction &JA,
Mike Stump11289f42009-09-09 15:08:12 +0000588 const InputInfo &Output,
589 const InputInfoList &Inputs,
590 const ArgList &TCArgs,
Edward O'Callaghan856e4ff2009-08-22 01:06:46 +0000591 const char *LinkingOutput) const;
592 };
593} // end namespace auroraux
Daniel Dunbar8eb473c2009-03-31 17:45:15 +0000594
Daniel Dunbarcc912342009-05-02 18:28:39 +0000595 /// dragonfly -- Directly call GNU Binutils assembler and linker
596namespace dragonfly {
Duncan Sandsaf260b92010-05-11 20:16:05 +0000597 class LLVM_LIBRARY_VISIBILITY Assemble : public Tool {
Daniel Dunbarcc912342009-05-02 18:28:39 +0000598 public:
Daniel Dunbar1cb532c2010-05-22 00:37:18 +0000599 Assemble(const ToolChain &TC) : Tool("dragonfly::Assemble", "assembler",
600 TC) {}
Daniel Dunbarcc912342009-05-02 18:28:39 +0000601
Daniel Dunbarcc912342009-05-02 18:28:39 +0000602 virtual bool hasIntegratedCPP() const { return false; }
603
604 virtual void ConstructJob(Compilation &C, const JobAction &JA,
Mike Stump11289f42009-09-09 15:08:12 +0000605 const InputInfo &Output,
606 const InputInfoList &Inputs,
607 const ArgList &TCArgs,
Daniel Dunbarcc912342009-05-02 18:28:39 +0000608 const char *LinkingOutput) const;
609 };
Duncan Sandsaf260b92010-05-11 20:16:05 +0000610 class LLVM_LIBRARY_VISIBILITY Link : public Tool {
Daniel Dunbarcc912342009-05-02 18:28:39 +0000611 public:
Daniel Dunbar1cb532c2010-05-22 00:37:18 +0000612 Link(const ToolChain &TC) : Tool("dragonfly::Link", "linker", TC) {}
Daniel Dunbarcc912342009-05-02 18:28:39 +0000613
Daniel Dunbarcc912342009-05-02 18:28:39 +0000614 virtual bool hasIntegratedCPP() const { return false; }
Chad Rosierbee5a1d2012-03-07 00:30:40 +0000615 virtual bool isLinkJob() const { return true; }
Daniel Dunbarcc912342009-05-02 18:28:39 +0000616
617 virtual void ConstructJob(Compilation &C, const JobAction &JA,
Mike Stump11289f42009-09-09 15:08:12 +0000618 const InputInfo &Output,
619 const InputInfoList &Inputs,
620 const ArgList &TCArgs,
Daniel Dunbarcc912342009-05-02 18:28:39 +0000621 const char *LinkingOutput) const;
622 };
Edward O'Callaghan856e4ff2009-08-22 01:06:46 +0000623} // end namespace dragonfly
Daniel Dunbarcc912342009-05-02 18:28:39 +0000624
Michael J. Spencerb186bc32010-08-21 21:55:07 +0000625 /// Visual studio tools.
626namespace visualstudio {
627 class LLVM_LIBRARY_VISIBILITY Link : public Tool {
628 public:
629 Link(const ToolChain &TC) : Tool("visualstudio::Link", "linker", TC) {}
630
631 virtual bool hasIntegratedCPP() const { return false; }
Chad Rosierbee5a1d2012-03-07 00:30:40 +0000632 virtual bool isLinkJob() const { return true; }
Michael J. Spencerb186bc32010-08-21 21:55:07 +0000633
634 virtual void ConstructJob(Compilation &C, const JobAction &JA,
635 const InputInfo &Output,
636 const InputInfoList &Inputs,
637 const ArgList &TCArgs,
638 const char *LinkingOutput) const;
639 };
640} // end namespace visualstudio
641
Daniel Dunbar5903d8c2009-03-17 22:07:58 +0000642} // end namespace toolchains
643} // end namespace driver
644} // end namespace clang
645
Edward O'Callaghan856e4ff2009-08-22 01:06:46 +0000646#endif // CLANG_LIB_DRIVER_TOOLS_H_