blob: cc229af44e7504a05b8076135f73ebf22f0d8319 [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;
62 void AddX86TargetArgs(const llvm::opt::ArgList &Args,
63 llvm::opt::ArgStringList &CmdArgs) const;
64 void AddHexagonTargetArgs(const llvm::opt::ArgList &Args,
65 llvm::opt::ArgStringList &CmdArgs) const;
Daniel Dunbar6acda162009-09-09 22:33:08 +000066
John McCall260611a2012-06-20 06:18:46 +000067 enum RewriteKind { RK_None, RK_Fragile, RK_NonFragile };
68
Reid Klecknerdd0b3c42013-06-17 13:59:19 +000069 ObjCRuntime AddObjCRuntimeArgs(const llvm::opt::ArgList &args,
70 llvm::opt::ArgStringList &cmdArgs,
John McCall260611a2012-06-20 06:18:46 +000071 RewriteKind rewrite) const;
72
Daniel Dunbar9c073ff2009-03-17 22:07:58 +000073 public:
Daniel Dunbar30382042010-05-22 00:37:18 +000074 Clang(const ToolChain &TC) : Tool("clang", "clang frontend", TC) {}
Daniel Dunbar9c073ff2009-03-17 22:07:58 +000075
Daniel Dunbar60a53f22010-04-06 17:07:49 +000076 virtual bool hasGoodDiagnostics() const { return true; }
Daniel Dunbar8767cbc2010-02-03 03:07:56 +000077 virtual bool hasIntegratedAssembler() const { return true; }
Daniel Dunbar9c073ff2009-03-17 22:07:58 +000078 virtual bool hasIntegratedCPP() const { return true; }
Daniel Dunbar47ac7d22009-03-18 06:00:36 +000079
80 virtual void ConstructJob(Compilation &C, const JobAction &JA,
Mike Stump1eb44332009-09-09 15:08:12 +000081 const InputInfo &Output,
82 const InputInfoList &Inputs,
Reid Klecknerdd0b3c42013-06-17 13:59:19 +000083 const llvm::opt::ArgList &TCArgs,
Daniel Dunbar47ac7d22009-03-18 06:00:36 +000084 const char *LinkingOutput) const;
Daniel Dunbar9c073ff2009-03-17 22:07:58 +000085 };
86
Daniel Dunbar20a9aa52010-05-20 21:30:13 +000087 /// \brief Clang integrated assembler tool.
88 class LLVM_LIBRARY_VISIBILITY ClangAs : public Tool {
Reid Klecknerdd0b3c42013-06-17 13:59:19 +000089 void AddARMTargetArgs(const llvm::opt::ArgList &Args,
90 llvm::opt::ArgStringList &CmdArgs) const;
91 void AddX86TargetArgs(const llvm::opt::ArgList &Args,
92 llvm::opt::ArgStringList &CmdArgs) const;
93
Daniel Dunbar20a9aa52010-05-20 21:30:13 +000094 public:
Daniel Dunbar30382042010-05-22 00:37:18 +000095 ClangAs(const ToolChain &TC) : Tool("clang::as",
96 "clang integrated assembler", TC) {}
Daniel Dunbar20a9aa52010-05-20 21:30:13 +000097
Daniel Dunbar20a9aa52010-05-20 21:30:13 +000098 virtual bool hasGoodDiagnostics() const { return true; }
99 virtual bool hasIntegratedAssembler() const { return false; }
100 virtual bool hasIntegratedCPP() const { return false; }
101
102 virtual void ConstructJob(Compilation &C, const JobAction &JA,
Daniel Dunbar20a9aa52010-05-20 21:30:13 +0000103 const InputInfo &Output,
104 const InputInfoList &Inputs,
Reid Klecknerdd0b3c42013-06-17 13:59:19 +0000105 const llvm::opt::ArgList &TCArgs,
Daniel Dunbar20a9aa52010-05-20 21:30:13 +0000106 const char *LinkingOutput) const;
107 };
108
Daniel Dunbar31b1e542009-03-17 22:45:24 +0000109 /// gcc - Generic GCC tool implementations.
110namespace gcc {
Duncan Sands92dd1912010-05-11 20:16:05 +0000111 class LLVM_LIBRARY_VISIBILITY Common : public Tool {
Daniel Dunbar9c073ff2009-03-17 22:07:58 +0000112 public:
Daniel Dunbar30382042010-05-22 00:37:18 +0000113 Common(const char *Name, const char *ShortName,
114 const ToolChain &TC) : Tool(Name, ShortName, TC) {}
Daniel Dunbarb488c1d2009-03-18 08:07:30 +0000115
116 virtual void ConstructJob(Compilation &C, const JobAction &JA,
Mike Stump1eb44332009-09-09 15:08:12 +0000117 const InputInfo &Output,
118 const InputInfoList &Inputs,
Reid Klecknerdd0b3c42013-06-17 13:59:19 +0000119 const llvm::opt::ArgList &TCArgs,
Daniel Dunbarb488c1d2009-03-18 08:07:30 +0000120 const char *LinkingOutput) const;
121
122 /// RenderExtraToolArgs - Render any arguments necessary to force
123 /// the particular tool mode.
Reid Klecknerdd0b3c42013-06-17 13:59:19 +0000124 virtual void
125 RenderExtraToolArgs(const JobAction &JA,
126 llvm::opt::ArgStringList &CmdArgs) const = 0;
Daniel Dunbarb488c1d2009-03-18 08:07:30 +0000127 };
128
Duncan Sands92dd1912010-05-11 20:16:05 +0000129 class LLVM_LIBRARY_VISIBILITY Preprocess : public Common {
Daniel Dunbarb488c1d2009-03-18 08:07:30 +0000130 public:
Daniel Dunbar30382042010-05-22 00:37:18 +0000131 Preprocess(const ToolChain &TC) : Common("gcc::Preprocess",
132 "gcc preprocessor", TC) {}
Daniel Dunbar9c073ff2009-03-17 22:07:58 +0000133
Daniel Dunbar60a53f22010-04-06 17:07:49 +0000134 virtual bool hasGoodDiagnostics() const { return true; }
Daniel Dunbar9c073ff2009-03-17 22:07:58 +0000135 virtual bool hasIntegratedCPP() const { return false; }
Daniel Dunbar47ac7d22009-03-18 06:00:36 +0000136
Daniel Dunbar82b51cc2010-01-25 22:35:08 +0000137 virtual void RenderExtraToolArgs(const JobAction &JA,
Reid Klecknerdd0b3c42013-06-17 13:59:19 +0000138 llvm::opt::ArgStringList &CmdArgs) const;
Daniel Dunbar9c073ff2009-03-17 22:07:58 +0000139 };
140
Duncan Sands92dd1912010-05-11 20:16:05 +0000141 class LLVM_LIBRARY_VISIBILITY Precompile : public Common {
Daniel Dunbar9c073ff2009-03-17 22:07:58 +0000142 public:
Daniel Dunbar30382042010-05-22 00:37:18 +0000143 Precompile(const ToolChain &TC) : Common("gcc::Precompile",
144 "gcc precompile", TC) {}
Daniel Dunbar9c073ff2009-03-17 22:07:58 +0000145
Daniel Dunbar60a53f22010-04-06 17:07:49 +0000146 virtual bool hasGoodDiagnostics() const { return true; }
Daniel Dunbar9c073ff2009-03-17 22:07:58 +0000147 virtual bool hasIntegratedCPP() const { return true; }
Daniel Dunbar47ac7d22009-03-18 06:00:36 +0000148
Daniel Dunbar82b51cc2010-01-25 22:35:08 +0000149 virtual void RenderExtraToolArgs(const JobAction &JA,
Reid Klecknerdd0b3c42013-06-17 13:59:19 +0000150 llvm::opt::ArgStringList &CmdArgs) const;
Daniel Dunbar9c073ff2009-03-17 22:07:58 +0000151 };
152
Duncan Sands92dd1912010-05-11 20:16:05 +0000153 class LLVM_LIBRARY_VISIBILITY Compile : public Common {
Daniel Dunbar9c073ff2009-03-17 22:07:58 +0000154 public:
Daniel Dunbar30382042010-05-22 00:37:18 +0000155 Compile(const ToolChain &TC) : Common("gcc::Compile",
156 "gcc frontend", TC) {}
Daniel Dunbar9c073ff2009-03-17 22:07:58 +0000157
Daniel Dunbar60a53f22010-04-06 17:07:49 +0000158 virtual bool hasGoodDiagnostics() const { return true; }
Daniel Dunbar9c073ff2009-03-17 22:07:58 +0000159 virtual bool hasIntegratedCPP() const { return true; }
Daniel Dunbar47ac7d22009-03-18 06:00:36 +0000160
Daniel Dunbar82b51cc2010-01-25 22:35:08 +0000161 virtual void RenderExtraToolArgs(const JobAction &JA,
Reid Klecknerdd0b3c42013-06-17 13:59:19 +0000162 llvm::opt::ArgStringList &CmdArgs) const;
Daniel Dunbar9c073ff2009-03-17 22:07:58 +0000163 };
164
Duncan Sands92dd1912010-05-11 20:16:05 +0000165 class LLVM_LIBRARY_VISIBILITY Assemble : public Common {
Daniel Dunbar9c073ff2009-03-17 22:07:58 +0000166 public:
Daniel Dunbar30382042010-05-22 00:37:18 +0000167 Assemble(const ToolChain &TC) : Common("gcc::Assemble",
168 "assembler (via gcc)", TC) {}
Daniel Dunbar9c073ff2009-03-17 22:07:58 +0000169
Daniel Dunbar9c073ff2009-03-17 22:07:58 +0000170 virtual bool hasIntegratedCPP() const { return false; }
Daniel Dunbar47ac7d22009-03-18 06:00:36 +0000171
Daniel Dunbar82b51cc2010-01-25 22:35:08 +0000172 virtual void RenderExtraToolArgs(const JobAction &JA,
Reid Klecknerdd0b3c42013-06-17 13:59:19 +0000173 llvm::opt::ArgStringList &CmdArgs) const;
Daniel Dunbar9c073ff2009-03-17 22:07:58 +0000174 };
175
Duncan Sands92dd1912010-05-11 20:16:05 +0000176 class LLVM_LIBRARY_VISIBILITY Link : public Common {
Daniel Dunbar9c073ff2009-03-17 22:07:58 +0000177 public:
Daniel Dunbar30382042010-05-22 00:37:18 +0000178 Link(const ToolChain &TC) : Common("gcc::Link",
179 "linker (via gcc)", TC) {}
Daniel Dunbar9c073ff2009-03-17 22:07:58 +0000180
Daniel Dunbar9c073ff2009-03-17 22:07:58 +0000181 virtual bool hasIntegratedCPP() const { return false; }
Chad Rosier8ba9a622012-03-07 00:30:40 +0000182 virtual bool isLinkJob() const { return true; }
Daniel Dunbar47ac7d22009-03-18 06:00:36 +0000183
Daniel Dunbar82b51cc2010-01-25 22:35:08 +0000184 virtual void RenderExtraToolArgs(const JobAction &JA,
Reid Klecknerdd0b3c42013-06-17 13:59:19 +0000185 llvm::opt::ArgStringList &CmdArgs) const;
Daniel Dunbar9c073ff2009-03-17 22:07:58 +0000186 };
Daniel Dunbar31b1e542009-03-17 22:45:24 +0000187} // end namespace gcc
Daniel Dunbar9c073ff2009-03-17 22:07:58 +0000188
Tony Linthicum96319392011-12-12 21:14:55 +0000189namespace hexagon {
190 // For Hexagon, we do not need to instantiate tools for PreProcess, PreCompile and Compile.
191 // We simply use "clang -cc1" for those actions.
192 class LLVM_LIBRARY_VISIBILITY Assemble : public Tool {
193 public:
194 Assemble(const ToolChain &TC) : Tool("hexagon::Assemble",
195 "hexagon-as", TC) {}
196
197 virtual bool hasIntegratedCPP() const { return false; }
198
199 virtual void RenderExtraToolArgs(const JobAction &JA,
Reid Klecknerdd0b3c42013-06-17 13:59:19 +0000200 llvm::opt::ArgStringList &CmdArgs) const;
Tony Linthicum96319392011-12-12 21:14:55 +0000201 virtual void ConstructJob(Compilation &C, const JobAction &JA,
202 const InputInfo &Output,
203 const InputInfoList &Inputs,
Reid Klecknerdd0b3c42013-06-17 13:59:19 +0000204 const llvm::opt::ArgList &TCArgs,
Tony Linthicum96319392011-12-12 21:14:55 +0000205 const char *LinkingOutput) const;
206 };
207
208 class LLVM_LIBRARY_VISIBILITY Link : public Tool {
209 public:
210 Link(const ToolChain &TC) : Tool("hexagon::Link",
211 "hexagon-ld", TC) {}
212
213 virtual bool hasIntegratedCPP() const { return false; }
Chad Rosier8ba9a622012-03-07 00:30:40 +0000214 virtual bool isLinkJob() const { return true; }
Tony Linthicum96319392011-12-12 21:14:55 +0000215
216 virtual void RenderExtraToolArgs(const JobAction &JA,
Reid Klecknerdd0b3c42013-06-17 13:59:19 +0000217 llvm::opt::ArgStringList &CmdArgs) const;
Tony Linthicum96319392011-12-12 21:14:55 +0000218 virtual void ConstructJob(Compilation &C, const JobAction &JA,
219 const InputInfo &Output,
220 const InputInfoList &Inputs,
Reid Klecknerdd0b3c42013-06-17 13:59:19 +0000221 const llvm::opt::ArgList &TCArgs,
Tony Linthicum96319392011-12-12 21:14:55 +0000222 const char *LinkingOutput) const;
223 };
224} // end namespace hexagon.
225
226
Daniel Dunbarff7488d2009-03-20 00:52:38 +0000227namespace darwin {
Rafael Espindolacfed8282012-10-31 18:51:07 +0000228 llvm::Triple::ArchType getArchTypeForDarwinArchName(StringRef Str);
229
Duncan Sands92dd1912010-05-11 20:16:05 +0000230 class LLVM_LIBRARY_VISIBILITY DarwinTool : public Tool {
David Blaikie99ba9e32011-12-20 02:48:34 +0000231 virtual void anchor();
Daniel Dunbarfbefe6b2009-09-09 18:36:20 +0000232 protected:
Reid Klecknerdd0b3c42013-06-17 13:59:19 +0000233 void AddDarwinArch(const llvm::opt::ArgList &Args,
234 llvm::opt::ArgStringList &CmdArgs) const;
Daniel Dunbarfbefe6b2009-09-09 18:36:20 +0000235
236 const toolchains::Darwin &getDarwinToolChain() const {
237 return reinterpret_cast<const toolchains::Darwin&>(getToolChain());
238 }
239
240 public:
Daniel Dunbar30382042010-05-22 00:37:18 +0000241 DarwinTool(const char *Name, const char *ShortName,
242 const ToolChain &TC) : Tool(Name, ShortName, TC) {}
Daniel Dunbarfbefe6b2009-09-09 18:36:20 +0000243 };
244
Duncan Sands92dd1912010-05-11 20:16:05 +0000245 class LLVM_LIBRARY_VISIBILITY Assemble : public DarwinTool {
Daniel Dunbar8cac5f72009-03-20 16:06:39 +0000246 public:
Daniel Dunbar30382042010-05-22 00:37:18 +0000247 Assemble(const ToolChain &TC) : DarwinTool("darwin::Assemble",
248 "assembler", TC) {}
Daniel Dunbar8cac5f72009-03-20 16:06:39 +0000249
Daniel Dunbar8cac5f72009-03-20 16:06:39 +0000250 virtual bool hasIntegratedCPP() const { return false; }
251
252 virtual void ConstructJob(Compilation &C, const JobAction &JA,
Mike Stump1eb44332009-09-09 15:08:12 +0000253 const InputInfo &Output,
254 const InputInfoList &Inputs,
Reid Klecknerdd0b3c42013-06-17 13:59:19 +0000255 const llvm::opt::ArgList &TCArgs,
Daniel Dunbar8cac5f72009-03-20 16:06:39 +0000256 const char *LinkingOutput) const;
257 };
258
Duncan Sands92dd1912010-05-11 20:16:05 +0000259 class LLVM_LIBRARY_VISIBILITY Link : public DarwinTool {
Bill Wendling6acf8b42012-10-02 18:02:50 +0000260 bool NeedsTempPath(const InputInfoList &Inputs) const;
Reid Klecknerdd0b3c42013-06-17 13:59:19 +0000261 void AddLinkArgs(Compilation &C, const llvm::opt::ArgList &Args,
262 llvm::opt::ArgStringList &CmdArgs,
263 const InputInfoList &Inputs) const;
Daniel Dunbar02633b52009-03-26 16:23:12 +0000264
Daniel Dunbar02633b52009-03-26 16:23:12 +0000265 public:
Daniel Dunbar30382042010-05-22 00:37:18 +0000266 Link(const ToolChain &TC) : DarwinTool("darwin::Link", "linker", TC) {}
Daniel Dunbar02633b52009-03-26 16:23:12 +0000267
Daniel Dunbar02633b52009-03-26 16:23:12 +0000268 virtual bool hasIntegratedCPP() const { return false; }
Chad Rosier8ba9a622012-03-07 00:30:40 +0000269 virtual bool isLinkJob() const { return true; }
Daniel Dunbar02633b52009-03-26 16:23:12 +0000270
271 virtual void ConstructJob(Compilation &C, const JobAction &JA,
Mike Stump1eb44332009-09-09 15:08:12 +0000272 const InputInfo &Output,
273 const InputInfoList &Inputs,
Reid Klecknerdd0b3c42013-06-17 13:59:19 +0000274 const llvm::opt::ArgList &TCArgs,
Daniel Dunbar02633b52009-03-26 16:23:12 +0000275 const char *LinkingOutput) const;
276 };
277
Duncan Sands92dd1912010-05-11 20:16:05 +0000278 class LLVM_LIBRARY_VISIBILITY Lipo : public DarwinTool {
Daniel Dunbarff7488d2009-03-20 00:52:38 +0000279 public:
Daniel Dunbar30382042010-05-22 00:37:18 +0000280 Lipo(const ToolChain &TC) : DarwinTool("darwin::Lipo", "lipo", TC) {}
Daniel Dunbarff7488d2009-03-20 00:52:38 +0000281
Daniel Dunbarff7488d2009-03-20 00:52:38 +0000282 virtual bool hasIntegratedCPP() const { return false; }
283
284 virtual void ConstructJob(Compilation &C, const JobAction &JA,
Mike Stump1eb44332009-09-09 15:08:12 +0000285 const InputInfo &Output,
286 const InputInfoList &Inputs,
Reid Klecknerdd0b3c42013-06-17 13:59:19 +0000287 const llvm::opt::ArgList &TCArgs,
Daniel Dunbarff7488d2009-03-20 00:52:38 +0000288 const char *LinkingOutput) const;
289 };
Daniel Dunbar6e0f2542010-06-04 18:28:36 +0000290
291 class LLVM_LIBRARY_VISIBILITY Dsymutil : public DarwinTool {
292 public:
293 Dsymutil(const ToolChain &TC) : DarwinTool("darwin::Dsymutil",
294 "dsymutil", TC) {}
295
Daniel Dunbar6e0f2542010-06-04 18:28:36 +0000296 virtual bool hasIntegratedCPP() const { return false; }
Chad Rosier75dbc712013-02-01 18:30:26 +0000297 virtual bool isDsymutilJob() const { return true; }
Daniel Dunbar6e0f2542010-06-04 18:28:36 +0000298
299 virtual void ConstructJob(Compilation &C, const JobAction &JA,
Daniel Dunbar6e0f2542010-06-04 18:28:36 +0000300 const InputInfo &Output,
301 const InputInfoList &Inputs,
Reid Klecknerdd0b3c42013-06-17 13:59:19 +0000302 const llvm::opt::ArgList &TCArgs,
Daniel Dunbar6e0f2542010-06-04 18:28:36 +0000303 const char *LinkingOutput) const;
304 };
Eric Christopherf8571862011-08-23 17:56:55 +0000305
306 class LLVM_LIBRARY_VISIBILITY VerifyDebug : public DarwinTool {
307 public:
308 VerifyDebug(const ToolChain &TC) : DarwinTool("darwin::VerifyDebug",
Eric Christopher27e2b982012-12-18 00:31:10 +0000309 "dwarfdump", TC) {}
Eric Christopherf8571862011-08-23 17:56:55 +0000310
311 virtual bool hasIntegratedCPP() const { return false; }
312
313 virtual void ConstructJob(Compilation &C, const JobAction &JA,
Eric Christopher27e2b982012-12-18 00:31:10 +0000314 const InputInfo &Output,
315 const InputInfoList &Inputs,
Reid Klecknerdd0b3c42013-06-17 13:59:19 +0000316 const llvm::opt::ArgList &TCArgs,
Eric Christopher27e2b982012-12-18 00:31:10 +0000317 const char *LinkingOutput) const;
Eric Christopherf8571862011-08-23 17:56:55 +0000318 };
319
Daniel Dunbarff7488d2009-03-20 00:52:38 +0000320}
321
Daniel Dunbarf7b8eec2009-06-29 20:52:51 +0000322 /// openbsd -- Directly call GNU Binutils assembler and linker
323namespace openbsd {
Duncan Sands92dd1912010-05-11 20:16:05 +0000324 class LLVM_LIBRARY_VISIBILITY Assemble : public Tool {
Daniel Dunbarf7b8eec2009-06-29 20:52:51 +0000325 public:
Daniel Dunbar30382042010-05-22 00:37:18 +0000326 Assemble(const ToolChain &TC) : Tool("openbsd::Assemble", "assembler",
327 TC) {}
Daniel Dunbarf7b8eec2009-06-29 20:52:51 +0000328
Daniel Dunbarf7b8eec2009-06-29 20:52:51 +0000329 virtual bool hasIntegratedCPP() const { return false; }
330
331 virtual void ConstructJob(Compilation &C, const JobAction &JA,
Mike Stump1eb44332009-09-09 15:08:12 +0000332 const InputInfo &Output,
333 const InputInfoList &Inputs,
Reid Klecknerdd0b3c42013-06-17 13:59:19 +0000334 const llvm::opt::ArgList &TCArgs,
Daniel Dunbarf7b8eec2009-06-29 20:52:51 +0000335 const char *LinkingOutput) const;
336 };
Duncan Sands92dd1912010-05-11 20:16:05 +0000337 class LLVM_LIBRARY_VISIBILITY Link : public Tool {
Daniel Dunbarf7b8eec2009-06-29 20:52:51 +0000338 public:
Daniel Dunbar30382042010-05-22 00:37:18 +0000339 Link(const ToolChain &TC) : Tool("openbsd::Link", "linker", TC) {}
Daniel Dunbarf7b8eec2009-06-29 20:52:51 +0000340
Daniel Dunbarf7b8eec2009-06-29 20:52:51 +0000341 virtual bool hasIntegratedCPP() const { return false; }
Chad Rosier8ba9a622012-03-07 00:30:40 +0000342 virtual bool isLinkJob() const { return true; }
Daniel Dunbarf7b8eec2009-06-29 20:52:51 +0000343
344 virtual void ConstructJob(Compilation &C, const JobAction &JA,
Mike Stump1eb44332009-09-09 15:08:12 +0000345 const InputInfo &Output,
346 const InputInfoList &Inputs,
Reid Klecknerdd0b3c42013-06-17 13:59:19 +0000347 const llvm::opt::ArgList &TCArgs,
Daniel Dunbarf7b8eec2009-06-29 20:52:51 +0000348 const char *LinkingOutput) const;
349 };
Edward O'Callaghane7925a02009-08-22 01:06:46 +0000350} // end namespace openbsd
Daniel Dunbarf7b8eec2009-06-29 20:52:51 +0000351
Eli Friedman42f74f22012-08-08 23:57:20 +0000352 /// bitrig -- Directly call GNU Binutils assembler and linker
353namespace bitrig {
354 class LLVM_LIBRARY_VISIBILITY Assemble : public Tool {
355 public:
356 Assemble(const ToolChain &TC) : Tool("bitrig::Assemble", "assembler",
357 TC) {}
358
359 virtual bool hasIntegratedCPP() const { return false; }
360
361 virtual void ConstructJob(Compilation &C, const JobAction &JA,
362 const InputInfo &Output,
363 const InputInfoList &Inputs,
Reid Klecknerdd0b3c42013-06-17 13:59:19 +0000364 const llvm::opt::ArgList &TCArgs,
Eli Friedman42f74f22012-08-08 23:57:20 +0000365 const char *LinkingOutput) const;
366 };
367 class LLVM_LIBRARY_VISIBILITY Link : public Tool {
368 public:
369 Link(const ToolChain &TC) : Tool("bitrig::Link", "linker", TC) {}
370
371 virtual bool hasIntegratedCPP() const { return false; }
372 virtual bool isLinkJob() const { return true; }
373
374 virtual void ConstructJob(Compilation &C, const JobAction &JA,
375 const InputInfo &Output,
376 const InputInfoList &Inputs,
Reid Klecknerdd0b3c42013-06-17 13:59:19 +0000377 const llvm::opt::ArgList &TCArgs,
Eli Friedman42f74f22012-08-08 23:57:20 +0000378 const char *LinkingOutput) const;
379 };
380} // end namespace bitrig
381
Daniel Dunbar68a31d42009-03-31 17:45:15 +0000382 /// freebsd -- Directly call GNU Binutils assembler and linker
383namespace freebsd {
Duncan Sands92dd1912010-05-11 20:16:05 +0000384 class LLVM_LIBRARY_VISIBILITY Assemble : public Tool {
Daniel Dunbar68a31d42009-03-31 17:45:15 +0000385 public:
Daniel Dunbar30382042010-05-22 00:37:18 +0000386 Assemble(const ToolChain &TC) : Tool("freebsd::Assemble", "assembler",
387 TC) {}
Daniel Dunbar68a31d42009-03-31 17:45:15 +0000388
Daniel Dunbar68a31d42009-03-31 17:45:15 +0000389 virtual bool hasIntegratedCPP() const { return false; }
390
391 virtual void ConstructJob(Compilation &C, const JobAction &JA,
Mike Stump1eb44332009-09-09 15:08:12 +0000392 const InputInfo &Output,
393 const InputInfoList &Inputs,
Reid Klecknerdd0b3c42013-06-17 13:59:19 +0000394 const llvm::opt::ArgList &TCArgs,
Daniel Dunbar68a31d42009-03-31 17:45:15 +0000395 const char *LinkingOutput) const;
396 };
Duncan Sands92dd1912010-05-11 20:16:05 +0000397 class LLVM_LIBRARY_VISIBILITY Link : public Tool {
Daniel Dunbar008f54a2009-04-01 19:36:32 +0000398 public:
Daniel Dunbar30382042010-05-22 00:37:18 +0000399 Link(const ToolChain &TC) : Tool("freebsd::Link", "linker", TC) {}
Daniel Dunbar008f54a2009-04-01 19:36:32 +0000400
Daniel Dunbar008f54a2009-04-01 19:36:32 +0000401 virtual bool hasIntegratedCPP() const { return false; }
Chad Rosier8ba9a622012-03-07 00:30:40 +0000402 virtual bool isLinkJob() const { return true; }
Daniel Dunbar008f54a2009-04-01 19:36:32 +0000403
404 virtual void ConstructJob(Compilation &C, const JobAction &JA,
Mike Stump1eb44332009-09-09 15:08:12 +0000405 const InputInfo &Output,
406 const InputInfoList &Inputs,
Reid Klecknerdd0b3c42013-06-17 13:59:19 +0000407 const llvm::opt::ArgList &TCArgs,
Daniel Dunbar008f54a2009-04-01 19:36:32 +0000408 const char *LinkingOutput) const;
409 };
Edward O'Callaghane7925a02009-08-22 01:06:46 +0000410} // end namespace freebsd
411
Benjamin Kramer8e50a962011-02-02 18:59:27 +0000412 /// netbsd -- Directly call GNU Binutils assembler and linker
413namespace netbsd {
414 class LLVM_LIBRARY_VISIBILITY Assemble : public Tool {
Joerg Sonnenberger182564c2011-05-16 13:35:02 +0000415
Benjamin Kramer8e50a962011-02-02 18:59:27 +0000416 public:
Joerg Sonnenberger1bd91372012-01-26 22:27:52 +0000417 Assemble(const ToolChain &TC)
418 : Tool("netbsd::Assemble", "assembler", TC) {}
Benjamin Kramer8e50a962011-02-02 18:59:27 +0000419
420 virtual bool hasIntegratedCPP() const { return false; }
421
422 virtual void ConstructJob(Compilation &C, const JobAction &JA,
423 const InputInfo &Output,
424 const InputInfoList &Inputs,
Reid Klecknerdd0b3c42013-06-17 13:59:19 +0000425 const llvm::opt::ArgList &TCArgs,
Benjamin Kramer8e50a962011-02-02 18:59:27 +0000426 const char *LinkingOutput) const;
427 };
428 class LLVM_LIBRARY_VISIBILITY Link : public Tool {
Joerg Sonnenberger182564c2011-05-16 13:35:02 +0000429
Benjamin Kramer8e50a962011-02-02 18:59:27 +0000430 public:
Joerg Sonnenberger1bd91372012-01-26 22:27:52 +0000431 Link(const ToolChain &TC)
432 : Tool("netbsd::Link", "linker", TC) {}
Benjamin Kramer8e50a962011-02-02 18:59:27 +0000433
434 virtual bool hasIntegratedCPP() const { return false; }
Chad Rosier8ba9a622012-03-07 00:30:40 +0000435 virtual bool isLinkJob() const { return true; }
Benjamin Kramer8e50a962011-02-02 18:59:27 +0000436
437 virtual void ConstructJob(Compilation &C, const JobAction &JA,
438 const InputInfo &Output,
439 const InputInfoList &Inputs,
Reid Klecknerdd0b3c42013-06-17 13:59:19 +0000440 const llvm::opt::ArgList &TCArgs,
Benjamin Kramer8e50a962011-02-02 18:59:27 +0000441 const char *LinkingOutput) const;
442 };
443} // end namespace netbsd
444
Thomas Schwinge577bb0a2013-03-28 19:04:25 +0000445 /// Directly call GNU Binutils' assembler and linker.
446namespace gnutools {
Rafael Espindolaba30bbe2010-08-10 00:25:48 +0000447 class LLVM_LIBRARY_VISIBILITY Assemble : public Tool {
448 public:
Thomas Schwinge577bb0a2013-03-28 19:04:25 +0000449 Assemble(const ToolChain &TC) : Tool("GNU::Assemble", "assembler", TC) {}
Rafael Espindolaba30bbe2010-08-10 00:25:48 +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,
Reid Klecknerdd0b3c42013-06-17 13:59:19 +0000456 const llvm::opt::ArgList &TCArgs,
Rafael Espindolaba30bbe2010-08-10 00:25:48 +0000457 const char *LinkingOutput) const;
458 };
Rafael Espindolac1da9812010-11-07 20:14:31 +0000459 class LLVM_LIBRARY_VISIBILITY Link : public Tool {
460 public:
Thomas Schwinge577bb0a2013-03-28 19:04:25 +0000461 Link(const ToolChain &TC) : Tool("GNU::Link", "linker", TC) {}
Rafael Espindolac1da9812010-11-07 20:14:31 +0000462
463 virtual bool hasIntegratedCPP() const { return false; }
Chad Rosier8ba9a622012-03-07 00:30:40 +0000464 virtual bool isLinkJob() const { return true; }
Rafael Espindolac1da9812010-11-07 20:14:31 +0000465
466 virtual void ConstructJob(Compilation &C, const JobAction &JA,
467 const InputInfo &Output,
468 const InputInfoList &Inputs,
Reid Klecknerdd0b3c42013-06-17 13:59:19 +0000469 const llvm::opt::ArgList &TCArgs,
Rafael Espindolac1da9812010-11-07 20:14:31 +0000470 const char *LinkingOutput) const;
471 };
Rafael Espindolaba30bbe2010-08-10 00:25:48 +0000472}
Chris Lattner38e317d2010-07-07 16:01:42 +0000473 /// minix -- Directly call GNU Binutils assembler and linker
474namespace minix {
475 class LLVM_LIBRARY_VISIBILITY Assemble : public Tool {
476 public:
477 Assemble(const ToolChain &TC) : Tool("minix::Assemble", "assembler",
478 TC) {}
479
Chris Lattner38e317d2010-07-07 16:01:42 +0000480 virtual bool hasIntegratedCPP() const { return false; }
481
482 virtual void ConstructJob(Compilation &C, const JobAction &JA,
Chris Lattner38e317d2010-07-07 16:01:42 +0000483 const InputInfo &Output,
484 const InputInfoList &Inputs,
Reid Klecknerdd0b3c42013-06-17 13:59:19 +0000485 const llvm::opt::ArgList &TCArgs,
Chris Lattner38e317d2010-07-07 16:01:42 +0000486 const char *LinkingOutput) const;
487 };
488 class LLVM_LIBRARY_VISIBILITY Link : public Tool {
489 public:
490 Link(const ToolChain &TC) : Tool("minix::Link", "linker", TC) {}
491
Chris Lattner38e317d2010-07-07 16:01:42 +0000492 virtual bool hasIntegratedCPP() const { return false; }
Chad Rosier8ba9a622012-03-07 00:30:40 +0000493 virtual bool isLinkJob() const { return true; }
Chris Lattner38e317d2010-07-07 16:01:42 +0000494
495 virtual void ConstructJob(Compilation &C, const JobAction &JA,
Chris Lattner38e317d2010-07-07 16:01:42 +0000496 const InputInfo &Output,
497 const InputInfoList &Inputs,
Reid Klecknerdd0b3c42013-06-17 13:59:19 +0000498 const llvm::opt::ArgList &TCArgs,
Chris Lattner38e317d2010-07-07 16:01:42 +0000499 const char *LinkingOutput) const;
500 };
501} // end namespace minix
502
David Chisnall31c46902012-02-15 13:39:01 +0000503 /// solaris -- Directly call Solaris assembler and linker
504namespace solaris {
505 class LLVM_LIBRARY_VISIBILITY Assemble : public Tool {
506 public:
507 Assemble(const ToolChain &TC) : Tool("solaris::Assemble", "assembler",
508 TC) {}
509
510 virtual bool hasIntegratedCPP() const { return false; }
511
512 virtual void ConstructJob(Compilation &C, const JobAction &JA,
513 const InputInfo &Output,
514 const InputInfoList &Inputs,
Reid Klecknerdd0b3c42013-06-17 13:59:19 +0000515 const llvm::opt::ArgList &TCArgs,
David Chisnall31c46902012-02-15 13:39:01 +0000516 const char *LinkingOutput) const;
517 };
518 class LLVM_LIBRARY_VISIBILITY Link : public Tool {
519 public:
520 Link(const ToolChain &TC) : Tool("solaris::Link", "linker", TC) {}
521
522 virtual bool hasIntegratedCPP() const { return false; }
Chad Rosier8ba9a622012-03-07 00:30:40 +0000523 virtual bool isLinkJob() const { return true; }
David Chisnall31c46902012-02-15 13:39:01 +0000524
525 virtual void ConstructJob(Compilation &C, const JobAction &JA,
526 const InputInfo &Output,
527 const InputInfoList &Inputs,
Reid Klecknerdd0b3c42013-06-17 13:59:19 +0000528 const llvm::opt::ArgList &TCArgs,
David Chisnall31c46902012-02-15 13:39:01 +0000529 const char *LinkingOutput) const;
530 };
David Chisnallbadb6cd2012-02-15 16:25:46 +0000531} // end namespace solaris
David Chisnall31c46902012-02-15 13:39:01 +0000532
Edward O'Callaghane7925a02009-08-22 01:06:46 +0000533 /// auroraux -- Directly call GNU Binutils assembler and linker
534namespace auroraux {
Duncan Sands92dd1912010-05-11 20:16:05 +0000535 class LLVM_LIBRARY_VISIBILITY Assemble : public Tool {
Edward O'Callaghane7925a02009-08-22 01:06:46 +0000536 public:
Daniel Dunbar30382042010-05-22 00:37:18 +0000537 Assemble(const ToolChain &TC) : Tool("auroraux::Assemble", "assembler",
538 TC) {}
Edward O'Callaghane7925a02009-08-22 01:06:46 +0000539
Edward O'Callaghane7925a02009-08-22 01:06:46 +0000540 virtual bool hasIntegratedCPP() const { return false; }
541
542 virtual void ConstructJob(Compilation &C, const JobAction &JA,
Mike Stump1eb44332009-09-09 15:08:12 +0000543 const InputInfo &Output,
544 const InputInfoList &Inputs,
Reid Klecknerdd0b3c42013-06-17 13:59:19 +0000545 const llvm::opt::ArgList &TCArgs,
Edward O'Callaghane7925a02009-08-22 01:06:46 +0000546 const char *LinkingOutput) const;
547 };
Duncan Sands92dd1912010-05-11 20:16:05 +0000548 class LLVM_LIBRARY_VISIBILITY Link : public Tool {
Edward O'Callaghane7925a02009-08-22 01:06:46 +0000549 public:
Daniel Dunbar30382042010-05-22 00:37:18 +0000550 Link(const ToolChain &TC) : Tool("auroraux::Link", "linker", TC) {}
Edward O'Callaghane7925a02009-08-22 01:06:46 +0000551
Edward O'Callaghane7925a02009-08-22 01:06:46 +0000552 virtual bool hasIntegratedCPP() const { return false; }
Chad Rosier8ba9a622012-03-07 00:30:40 +0000553 virtual bool isLinkJob() const { return true; }
Edward O'Callaghane7925a02009-08-22 01:06:46 +0000554
555 virtual void ConstructJob(Compilation &C, const JobAction &JA,
Mike Stump1eb44332009-09-09 15:08:12 +0000556 const InputInfo &Output,
557 const InputInfoList &Inputs,
Reid Klecknerdd0b3c42013-06-17 13:59:19 +0000558 const llvm::opt::ArgList &TCArgs,
Edward O'Callaghane7925a02009-08-22 01:06:46 +0000559 const char *LinkingOutput) const;
560 };
561} // end namespace auroraux
Daniel Dunbar68a31d42009-03-31 17:45:15 +0000562
Daniel Dunbar11e1b402009-05-02 18:28:39 +0000563 /// dragonfly -- Directly call GNU Binutils assembler and linker
564namespace dragonfly {
Duncan Sands92dd1912010-05-11 20:16:05 +0000565 class LLVM_LIBRARY_VISIBILITY Assemble : public Tool {
Daniel Dunbar11e1b402009-05-02 18:28:39 +0000566 public:
Daniel Dunbar30382042010-05-22 00:37:18 +0000567 Assemble(const ToolChain &TC) : Tool("dragonfly::Assemble", "assembler",
568 TC) {}
Daniel Dunbar11e1b402009-05-02 18:28:39 +0000569
Daniel Dunbar11e1b402009-05-02 18:28:39 +0000570 virtual bool hasIntegratedCPP() const { return false; }
571
572 virtual void ConstructJob(Compilation &C, const JobAction &JA,
Mike Stump1eb44332009-09-09 15:08:12 +0000573 const InputInfo &Output,
574 const InputInfoList &Inputs,
Reid Klecknerdd0b3c42013-06-17 13:59:19 +0000575 const llvm::opt::ArgList &TCArgs,
Daniel Dunbar11e1b402009-05-02 18:28:39 +0000576 const char *LinkingOutput) const;
577 };
Duncan Sands92dd1912010-05-11 20:16:05 +0000578 class LLVM_LIBRARY_VISIBILITY Link : public Tool {
Daniel Dunbar11e1b402009-05-02 18:28:39 +0000579 public:
Daniel Dunbar30382042010-05-22 00:37:18 +0000580 Link(const ToolChain &TC) : Tool("dragonfly::Link", "linker", TC) {}
Daniel Dunbar11e1b402009-05-02 18:28:39 +0000581
Daniel Dunbar11e1b402009-05-02 18:28:39 +0000582 virtual bool hasIntegratedCPP() const { return false; }
Chad Rosier8ba9a622012-03-07 00:30:40 +0000583 virtual bool isLinkJob() const { return true; }
Daniel Dunbar11e1b402009-05-02 18:28:39 +0000584
585 virtual void ConstructJob(Compilation &C, const JobAction &JA,
Mike Stump1eb44332009-09-09 15:08:12 +0000586 const InputInfo &Output,
587 const InputInfoList &Inputs,
Reid Klecknerdd0b3c42013-06-17 13:59:19 +0000588 const llvm::opt::ArgList &TCArgs,
Daniel Dunbar11e1b402009-05-02 18:28:39 +0000589 const char *LinkingOutput) const;
590 };
Edward O'Callaghane7925a02009-08-22 01:06:46 +0000591} // end namespace dragonfly
Daniel Dunbar11e1b402009-05-02 18:28:39 +0000592
Michael J. Spencerff58e362010-08-21 21:55:07 +0000593 /// Visual studio tools.
594namespace visualstudio {
595 class LLVM_LIBRARY_VISIBILITY Link : public Tool {
596 public:
597 Link(const ToolChain &TC) : Tool("visualstudio::Link", "linker", TC) {}
598
599 virtual bool hasIntegratedCPP() const { return false; }
Chad Rosier8ba9a622012-03-07 00:30:40 +0000600 virtual bool isLinkJob() const { return true; }
Michael J. Spencerff58e362010-08-21 21:55:07 +0000601
602 virtual void ConstructJob(Compilation &C, const JobAction &JA,
603 const InputInfo &Output,
604 const InputInfoList &Inputs,
Reid Klecknerdd0b3c42013-06-17 13:59:19 +0000605 const llvm::opt::ArgList &TCArgs,
Michael J. Spencerff58e362010-08-21 21:55:07 +0000606 const char *LinkingOutput) const;
607 };
608} // end namespace visualstudio
609
Daniel Dunbar9c073ff2009-03-17 22:07:58 +0000610} // end namespace toolchains
611} // end namespace driver
612} // end namespace clang
613
Edward O'Callaghane7925a02009-08-22 01:06:46 +0000614#endif // CLANG_LIB_DRIVER_TOOLS_H_