blob: 1dd4d5edfe324a98064b1134dc819589b7a96d25 [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:
Reid Klecknerdd0b3c42013-06-17 13:59:19 +000036 static const char *getBaseInputName(const llvm::opt::ArgList &Args,
Bob Wilson66b8a662012-11-23 06:14:39 +000037 const InputInfoList &Inputs);
Reid Klecknerdd0b3c42013-06-17 13:59:19 +000038 static const char *getBaseInputStem(const llvm::opt::ArgList &Args,
Bob Wilson66b8a662012-11-23 06:14:39 +000039 const InputInfoList &Inputs);
Reid Klecknerdd0b3c42013-06-17 13:59:19 +000040 static const char *getDependencyFileName(const llvm::opt::ArgList &Args,
Bob Wilson66b8a662012-11-23 06:14:39 +000041 const InputInfoList &Inputs);
42
Eric Christopher27e2b982012-12-18 00:31:10 +000043 private:
Reid Klecknerdd0b3c42013-06-17 13:59:19 +000044 void AddPreprocessingOptions(Compilation &C, const JobAction &JA,
Peter Collingbourne54db68b2011-11-06 00:40:05 +000045 const Driver &D,
Reid Klecknerdd0b3c42013-06-17 13:59:19 +000046 const llvm::opt::ArgList &Args,
47 llvm::opt::ArgStringList &CmdArgs,
Daniel Dunbarc21c4852009-04-08 23:54:23 +000048 const InputInfo &Output,
49 const InputInfoList &Inputs) const;
50
Reid Klecknerdd0b3c42013-06-17 13:59:19 +000051 void AddARMTargetArgs(const llvm::opt::ArgList &Args,
52 llvm::opt::ArgStringList &CmdArgs,
Daniel Dunbarfa41d692011-03-17 17:10:06 +000053 bool KernelOrKext) const;
Reid Klecknerdd0b3c42013-06-17 13:59:19 +000054 void AddMIPSTargetArgs(const llvm::opt::ArgList &Args,
55 llvm::opt::ArgStringList &CmdArgs) const;
56 void AddPPCTargetArgs(const llvm::opt::ArgList &Args,
57 llvm::opt::ArgStringList &CmdArgs) const;
58 void AddR600TargetArgs(const llvm::opt::ArgList &Args,
59 llvm::opt::ArgStringList &CmdArgs) const;
60 void AddSparcTargetArgs(const llvm::opt::ArgList &Args,
61 llvm::opt::ArgStringList &CmdArgs) const;
Richard Sandiford5c92b9a2013-07-19 16:51:51 +000062 void AddSystemZTargetArgs(const llvm::opt::ArgList &Args,
63 llvm::opt::ArgStringList &CmdArgs) const;
Reid Klecknerdd0b3c42013-06-17 13:59:19 +000064 void AddX86TargetArgs(const llvm::opt::ArgList &Args,
65 llvm::opt::ArgStringList &CmdArgs) const;
66 void AddHexagonTargetArgs(const llvm::opt::ArgList &Args,
67 llvm::opt::ArgStringList &CmdArgs) const;
Daniel Dunbar6acda162009-09-09 22:33:08 +000068
John McCall260611a2012-06-20 06:18:46 +000069 enum RewriteKind { RK_None, RK_Fragile, RK_NonFragile };
70
Reid Klecknerdd0b3c42013-06-17 13:59:19 +000071 ObjCRuntime AddObjCRuntimeArgs(const llvm::opt::ArgList &args,
72 llvm::opt::ArgStringList &cmdArgs,
John McCall260611a2012-06-20 06:18:46 +000073 RewriteKind rewrite) const;
74
Daniel Dunbar9c073ff2009-03-17 22:07:58 +000075 public:
Daniel Dunbar30382042010-05-22 00:37:18 +000076 Clang(const ToolChain &TC) : Tool("clang", "clang frontend", TC) {}
Daniel Dunbar9c073ff2009-03-17 22:07:58 +000077
Daniel Dunbar60a53f22010-04-06 17:07:49 +000078 virtual bool hasGoodDiagnostics() const { return true; }
Daniel Dunbar8767cbc2010-02-03 03:07:56 +000079 virtual bool hasIntegratedAssembler() const { return true; }
Daniel Dunbar9c073ff2009-03-17 22:07:58 +000080 virtual bool hasIntegratedCPP() const { return true; }
Daniel Dunbar47ac7d22009-03-18 06:00:36 +000081
82 virtual void ConstructJob(Compilation &C, const JobAction &JA,
Mike Stump1eb44332009-09-09 15:08:12 +000083 const InputInfo &Output,
84 const InputInfoList &Inputs,
Reid Klecknerdd0b3c42013-06-17 13:59:19 +000085 const llvm::opt::ArgList &TCArgs,
Daniel Dunbar47ac7d22009-03-18 06:00:36 +000086 const char *LinkingOutput) const;
Daniel Dunbar9c073ff2009-03-17 22:07:58 +000087 };
88
Daniel Dunbar20a9aa52010-05-20 21:30:13 +000089 /// \brief Clang integrated assembler tool.
90 class LLVM_LIBRARY_VISIBILITY ClangAs : public Tool {
Reid Klecknerdd0b3c42013-06-17 13:59:19 +000091 void AddARMTargetArgs(const llvm::opt::ArgList &Args,
92 llvm::opt::ArgStringList &CmdArgs) const;
93 void AddX86TargetArgs(const llvm::opt::ArgList &Args,
94 llvm::opt::ArgStringList &CmdArgs) const;
95
Daniel Dunbar20a9aa52010-05-20 21:30:13 +000096 public:
Daniel Dunbar30382042010-05-22 00:37:18 +000097 ClangAs(const ToolChain &TC) : Tool("clang::as",
98 "clang integrated assembler", TC) {}
Daniel Dunbar20a9aa52010-05-20 21:30:13 +000099
Daniel Dunbar20a9aa52010-05-20 21:30:13 +0000100 virtual bool hasGoodDiagnostics() const { return true; }
101 virtual bool hasIntegratedAssembler() const { return false; }
102 virtual bool hasIntegratedCPP() const { return false; }
103
104 virtual void ConstructJob(Compilation &C, const JobAction &JA,
Daniel Dunbar20a9aa52010-05-20 21:30:13 +0000105 const InputInfo &Output,
106 const InputInfoList &Inputs,
Reid Klecknerdd0b3c42013-06-17 13:59:19 +0000107 const llvm::opt::ArgList &TCArgs,
Daniel Dunbar20a9aa52010-05-20 21:30:13 +0000108 const char *LinkingOutput) const;
109 };
110
Daniel Dunbar31b1e542009-03-17 22:45:24 +0000111 /// gcc - Generic GCC tool implementations.
112namespace gcc {
Duncan Sands92dd1912010-05-11 20:16:05 +0000113 class LLVM_LIBRARY_VISIBILITY Common : public Tool {
Daniel Dunbar9c073ff2009-03-17 22:07:58 +0000114 public:
Daniel Dunbar30382042010-05-22 00:37:18 +0000115 Common(const char *Name, const char *ShortName,
116 const ToolChain &TC) : Tool(Name, ShortName, TC) {}
Daniel Dunbarb488c1d2009-03-18 08:07:30 +0000117
118 virtual void ConstructJob(Compilation &C, const JobAction &JA,
Mike Stump1eb44332009-09-09 15:08:12 +0000119 const InputInfo &Output,
120 const InputInfoList &Inputs,
Reid Klecknerdd0b3c42013-06-17 13:59:19 +0000121 const llvm::opt::ArgList &TCArgs,
Daniel Dunbarb488c1d2009-03-18 08:07:30 +0000122 const char *LinkingOutput) const;
123
124 /// RenderExtraToolArgs - Render any arguments necessary to force
125 /// the particular tool mode.
Reid Klecknerdd0b3c42013-06-17 13:59:19 +0000126 virtual void
127 RenderExtraToolArgs(const JobAction &JA,
128 llvm::opt::ArgStringList &CmdArgs) const = 0;
Daniel Dunbarb488c1d2009-03-18 08:07:30 +0000129 };
130
Duncan Sands92dd1912010-05-11 20:16:05 +0000131 class LLVM_LIBRARY_VISIBILITY Preprocess : public Common {
Daniel Dunbarb488c1d2009-03-18 08:07:30 +0000132 public:
Daniel Dunbar30382042010-05-22 00:37:18 +0000133 Preprocess(const ToolChain &TC) : Common("gcc::Preprocess",
134 "gcc preprocessor", 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 false; }
Daniel Dunbar47ac7d22009-03-18 06:00:36 +0000138
Daniel Dunbar82b51cc2010-01-25 22:35:08 +0000139 virtual void RenderExtraToolArgs(const JobAction &JA,
Reid Klecknerdd0b3c42013-06-17 13:59:19 +0000140 llvm::opt::ArgStringList &CmdArgs) const;
Daniel Dunbar9c073ff2009-03-17 22:07:58 +0000141 };
142
Duncan Sands92dd1912010-05-11 20:16:05 +0000143 class LLVM_LIBRARY_VISIBILITY Precompile : public Common {
Daniel Dunbar9c073ff2009-03-17 22:07:58 +0000144 public:
Daniel Dunbar30382042010-05-22 00:37:18 +0000145 Precompile(const ToolChain &TC) : Common("gcc::Precompile",
146 "gcc precompile", 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,
Reid Klecknerdd0b3c42013-06-17 13:59:19 +0000152 llvm::opt::ArgStringList &CmdArgs) const;
Daniel Dunbar9c073ff2009-03-17 22:07:58 +0000153 };
154
Duncan Sands92dd1912010-05-11 20:16:05 +0000155 class LLVM_LIBRARY_VISIBILITY Compile : public Common {
Daniel Dunbar9c073ff2009-03-17 22:07:58 +0000156 public:
Daniel Dunbar30382042010-05-22 00:37:18 +0000157 Compile(const ToolChain &TC) : Common("gcc::Compile",
158 "gcc frontend", TC) {}
Daniel Dunbar9c073ff2009-03-17 22:07:58 +0000159
Daniel Dunbar60a53f22010-04-06 17:07:49 +0000160 virtual bool hasGoodDiagnostics() const { return true; }
Daniel Dunbar9c073ff2009-03-17 22:07:58 +0000161 virtual bool hasIntegratedCPP() const { return true; }
Daniel Dunbar47ac7d22009-03-18 06:00:36 +0000162
Daniel Dunbar82b51cc2010-01-25 22:35:08 +0000163 virtual void RenderExtraToolArgs(const JobAction &JA,
Reid Klecknerdd0b3c42013-06-17 13:59:19 +0000164 llvm::opt::ArgStringList &CmdArgs) const;
Daniel Dunbar9c073ff2009-03-17 22:07:58 +0000165 };
166
Duncan Sands92dd1912010-05-11 20:16:05 +0000167 class LLVM_LIBRARY_VISIBILITY Assemble : public Common {
Daniel Dunbar9c073ff2009-03-17 22:07:58 +0000168 public:
Daniel Dunbar30382042010-05-22 00:37:18 +0000169 Assemble(const ToolChain &TC) : Common("gcc::Assemble",
170 "assembler (via gcc)", TC) {}
Daniel Dunbar9c073ff2009-03-17 22:07:58 +0000171
Daniel Dunbar9c073ff2009-03-17 22:07:58 +0000172 virtual bool hasIntegratedCPP() const { return false; }
Daniel Dunbar47ac7d22009-03-18 06:00:36 +0000173
Daniel Dunbar82b51cc2010-01-25 22:35:08 +0000174 virtual void RenderExtraToolArgs(const JobAction &JA,
Reid Klecknerdd0b3c42013-06-17 13:59:19 +0000175 llvm::opt::ArgStringList &CmdArgs) const;
Daniel Dunbar9c073ff2009-03-17 22:07:58 +0000176 };
177
Duncan Sands92dd1912010-05-11 20:16:05 +0000178 class LLVM_LIBRARY_VISIBILITY Link : public Common {
Daniel Dunbar9c073ff2009-03-17 22:07:58 +0000179 public:
Daniel Dunbar30382042010-05-22 00:37:18 +0000180 Link(const ToolChain &TC) : Common("gcc::Link",
181 "linker (via gcc)", TC) {}
Daniel Dunbar9c073ff2009-03-17 22:07:58 +0000182
Daniel Dunbar9c073ff2009-03-17 22:07:58 +0000183 virtual bool hasIntegratedCPP() const { return false; }
Chad Rosier8ba9a622012-03-07 00:30:40 +0000184 virtual bool isLinkJob() const { return true; }
Daniel Dunbar47ac7d22009-03-18 06:00:36 +0000185
Daniel Dunbar82b51cc2010-01-25 22:35:08 +0000186 virtual void RenderExtraToolArgs(const JobAction &JA,
Reid Klecknerdd0b3c42013-06-17 13:59:19 +0000187 llvm::opt::ArgStringList &CmdArgs) const;
Daniel Dunbar9c073ff2009-03-17 22:07:58 +0000188 };
Daniel Dunbar31b1e542009-03-17 22:45:24 +0000189} // end namespace gcc
Daniel Dunbar9c073ff2009-03-17 22:07:58 +0000190
Tony Linthicum96319392011-12-12 21:14:55 +0000191namespace hexagon {
192 // For Hexagon, we do not need to instantiate tools for PreProcess, PreCompile and Compile.
193 // We simply use "clang -cc1" for those actions.
194 class LLVM_LIBRARY_VISIBILITY Assemble : public Tool {
195 public:
196 Assemble(const ToolChain &TC) : Tool("hexagon::Assemble",
197 "hexagon-as", TC) {}
198
199 virtual bool hasIntegratedCPP() const { return false; }
200
201 virtual void RenderExtraToolArgs(const JobAction &JA,
Reid Klecknerdd0b3c42013-06-17 13:59:19 +0000202 llvm::opt::ArgStringList &CmdArgs) const;
Tony Linthicum96319392011-12-12 21:14:55 +0000203 virtual void ConstructJob(Compilation &C, const JobAction &JA,
204 const InputInfo &Output,
205 const InputInfoList &Inputs,
Reid Klecknerdd0b3c42013-06-17 13:59:19 +0000206 const llvm::opt::ArgList &TCArgs,
Tony Linthicum96319392011-12-12 21:14:55 +0000207 const char *LinkingOutput) const;
208 };
209
210 class LLVM_LIBRARY_VISIBILITY Link : public Tool {
211 public:
212 Link(const ToolChain &TC) : Tool("hexagon::Link",
213 "hexagon-ld", TC) {}
214
215 virtual bool hasIntegratedCPP() const { return false; }
Chad Rosier8ba9a622012-03-07 00:30:40 +0000216 virtual bool isLinkJob() const { return true; }
Tony Linthicum96319392011-12-12 21:14:55 +0000217
218 virtual void RenderExtraToolArgs(const JobAction &JA,
Reid Klecknerdd0b3c42013-06-17 13:59:19 +0000219 llvm::opt::ArgStringList &CmdArgs) const;
Tony Linthicum96319392011-12-12 21:14:55 +0000220 virtual void ConstructJob(Compilation &C, const JobAction &JA,
221 const InputInfo &Output,
222 const InputInfoList &Inputs,
Reid Klecknerdd0b3c42013-06-17 13:59:19 +0000223 const llvm::opt::ArgList &TCArgs,
Tony Linthicum96319392011-12-12 21:14:55 +0000224 const char *LinkingOutput) const;
225 };
226} // end namespace hexagon.
227
228
Daniel Dunbarff7488d2009-03-20 00:52:38 +0000229namespace darwin {
Rafael Espindolacfed8282012-10-31 18:51:07 +0000230 llvm::Triple::ArchType getArchTypeForDarwinArchName(StringRef Str);
231
Duncan Sands92dd1912010-05-11 20:16:05 +0000232 class LLVM_LIBRARY_VISIBILITY DarwinTool : public Tool {
David Blaikie99ba9e32011-12-20 02:48:34 +0000233 virtual void anchor();
Daniel Dunbarfbefe6b2009-09-09 18:36:20 +0000234 protected:
Reid Klecknerdd0b3c42013-06-17 13:59:19 +0000235 void AddDarwinArch(const llvm::opt::ArgList &Args,
236 llvm::opt::ArgStringList &CmdArgs) const;
Daniel Dunbarfbefe6b2009-09-09 18:36:20 +0000237
238 const toolchains::Darwin &getDarwinToolChain() const {
239 return reinterpret_cast<const toolchains::Darwin&>(getToolChain());
240 }
241
242 public:
Daniel Dunbar30382042010-05-22 00:37:18 +0000243 DarwinTool(const char *Name, const char *ShortName,
244 const ToolChain &TC) : Tool(Name, ShortName, TC) {}
Daniel Dunbarfbefe6b2009-09-09 18:36:20 +0000245 };
246
Duncan Sands92dd1912010-05-11 20:16:05 +0000247 class LLVM_LIBRARY_VISIBILITY Assemble : public DarwinTool {
Daniel Dunbar8cac5f72009-03-20 16:06:39 +0000248 public:
Daniel Dunbar30382042010-05-22 00:37:18 +0000249 Assemble(const ToolChain &TC) : DarwinTool("darwin::Assemble",
250 "assembler", TC) {}
Daniel Dunbar8cac5f72009-03-20 16:06:39 +0000251
Daniel Dunbar8cac5f72009-03-20 16:06:39 +0000252 virtual bool hasIntegratedCPP() const { return false; }
253
254 virtual void ConstructJob(Compilation &C, const JobAction &JA,
Mike Stump1eb44332009-09-09 15:08:12 +0000255 const InputInfo &Output,
256 const InputInfoList &Inputs,
Reid Klecknerdd0b3c42013-06-17 13:59:19 +0000257 const llvm::opt::ArgList &TCArgs,
Daniel Dunbar8cac5f72009-03-20 16:06:39 +0000258 const char *LinkingOutput) const;
259 };
260
Duncan Sands92dd1912010-05-11 20:16:05 +0000261 class LLVM_LIBRARY_VISIBILITY Link : public DarwinTool {
Bill Wendling6acf8b42012-10-02 18:02:50 +0000262 bool NeedsTempPath(const InputInfoList &Inputs) const;
Reid Klecknerdd0b3c42013-06-17 13:59:19 +0000263 void AddLinkArgs(Compilation &C, const llvm::opt::ArgList &Args,
264 llvm::opt::ArgStringList &CmdArgs,
265 const InputInfoList &Inputs) const;
Daniel Dunbar02633b52009-03-26 16:23:12 +0000266
Daniel Dunbar02633b52009-03-26 16:23:12 +0000267 public:
Daniel Dunbar30382042010-05-22 00:37:18 +0000268 Link(const ToolChain &TC) : DarwinTool("darwin::Link", "linker", TC) {}
Daniel Dunbar02633b52009-03-26 16:23:12 +0000269
Daniel Dunbar02633b52009-03-26 16:23:12 +0000270 virtual bool hasIntegratedCPP() const { return false; }
Chad Rosier8ba9a622012-03-07 00:30:40 +0000271 virtual bool isLinkJob() const { return true; }
Daniel Dunbar02633b52009-03-26 16:23:12 +0000272
273 virtual void ConstructJob(Compilation &C, const JobAction &JA,
Mike Stump1eb44332009-09-09 15:08:12 +0000274 const InputInfo &Output,
275 const InputInfoList &Inputs,
Reid Klecknerdd0b3c42013-06-17 13:59:19 +0000276 const llvm::opt::ArgList &TCArgs,
Daniel Dunbar02633b52009-03-26 16:23:12 +0000277 const char *LinkingOutput) const;
278 };
279
Duncan Sands92dd1912010-05-11 20:16:05 +0000280 class LLVM_LIBRARY_VISIBILITY Lipo : public DarwinTool {
Daniel Dunbarff7488d2009-03-20 00:52:38 +0000281 public:
Daniel Dunbar30382042010-05-22 00:37:18 +0000282 Lipo(const ToolChain &TC) : DarwinTool("darwin::Lipo", "lipo", TC) {}
Daniel Dunbarff7488d2009-03-20 00:52:38 +0000283
Daniel Dunbarff7488d2009-03-20 00:52:38 +0000284 virtual bool hasIntegratedCPP() const { return false; }
285
286 virtual void ConstructJob(Compilation &C, const JobAction &JA,
Mike Stump1eb44332009-09-09 15:08:12 +0000287 const InputInfo &Output,
288 const InputInfoList &Inputs,
Reid Klecknerdd0b3c42013-06-17 13:59:19 +0000289 const llvm::opt::ArgList &TCArgs,
Daniel Dunbarff7488d2009-03-20 00:52:38 +0000290 const char *LinkingOutput) const;
291 };
Daniel Dunbar6e0f2542010-06-04 18:28:36 +0000292
293 class LLVM_LIBRARY_VISIBILITY Dsymutil : public DarwinTool {
294 public:
295 Dsymutil(const ToolChain &TC) : DarwinTool("darwin::Dsymutil",
296 "dsymutil", TC) {}
297
Daniel Dunbar6e0f2542010-06-04 18:28:36 +0000298 virtual bool hasIntegratedCPP() const { return false; }
Chad Rosier75dbc712013-02-01 18:30:26 +0000299 virtual bool isDsymutilJob() const { return true; }
Daniel Dunbar6e0f2542010-06-04 18:28:36 +0000300
301 virtual void ConstructJob(Compilation &C, const JobAction &JA,
Daniel Dunbar6e0f2542010-06-04 18:28:36 +0000302 const InputInfo &Output,
303 const InputInfoList &Inputs,
Reid Klecknerdd0b3c42013-06-17 13:59:19 +0000304 const llvm::opt::ArgList &TCArgs,
Daniel Dunbar6e0f2542010-06-04 18:28:36 +0000305 const char *LinkingOutput) const;
306 };
Eric Christopherf8571862011-08-23 17:56:55 +0000307
308 class LLVM_LIBRARY_VISIBILITY VerifyDebug : public DarwinTool {
309 public:
310 VerifyDebug(const ToolChain &TC) : DarwinTool("darwin::VerifyDebug",
Eric Christopher27e2b982012-12-18 00:31:10 +0000311 "dwarfdump", TC) {}
Eric Christopherf8571862011-08-23 17:56:55 +0000312
313 virtual bool hasIntegratedCPP() const { return false; }
314
315 virtual void ConstructJob(Compilation &C, const JobAction &JA,
Eric Christopher27e2b982012-12-18 00:31:10 +0000316 const InputInfo &Output,
317 const InputInfoList &Inputs,
Reid Klecknerdd0b3c42013-06-17 13:59:19 +0000318 const llvm::opt::ArgList &TCArgs,
Eric Christopher27e2b982012-12-18 00:31:10 +0000319 const char *LinkingOutput) const;
Eric Christopherf8571862011-08-23 17:56:55 +0000320 };
321
Daniel Dunbarff7488d2009-03-20 00:52:38 +0000322}
323
Daniel Dunbarf7b8eec2009-06-29 20:52:51 +0000324 /// openbsd -- Directly call GNU Binutils assembler and linker
325namespace openbsd {
Duncan Sands92dd1912010-05-11 20:16:05 +0000326 class LLVM_LIBRARY_VISIBILITY Assemble : public Tool {
Daniel Dunbarf7b8eec2009-06-29 20:52:51 +0000327 public:
Daniel Dunbar30382042010-05-22 00:37:18 +0000328 Assemble(const ToolChain &TC) : Tool("openbsd::Assemble", "assembler",
329 TC) {}
Daniel Dunbarf7b8eec2009-06-29 20:52:51 +0000330
Daniel Dunbarf7b8eec2009-06-29 20:52:51 +0000331 virtual bool hasIntegratedCPP() const { return false; }
332
333 virtual void ConstructJob(Compilation &C, const JobAction &JA,
Mike Stump1eb44332009-09-09 15:08:12 +0000334 const InputInfo &Output,
335 const InputInfoList &Inputs,
Reid Klecknerdd0b3c42013-06-17 13:59:19 +0000336 const llvm::opt::ArgList &TCArgs,
Daniel Dunbarf7b8eec2009-06-29 20:52:51 +0000337 const char *LinkingOutput) const;
338 };
Duncan Sands92dd1912010-05-11 20:16:05 +0000339 class LLVM_LIBRARY_VISIBILITY Link : public Tool {
Daniel Dunbarf7b8eec2009-06-29 20:52:51 +0000340 public:
Daniel Dunbar30382042010-05-22 00:37:18 +0000341 Link(const ToolChain &TC) : Tool("openbsd::Link", "linker", TC) {}
Daniel Dunbarf7b8eec2009-06-29 20:52:51 +0000342
Daniel Dunbarf7b8eec2009-06-29 20:52:51 +0000343 virtual bool hasIntegratedCPP() const { return false; }
Chad Rosier8ba9a622012-03-07 00:30:40 +0000344 virtual bool isLinkJob() const { return true; }
Daniel Dunbarf7b8eec2009-06-29 20:52:51 +0000345
346 virtual void ConstructJob(Compilation &C, const JobAction &JA,
Mike Stump1eb44332009-09-09 15:08:12 +0000347 const InputInfo &Output,
348 const InputInfoList &Inputs,
Reid Klecknerdd0b3c42013-06-17 13:59:19 +0000349 const llvm::opt::ArgList &TCArgs,
Daniel Dunbarf7b8eec2009-06-29 20:52:51 +0000350 const char *LinkingOutput) const;
351 };
Edward O'Callaghane7925a02009-08-22 01:06:46 +0000352} // end namespace openbsd
Daniel Dunbarf7b8eec2009-06-29 20:52:51 +0000353
Eli Friedman42f74f22012-08-08 23:57:20 +0000354 /// bitrig -- Directly call GNU Binutils assembler and linker
355namespace bitrig {
356 class LLVM_LIBRARY_VISIBILITY Assemble : public Tool {
357 public:
358 Assemble(const ToolChain &TC) : Tool("bitrig::Assemble", "assembler",
359 TC) {}
360
361 virtual bool hasIntegratedCPP() const { return false; }
362
363 virtual void ConstructJob(Compilation &C, const JobAction &JA,
364 const InputInfo &Output,
365 const InputInfoList &Inputs,
Reid Klecknerdd0b3c42013-06-17 13:59:19 +0000366 const llvm::opt::ArgList &TCArgs,
Eli Friedman42f74f22012-08-08 23:57:20 +0000367 const char *LinkingOutput) const;
368 };
369 class LLVM_LIBRARY_VISIBILITY Link : public Tool {
370 public:
371 Link(const ToolChain &TC) : Tool("bitrig::Link", "linker", TC) {}
372
373 virtual bool hasIntegratedCPP() const { return false; }
374 virtual bool isLinkJob() const { return true; }
375
376 virtual void ConstructJob(Compilation &C, const JobAction &JA,
377 const InputInfo &Output,
378 const InputInfoList &Inputs,
Reid Klecknerdd0b3c42013-06-17 13:59:19 +0000379 const llvm::opt::ArgList &TCArgs,
Eli Friedman42f74f22012-08-08 23:57:20 +0000380 const char *LinkingOutput) const;
381 };
382} // end namespace bitrig
383
Daniel Dunbar68a31d42009-03-31 17:45:15 +0000384 /// freebsd -- Directly call GNU Binutils assembler and linker
385namespace freebsd {
Duncan Sands92dd1912010-05-11 20:16:05 +0000386 class LLVM_LIBRARY_VISIBILITY Assemble : public Tool {
Daniel Dunbar68a31d42009-03-31 17:45:15 +0000387 public:
Daniel Dunbar30382042010-05-22 00:37:18 +0000388 Assemble(const ToolChain &TC) : Tool("freebsd::Assemble", "assembler",
389 TC) {}
Daniel Dunbar68a31d42009-03-31 17:45:15 +0000390
Daniel Dunbar68a31d42009-03-31 17:45:15 +0000391 virtual bool hasIntegratedCPP() const { return false; }
392
393 virtual void ConstructJob(Compilation &C, const JobAction &JA,
Mike Stump1eb44332009-09-09 15:08:12 +0000394 const InputInfo &Output,
395 const InputInfoList &Inputs,
Reid Klecknerdd0b3c42013-06-17 13:59:19 +0000396 const llvm::opt::ArgList &TCArgs,
Daniel Dunbar68a31d42009-03-31 17:45:15 +0000397 const char *LinkingOutput) const;
398 };
Duncan Sands92dd1912010-05-11 20:16:05 +0000399 class LLVM_LIBRARY_VISIBILITY Link : public Tool {
Daniel Dunbar008f54a2009-04-01 19:36:32 +0000400 public:
Daniel Dunbar30382042010-05-22 00:37:18 +0000401 Link(const ToolChain &TC) : Tool("freebsd::Link", "linker", TC) {}
Daniel Dunbar008f54a2009-04-01 19:36:32 +0000402
Daniel Dunbar008f54a2009-04-01 19:36:32 +0000403 virtual bool hasIntegratedCPP() const { return false; }
Chad Rosier8ba9a622012-03-07 00:30:40 +0000404 virtual bool isLinkJob() const { return true; }
Daniel Dunbar008f54a2009-04-01 19:36:32 +0000405
406 virtual void ConstructJob(Compilation &C, const JobAction &JA,
Mike Stump1eb44332009-09-09 15:08:12 +0000407 const InputInfo &Output,
408 const InputInfoList &Inputs,
Reid Klecknerdd0b3c42013-06-17 13:59:19 +0000409 const llvm::opt::ArgList &TCArgs,
Daniel Dunbar008f54a2009-04-01 19:36:32 +0000410 const char *LinkingOutput) const;
411 };
Edward O'Callaghane7925a02009-08-22 01:06:46 +0000412} // end namespace freebsd
413
Benjamin Kramer8e50a962011-02-02 18:59:27 +0000414 /// netbsd -- Directly call GNU Binutils assembler and linker
415namespace netbsd {
416 class LLVM_LIBRARY_VISIBILITY Assemble : 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 Assemble(const ToolChain &TC)
420 : Tool("netbsd::Assemble", "assembler", TC) {}
Benjamin Kramer8e50a962011-02-02 18:59:27 +0000421
422 virtual bool hasIntegratedCPP() const { return false; }
423
424 virtual void ConstructJob(Compilation &C, const JobAction &JA,
425 const InputInfo &Output,
426 const InputInfoList &Inputs,
Reid Klecknerdd0b3c42013-06-17 13:59:19 +0000427 const llvm::opt::ArgList &TCArgs,
Benjamin Kramer8e50a962011-02-02 18:59:27 +0000428 const char *LinkingOutput) const;
429 };
430 class LLVM_LIBRARY_VISIBILITY Link : public Tool {
Joerg Sonnenberger182564c2011-05-16 13:35:02 +0000431
Benjamin Kramer8e50a962011-02-02 18:59:27 +0000432 public:
Joerg Sonnenberger1bd91372012-01-26 22:27:52 +0000433 Link(const ToolChain &TC)
434 : Tool("netbsd::Link", "linker", TC) {}
Benjamin Kramer8e50a962011-02-02 18:59:27 +0000435
436 virtual bool hasIntegratedCPP() const { return false; }
Chad Rosier8ba9a622012-03-07 00:30:40 +0000437 virtual bool isLinkJob() const { return true; }
Benjamin Kramer8e50a962011-02-02 18:59:27 +0000438
439 virtual void ConstructJob(Compilation &C, const JobAction &JA,
440 const InputInfo &Output,
441 const InputInfoList &Inputs,
Reid Klecknerdd0b3c42013-06-17 13:59:19 +0000442 const llvm::opt::ArgList &TCArgs,
Benjamin Kramer8e50a962011-02-02 18:59:27 +0000443 const char *LinkingOutput) const;
444 };
445} // end namespace netbsd
446
Thomas Schwinge577bb0a2013-03-28 19:04:25 +0000447 /// Directly call GNU Binutils' assembler and linker.
448namespace gnutools {
Rafael Espindolaba30bbe2010-08-10 00:25:48 +0000449 class LLVM_LIBRARY_VISIBILITY Assemble : public Tool {
450 public:
Thomas Schwinge577bb0a2013-03-28 19:04:25 +0000451 Assemble(const ToolChain &TC) : Tool("GNU::Assemble", "assembler", TC) {}
Rafael Espindolaba30bbe2010-08-10 00:25:48 +0000452
453 virtual bool hasIntegratedCPP() const { return false; }
454
455 virtual void ConstructJob(Compilation &C, const JobAction &JA,
456 const InputInfo &Output,
457 const InputInfoList &Inputs,
Reid Klecknerdd0b3c42013-06-17 13:59:19 +0000458 const llvm::opt::ArgList &TCArgs,
Rafael Espindolaba30bbe2010-08-10 00:25:48 +0000459 const char *LinkingOutput) const;
460 };
Rafael Espindolac1da9812010-11-07 20:14:31 +0000461 class LLVM_LIBRARY_VISIBILITY Link : public Tool {
462 public:
Thomas Schwinge577bb0a2013-03-28 19:04:25 +0000463 Link(const ToolChain &TC) : Tool("GNU::Link", "linker", TC) {}
Rafael Espindolac1da9812010-11-07 20:14:31 +0000464
465 virtual bool hasIntegratedCPP() const { return false; }
Chad Rosier8ba9a622012-03-07 00:30:40 +0000466 virtual bool isLinkJob() const { return true; }
Rafael Espindolac1da9812010-11-07 20:14:31 +0000467
468 virtual void ConstructJob(Compilation &C, const JobAction &JA,
469 const InputInfo &Output,
470 const InputInfoList &Inputs,
Reid Klecknerdd0b3c42013-06-17 13:59:19 +0000471 const llvm::opt::ArgList &TCArgs,
Rafael Espindolac1da9812010-11-07 20:14:31 +0000472 const char *LinkingOutput) const;
473 };
Rafael Espindolaba30bbe2010-08-10 00:25:48 +0000474}
Chris Lattner38e317d2010-07-07 16:01:42 +0000475 /// minix -- Directly call GNU Binutils assembler and linker
476namespace minix {
477 class LLVM_LIBRARY_VISIBILITY Assemble : public Tool {
478 public:
479 Assemble(const ToolChain &TC) : Tool("minix::Assemble", "assembler",
480 TC) {}
481
Chris Lattner38e317d2010-07-07 16:01:42 +0000482 virtual bool hasIntegratedCPP() const { return false; }
483
484 virtual void ConstructJob(Compilation &C, const JobAction &JA,
Chris Lattner38e317d2010-07-07 16:01:42 +0000485 const InputInfo &Output,
486 const InputInfoList &Inputs,
Reid Klecknerdd0b3c42013-06-17 13:59:19 +0000487 const llvm::opt::ArgList &TCArgs,
Chris Lattner38e317d2010-07-07 16:01:42 +0000488 const char *LinkingOutput) const;
489 };
490 class LLVM_LIBRARY_VISIBILITY Link : public Tool {
491 public:
492 Link(const ToolChain &TC) : Tool("minix::Link", "linker", TC) {}
493
Chris Lattner38e317d2010-07-07 16:01:42 +0000494 virtual bool hasIntegratedCPP() const { return false; }
Chad Rosier8ba9a622012-03-07 00:30:40 +0000495 virtual bool isLinkJob() const { return true; }
Chris Lattner38e317d2010-07-07 16:01:42 +0000496
497 virtual void ConstructJob(Compilation &C, const JobAction &JA,
Chris Lattner38e317d2010-07-07 16:01:42 +0000498 const InputInfo &Output,
499 const InputInfoList &Inputs,
Reid Klecknerdd0b3c42013-06-17 13:59:19 +0000500 const llvm::opt::ArgList &TCArgs,
Chris Lattner38e317d2010-07-07 16:01:42 +0000501 const char *LinkingOutput) const;
502 };
503} // end namespace minix
504
David Chisnall31c46902012-02-15 13:39:01 +0000505 /// solaris -- Directly call Solaris assembler and linker
506namespace solaris {
507 class LLVM_LIBRARY_VISIBILITY Assemble : public Tool {
508 public:
509 Assemble(const ToolChain &TC) : Tool("solaris::Assemble", "assembler",
510 TC) {}
511
512 virtual bool hasIntegratedCPP() const { return false; }
513
514 virtual void ConstructJob(Compilation &C, const JobAction &JA,
515 const InputInfo &Output,
516 const InputInfoList &Inputs,
Reid Klecknerdd0b3c42013-06-17 13:59:19 +0000517 const llvm::opt::ArgList &TCArgs,
David Chisnall31c46902012-02-15 13:39:01 +0000518 const char *LinkingOutput) const;
519 };
520 class LLVM_LIBRARY_VISIBILITY Link : public Tool {
521 public:
522 Link(const ToolChain &TC) : Tool("solaris::Link", "linker", TC) {}
523
524 virtual bool hasIntegratedCPP() const { return false; }
Chad Rosier8ba9a622012-03-07 00:30:40 +0000525 virtual bool isLinkJob() const { return true; }
David Chisnall31c46902012-02-15 13:39:01 +0000526
527 virtual void ConstructJob(Compilation &C, const JobAction &JA,
528 const InputInfo &Output,
529 const InputInfoList &Inputs,
Reid Klecknerdd0b3c42013-06-17 13:59:19 +0000530 const llvm::opt::ArgList &TCArgs,
David Chisnall31c46902012-02-15 13:39:01 +0000531 const char *LinkingOutput) const;
532 };
David Chisnallbadb6cd2012-02-15 16:25:46 +0000533} // end namespace solaris
David Chisnall31c46902012-02-15 13:39:01 +0000534
Edward O'Callaghane7925a02009-08-22 01:06:46 +0000535 /// auroraux -- Directly call GNU Binutils assembler and linker
536namespace auroraux {
Duncan Sands92dd1912010-05-11 20:16:05 +0000537 class LLVM_LIBRARY_VISIBILITY Assemble : public Tool {
Edward O'Callaghane7925a02009-08-22 01:06:46 +0000538 public:
Daniel Dunbar30382042010-05-22 00:37:18 +0000539 Assemble(const ToolChain &TC) : Tool("auroraux::Assemble", "assembler",
540 TC) {}
Edward O'Callaghane7925a02009-08-22 01:06:46 +0000541
Edward O'Callaghane7925a02009-08-22 01:06:46 +0000542 virtual bool hasIntegratedCPP() const { return false; }
543
544 virtual void ConstructJob(Compilation &C, const JobAction &JA,
Mike Stump1eb44332009-09-09 15:08:12 +0000545 const InputInfo &Output,
546 const InputInfoList &Inputs,
Reid Klecknerdd0b3c42013-06-17 13:59:19 +0000547 const llvm::opt::ArgList &TCArgs,
Edward O'Callaghane7925a02009-08-22 01:06:46 +0000548 const char *LinkingOutput) const;
549 };
Duncan Sands92dd1912010-05-11 20:16:05 +0000550 class LLVM_LIBRARY_VISIBILITY Link : public Tool {
Edward O'Callaghane7925a02009-08-22 01:06:46 +0000551 public:
Daniel Dunbar30382042010-05-22 00:37:18 +0000552 Link(const ToolChain &TC) : Tool("auroraux::Link", "linker", TC) {}
Edward O'Callaghane7925a02009-08-22 01:06:46 +0000553
Edward O'Callaghane7925a02009-08-22 01:06:46 +0000554 virtual bool hasIntegratedCPP() const { return false; }
Chad Rosier8ba9a622012-03-07 00:30:40 +0000555 virtual bool isLinkJob() const { return true; }
Edward O'Callaghane7925a02009-08-22 01:06:46 +0000556
557 virtual void ConstructJob(Compilation &C, const JobAction &JA,
Mike Stump1eb44332009-09-09 15:08:12 +0000558 const InputInfo &Output,
559 const InputInfoList &Inputs,
Reid Klecknerdd0b3c42013-06-17 13:59:19 +0000560 const llvm::opt::ArgList &TCArgs,
Edward O'Callaghane7925a02009-08-22 01:06:46 +0000561 const char *LinkingOutput) const;
562 };
563} // end namespace auroraux
Daniel Dunbar68a31d42009-03-31 17:45:15 +0000564
Daniel Dunbar11e1b402009-05-02 18:28:39 +0000565 /// dragonfly -- Directly call GNU Binutils assembler and linker
566namespace dragonfly {
Duncan Sands92dd1912010-05-11 20:16:05 +0000567 class LLVM_LIBRARY_VISIBILITY Assemble : public Tool {
Daniel Dunbar11e1b402009-05-02 18:28:39 +0000568 public:
Daniel Dunbar30382042010-05-22 00:37:18 +0000569 Assemble(const ToolChain &TC) : Tool("dragonfly::Assemble", "assembler",
570 TC) {}
Daniel Dunbar11e1b402009-05-02 18:28:39 +0000571
Daniel Dunbar11e1b402009-05-02 18:28:39 +0000572 virtual bool hasIntegratedCPP() const { return false; }
573
574 virtual void ConstructJob(Compilation &C, const JobAction &JA,
Mike Stump1eb44332009-09-09 15:08:12 +0000575 const InputInfo &Output,
576 const InputInfoList &Inputs,
Reid Klecknerdd0b3c42013-06-17 13:59:19 +0000577 const llvm::opt::ArgList &TCArgs,
Daniel Dunbar11e1b402009-05-02 18:28:39 +0000578 const char *LinkingOutput) const;
579 };
Duncan Sands92dd1912010-05-11 20:16:05 +0000580 class LLVM_LIBRARY_VISIBILITY Link : public Tool {
Daniel Dunbar11e1b402009-05-02 18:28:39 +0000581 public:
Daniel Dunbar30382042010-05-22 00:37:18 +0000582 Link(const ToolChain &TC) : Tool("dragonfly::Link", "linker", TC) {}
Daniel Dunbar11e1b402009-05-02 18:28:39 +0000583
Daniel Dunbar11e1b402009-05-02 18:28:39 +0000584 virtual bool hasIntegratedCPP() const { return false; }
Chad Rosier8ba9a622012-03-07 00:30:40 +0000585 virtual bool isLinkJob() const { return true; }
Daniel Dunbar11e1b402009-05-02 18:28:39 +0000586
587 virtual void ConstructJob(Compilation &C, const JobAction &JA,
Mike Stump1eb44332009-09-09 15:08:12 +0000588 const InputInfo &Output,
589 const InputInfoList &Inputs,
Reid Klecknerdd0b3c42013-06-17 13:59:19 +0000590 const llvm::opt::ArgList &TCArgs,
Daniel Dunbar11e1b402009-05-02 18:28:39 +0000591 const char *LinkingOutput) const;
592 };
Edward O'Callaghane7925a02009-08-22 01:06:46 +0000593} // end namespace dragonfly
Daniel Dunbar11e1b402009-05-02 18:28:39 +0000594
Michael J. Spencerff58e362010-08-21 21:55:07 +0000595 /// Visual studio tools.
596namespace visualstudio {
597 class LLVM_LIBRARY_VISIBILITY Link : public Tool {
598 public:
599 Link(const ToolChain &TC) : Tool("visualstudio::Link", "linker", TC) {}
600
601 virtual bool hasIntegratedCPP() const { return false; }
Chad Rosier8ba9a622012-03-07 00:30:40 +0000602 virtual bool isLinkJob() const { return true; }
Michael J. Spencerff58e362010-08-21 21:55:07 +0000603
604 virtual void ConstructJob(Compilation &C, const JobAction &JA,
605 const InputInfo &Output,
606 const InputInfoList &Inputs,
Reid Klecknerdd0b3c42013-06-17 13:59:19 +0000607 const llvm::opt::ArgList &TCArgs,
Michael J. Spencerff58e362010-08-21 21:55:07 +0000608 const char *LinkingOutput) const;
609 };
610} // end namespace visualstudio
611
Daniel Dunbar9c073ff2009-03-17 22:07:58 +0000612} // end namespace toolchains
613} // end namespace driver
614} // end namespace clang
615
Edward O'Callaghane7925a02009-08-22 01:06:46 +0000616#endif // CLANG_LIB_DRIVER_TOOLS_H_