blob: 9138ddf88ba5cdadb4afa2143f43a54202187908 [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;
Tim Northoverb793f0d2013-08-01 09:23:19 +000068 void AddAArch64TargetArgs(const llvm::opt::ArgList &Args,
69 llvm::opt::ArgStringList &CmdArgs) const;
Daniel Dunbar6acda162009-09-09 22:33:08 +000070
John McCall260611a2012-06-20 06:18:46 +000071 enum RewriteKind { RK_None, RK_Fragile, RK_NonFragile };
72
Reid Klecknerdd0b3c42013-06-17 13:59:19 +000073 ObjCRuntime AddObjCRuntimeArgs(const llvm::opt::ArgList &args,
74 llvm::opt::ArgStringList &cmdArgs,
John McCall260611a2012-06-20 06:18:46 +000075 RewriteKind rewrite) const;
76
Daniel Dunbar9c073ff2009-03-17 22:07:58 +000077 public:
Daniel Dunbar30382042010-05-22 00:37:18 +000078 Clang(const ToolChain &TC) : Tool("clang", "clang frontend", TC) {}
Daniel Dunbar9c073ff2009-03-17 22:07:58 +000079
Daniel Dunbar60a53f22010-04-06 17:07:49 +000080 virtual bool hasGoodDiagnostics() const { return true; }
Daniel Dunbar8767cbc2010-02-03 03:07:56 +000081 virtual bool hasIntegratedAssembler() const { return true; }
Daniel Dunbar9c073ff2009-03-17 22:07:58 +000082 virtual bool hasIntegratedCPP() const { return true; }
Daniel Dunbar47ac7d22009-03-18 06:00:36 +000083
84 virtual void ConstructJob(Compilation &C, const JobAction &JA,
Mike Stump1eb44332009-09-09 15:08:12 +000085 const InputInfo &Output,
86 const InputInfoList &Inputs,
Reid Klecknerdd0b3c42013-06-17 13:59:19 +000087 const llvm::opt::ArgList &TCArgs,
Daniel Dunbar47ac7d22009-03-18 06:00:36 +000088 const char *LinkingOutput) const;
Daniel Dunbar9c073ff2009-03-17 22:07:58 +000089 };
90
Daniel Dunbar20a9aa52010-05-20 21:30:13 +000091 /// \brief Clang integrated assembler tool.
92 class LLVM_LIBRARY_VISIBILITY ClangAs : public Tool {
Reid Klecknerdd0b3c42013-06-17 13:59:19 +000093 void AddARMTargetArgs(const llvm::opt::ArgList &Args,
94 llvm::opt::ArgStringList &CmdArgs) const;
95 void AddX86TargetArgs(const llvm::opt::ArgList &Args,
96 llvm::opt::ArgStringList &CmdArgs) const;
97
Daniel Dunbar20a9aa52010-05-20 21:30:13 +000098 public:
Daniel Dunbar30382042010-05-22 00:37:18 +000099 ClangAs(const ToolChain &TC) : Tool("clang::as",
100 "clang integrated assembler", TC) {}
Daniel Dunbar20a9aa52010-05-20 21:30:13 +0000101
Daniel Dunbar20a9aa52010-05-20 21:30:13 +0000102 virtual bool hasGoodDiagnostics() const { return true; }
103 virtual bool hasIntegratedAssembler() const { return false; }
104 virtual bool hasIntegratedCPP() const { return false; }
105
106 virtual void ConstructJob(Compilation &C, const JobAction &JA,
Daniel Dunbar20a9aa52010-05-20 21:30:13 +0000107 const InputInfo &Output,
108 const InputInfoList &Inputs,
Reid Klecknerdd0b3c42013-06-17 13:59:19 +0000109 const llvm::opt::ArgList &TCArgs,
Daniel Dunbar20a9aa52010-05-20 21:30:13 +0000110 const char *LinkingOutput) const;
111 };
112
Daniel Dunbar31b1e542009-03-17 22:45:24 +0000113 /// gcc - Generic GCC tool implementations.
114namespace gcc {
Duncan Sands92dd1912010-05-11 20:16:05 +0000115 class LLVM_LIBRARY_VISIBILITY Common : public Tool {
Daniel Dunbar9c073ff2009-03-17 22:07:58 +0000116 public:
Daniel Dunbar30382042010-05-22 00:37:18 +0000117 Common(const char *Name, const char *ShortName,
118 const ToolChain &TC) : Tool(Name, ShortName, TC) {}
Daniel Dunbarb488c1d2009-03-18 08:07:30 +0000119
120 virtual void ConstructJob(Compilation &C, const JobAction &JA,
Mike Stump1eb44332009-09-09 15:08:12 +0000121 const InputInfo &Output,
122 const InputInfoList &Inputs,
Reid Klecknerdd0b3c42013-06-17 13:59:19 +0000123 const llvm::opt::ArgList &TCArgs,
Daniel Dunbarb488c1d2009-03-18 08:07:30 +0000124 const char *LinkingOutput) const;
125
126 /// RenderExtraToolArgs - Render any arguments necessary to force
127 /// the particular tool mode.
Reid Klecknerdd0b3c42013-06-17 13:59:19 +0000128 virtual void
129 RenderExtraToolArgs(const JobAction &JA,
130 llvm::opt::ArgStringList &CmdArgs) const = 0;
Daniel Dunbarb488c1d2009-03-18 08:07:30 +0000131 };
132
Duncan Sands92dd1912010-05-11 20:16:05 +0000133 class LLVM_LIBRARY_VISIBILITY Preprocess : public Common {
Daniel Dunbarb488c1d2009-03-18 08:07:30 +0000134 public:
Daniel Dunbar30382042010-05-22 00:37:18 +0000135 Preprocess(const ToolChain &TC) : Common("gcc::Preprocess",
136 "gcc preprocessor", TC) {}
Daniel Dunbar9c073ff2009-03-17 22:07:58 +0000137
Daniel Dunbar60a53f22010-04-06 17:07:49 +0000138 virtual bool hasGoodDiagnostics() const { return true; }
Daniel Dunbar9c073ff2009-03-17 22:07:58 +0000139 virtual bool hasIntegratedCPP() const { return false; }
Daniel Dunbar47ac7d22009-03-18 06:00:36 +0000140
Daniel Dunbar82b51cc2010-01-25 22:35:08 +0000141 virtual void RenderExtraToolArgs(const JobAction &JA,
Reid Klecknerdd0b3c42013-06-17 13:59:19 +0000142 llvm::opt::ArgStringList &CmdArgs) const;
Daniel Dunbar9c073ff2009-03-17 22:07:58 +0000143 };
144
Duncan Sands92dd1912010-05-11 20:16:05 +0000145 class LLVM_LIBRARY_VISIBILITY Precompile : public Common {
Daniel Dunbar9c073ff2009-03-17 22:07:58 +0000146 public:
Daniel Dunbar30382042010-05-22 00:37:18 +0000147 Precompile(const ToolChain &TC) : Common("gcc::Precompile",
148 "gcc precompile", TC) {}
Daniel Dunbar9c073ff2009-03-17 22:07:58 +0000149
Daniel Dunbar60a53f22010-04-06 17:07:49 +0000150 virtual bool hasGoodDiagnostics() const { return true; }
Daniel Dunbar9c073ff2009-03-17 22:07:58 +0000151 virtual bool hasIntegratedCPP() const { return true; }
Daniel Dunbar47ac7d22009-03-18 06:00:36 +0000152
Daniel Dunbar82b51cc2010-01-25 22:35:08 +0000153 virtual void RenderExtraToolArgs(const JobAction &JA,
Reid Klecknerdd0b3c42013-06-17 13:59:19 +0000154 llvm::opt::ArgStringList &CmdArgs) const;
Daniel Dunbar9c073ff2009-03-17 22:07:58 +0000155 };
156
Duncan Sands92dd1912010-05-11 20:16:05 +0000157 class LLVM_LIBRARY_VISIBILITY Compile : public Common {
Daniel Dunbar9c073ff2009-03-17 22:07:58 +0000158 public:
Daniel Dunbar30382042010-05-22 00:37:18 +0000159 Compile(const ToolChain &TC) : Common("gcc::Compile",
160 "gcc frontend", TC) {}
Daniel Dunbar9c073ff2009-03-17 22:07:58 +0000161
Daniel Dunbar60a53f22010-04-06 17:07:49 +0000162 virtual bool hasGoodDiagnostics() const { return true; }
Daniel Dunbar9c073ff2009-03-17 22:07:58 +0000163 virtual bool hasIntegratedCPP() const { return true; }
Daniel Dunbar47ac7d22009-03-18 06:00:36 +0000164
Daniel Dunbar82b51cc2010-01-25 22:35:08 +0000165 virtual void RenderExtraToolArgs(const JobAction &JA,
Reid Klecknerdd0b3c42013-06-17 13:59:19 +0000166 llvm::opt::ArgStringList &CmdArgs) const;
Daniel Dunbar9c073ff2009-03-17 22:07:58 +0000167 };
168
Duncan Sands92dd1912010-05-11 20:16:05 +0000169 class LLVM_LIBRARY_VISIBILITY Assemble : public Common {
Daniel Dunbar9c073ff2009-03-17 22:07:58 +0000170 public:
Daniel Dunbar30382042010-05-22 00:37:18 +0000171 Assemble(const ToolChain &TC) : Common("gcc::Assemble",
172 "assembler (via gcc)", TC) {}
Daniel Dunbar9c073ff2009-03-17 22:07:58 +0000173
Daniel Dunbar9c073ff2009-03-17 22:07:58 +0000174 virtual bool hasIntegratedCPP() const { return false; }
Daniel Dunbar47ac7d22009-03-18 06:00:36 +0000175
Daniel Dunbar82b51cc2010-01-25 22:35:08 +0000176 virtual void RenderExtraToolArgs(const JobAction &JA,
Reid Klecknerdd0b3c42013-06-17 13:59:19 +0000177 llvm::opt::ArgStringList &CmdArgs) const;
Daniel Dunbar9c073ff2009-03-17 22:07:58 +0000178 };
179
Duncan Sands92dd1912010-05-11 20:16:05 +0000180 class LLVM_LIBRARY_VISIBILITY Link : public Common {
Daniel Dunbar9c073ff2009-03-17 22:07:58 +0000181 public:
Daniel Dunbar30382042010-05-22 00:37:18 +0000182 Link(const ToolChain &TC) : Common("gcc::Link",
183 "linker (via gcc)", TC) {}
Daniel Dunbar9c073ff2009-03-17 22:07:58 +0000184
Daniel Dunbar9c073ff2009-03-17 22:07:58 +0000185 virtual bool hasIntegratedCPP() const { return false; }
Chad Rosier8ba9a622012-03-07 00:30:40 +0000186 virtual bool isLinkJob() const { return true; }
Daniel Dunbar47ac7d22009-03-18 06:00:36 +0000187
Daniel Dunbar82b51cc2010-01-25 22:35:08 +0000188 virtual void RenderExtraToolArgs(const JobAction &JA,
Reid Klecknerdd0b3c42013-06-17 13:59:19 +0000189 llvm::opt::ArgStringList &CmdArgs) const;
Daniel Dunbar9c073ff2009-03-17 22:07:58 +0000190 };
Daniel Dunbar31b1e542009-03-17 22:45:24 +0000191} // end namespace gcc
Daniel Dunbar9c073ff2009-03-17 22:07:58 +0000192
Tony Linthicum96319392011-12-12 21:14:55 +0000193namespace hexagon {
194 // For Hexagon, we do not need to instantiate tools for PreProcess, PreCompile and Compile.
195 // We simply use "clang -cc1" for those actions.
196 class LLVM_LIBRARY_VISIBILITY Assemble : public Tool {
197 public:
198 Assemble(const ToolChain &TC) : Tool("hexagon::Assemble",
199 "hexagon-as", TC) {}
200
201 virtual bool hasIntegratedCPP() const { return false; }
202
203 virtual void RenderExtraToolArgs(const JobAction &JA,
Reid Klecknerdd0b3c42013-06-17 13:59:19 +0000204 llvm::opt::ArgStringList &CmdArgs) const;
Tony Linthicum96319392011-12-12 21:14:55 +0000205 virtual void ConstructJob(Compilation &C, const JobAction &JA,
206 const InputInfo &Output,
207 const InputInfoList &Inputs,
Reid Klecknerdd0b3c42013-06-17 13:59:19 +0000208 const llvm::opt::ArgList &TCArgs,
Tony Linthicum96319392011-12-12 21:14:55 +0000209 const char *LinkingOutput) const;
210 };
211
212 class LLVM_LIBRARY_VISIBILITY Link : public Tool {
213 public:
214 Link(const ToolChain &TC) : Tool("hexagon::Link",
215 "hexagon-ld", TC) {}
216
217 virtual bool hasIntegratedCPP() const { return false; }
Chad Rosier8ba9a622012-03-07 00:30:40 +0000218 virtual bool isLinkJob() const { return true; }
Tony Linthicum96319392011-12-12 21:14:55 +0000219
220 virtual void RenderExtraToolArgs(const JobAction &JA,
Reid Klecknerdd0b3c42013-06-17 13:59:19 +0000221 llvm::opt::ArgStringList &CmdArgs) const;
Tony Linthicum96319392011-12-12 21:14:55 +0000222 virtual void ConstructJob(Compilation &C, const JobAction &JA,
223 const InputInfo &Output,
224 const InputInfoList &Inputs,
Reid Klecknerdd0b3c42013-06-17 13:59:19 +0000225 const llvm::opt::ArgList &TCArgs,
Tony Linthicum96319392011-12-12 21:14:55 +0000226 const char *LinkingOutput) const;
227 };
228} // end namespace hexagon.
229
230
Daniel Dunbarff7488d2009-03-20 00:52:38 +0000231namespace darwin {
Rafael Espindolacfed8282012-10-31 18:51:07 +0000232 llvm::Triple::ArchType getArchTypeForDarwinArchName(StringRef Str);
233
Duncan Sands92dd1912010-05-11 20:16:05 +0000234 class LLVM_LIBRARY_VISIBILITY DarwinTool : public Tool {
David Blaikie99ba9e32011-12-20 02:48:34 +0000235 virtual void anchor();
Daniel Dunbarfbefe6b2009-09-09 18:36:20 +0000236 protected:
Reid Klecknerdd0b3c42013-06-17 13:59:19 +0000237 void AddDarwinArch(const llvm::opt::ArgList &Args,
238 llvm::opt::ArgStringList &CmdArgs) const;
Daniel Dunbarfbefe6b2009-09-09 18:36:20 +0000239
240 const toolchains::Darwin &getDarwinToolChain() const {
241 return reinterpret_cast<const toolchains::Darwin&>(getToolChain());
242 }
243
244 public:
Daniel Dunbar30382042010-05-22 00:37:18 +0000245 DarwinTool(const char *Name, const char *ShortName,
246 const ToolChain &TC) : Tool(Name, ShortName, TC) {}
Daniel Dunbarfbefe6b2009-09-09 18:36:20 +0000247 };
248
Duncan Sands92dd1912010-05-11 20:16:05 +0000249 class LLVM_LIBRARY_VISIBILITY Assemble : public DarwinTool {
Daniel Dunbar8cac5f72009-03-20 16:06:39 +0000250 public:
Daniel Dunbar30382042010-05-22 00:37:18 +0000251 Assemble(const ToolChain &TC) : DarwinTool("darwin::Assemble",
252 "assembler", TC) {}
Daniel Dunbar8cac5f72009-03-20 16:06:39 +0000253
Daniel Dunbar8cac5f72009-03-20 16:06:39 +0000254 virtual bool hasIntegratedCPP() const { return false; }
255
256 virtual void ConstructJob(Compilation &C, const JobAction &JA,
Mike Stump1eb44332009-09-09 15:08:12 +0000257 const InputInfo &Output,
258 const InputInfoList &Inputs,
Reid Klecknerdd0b3c42013-06-17 13:59:19 +0000259 const llvm::opt::ArgList &TCArgs,
Daniel Dunbar8cac5f72009-03-20 16:06:39 +0000260 const char *LinkingOutput) const;
261 };
262
Duncan Sands92dd1912010-05-11 20:16:05 +0000263 class LLVM_LIBRARY_VISIBILITY Link : public DarwinTool {
Bill Wendling6acf8b42012-10-02 18:02:50 +0000264 bool NeedsTempPath(const InputInfoList &Inputs) const;
Reid Klecknerdd0b3c42013-06-17 13:59:19 +0000265 void AddLinkArgs(Compilation &C, const llvm::opt::ArgList &Args,
266 llvm::opt::ArgStringList &CmdArgs,
267 const InputInfoList &Inputs) const;
Daniel Dunbar02633b52009-03-26 16:23:12 +0000268
Daniel Dunbar02633b52009-03-26 16:23:12 +0000269 public:
Daniel Dunbar30382042010-05-22 00:37:18 +0000270 Link(const ToolChain &TC) : DarwinTool("darwin::Link", "linker", TC) {}
Daniel Dunbar02633b52009-03-26 16:23:12 +0000271
Daniel Dunbar02633b52009-03-26 16:23:12 +0000272 virtual bool hasIntegratedCPP() const { return false; }
Chad Rosier8ba9a622012-03-07 00:30:40 +0000273 virtual bool isLinkJob() const { return true; }
Daniel Dunbar02633b52009-03-26 16:23:12 +0000274
275 virtual void ConstructJob(Compilation &C, const JobAction &JA,
Mike Stump1eb44332009-09-09 15:08:12 +0000276 const InputInfo &Output,
277 const InputInfoList &Inputs,
Reid Klecknerdd0b3c42013-06-17 13:59:19 +0000278 const llvm::opt::ArgList &TCArgs,
Daniel Dunbar02633b52009-03-26 16:23:12 +0000279 const char *LinkingOutput) const;
280 };
281
Duncan Sands92dd1912010-05-11 20:16:05 +0000282 class LLVM_LIBRARY_VISIBILITY Lipo : public DarwinTool {
Daniel Dunbarff7488d2009-03-20 00:52:38 +0000283 public:
Daniel Dunbar30382042010-05-22 00:37:18 +0000284 Lipo(const ToolChain &TC) : DarwinTool("darwin::Lipo", "lipo", TC) {}
Daniel Dunbarff7488d2009-03-20 00:52:38 +0000285
Daniel Dunbarff7488d2009-03-20 00:52:38 +0000286 virtual bool hasIntegratedCPP() const { return false; }
287
288 virtual void ConstructJob(Compilation &C, const JobAction &JA,
Mike Stump1eb44332009-09-09 15:08:12 +0000289 const InputInfo &Output,
290 const InputInfoList &Inputs,
Reid Klecknerdd0b3c42013-06-17 13:59:19 +0000291 const llvm::opt::ArgList &TCArgs,
Daniel Dunbarff7488d2009-03-20 00:52:38 +0000292 const char *LinkingOutput) const;
293 };
Daniel Dunbar6e0f2542010-06-04 18:28:36 +0000294
295 class LLVM_LIBRARY_VISIBILITY Dsymutil : public DarwinTool {
296 public:
297 Dsymutil(const ToolChain &TC) : DarwinTool("darwin::Dsymutil",
298 "dsymutil", TC) {}
299
Daniel Dunbar6e0f2542010-06-04 18:28:36 +0000300 virtual bool hasIntegratedCPP() const { return false; }
Chad Rosier75dbc712013-02-01 18:30:26 +0000301 virtual bool isDsymutilJob() const { return true; }
Daniel Dunbar6e0f2542010-06-04 18:28:36 +0000302
303 virtual void ConstructJob(Compilation &C, const JobAction &JA,
Daniel Dunbar6e0f2542010-06-04 18:28:36 +0000304 const InputInfo &Output,
305 const InputInfoList &Inputs,
Reid Klecknerdd0b3c42013-06-17 13:59:19 +0000306 const llvm::opt::ArgList &TCArgs,
Daniel Dunbar6e0f2542010-06-04 18:28:36 +0000307 const char *LinkingOutput) const;
308 };
Eric Christopherf8571862011-08-23 17:56:55 +0000309
310 class LLVM_LIBRARY_VISIBILITY VerifyDebug : public DarwinTool {
311 public:
312 VerifyDebug(const ToolChain &TC) : DarwinTool("darwin::VerifyDebug",
Eric Christopher27e2b982012-12-18 00:31:10 +0000313 "dwarfdump", TC) {}
Eric Christopherf8571862011-08-23 17:56:55 +0000314
315 virtual bool hasIntegratedCPP() const { return false; }
316
317 virtual void ConstructJob(Compilation &C, const JobAction &JA,
Eric Christopher27e2b982012-12-18 00:31:10 +0000318 const InputInfo &Output,
319 const InputInfoList &Inputs,
Reid Klecknerdd0b3c42013-06-17 13:59:19 +0000320 const llvm::opt::ArgList &TCArgs,
Eric Christopher27e2b982012-12-18 00:31:10 +0000321 const char *LinkingOutput) const;
Eric Christopherf8571862011-08-23 17:56:55 +0000322 };
323
Daniel Dunbarff7488d2009-03-20 00:52:38 +0000324}
325
Daniel Dunbarf7b8eec2009-06-29 20:52:51 +0000326 /// openbsd -- Directly call GNU Binutils assembler and linker
327namespace openbsd {
Duncan Sands92dd1912010-05-11 20:16:05 +0000328 class LLVM_LIBRARY_VISIBILITY Assemble : public Tool {
Daniel Dunbarf7b8eec2009-06-29 20:52:51 +0000329 public:
Daniel Dunbar30382042010-05-22 00:37:18 +0000330 Assemble(const ToolChain &TC) : Tool("openbsd::Assemble", "assembler",
331 TC) {}
Daniel Dunbarf7b8eec2009-06-29 20:52:51 +0000332
Daniel Dunbarf7b8eec2009-06-29 20:52:51 +0000333 virtual bool hasIntegratedCPP() const { return false; }
334
335 virtual void ConstructJob(Compilation &C, const JobAction &JA,
Mike Stump1eb44332009-09-09 15:08:12 +0000336 const InputInfo &Output,
337 const InputInfoList &Inputs,
Reid Klecknerdd0b3c42013-06-17 13:59:19 +0000338 const llvm::opt::ArgList &TCArgs,
Daniel Dunbarf7b8eec2009-06-29 20:52:51 +0000339 const char *LinkingOutput) const;
340 };
Duncan Sands92dd1912010-05-11 20:16:05 +0000341 class LLVM_LIBRARY_VISIBILITY Link : public Tool {
Daniel Dunbarf7b8eec2009-06-29 20:52:51 +0000342 public:
Daniel Dunbar30382042010-05-22 00:37:18 +0000343 Link(const ToolChain &TC) : Tool("openbsd::Link", "linker", TC) {}
Daniel Dunbarf7b8eec2009-06-29 20:52:51 +0000344
Daniel Dunbarf7b8eec2009-06-29 20:52:51 +0000345 virtual bool hasIntegratedCPP() const { return false; }
Chad Rosier8ba9a622012-03-07 00:30:40 +0000346 virtual bool isLinkJob() const { return true; }
Daniel Dunbarf7b8eec2009-06-29 20:52:51 +0000347
348 virtual void ConstructJob(Compilation &C, const JobAction &JA,
Mike Stump1eb44332009-09-09 15:08:12 +0000349 const InputInfo &Output,
350 const InputInfoList &Inputs,
Reid Klecknerdd0b3c42013-06-17 13:59:19 +0000351 const llvm::opt::ArgList &TCArgs,
Daniel Dunbarf7b8eec2009-06-29 20:52:51 +0000352 const char *LinkingOutput) const;
353 };
Edward O'Callaghane7925a02009-08-22 01:06:46 +0000354} // end namespace openbsd
Daniel Dunbarf7b8eec2009-06-29 20:52:51 +0000355
Eli Friedman42f74f22012-08-08 23:57:20 +0000356 /// bitrig -- Directly call GNU Binutils assembler and linker
357namespace bitrig {
358 class LLVM_LIBRARY_VISIBILITY Assemble : public Tool {
359 public:
360 Assemble(const ToolChain &TC) : Tool("bitrig::Assemble", "assembler",
361 TC) {}
362
363 virtual bool hasIntegratedCPP() const { return false; }
364
365 virtual void ConstructJob(Compilation &C, const JobAction &JA,
366 const InputInfo &Output,
367 const InputInfoList &Inputs,
Reid Klecknerdd0b3c42013-06-17 13:59:19 +0000368 const llvm::opt::ArgList &TCArgs,
Eli Friedman42f74f22012-08-08 23:57:20 +0000369 const char *LinkingOutput) const;
370 };
371 class LLVM_LIBRARY_VISIBILITY Link : public Tool {
372 public:
373 Link(const ToolChain &TC) : Tool("bitrig::Link", "linker", TC) {}
374
375 virtual bool hasIntegratedCPP() const { return false; }
376 virtual bool isLinkJob() const { return true; }
377
378 virtual void ConstructJob(Compilation &C, const JobAction &JA,
379 const InputInfo &Output,
380 const InputInfoList &Inputs,
Reid Klecknerdd0b3c42013-06-17 13:59:19 +0000381 const llvm::opt::ArgList &TCArgs,
Eli Friedman42f74f22012-08-08 23:57:20 +0000382 const char *LinkingOutput) const;
383 };
384} // end namespace bitrig
385
Daniel Dunbar68a31d42009-03-31 17:45:15 +0000386 /// freebsd -- Directly call GNU Binutils assembler and linker
387namespace freebsd {
Duncan Sands92dd1912010-05-11 20:16:05 +0000388 class LLVM_LIBRARY_VISIBILITY Assemble : public Tool {
Daniel Dunbar68a31d42009-03-31 17:45:15 +0000389 public:
Daniel Dunbar30382042010-05-22 00:37:18 +0000390 Assemble(const ToolChain &TC) : Tool("freebsd::Assemble", "assembler",
391 TC) {}
Daniel Dunbar68a31d42009-03-31 17:45:15 +0000392
Daniel Dunbar68a31d42009-03-31 17:45:15 +0000393 virtual bool hasIntegratedCPP() const { return false; }
394
395 virtual void ConstructJob(Compilation &C, const JobAction &JA,
Mike Stump1eb44332009-09-09 15:08:12 +0000396 const InputInfo &Output,
397 const InputInfoList &Inputs,
Reid Klecknerdd0b3c42013-06-17 13:59:19 +0000398 const llvm::opt::ArgList &TCArgs,
Daniel Dunbar68a31d42009-03-31 17:45:15 +0000399 const char *LinkingOutput) const;
400 };
Duncan Sands92dd1912010-05-11 20:16:05 +0000401 class LLVM_LIBRARY_VISIBILITY Link : public Tool {
Daniel Dunbar008f54a2009-04-01 19:36:32 +0000402 public:
Daniel Dunbar30382042010-05-22 00:37:18 +0000403 Link(const ToolChain &TC) : Tool("freebsd::Link", "linker", TC) {}
Daniel Dunbar008f54a2009-04-01 19:36:32 +0000404
Daniel Dunbar008f54a2009-04-01 19:36:32 +0000405 virtual bool hasIntegratedCPP() const { return false; }
Chad Rosier8ba9a622012-03-07 00:30:40 +0000406 virtual bool isLinkJob() const { return true; }
Daniel Dunbar008f54a2009-04-01 19:36:32 +0000407
408 virtual void ConstructJob(Compilation &C, const JobAction &JA,
Mike Stump1eb44332009-09-09 15:08:12 +0000409 const InputInfo &Output,
410 const InputInfoList &Inputs,
Reid Klecknerdd0b3c42013-06-17 13:59:19 +0000411 const llvm::opt::ArgList &TCArgs,
Daniel Dunbar008f54a2009-04-01 19:36:32 +0000412 const char *LinkingOutput) const;
413 };
Edward O'Callaghane7925a02009-08-22 01:06:46 +0000414} // end namespace freebsd
415
Benjamin Kramer8e50a962011-02-02 18:59:27 +0000416 /// netbsd -- Directly call GNU Binutils assembler and linker
417namespace netbsd {
418 class LLVM_LIBRARY_VISIBILITY Assemble : public Tool {
Joerg Sonnenberger182564c2011-05-16 13:35:02 +0000419
Benjamin Kramer8e50a962011-02-02 18:59:27 +0000420 public:
Joerg Sonnenberger1bd91372012-01-26 22:27:52 +0000421 Assemble(const ToolChain &TC)
422 : Tool("netbsd::Assemble", "assembler", TC) {}
Benjamin Kramer8e50a962011-02-02 18:59:27 +0000423
424 virtual bool hasIntegratedCPP() const { return false; }
425
426 virtual void ConstructJob(Compilation &C, const JobAction &JA,
427 const InputInfo &Output,
428 const InputInfoList &Inputs,
Reid Klecknerdd0b3c42013-06-17 13:59:19 +0000429 const llvm::opt::ArgList &TCArgs,
Benjamin Kramer8e50a962011-02-02 18:59:27 +0000430 const char *LinkingOutput) const;
431 };
432 class LLVM_LIBRARY_VISIBILITY Link : public Tool {
Joerg Sonnenberger182564c2011-05-16 13:35:02 +0000433
Benjamin Kramer8e50a962011-02-02 18:59:27 +0000434 public:
Joerg Sonnenberger1bd91372012-01-26 22:27:52 +0000435 Link(const ToolChain &TC)
436 : Tool("netbsd::Link", "linker", TC) {}
Benjamin Kramer8e50a962011-02-02 18:59:27 +0000437
438 virtual bool hasIntegratedCPP() const { return false; }
Chad Rosier8ba9a622012-03-07 00:30:40 +0000439 virtual bool isLinkJob() const { return true; }
Benjamin Kramer8e50a962011-02-02 18:59:27 +0000440
441 virtual void ConstructJob(Compilation &C, const JobAction &JA,
442 const InputInfo &Output,
443 const InputInfoList &Inputs,
Reid Klecknerdd0b3c42013-06-17 13:59:19 +0000444 const llvm::opt::ArgList &TCArgs,
Benjamin Kramer8e50a962011-02-02 18:59:27 +0000445 const char *LinkingOutput) const;
446 };
447} // end namespace netbsd
448
Thomas Schwinge577bb0a2013-03-28 19:04:25 +0000449 /// Directly call GNU Binutils' assembler and linker.
450namespace gnutools {
Rafael Espindolaba30bbe2010-08-10 00:25:48 +0000451 class LLVM_LIBRARY_VISIBILITY Assemble : public Tool {
452 public:
Thomas Schwinge577bb0a2013-03-28 19:04:25 +0000453 Assemble(const ToolChain &TC) : Tool("GNU::Assemble", "assembler", TC) {}
Rafael Espindolaba30bbe2010-08-10 00:25:48 +0000454
455 virtual bool hasIntegratedCPP() const { return false; }
456
457 virtual void ConstructJob(Compilation &C, const JobAction &JA,
458 const InputInfo &Output,
459 const InputInfoList &Inputs,
Reid Klecknerdd0b3c42013-06-17 13:59:19 +0000460 const llvm::opt::ArgList &TCArgs,
Rafael Espindolaba30bbe2010-08-10 00:25:48 +0000461 const char *LinkingOutput) const;
462 };
Rafael Espindolac1da9812010-11-07 20:14:31 +0000463 class LLVM_LIBRARY_VISIBILITY Link : public Tool {
464 public:
Thomas Schwinge577bb0a2013-03-28 19:04:25 +0000465 Link(const ToolChain &TC) : Tool("GNU::Link", "linker", TC) {}
Rafael Espindolac1da9812010-11-07 20:14:31 +0000466
467 virtual bool hasIntegratedCPP() const { return false; }
Chad Rosier8ba9a622012-03-07 00:30:40 +0000468 virtual bool isLinkJob() const { return true; }
Rafael Espindolac1da9812010-11-07 20:14:31 +0000469
470 virtual void ConstructJob(Compilation &C, const JobAction &JA,
471 const InputInfo &Output,
472 const InputInfoList &Inputs,
Reid Klecknerdd0b3c42013-06-17 13:59:19 +0000473 const llvm::opt::ArgList &TCArgs,
Rafael Espindolac1da9812010-11-07 20:14:31 +0000474 const char *LinkingOutput) const;
475 };
Rafael Espindolaba30bbe2010-08-10 00:25:48 +0000476}
Chris Lattner38e317d2010-07-07 16:01:42 +0000477 /// minix -- Directly call GNU Binutils assembler and linker
478namespace minix {
479 class LLVM_LIBRARY_VISIBILITY Assemble : public Tool {
480 public:
481 Assemble(const ToolChain &TC) : Tool("minix::Assemble", "assembler",
482 TC) {}
483
Chris Lattner38e317d2010-07-07 16:01:42 +0000484 virtual bool hasIntegratedCPP() const { return false; }
485
486 virtual void ConstructJob(Compilation &C, const JobAction &JA,
Chris Lattner38e317d2010-07-07 16:01:42 +0000487 const InputInfo &Output,
488 const InputInfoList &Inputs,
Reid Klecknerdd0b3c42013-06-17 13:59:19 +0000489 const llvm::opt::ArgList &TCArgs,
Chris Lattner38e317d2010-07-07 16:01:42 +0000490 const char *LinkingOutput) const;
491 };
492 class LLVM_LIBRARY_VISIBILITY Link : public Tool {
493 public:
494 Link(const ToolChain &TC) : Tool("minix::Link", "linker", TC) {}
495
Chris Lattner38e317d2010-07-07 16:01:42 +0000496 virtual bool hasIntegratedCPP() const { return false; }
Chad Rosier8ba9a622012-03-07 00:30:40 +0000497 virtual bool isLinkJob() const { return true; }
Chris Lattner38e317d2010-07-07 16:01:42 +0000498
499 virtual void ConstructJob(Compilation &C, const JobAction &JA,
Chris Lattner38e317d2010-07-07 16:01:42 +0000500 const InputInfo &Output,
501 const InputInfoList &Inputs,
Reid Klecknerdd0b3c42013-06-17 13:59:19 +0000502 const llvm::opt::ArgList &TCArgs,
Chris Lattner38e317d2010-07-07 16:01:42 +0000503 const char *LinkingOutput) const;
504 };
505} // end namespace minix
506
David Chisnall31c46902012-02-15 13:39:01 +0000507 /// solaris -- Directly call Solaris assembler and linker
508namespace solaris {
509 class LLVM_LIBRARY_VISIBILITY Assemble : public Tool {
510 public:
511 Assemble(const ToolChain &TC) : Tool("solaris::Assemble", "assembler",
512 TC) {}
513
514 virtual bool hasIntegratedCPP() const { return false; }
515
516 virtual void ConstructJob(Compilation &C, const JobAction &JA,
517 const InputInfo &Output,
518 const InputInfoList &Inputs,
Reid Klecknerdd0b3c42013-06-17 13:59:19 +0000519 const llvm::opt::ArgList &TCArgs,
David Chisnall31c46902012-02-15 13:39:01 +0000520 const char *LinkingOutput) const;
521 };
522 class LLVM_LIBRARY_VISIBILITY Link : public Tool {
523 public:
524 Link(const ToolChain &TC) : Tool("solaris::Link", "linker", TC) {}
525
526 virtual bool hasIntegratedCPP() const { return false; }
Chad Rosier8ba9a622012-03-07 00:30:40 +0000527 virtual bool isLinkJob() const { return true; }
David Chisnall31c46902012-02-15 13:39:01 +0000528
529 virtual void ConstructJob(Compilation &C, const JobAction &JA,
530 const InputInfo &Output,
531 const InputInfoList &Inputs,
Reid Klecknerdd0b3c42013-06-17 13:59:19 +0000532 const llvm::opt::ArgList &TCArgs,
David Chisnall31c46902012-02-15 13:39:01 +0000533 const char *LinkingOutput) const;
534 };
David Chisnallbadb6cd2012-02-15 16:25:46 +0000535} // end namespace solaris
David Chisnall31c46902012-02-15 13:39:01 +0000536
Edward O'Callaghane7925a02009-08-22 01:06:46 +0000537 /// auroraux -- Directly call GNU Binutils assembler and linker
538namespace auroraux {
Duncan Sands92dd1912010-05-11 20:16:05 +0000539 class LLVM_LIBRARY_VISIBILITY Assemble : public Tool {
Edward O'Callaghane7925a02009-08-22 01:06:46 +0000540 public:
Daniel Dunbar30382042010-05-22 00:37:18 +0000541 Assemble(const ToolChain &TC) : Tool("auroraux::Assemble", "assembler",
542 TC) {}
Edward O'Callaghane7925a02009-08-22 01:06:46 +0000543
Edward O'Callaghane7925a02009-08-22 01:06:46 +0000544 virtual bool hasIntegratedCPP() const { return false; }
545
546 virtual void ConstructJob(Compilation &C, const JobAction &JA,
Mike Stump1eb44332009-09-09 15:08:12 +0000547 const InputInfo &Output,
548 const InputInfoList &Inputs,
Reid Klecknerdd0b3c42013-06-17 13:59:19 +0000549 const llvm::opt::ArgList &TCArgs,
Edward O'Callaghane7925a02009-08-22 01:06:46 +0000550 const char *LinkingOutput) const;
551 };
Duncan Sands92dd1912010-05-11 20:16:05 +0000552 class LLVM_LIBRARY_VISIBILITY Link : public Tool {
Edward O'Callaghane7925a02009-08-22 01:06:46 +0000553 public:
Daniel Dunbar30382042010-05-22 00:37:18 +0000554 Link(const ToolChain &TC) : Tool("auroraux::Link", "linker", TC) {}
Edward O'Callaghane7925a02009-08-22 01:06:46 +0000555
Edward O'Callaghane7925a02009-08-22 01:06:46 +0000556 virtual bool hasIntegratedCPP() const { return false; }
Chad Rosier8ba9a622012-03-07 00:30:40 +0000557 virtual bool isLinkJob() const { return true; }
Edward O'Callaghane7925a02009-08-22 01:06:46 +0000558
559 virtual void ConstructJob(Compilation &C, const JobAction &JA,
Mike Stump1eb44332009-09-09 15:08:12 +0000560 const InputInfo &Output,
561 const InputInfoList &Inputs,
Reid Klecknerdd0b3c42013-06-17 13:59:19 +0000562 const llvm::opt::ArgList &TCArgs,
Edward O'Callaghane7925a02009-08-22 01:06:46 +0000563 const char *LinkingOutput) const;
564 };
565} // end namespace auroraux
Daniel Dunbar68a31d42009-03-31 17:45:15 +0000566
Daniel Dunbar11e1b402009-05-02 18:28:39 +0000567 /// dragonfly -- Directly call GNU Binutils assembler and linker
568namespace dragonfly {
Duncan Sands92dd1912010-05-11 20:16:05 +0000569 class LLVM_LIBRARY_VISIBILITY Assemble : public Tool {
Daniel Dunbar11e1b402009-05-02 18:28:39 +0000570 public:
Daniel Dunbar30382042010-05-22 00:37:18 +0000571 Assemble(const ToolChain &TC) : Tool("dragonfly::Assemble", "assembler",
572 TC) {}
Daniel Dunbar11e1b402009-05-02 18:28:39 +0000573
Daniel Dunbar11e1b402009-05-02 18:28:39 +0000574 virtual bool hasIntegratedCPP() const { return false; }
575
576 virtual void ConstructJob(Compilation &C, const JobAction &JA,
Mike Stump1eb44332009-09-09 15:08:12 +0000577 const InputInfo &Output,
578 const InputInfoList &Inputs,
Reid Klecknerdd0b3c42013-06-17 13:59:19 +0000579 const llvm::opt::ArgList &TCArgs,
Daniel Dunbar11e1b402009-05-02 18:28:39 +0000580 const char *LinkingOutput) const;
581 };
Duncan Sands92dd1912010-05-11 20:16:05 +0000582 class LLVM_LIBRARY_VISIBILITY Link : public Tool {
Daniel Dunbar11e1b402009-05-02 18:28:39 +0000583 public:
Daniel Dunbar30382042010-05-22 00:37:18 +0000584 Link(const ToolChain &TC) : Tool("dragonfly::Link", "linker", TC) {}
Daniel Dunbar11e1b402009-05-02 18:28:39 +0000585
Daniel Dunbar11e1b402009-05-02 18:28:39 +0000586 virtual bool hasIntegratedCPP() const { return false; }
Chad Rosier8ba9a622012-03-07 00:30:40 +0000587 virtual bool isLinkJob() const { return true; }
Daniel Dunbar11e1b402009-05-02 18:28:39 +0000588
589 virtual void ConstructJob(Compilation &C, const JobAction &JA,
Mike Stump1eb44332009-09-09 15:08:12 +0000590 const InputInfo &Output,
591 const InputInfoList &Inputs,
Reid Klecknerdd0b3c42013-06-17 13:59:19 +0000592 const llvm::opt::ArgList &TCArgs,
Daniel Dunbar11e1b402009-05-02 18:28:39 +0000593 const char *LinkingOutput) const;
594 };
Edward O'Callaghane7925a02009-08-22 01:06:46 +0000595} // end namespace dragonfly
Daniel Dunbar11e1b402009-05-02 18:28:39 +0000596
Michael J. Spencerff58e362010-08-21 21:55:07 +0000597 /// Visual studio tools.
598namespace visualstudio {
599 class LLVM_LIBRARY_VISIBILITY Link : public Tool {
600 public:
601 Link(const ToolChain &TC) : Tool("visualstudio::Link", "linker", TC) {}
602
603 virtual bool hasIntegratedCPP() const { return false; }
Chad Rosier8ba9a622012-03-07 00:30:40 +0000604 virtual bool isLinkJob() const { return true; }
Michael J. Spencerff58e362010-08-21 21:55:07 +0000605
606 virtual void ConstructJob(Compilation &C, const JobAction &JA,
607 const InputInfo &Output,
608 const InputInfoList &Inputs,
Reid Klecknerdd0b3c42013-06-17 13:59:19 +0000609 const llvm::opt::ArgList &TCArgs,
Michael J. Spencerff58e362010-08-21 21:55:07 +0000610 const char *LinkingOutput) const;
611 };
612} // end namespace visualstudio
613
Daniel Dunbar9c073ff2009-03-17 22:07:58 +0000614} // end namespace toolchains
615} // end namespace driver
616} // end namespace clang
617
Edward O'Callaghane7925a02009-08-22 01:06:46 +0000618#endif // CLANG_LIB_DRIVER_TOOLS_H_