blob: 98bde7435b39634b0ae2e62159b2ab71a09210b7 [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"
Daniel Dunbar9c073ff2009-03-17 22:07:58 +000016
17#include "llvm/Support/Compiler.h"
18
19namespace clang {
20namespace driver {
Douglas Gregordf91ef32009-04-18 00:34:01 +000021 class Driver;
22
Daniel Dunbar02633b52009-03-26 16:23:12 +000023namespace toolchains {
Daniel Dunbarf3955282009-09-04 18:34:51 +000024 class Darwin;
Daniel Dunbar02633b52009-03-26 16:23:12 +000025}
26
Daniel Dunbar985b8252009-03-17 22:18:43 +000027namespace tools {
Daniel Dunbar9c073ff2009-03-17 22:07:58 +000028
Daniel Dunbar20a9aa52010-05-20 21:30:13 +000029 /// \brief Clang compiler tool.
Duncan Sands92dd1912010-05-11 20:16:05 +000030 class LLVM_LIBRARY_VISIBILITY Clang : public Tool {
Douglas Gregordf91ef32009-04-18 00:34:01 +000031 void AddPreprocessingOptions(const Driver &D,
32 const ArgList &Args,
Daniel Dunbarc21c4852009-04-08 23:54:23 +000033 ArgStringList &CmdArgs,
34 const InputInfo &Output,
35 const InputInfoList &Inputs) const;
36
Daniel Dunbarb163ef72009-09-10 04:57:17 +000037 void AddARMTargetArgs(const ArgList &Args, ArgStringList &CmdArgs) const;
Eric Christophered734732010-03-02 02:41:08 +000038 void AddMIPSTargetArgs(const ArgList &Args, ArgStringList &CmdArgs) const;
Daniel Dunbar6acda162009-09-09 22:33:08 +000039 void AddX86TargetArgs(const ArgList &Args, ArgStringList &CmdArgs) const;
40
Daniel Dunbar9c073ff2009-03-17 22:07:58 +000041 public:
Daniel Dunbar30382042010-05-22 00:37:18 +000042 Clang(const ToolChain &TC) : Tool("clang", "clang frontend", TC) {}
Daniel Dunbar9c073ff2009-03-17 22:07:58 +000043
Daniel Dunbar60a53f22010-04-06 17:07:49 +000044 virtual bool hasGoodDiagnostics() const { return true; }
Daniel Dunbar8767cbc2010-02-03 03:07:56 +000045 virtual bool hasIntegratedAssembler() const { return true; }
Daniel Dunbar9c073ff2009-03-17 22:07:58 +000046 virtual bool hasIntegratedCPP() const { return true; }
Daniel Dunbar47ac7d22009-03-18 06:00:36 +000047
48 virtual void ConstructJob(Compilation &C, const JobAction &JA,
Mike Stump1eb44332009-09-09 15:08:12 +000049 const InputInfo &Output,
50 const InputInfoList &Inputs,
51 const ArgList &TCArgs,
Daniel Dunbar47ac7d22009-03-18 06:00:36 +000052 const char *LinkingOutput) const;
Daniel Dunbar9c073ff2009-03-17 22:07:58 +000053 };
54
Daniel Dunbar20a9aa52010-05-20 21:30:13 +000055 /// \brief Clang integrated assembler tool.
56 class LLVM_LIBRARY_VISIBILITY ClangAs : public Tool {
57 public:
Daniel Dunbar30382042010-05-22 00:37:18 +000058 ClangAs(const ToolChain &TC) : Tool("clang::as",
59 "clang integrated assembler", TC) {}
Daniel Dunbar20a9aa52010-05-20 21:30:13 +000060
Daniel Dunbar20a9aa52010-05-20 21:30:13 +000061 virtual bool hasGoodDiagnostics() const { return true; }
62 virtual bool hasIntegratedAssembler() const { return false; }
63 virtual bool hasIntegratedCPP() const { return false; }
64
65 virtual void ConstructJob(Compilation &C, const JobAction &JA,
Daniel Dunbar20a9aa52010-05-20 21:30:13 +000066 const InputInfo &Output,
67 const InputInfoList &Inputs,
68 const ArgList &TCArgs,
69 const char *LinkingOutput) const;
70 };
71
Daniel Dunbar31b1e542009-03-17 22:45:24 +000072 /// gcc - Generic GCC tool implementations.
73namespace gcc {
Duncan Sands92dd1912010-05-11 20:16:05 +000074 class LLVM_LIBRARY_VISIBILITY Common : public Tool {
Daniel Dunbar9c073ff2009-03-17 22:07:58 +000075 public:
Daniel Dunbar30382042010-05-22 00:37:18 +000076 Common(const char *Name, const char *ShortName,
77 const ToolChain &TC) : Tool(Name, ShortName, TC) {}
Daniel Dunbarb488c1d2009-03-18 08:07:30 +000078
79 virtual void ConstructJob(Compilation &C, const JobAction &JA,
Mike Stump1eb44332009-09-09 15:08:12 +000080 const InputInfo &Output,
81 const InputInfoList &Inputs,
82 const ArgList &TCArgs,
Daniel Dunbarb488c1d2009-03-18 08:07:30 +000083 const char *LinkingOutput) const;
84
85 /// RenderExtraToolArgs - Render any arguments necessary to force
86 /// the particular tool mode.
Daniel Dunbar82b51cc2010-01-25 22:35:08 +000087 virtual void RenderExtraToolArgs(const JobAction &JA,
88 ArgStringList &CmdArgs) const = 0;
Daniel Dunbarb488c1d2009-03-18 08:07:30 +000089 };
90
Mike Stump1eb44332009-09-09 15:08:12 +000091
Duncan Sands92dd1912010-05-11 20:16:05 +000092 class LLVM_LIBRARY_VISIBILITY Preprocess : public Common {
Daniel Dunbarb488c1d2009-03-18 08:07:30 +000093 public:
Daniel Dunbar30382042010-05-22 00:37:18 +000094 Preprocess(const ToolChain &TC) : Common("gcc::Preprocess",
95 "gcc preprocessor", TC) {}
Daniel Dunbar9c073ff2009-03-17 22:07:58 +000096
Daniel Dunbar60a53f22010-04-06 17:07:49 +000097 virtual bool hasGoodDiagnostics() const { return true; }
Daniel Dunbar9c073ff2009-03-17 22:07:58 +000098 virtual bool hasIntegratedCPP() const { return false; }
Daniel Dunbar47ac7d22009-03-18 06:00:36 +000099
Daniel Dunbar82b51cc2010-01-25 22:35:08 +0000100 virtual void RenderExtraToolArgs(const JobAction &JA,
101 ArgStringList &CmdArgs) const;
Daniel Dunbar9c073ff2009-03-17 22:07:58 +0000102 };
103
Duncan Sands92dd1912010-05-11 20:16:05 +0000104 class LLVM_LIBRARY_VISIBILITY Precompile : public Common {
Daniel Dunbar9c073ff2009-03-17 22:07:58 +0000105 public:
Daniel Dunbar30382042010-05-22 00:37:18 +0000106 Precompile(const ToolChain &TC) : Common("gcc::Precompile",
107 "gcc precompile", TC) {}
Daniel Dunbar9c073ff2009-03-17 22:07:58 +0000108
Daniel Dunbar60a53f22010-04-06 17:07:49 +0000109 virtual bool hasGoodDiagnostics() const { return true; }
Daniel Dunbar9c073ff2009-03-17 22:07:58 +0000110 virtual bool hasIntegratedCPP() const { return true; }
Daniel Dunbar47ac7d22009-03-18 06:00:36 +0000111
Daniel Dunbar82b51cc2010-01-25 22:35:08 +0000112 virtual void RenderExtraToolArgs(const JobAction &JA,
113 ArgStringList &CmdArgs) const;
Daniel Dunbar9c073ff2009-03-17 22:07:58 +0000114 };
115
Duncan Sands92dd1912010-05-11 20:16:05 +0000116 class LLVM_LIBRARY_VISIBILITY Compile : public Common {
Daniel Dunbar9c073ff2009-03-17 22:07:58 +0000117 public:
Daniel Dunbar30382042010-05-22 00:37:18 +0000118 Compile(const ToolChain &TC) : Common("gcc::Compile",
119 "gcc frontend", TC) {}
Daniel Dunbar9c073ff2009-03-17 22:07:58 +0000120
Daniel Dunbar60a53f22010-04-06 17:07:49 +0000121 virtual bool hasGoodDiagnostics() const { return true; }
Daniel Dunbar9c073ff2009-03-17 22:07:58 +0000122 virtual bool hasIntegratedCPP() const { return true; }
Daniel Dunbar47ac7d22009-03-18 06:00:36 +0000123
Daniel Dunbar82b51cc2010-01-25 22:35:08 +0000124 virtual void RenderExtraToolArgs(const JobAction &JA,
125 ArgStringList &CmdArgs) const;
Daniel Dunbar9c073ff2009-03-17 22:07:58 +0000126 };
127
Duncan Sands92dd1912010-05-11 20:16:05 +0000128 class LLVM_LIBRARY_VISIBILITY Assemble : public Common {
Daniel Dunbar9c073ff2009-03-17 22:07:58 +0000129 public:
Daniel Dunbar30382042010-05-22 00:37:18 +0000130 Assemble(const ToolChain &TC) : Common("gcc::Assemble",
131 "assembler (via gcc)", TC) {}
Daniel Dunbar9c073ff2009-03-17 22:07:58 +0000132
Daniel Dunbar9c073ff2009-03-17 22:07:58 +0000133 virtual bool hasIntegratedCPP() const { return false; }
Daniel Dunbar47ac7d22009-03-18 06:00:36 +0000134
Daniel Dunbar82b51cc2010-01-25 22:35:08 +0000135 virtual void RenderExtraToolArgs(const JobAction &JA,
136 ArgStringList &CmdArgs) const;
Daniel Dunbar9c073ff2009-03-17 22:07:58 +0000137 };
138
Duncan Sands92dd1912010-05-11 20:16:05 +0000139 class LLVM_LIBRARY_VISIBILITY Link : public Common {
Daniel Dunbar9c073ff2009-03-17 22:07:58 +0000140 public:
Daniel Dunbar30382042010-05-22 00:37:18 +0000141 Link(const ToolChain &TC) : Common("gcc::Link",
142 "linker (via gcc)", TC) {}
Daniel Dunbar9c073ff2009-03-17 22:07:58 +0000143
Daniel Dunbar9c073ff2009-03-17 22:07:58 +0000144 virtual bool hasIntegratedCPP() const { return false; }
Daniel Dunbar47ac7d22009-03-18 06:00:36 +0000145
Daniel Dunbar82b51cc2010-01-25 22:35:08 +0000146 virtual void RenderExtraToolArgs(const JobAction &JA,
147 ArgStringList &CmdArgs) const;
Daniel Dunbar9c073ff2009-03-17 22:07:58 +0000148 };
Daniel Dunbar31b1e542009-03-17 22:45:24 +0000149} // end namespace gcc
Daniel Dunbar9c073ff2009-03-17 22:07:58 +0000150
Daniel Dunbarff7488d2009-03-20 00:52:38 +0000151namespace darwin {
Duncan Sands92dd1912010-05-11 20:16:05 +0000152 class LLVM_LIBRARY_VISIBILITY DarwinTool : public Tool {
Daniel Dunbarfbefe6b2009-09-09 18:36:20 +0000153 protected:
154 void AddDarwinArch(const ArgList &Args, ArgStringList &CmdArgs) const;
Daniel Dunbarfbefe6b2009-09-09 18:36:20 +0000155
156 const toolchains::Darwin &getDarwinToolChain() const {
157 return reinterpret_cast<const toolchains::Darwin&>(getToolChain());
158 }
159
160 public:
Daniel Dunbar30382042010-05-22 00:37:18 +0000161 DarwinTool(const char *Name, const char *ShortName,
162 const ToolChain &TC) : Tool(Name, ShortName, TC) {}
Daniel Dunbarfbefe6b2009-09-09 18:36:20 +0000163 };
164
Duncan Sands92dd1912010-05-11 20:16:05 +0000165 class LLVM_LIBRARY_VISIBILITY CC1 : public DarwinTool {
Daniel Dunbara5a7bd02009-03-30 00:34:04 +0000166 public:
Mike Stump1eb44332009-09-09 15:08:12 +0000167 static const char *getBaseInputName(const ArgList &Args,
Daniel Dunbara5a7bd02009-03-30 00:34:04 +0000168 const InputInfoList &Input);
Mike Stump1eb44332009-09-09 15:08:12 +0000169 static const char *getBaseInputStem(const ArgList &Args,
Daniel Dunbara5a7bd02009-03-30 00:34:04 +0000170 const InputInfoList &Input);
Mike Stump1eb44332009-09-09 15:08:12 +0000171 static const char *getDependencyFileName(const ArgList &Args,
Daniel Dunbara5a7bd02009-03-30 00:34:04 +0000172 const InputInfoList &Inputs);
173
Daniel Dunbar40f12652009-03-29 17:08:39 +0000174 protected:
175 const char *getCC1Name(types::ID Type) const;
176
Daniel Dunbara3ec60e2009-03-29 18:40:18 +0000177 void AddCC1Args(const ArgList &Args, ArgStringList &CmdArgs) const;
Daniel Dunbar40f12652009-03-29 17:08:39 +0000178 void AddCC1OptionsArgs(const ArgList &Args, ArgStringList &CmdArgs,
179 const InputInfoList &Inputs,
Daniel Dunbara3ec60e2009-03-29 18:40:18 +0000180 const ArgStringList &OutputArgs) const;
Daniel Dunbar40f12652009-03-29 17:08:39 +0000181 void AddCPPOptionsArgs(const ArgList &Args, ArgStringList &CmdArgs,
182 const InputInfoList &Inputs,
Daniel Dunbara3ec60e2009-03-29 18:40:18 +0000183 const ArgStringList &OutputArgs) const;
Mike Stump1eb44332009-09-09 15:08:12 +0000184 void AddCPPUniqueOptionsArgs(const ArgList &Args,
Daniel Dunbara3ec60e2009-03-29 18:40:18 +0000185 ArgStringList &CmdArgs,
186 const InputInfoList &Inputs) const;
187 void AddCPPArgs(const ArgList &Args, ArgStringList &CmdArgs) const;
Daniel Dunbar40f12652009-03-29 17:08:39 +0000188
189 public:
Daniel Dunbar30382042010-05-22 00:37:18 +0000190 CC1(const char *Name, const char *ShortName,
191 const ToolChain &TC) : DarwinTool(Name, ShortName, TC) {}
Daniel Dunbar40f12652009-03-29 17:08:39 +0000192
Daniel Dunbar60a53f22010-04-06 17:07:49 +0000193 virtual bool hasGoodDiagnostics() const { return true; }
Daniel Dunbar40f12652009-03-29 17:08:39 +0000194 virtual bool hasIntegratedCPP() const { return true; }
195 };
196
Duncan Sands92dd1912010-05-11 20:16:05 +0000197 class LLVM_LIBRARY_VISIBILITY Preprocess : public CC1 {
Daniel Dunbar40f12652009-03-29 17:08:39 +0000198 public:
Daniel Dunbar30382042010-05-22 00:37:18 +0000199 Preprocess(const ToolChain &TC) : CC1("darwin::Preprocess",
200 "gcc preprocessor", TC) {}
Daniel Dunbar40f12652009-03-29 17:08:39 +0000201
202 virtual void ConstructJob(Compilation &C, const JobAction &JA,
Mike Stump1eb44332009-09-09 15:08:12 +0000203 const InputInfo &Output,
204 const InputInfoList &Inputs,
205 const ArgList &TCArgs,
Daniel Dunbar40f12652009-03-29 17:08:39 +0000206 const char *LinkingOutput) const;
207 };
208
Duncan Sands92dd1912010-05-11 20:16:05 +0000209 class LLVM_LIBRARY_VISIBILITY Compile : public CC1 {
Daniel Dunbar40f12652009-03-29 17:08:39 +0000210 public:
Daniel Dunbar30382042010-05-22 00:37:18 +0000211 Compile(const ToolChain &TC) : CC1("darwin::Compile", "gcc frontend", TC) {}
Daniel Dunbar40f12652009-03-29 17:08:39 +0000212
213 virtual void ConstructJob(Compilation &C, const JobAction &JA,
Mike Stump1eb44332009-09-09 15:08:12 +0000214 const InputInfo &Output,
215 const InputInfoList &Inputs,
216 const ArgList &TCArgs,
Daniel Dunbar40f12652009-03-29 17:08:39 +0000217 const char *LinkingOutput) const;
218 };
219
Duncan Sands92dd1912010-05-11 20:16:05 +0000220 class LLVM_LIBRARY_VISIBILITY Assemble : public DarwinTool {
Daniel Dunbar8cac5f72009-03-20 16:06:39 +0000221 public:
Daniel Dunbar30382042010-05-22 00:37:18 +0000222 Assemble(const ToolChain &TC) : DarwinTool("darwin::Assemble",
223 "assembler", TC) {}
Daniel Dunbar8cac5f72009-03-20 16:06:39 +0000224
Daniel Dunbar8cac5f72009-03-20 16:06:39 +0000225 virtual bool hasIntegratedCPP() const { return false; }
226
227 virtual void ConstructJob(Compilation &C, const JobAction &JA,
Mike Stump1eb44332009-09-09 15:08:12 +0000228 const InputInfo &Output,
229 const InputInfoList &Inputs,
230 const ArgList &TCArgs,
Daniel Dunbar8cac5f72009-03-20 16:06:39 +0000231 const char *LinkingOutput) const;
232 };
233
Duncan Sands92dd1912010-05-11 20:16:05 +0000234 class LLVM_LIBRARY_VISIBILITY Link : public DarwinTool {
Daniel Dunbar02633b52009-03-26 16:23:12 +0000235 void AddLinkArgs(const ArgList &Args, ArgStringList &CmdArgs) const;
236
Daniel Dunbar02633b52009-03-26 16:23:12 +0000237 public:
Daniel Dunbar30382042010-05-22 00:37:18 +0000238 Link(const ToolChain &TC) : DarwinTool("darwin::Link", "linker", TC) {}
Daniel Dunbar02633b52009-03-26 16:23:12 +0000239
Daniel Dunbar02633b52009-03-26 16:23:12 +0000240 virtual bool hasIntegratedCPP() const { return false; }
241
242 virtual void ConstructJob(Compilation &C, const JobAction &JA,
Mike Stump1eb44332009-09-09 15:08:12 +0000243 const InputInfo &Output,
244 const InputInfoList &Inputs,
245 const ArgList &TCArgs,
Daniel Dunbar02633b52009-03-26 16:23:12 +0000246 const char *LinkingOutput) const;
247 };
248
Duncan Sands92dd1912010-05-11 20:16:05 +0000249 class LLVM_LIBRARY_VISIBILITY Lipo : public DarwinTool {
Daniel Dunbarff7488d2009-03-20 00:52:38 +0000250 public:
Daniel Dunbar30382042010-05-22 00:37:18 +0000251 Lipo(const ToolChain &TC) : DarwinTool("darwin::Lipo", "lipo", TC) {}
Daniel Dunbarff7488d2009-03-20 00:52:38 +0000252
Daniel Dunbarff7488d2009-03-20 00:52:38 +0000253 virtual bool hasIntegratedCPP() const { return false; }
254
255 virtual void ConstructJob(Compilation &C, const JobAction &JA,
Mike Stump1eb44332009-09-09 15:08:12 +0000256 const InputInfo &Output,
257 const InputInfoList &Inputs,
258 const ArgList &TCArgs,
Daniel Dunbarff7488d2009-03-20 00:52:38 +0000259 const char *LinkingOutput) const;
260 };
Daniel Dunbar6e0f2542010-06-04 18:28:36 +0000261
262 class LLVM_LIBRARY_VISIBILITY Dsymutil : public DarwinTool {
263 public:
264 Dsymutil(const ToolChain &TC) : DarwinTool("darwin::Dsymutil",
265 "dsymutil", TC) {}
266
Daniel Dunbar6e0f2542010-06-04 18:28:36 +0000267 virtual bool hasIntegratedCPP() const { return false; }
268
269 virtual void ConstructJob(Compilation &C, const JobAction &JA,
Daniel Dunbar6e0f2542010-06-04 18:28:36 +0000270 const InputInfo &Output,
271 const InputInfoList &Inputs,
272 const ArgList &TCArgs,
273 const char *LinkingOutput) const;
274 };
Daniel Dunbarff7488d2009-03-20 00:52:38 +0000275}
276
Daniel Dunbarf7b8eec2009-06-29 20:52:51 +0000277 /// openbsd -- Directly call GNU Binutils assembler and linker
278namespace openbsd {
Duncan Sands92dd1912010-05-11 20:16:05 +0000279 class LLVM_LIBRARY_VISIBILITY Assemble : public Tool {
Daniel Dunbarf7b8eec2009-06-29 20:52:51 +0000280 public:
Daniel Dunbar30382042010-05-22 00:37:18 +0000281 Assemble(const ToolChain &TC) : Tool("openbsd::Assemble", "assembler",
282 TC) {}
Daniel Dunbarf7b8eec2009-06-29 20:52:51 +0000283
Daniel Dunbarf7b8eec2009-06-29 20:52:51 +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,
289 const ArgList &TCArgs,
Daniel Dunbarf7b8eec2009-06-29 20:52:51 +0000290 const char *LinkingOutput) const;
291 };
Duncan Sands92dd1912010-05-11 20:16:05 +0000292 class LLVM_LIBRARY_VISIBILITY Link : public Tool {
Daniel Dunbarf7b8eec2009-06-29 20:52:51 +0000293 public:
Daniel Dunbar30382042010-05-22 00:37:18 +0000294 Link(const ToolChain &TC) : Tool("openbsd::Link", "linker", TC) {}
Daniel Dunbarf7b8eec2009-06-29 20:52:51 +0000295
Daniel Dunbarf7b8eec2009-06-29 20:52:51 +0000296 virtual bool hasIntegratedCPP() const { return false; }
297
298 virtual void ConstructJob(Compilation &C, const JobAction &JA,
Mike Stump1eb44332009-09-09 15:08:12 +0000299 const InputInfo &Output,
300 const InputInfoList &Inputs,
301 const ArgList &TCArgs,
Daniel Dunbarf7b8eec2009-06-29 20:52:51 +0000302 const char *LinkingOutput) const;
303 };
Edward O'Callaghane7925a02009-08-22 01:06:46 +0000304} // end namespace openbsd
Daniel Dunbarf7b8eec2009-06-29 20:52:51 +0000305
Daniel Dunbar68a31d42009-03-31 17:45:15 +0000306 /// freebsd -- Directly call GNU Binutils assembler and linker
307namespace freebsd {
Duncan Sands92dd1912010-05-11 20:16:05 +0000308 class LLVM_LIBRARY_VISIBILITY Assemble : public Tool {
Daniel Dunbar68a31d42009-03-31 17:45:15 +0000309 public:
Daniel Dunbar30382042010-05-22 00:37:18 +0000310 Assemble(const ToolChain &TC) : Tool("freebsd::Assemble", "assembler",
311 TC) {}
Daniel Dunbar68a31d42009-03-31 17:45:15 +0000312
Daniel Dunbar68a31d42009-03-31 17:45:15 +0000313 virtual bool hasIntegratedCPP() const { return false; }
314
315 virtual void ConstructJob(Compilation &C, const JobAction &JA,
Mike Stump1eb44332009-09-09 15:08:12 +0000316 const InputInfo &Output,
317 const InputInfoList &Inputs,
318 const ArgList &TCArgs,
Daniel Dunbar68a31d42009-03-31 17:45:15 +0000319 const char *LinkingOutput) const;
320 };
Duncan Sands92dd1912010-05-11 20:16:05 +0000321 class LLVM_LIBRARY_VISIBILITY Link : public Tool {
Daniel Dunbar008f54a2009-04-01 19:36:32 +0000322 public:
Daniel Dunbar30382042010-05-22 00:37:18 +0000323 Link(const ToolChain &TC) : Tool("freebsd::Link", "linker", TC) {}
Daniel Dunbar008f54a2009-04-01 19:36:32 +0000324
Daniel Dunbar008f54a2009-04-01 19:36:32 +0000325 virtual bool hasIntegratedCPP() const { return false; }
326
327 virtual void ConstructJob(Compilation &C, const JobAction &JA,
Mike Stump1eb44332009-09-09 15:08:12 +0000328 const InputInfo &Output,
329 const InputInfoList &Inputs,
330 const ArgList &TCArgs,
Daniel Dunbar008f54a2009-04-01 19:36:32 +0000331 const char *LinkingOutput) const;
332 };
Edward O'Callaghane7925a02009-08-22 01:06:46 +0000333} // end namespace freebsd
334
Chris Lattner38e317d2010-07-07 16:01:42 +0000335 /// minix -- Directly call GNU Binutils assembler and linker
336namespace minix {
337 class LLVM_LIBRARY_VISIBILITY Assemble : public Tool {
338 public:
339 Assemble(const ToolChain &TC) : Tool("minix::Assemble", "assembler",
340 TC) {}
341
Chris Lattner38e317d2010-07-07 16:01:42 +0000342 virtual bool hasIntegratedCPP() const { return false; }
343
344 virtual void ConstructJob(Compilation &C, const JobAction &JA,
Chris Lattner38e317d2010-07-07 16:01:42 +0000345 const InputInfo &Output,
346 const InputInfoList &Inputs,
347 const ArgList &TCArgs,
348 const char *LinkingOutput) const;
349 };
350 class LLVM_LIBRARY_VISIBILITY Link : public Tool {
351 public:
352 Link(const ToolChain &TC) : Tool("minix::Link", "linker", TC) {}
353
Chris Lattner38e317d2010-07-07 16:01:42 +0000354 virtual bool hasIntegratedCPP() const { return false; }
355
356 virtual void ConstructJob(Compilation &C, const JobAction &JA,
Chris Lattner38e317d2010-07-07 16:01:42 +0000357 const InputInfo &Output,
358 const InputInfoList &Inputs,
359 const ArgList &TCArgs,
360 const char *LinkingOutput) const;
361 };
362} // end namespace minix
363
Edward O'Callaghane7925a02009-08-22 01:06:46 +0000364 /// auroraux -- Directly call GNU Binutils assembler and linker
365namespace auroraux {
Duncan Sands92dd1912010-05-11 20:16:05 +0000366 class LLVM_LIBRARY_VISIBILITY Assemble : public Tool {
Edward O'Callaghane7925a02009-08-22 01:06:46 +0000367 public:
Daniel Dunbar30382042010-05-22 00:37:18 +0000368 Assemble(const ToolChain &TC) : Tool("auroraux::Assemble", "assembler",
369 TC) {}
Edward O'Callaghane7925a02009-08-22 01:06:46 +0000370
Edward O'Callaghane7925a02009-08-22 01:06:46 +0000371 virtual bool hasIntegratedCPP() const { return false; }
372
373 virtual void ConstructJob(Compilation &C, const JobAction &JA,
Mike Stump1eb44332009-09-09 15:08:12 +0000374 const InputInfo &Output,
375 const InputInfoList &Inputs,
376 const ArgList &TCArgs,
Edward O'Callaghane7925a02009-08-22 01:06:46 +0000377 const char *LinkingOutput) const;
378 };
Duncan Sands92dd1912010-05-11 20:16:05 +0000379 class LLVM_LIBRARY_VISIBILITY Link : public Tool {
Edward O'Callaghane7925a02009-08-22 01:06:46 +0000380 public:
Daniel Dunbar30382042010-05-22 00:37:18 +0000381 Link(const ToolChain &TC) : Tool("auroraux::Link", "linker", TC) {}
Edward O'Callaghane7925a02009-08-22 01:06:46 +0000382
Edward O'Callaghane7925a02009-08-22 01:06:46 +0000383 virtual bool hasIntegratedCPP() const { return false; }
384
385 virtual void ConstructJob(Compilation &C, const JobAction &JA,
Mike Stump1eb44332009-09-09 15:08:12 +0000386 const InputInfo &Output,
387 const InputInfoList &Inputs,
388 const ArgList &TCArgs,
Edward O'Callaghane7925a02009-08-22 01:06:46 +0000389 const char *LinkingOutput) const;
390 };
391} // end namespace auroraux
Daniel Dunbar68a31d42009-03-31 17:45:15 +0000392
Daniel Dunbar11e1b402009-05-02 18:28:39 +0000393 /// dragonfly -- Directly call GNU Binutils assembler and linker
394namespace dragonfly {
Duncan Sands92dd1912010-05-11 20:16:05 +0000395 class LLVM_LIBRARY_VISIBILITY Assemble : public Tool {
Daniel Dunbar11e1b402009-05-02 18:28:39 +0000396 public:
Daniel Dunbar30382042010-05-22 00:37:18 +0000397 Assemble(const ToolChain &TC) : Tool("dragonfly::Assemble", "assembler",
398 TC) {}
Daniel Dunbar11e1b402009-05-02 18:28:39 +0000399
Daniel Dunbar11e1b402009-05-02 18:28:39 +0000400 virtual bool hasIntegratedCPP() const { return false; }
401
402 virtual void ConstructJob(Compilation &C, const JobAction &JA,
Mike Stump1eb44332009-09-09 15:08:12 +0000403 const InputInfo &Output,
404 const InputInfoList &Inputs,
405 const ArgList &TCArgs,
Daniel Dunbar11e1b402009-05-02 18:28:39 +0000406 const char *LinkingOutput) const;
407 };
Duncan Sands92dd1912010-05-11 20:16:05 +0000408 class LLVM_LIBRARY_VISIBILITY Link : public Tool {
Daniel Dunbar11e1b402009-05-02 18:28:39 +0000409 public:
Daniel Dunbar30382042010-05-22 00:37:18 +0000410 Link(const ToolChain &TC) : Tool("dragonfly::Link", "linker", TC) {}
Daniel Dunbar11e1b402009-05-02 18:28:39 +0000411
Daniel Dunbar11e1b402009-05-02 18:28:39 +0000412 virtual bool hasIntegratedCPP() const { return false; }
413
414 virtual void ConstructJob(Compilation &C, const JobAction &JA,
Mike Stump1eb44332009-09-09 15:08:12 +0000415 const InputInfo &Output,
416 const InputInfoList &Inputs,
417 const ArgList &TCArgs,
Daniel Dunbar11e1b402009-05-02 18:28:39 +0000418 const char *LinkingOutput) const;
419 };
Edward O'Callaghane7925a02009-08-22 01:06:46 +0000420} // end namespace dragonfly
Daniel Dunbar11e1b402009-05-02 18:28:39 +0000421
Daniel Dunbar9c073ff2009-03-17 22:07:58 +0000422} // end namespace toolchains
423} // end namespace driver
424} // end namespace clang
425
Edward O'Callaghane7925a02009-08-22 01:06:46 +0000426#endif // CLANG_LIB_DRIVER_TOOLS_H_