blob: a4f732e1c213ff122015ac40c2b136dd91e70ffc [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
Joerg Sonnenberger182564c2011-05-16 13:35:02 +000017#include "llvm/ADT/Triple.h"
Daniel Dunbar9c073ff2009-03-17 22:07:58 +000018#include "llvm/Support/Compiler.h"
19
20namespace clang {
21namespace driver {
Douglas Gregordf91ef32009-04-18 00:34:01 +000022 class Driver;
23
Daniel Dunbar02633b52009-03-26 16:23:12 +000024namespace toolchains {
Daniel Dunbarf3955282009-09-04 18:34:51 +000025 class Darwin;
Daniel Dunbar02633b52009-03-26 16:23:12 +000026}
27
Daniel Dunbar985b8252009-03-17 22:18:43 +000028namespace tools {
Daniel Dunbar9c073ff2009-03-17 22:07:58 +000029
Daniel Dunbar20a9aa52010-05-20 21:30:13 +000030 /// \brief Clang compiler tool.
Duncan Sands92dd1912010-05-11 20:16:05 +000031 class LLVM_LIBRARY_VISIBILITY Clang : public Tool {
Douglas Gregordf91ef32009-04-18 00:34:01 +000032 void AddPreprocessingOptions(const Driver &D,
33 const ArgList &Args,
Daniel Dunbarc21c4852009-04-08 23:54:23 +000034 ArgStringList &CmdArgs,
35 const InputInfo &Output,
36 const InputInfoList &Inputs) const;
37
Daniel Dunbarfa41d692011-03-17 17:10:06 +000038 void AddARMTargetArgs(const ArgList &Args, ArgStringList &CmdArgs,
39 bool KernelOrKext) const;
Eric Christophered734732010-03-02 02:41:08 +000040 void AddMIPSTargetArgs(const ArgList &Args, ArgStringList &CmdArgs) const;
Bruno Cardoso Lopes9284d212010-11-09 17:21:19 +000041 void AddSparcTargetArgs(const ArgList &Args, ArgStringList &CmdArgs) const;
Daniel Dunbar6acda162009-09-09 22:33:08 +000042 void AddX86TargetArgs(const ArgList &Args, ArgStringList &CmdArgs) const;
43
Daniel Dunbar9c073ff2009-03-17 22:07:58 +000044 public:
Daniel Dunbar30382042010-05-22 00:37:18 +000045 Clang(const ToolChain &TC) : Tool("clang", "clang frontend", TC) {}
Daniel Dunbar9c073ff2009-03-17 22:07:58 +000046
Daniel Dunbar60a53f22010-04-06 17:07:49 +000047 virtual bool hasGoodDiagnostics() const { return true; }
Daniel Dunbar8767cbc2010-02-03 03:07:56 +000048 virtual bool hasIntegratedAssembler() const { return true; }
Daniel Dunbar9c073ff2009-03-17 22:07:58 +000049 virtual bool hasIntegratedCPP() const { return true; }
Daniel Dunbar47ac7d22009-03-18 06:00:36 +000050
51 virtual void ConstructJob(Compilation &C, const JobAction &JA,
Mike Stump1eb44332009-09-09 15:08:12 +000052 const InputInfo &Output,
53 const InputInfoList &Inputs,
54 const ArgList &TCArgs,
Daniel Dunbar47ac7d22009-03-18 06:00:36 +000055 const char *LinkingOutput) const;
Daniel Dunbar9c073ff2009-03-17 22:07:58 +000056 };
57
Daniel Dunbar20a9aa52010-05-20 21:30:13 +000058 /// \brief Clang integrated assembler tool.
59 class LLVM_LIBRARY_VISIBILITY ClangAs : public Tool {
60 public:
Daniel Dunbar30382042010-05-22 00:37:18 +000061 ClangAs(const ToolChain &TC) : Tool("clang::as",
62 "clang integrated assembler", TC) {}
Daniel Dunbar20a9aa52010-05-20 21:30:13 +000063
Daniel Dunbar20a9aa52010-05-20 21:30:13 +000064 virtual bool hasGoodDiagnostics() const { return true; }
65 virtual bool hasIntegratedAssembler() const { return false; }
66 virtual bool hasIntegratedCPP() const { return false; }
67
68 virtual void ConstructJob(Compilation &C, const JobAction &JA,
Daniel Dunbar20a9aa52010-05-20 21:30:13 +000069 const InputInfo &Output,
70 const InputInfoList &Inputs,
71 const ArgList &TCArgs,
72 const char *LinkingOutput) const;
73 };
74
Daniel Dunbar31b1e542009-03-17 22:45:24 +000075 /// gcc - Generic GCC tool implementations.
76namespace gcc {
Duncan Sands92dd1912010-05-11 20:16:05 +000077 class LLVM_LIBRARY_VISIBILITY Common : public Tool {
Daniel Dunbar9c073ff2009-03-17 22:07:58 +000078 public:
Daniel Dunbar30382042010-05-22 00:37:18 +000079 Common(const char *Name, const char *ShortName,
80 const ToolChain &TC) : Tool(Name, ShortName, TC) {}
Daniel Dunbarb488c1d2009-03-18 08:07:30 +000081
82 virtual void ConstructJob(Compilation &C, const JobAction &JA,
Mike Stump1eb44332009-09-09 15:08:12 +000083 const InputInfo &Output,
84 const InputInfoList &Inputs,
85 const ArgList &TCArgs,
Daniel Dunbarb488c1d2009-03-18 08:07:30 +000086 const char *LinkingOutput) const;
87
88 /// RenderExtraToolArgs - Render any arguments necessary to force
89 /// the particular tool mode.
Daniel Dunbar82b51cc2010-01-25 22:35:08 +000090 virtual void RenderExtraToolArgs(const JobAction &JA,
91 ArgStringList &CmdArgs) const = 0;
Daniel Dunbarb488c1d2009-03-18 08:07:30 +000092 };
93
Mike Stump1eb44332009-09-09 15:08:12 +000094
Duncan Sands92dd1912010-05-11 20:16:05 +000095 class LLVM_LIBRARY_VISIBILITY Preprocess : public Common {
Daniel Dunbarb488c1d2009-03-18 08:07:30 +000096 public:
Daniel Dunbar30382042010-05-22 00:37:18 +000097 Preprocess(const ToolChain &TC) : Common("gcc::Preprocess",
98 "gcc preprocessor", TC) {}
Daniel Dunbar9c073ff2009-03-17 22:07:58 +000099
Daniel Dunbar60a53f22010-04-06 17:07:49 +0000100 virtual bool hasGoodDiagnostics() const { return true; }
Daniel Dunbar9c073ff2009-03-17 22:07:58 +0000101 virtual bool hasIntegratedCPP() const { return false; }
Daniel Dunbar47ac7d22009-03-18 06:00:36 +0000102
Daniel Dunbar82b51cc2010-01-25 22:35:08 +0000103 virtual void RenderExtraToolArgs(const JobAction &JA,
104 ArgStringList &CmdArgs) const;
Daniel Dunbar9c073ff2009-03-17 22:07:58 +0000105 };
106
Duncan Sands92dd1912010-05-11 20:16:05 +0000107 class LLVM_LIBRARY_VISIBILITY Precompile : public Common {
Daniel Dunbar9c073ff2009-03-17 22:07:58 +0000108 public:
Daniel Dunbar30382042010-05-22 00:37:18 +0000109 Precompile(const ToolChain &TC) : Common("gcc::Precompile",
110 "gcc precompile", TC) {}
Daniel Dunbar9c073ff2009-03-17 22:07:58 +0000111
Daniel Dunbar60a53f22010-04-06 17:07:49 +0000112 virtual bool hasGoodDiagnostics() const { return true; }
Daniel Dunbar9c073ff2009-03-17 22:07:58 +0000113 virtual bool hasIntegratedCPP() const { return true; }
Daniel Dunbar47ac7d22009-03-18 06:00:36 +0000114
Daniel Dunbar82b51cc2010-01-25 22:35:08 +0000115 virtual void RenderExtraToolArgs(const JobAction &JA,
116 ArgStringList &CmdArgs) const;
Daniel Dunbar9c073ff2009-03-17 22:07:58 +0000117 };
118
Duncan Sands92dd1912010-05-11 20:16:05 +0000119 class LLVM_LIBRARY_VISIBILITY Compile : public Common {
Daniel Dunbar9c073ff2009-03-17 22:07:58 +0000120 public:
Daniel Dunbar30382042010-05-22 00:37:18 +0000121 Compile(const ToolChain &TC) : Common("gcc::Compile",
122 "gcc frontend", TC) {}
Daniel Dunbar9c073ff2009-03-17 22:07:58 +0000123
Daniel Dunbar60a53f22010-04-06 17:07:49 +0000124 virtual bool hasGoodDiagnostics() const { return true; }
Daniel Dunbar9c073ff2009-03-17 22:07:58 +0000125 virtual bool hasIntegratedCPP() const { return true; }
Daniel Dunbar47ac7d22009-03-18 06:00:36 +0000126
Daniel Dunbar82b51cc2010-01-25 22:35:08 +0000127 virtual void RenderExtraToolArgs(const JobAction &JA,
128 ArgStringList &CmdArgs) const;
Daniel Dunbar9c073ff2009-03-17 22:07:58 +0000129 };
130
Duncan Sands92dd1912010-05-11 20:16:05 +0000131 class LLVM_LIBRARY_VISIBILITY Assemble : public Common {
Daniel Dunbar9c073ff2009-03-17 22:07:58 +0000132 public:
Daniel Dunbar30382042010-05-22 00:37:18 +0000133 Assemble(const ToolChain &TC) : Common("gcc::Assemble",
134 "assembler (via gcc)", TC) {}
Daniel Dunbar9c073ff2009-03-17 22:07:58 +0000135
Daniel Dunbar9c073ff2009-03-17 22:07:58 +0000136 virtual bool hasIntegratedCPP() const { return false; }
Daniel Dunbar47ac7d22009-03-18 06:00:36 +0000137
Daniel Dunbar82b51cc2010-01-25 22:35:08 +0000138 virtual void RenderExtraToolArgs(const JobAction &JA,
139 ArgStringList &CmdArgs) const;
Daniel Dunbar9c073ff2009-03-17 22:07:58 +0000140 };
141
Duncan Sands92dd1912010-05-11 20:16:05 +0000142 class LLVM_LIBRARY_VISIBILITY Link : public Common {
Daniel Dunbar9c073ff2009-03-17 22:07:58 +0000143 public:
Daniel Dunbar30382042010-05-22 00:37:18 +0000144 Link(const ToolChain &TC) : Common("gcc::Link",
145 "linker (via gcc)", TC) {}
Daniel Dunbar9c073ff2009-03-17 22:07:58 +0000146
Daniel Dunbar9c073ff2009-03-17 22:07:58 +0000147 virtual bool hasIntegratedCPP() const { return false; }
Daniel Dunbar47ac7d22009-03-18 06:00:36 +0000148
Daniel Dunbar82b51cc2010-01-25 22:35:08 +0000149 virtual void RenderExtraToolArgs(const JobAction &JA,
150 ArgStringList &CmdArgs) const;
Daniel Dunbar9c073ff2009-03-17 22:07:58 +0000151 };
Daniel Dunbar31b1e542009-03-17 22:45:24 +0000152} // end namespace gcc
Daniel Dunbar9c073ff2009-03-17 22:07:58 +0000153
Daniel Dunbarff7488d2009-03-20 00:52:38 +0000154namespace darwin {
Duncan Sands92dd1912010-05-11 20:16:05 +0000155 class LLVM_LIBRARY_VISIBILITY DarwinTool : public Tool {
Daniel Dunbarfbefe6b2009-09-09 18:36:20 +0000156 protected:
157 void AddDarwinArch(const ArgList &Args, ArgStringList &CmdArgs) const;
Daniel Dunbarfbefe6b2009-09-09 18:36:20 +0000158
159 const toolchains::Darwin &getDarwinToolChain() const {
160 return reinterpret_cast<const toolchains::Darwin&>(getToolChain());
161 }
162
163 public:
Daniel Dunbar30382042010-05-22 00:37:18 +0000164 DarwinTool(const char *Name, const char *ShortName,
165 const ToolChain &TC) : Tool(Name, ShortName, TC) {}
Daniel Dunbarfbefe6b2009-09-09 18:36:20 +0000166 };
167
Duncan Sands92dd1912010-05-11 20:16:05 +0000168 class LLVM_LIBRARY_VISIBILITY CC1 : public DarwinTool {
Daniel Dunbara5a7bd02009-03-30 00:34:04 +0000169 public:
Mike Stump1eb44332009-09-09 15:08:12 +0000170 static const char *getBaseInputName(const ArgList &Args,
Daniel Dunbara5a7bd02009-03-30 00:34:04 +0000171 const InputInfoList &Input);
Mike Stump1eb44332009-09-09 15:08:12 +0000172 static const char *getBaseInputStem(const ArgList &Args,
Daniel Dunbara5a7bd02009-03-30 00:34:04 +0000173 const InputInfoList &Input);
Mike Stump1eb44332009-09-09 15:08:12 +0000174 static const char *getDependencyFileName(const ArgList &Args,
Daniel Dunbara5a7bd02009-03-30 00:34:04 +0000175 const InputInfoList &Inputs);
176
Daniel Dunbar40f12652009-03-29 17:08:39 +0000177 protected:
178 const char *getCC1Name(types::ID Type) const;
179
Daniel Dunbara3ec60e2009-03-29 18:40:18 +0000180 void AddCC1Args(const ArgList &Args, ArgStringList &CmdArgs) const;
Chad Rosier285f9a22011-08-17 18:24:55 +0000181 void RemoveCC1UnsupportedArgs(ArgStringList &CmdArgs) const;
Daniel Dunbar40f12652009-03-29 17:08:39 +0000182 void AddCC1OptionsArgs(const ArgList &Args, ArgStringList &CmdArgs,
183 const InputInfoList &Inputs,
Daniel Dunbara3ec60e2009-03-29 18:40:18 +0000184 const ArgStringList &OutputArgs) const;
Daniel Dunbar40f12652009-03-29 17:08:39 +0000185 void AddCPPOptionsArgs(const ArgList &Args, ArgStringList &CmdArgs,
186 const InputInfoList &Inputs,
Daniel Dunbara3ec60e2009-03-29 18:40:18 +0000187 const ArgStringList &OutputArgs) const;
Mike Stump1eb44332009-09-09 15:08:12 +0000188 void AddCPPUniqueOptionsArgs(const ArgList &Args,
Daniel Dunbara3ec60e2009-03-29 18:40:18 +0000189 ArgStringList &CmdArgs,
190 const InputInfoList &Inputs) const;
191 void AddCPPArgs(const ArgList &Args, ArgStringList &CmdArgs) const;
Daniel Dunbar40f12652009-03-29 17:08:39 +0000192
193 public:
Daniel Dunbar30382042010-05-22 00:37:18 +0000194 CC1(const char *Name, const char *ShortName,
195 const ToolChain &TC) : DarwinTool(Name, ShortName, TC) {}
Daniel Dunbar40f12652009-03-29 17:08:39 +0000196
Daniel Dunbar60a53f22010-04-06 17:07:49 +0000197 virtual bool hasGoodDiagnostics() const { return true; }
Daniel Dunbar40f12652009-03-29 17:08:39 +0000198 virtual bool hasIntegratedCPP() const { return true; }
199 };
200
Duncan Sands92dd1912010-05-11 20:16:05 +0000201 class LLVM_LIBRARY_VISIBILITY Preprocess : public CC1 {
Daniel Dunbar40f12652009-03-29 17:08:39 +0000202 public:
Daniel Dunbar30382042010-05-22 00:37:18 +0000203 Preprocess(const ToolChain &TC) : CC1("darwin::Preprocess",
204 "gcc preprocessor", TC) {}
Daniel Dunbar40f12652009-03-29 17:08:39 +0000205
206 virtual void ConstructJob(Compilation &C, const JobAction &JA,
Mike Stump1eb44332009-09-09 15:08:12 +0000207 const InputInfo &Output,
208 const InputInfoList &Inputs,
209 const ArgList &TCArgs,
Daniel Dunbar40f12652009-03-29 17:08:39 +0000210 const char *LinkingOutput) const;
211 };
212
Duncan Sands92dd1912010-05-11 20:16:05 +0000213 class LLVM_LIBRARY_VISIBILITY Compile : public CC1 {
Daniel Dunbar40f12652009-03-29 17:08:39 +0000214 public:
Daniel Dunbar30382042010-05-22 00:37:18 +0000215 Compile(const ToolChain &TC) : CC1("darwin::Compile", "gcc frontend", TC) {}
Daniel Dunbar40f12652009-03-29 17:08:39 +0000216
217 virtual void ConstructJob(Compilation &C, const JobAction &JA,
Mike Stump1eb44332009-09-09 15:08:12 +0000218 const InputInfo &Output,
219 const InputInfoList &Inputs,
220 const ArgList &TCArgs,
Daniel Dunbar40f12652009-03-29 17:08:39 +0000221 const char *LinkingOutput) const;
222 };
223
Duncan Sands92dd1912010-05-11 20:16:05 +0000224 class LLVM_LIBRARY_VISIBILITY Assemble : public DarwinTool {
Daniel Dunbar8cac5f72009-03-20 16:06:39 +0000225 public:
Daniel Dunbar30382042010-05-22 00:37:18 +0000226 Assemble(const ToolChain &TC) : DarwinTool("darwin::Assemble",
227 "assembler", TC) {}
Daniel Dunbar8cac5f72009-03-20 16:06:39 +0000228
Daniel Dunbar8cac5f72009-03-20 16:06:39 +0000229 virtual bool hasIntegratedCPP() const { return false; }
230
231 virtual void ConstructJob(Compilation &C, const JobAction &JA,
Mike Stump1eb44332009-09-09 15:08:12 +0000232 const InputInfo &Output,
233 const InputInfoList &Inputs,
234 const ArgList &TCArgs,
Daniel Dunbar8cac5f72009-03-20 16:06:39 +0000235 const char *LinkingOutput) const;
236 };
237
Duncan Sands92dd1912010-05-11 20:16:05 +0000238 class LLVM_LIBRARY_VISIBILITY Link : public DarwinTool {
Daniel Dunbar748de8e2010-09-09 21:51:05 +0000239 void AddLinkArgs(Compilation &C, const ArgList &Args,
240 ArgStringList &CmdArgs) const;
Daniel Dunbar02633b52009-03-26 16:23:12 +0000241
Daniel Dunbar02633b52009-03-26 16:23:12 +0000242 public:
Daniel Dunbar30382042010-05-22 00:37:18 +0000243 Link(const ToolChain &TC) : DarwinTool("darwin::Link", "linker", TC) {}
Daniel Dunbar02633b52009-03-26 16:23:12 +0000244
Daniel Dunbar02633b52009-03-26 16:23:12 +0000245 virtual bool hasIntegratedCPP() const { return false; }
246
247 virtual void ConstructJob(Compilation &C, const JobAction &JA,
Mike Stump1eb44332009-09-09 15:08:12 +0000248 const InputInfo &Output,
249 const InputInfoList &Inputs,
250 const ArgList &TCArgs,
Daniel Dunbar02633b52009-03-26 16:23:12 +0000251 const char *LinkingOutput) const;
252 };
253
Duncan Sands92dd1912010-05-11 20:16:05 +0000254 class LLVM_LIBRARY_VISIBILITY Lipo : public DarwinTool {
Daniel Dunbarff7488d2009-03-20 00:52:38 +0000255 public:
Daniel Dunbar30382042010-05-22 00:37:18 +0000256 Lipo(const ToolChain &TC) : DarwinTool("darwin::Lipo", "lipo", TC) {}
Daniel Dunbarff7488d2009-03-20 00:52:38 +0000257
Daniel Dunbarff7488d2009-03-20 00:52:38 +0000258 virtual bool hasIntegratedCPP() const { return false; }
259
260 virtual void ConstructJob(Compilation &C, const JobAction &JA,
Mike Stump1eb44332009-09-09 15:08:12 +0000261 const InputInfo &Output,
262 const InputInfoList &Inputs,
263 const ArgList &TCArgs,
Daniel Dunbarff7488d2009-03-20 00:52:38 +0000264 const char *LinkingOutput) const;
265 };
Daniel Dunbar6e0f2542010-06-04 18:28:36 +0000266
267 class LLVM_LIBRARY_VISIBILITY Dsymutil : public DarwinTool {
268 public:
269 Dsymutil(const ToolChain &TC) : DarwinTool("darwin::Dsymutil",
270 "dsymutil", TC) {}
271
Daniel Dunbar6e0f2542010-06-04 18:28:36 +0000272 virtual bool hasIntegratedCPP() const { return false; }
273
274 virtual void ConstructJob(Compilation &C, const JobAction &JA,
Daniel Dunbar6e0f2542010-06-04 18:28:36 +0000275 const InputInfo &Output,
276 const InputInfoList &Inputs,
277 const ArgList &TCArgs,
278 const char *LinkingOutput) const;
279 };
Eric Christopherf8571862011-08-23 17:56:55 +0000280
281 class LLVM_LIBRARY_VISIBILITY VerifyDebug : public DarwinTool {
282 public:
283 VerifyDebug(const ToolChain &TC) : DarwinTool("darwin::VerifyDebug",
284 "dwarfdump", TC) {}
285
286 virtual bool hasIntegratedCPP() const { return false; }
287
288 virtual void ConstructJob(Compilation &C, const JobAction &JA,
289 const InputInfo &Output,
290 const InputInfoList &Inputs,
291 const ArgList &TCArgs,
292 const char *LinkingOutput) const;
293 };
294
Daniel Dunbarff7488d2009-03-20 00:52:38 +0000295}
296
Daniel Dunbarf7b8eec2009-06-29 20:52:51 +0000297 /// openbsd -- Directly call GNU Binutils assembler and linker
298namespace openbsd {
Duncan Sands92dd1912010-05-11 20:16:05 +0000299 class LLVM_LIBRARY_VISIBILITY Assemble : public Tool {
Daniel Dunbarf7b8eec2009-06-29 20:52:51 +0000300 public:
Daniel Dunbar30382042010-05-22 00:37:18 +0000301 Assemble(const ToolChain &TC) : Tool("openbsd::Assemble", "assembler",
302 TC) {}
Daniel Dunbarf7b8eec2009-06-29 20:52:51 +0000303
Daniel Dunbarf7b8eec2009-06-29 20:52:51 +0000304 virtual bool hasIntegratedCPP() const { return false; }
305
306 virtual void ConstructJob(Compilation &C, const JobAction &JA,
Mike Stump1eb44332009-09-09 15:08:12 +0000307 const InputInfo &Output,
308 const InputInfoList &Inputs,
309 const ArgList &TCArgs,
Daniel Dunbarf7b8eec2009-06-29 20:52:51 +0000310 const char *LinkingOutput) const;
311 };
Duncan Sands92dd1912010-05-11 20:16:05 +0000312 class LLVM_LIBRARY_VISIBILITY Link : public Tool {
Daniel Dunbarf7b8eec2009-06-29 20:52:51 +0000313 public:
Daniel Dunbar30382042010-05-22 00:37:18 +0000314 Link(const ToolChain &TC) : Tool("openbsd::Link", "linker", TC) {}
Daniel Dunbarf7b8eec2009-06-29 20:52:51 +0000315
Daniel Dunbarf7b8eec2009-06-29 20:52:51 +0000316 virtual bool hasIntegratedCPP() const { return false; }
317
318 virtual void ConstructJob(Compilation &C, const JobAction &JA,
Mike Stump1eb44332009-09-09 15:08:12 +0000319 const InputInfo &Output,
320 const InputInfoList &Inputs,
321 const ArgList &TCArgs,
Daniel Dunbarf7b8eec2009-06-29 20:52:51 +0000322 const char *LinkingOutput) const;
323 };
Edward O'Callaghane7925a02009-08-22 01:06:46 +0000324} // end namespace openbsd
Daniel Dunbarf7b8eec2009-06-29 20:52:51 +0000325
Daniel Dunbar68a31d42009-03-31 17:45:15 +0000326 /// freebsd -- Directly call GNU Binutils assembler and linker
327namespace freebsd {
Duncan Sands92dd1912010-05-11 20:16:05 +0000328 class LLVM_LIBRARY_VISIBILITY Assemble : public Tool {
Daniel Dunbar68a31d42009-03-31 17:45:15 +0000329 public:
Daniel Dunbar30382042010-05-22 00:37:18 +0000330 Assemble(const ToolChain &TC) : Tool("freebsd::Assemble", "assembler",
331 TC) {}
Daniel Dunbar68a31d42009-03-31 17:45:15 +0000332
Daniel Dunbar68a31d42009-03-31 17:45:15 +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,
338 const ArgList &TCArgs,
Daniel Dunbar68a31d42009-03-31 17:45:15 +0000339 const char *LinkingOutput) const;
340 };
Duncan Sands92dd1912010-05-11 20:16:05 +0000341 class LLVM_LIBRARY_VISIBILITY Link : public Tool {
Daniel Dunbar008f54a2009-04-01 19:36:32 +0000342 public:
Daniel Dunbar30382042010-05-22 00:37:18 +0000343 Link(const ToolChain &TC) : Tool("freebsd::Link", "linker", TC) {}
Daniel Dunbar008f54a2009-04-01 19:36:32 +0000344
Daniel Dunbar008f54a2009-04-01 19:36:32 +0000345 virtual bool hasIntegratedCPP() const { return false; }
346
347 virtual void ConstructJob(Compilation &C, const JobAction &JA,
Mike Stump1eb44332009-09-09 15:08:12 +0000348 const InputInfo &Output,
349 const InputInfoList &Inputs,
350 const ArgList &TCArgs,
Daniel Dunbar008f54a2009-04-01 19:36:32 +0000351 const char *LinkingOutput) const;
352 };
Edward O'Callaghane7925a02009-08-22 01:06:46 +0000353} // end namespace freebsd
354
Benjamin Kramer8e50a962011-02-02 18:59:27 +0000355 /// netbsd -- Directly call GNU Binutils assembler and linker
356namespace netbsd {
357 class LLVM_LIBRARY_VISIBILITY Assemble : public Tool {
Joerg Sonnenberger182564c2011-05-16 13:35:02 +0000358 private:
359 const llvm::Triple ToolTriple;
360
Benjamin Kramer8e50a962011-02-02 18:59:27 +0000361 public:
Joerg Sonnenberger182564c2011-05-16 13:35:02 +0000362 Assemble(const ToolChain &TC, const llvm::Triple &ToolTriple)
363 : Tool("netbsd::Assemble", "assembler", TC), ToolTriple(ToolTriple) {}
Benjamin Kramer8e50a962011-02-02 18:59:27 +0000364
365 virtual bool hasIntegratedCPP() const { return false; }
366
367 virtual void ConstructJob(Compilation &C, const JobAction &JA,
368 const InputInfo &Output,
369 const InputInfoList &Inputs,
370 const ArgList &TCArgs,
371 const char *LinkingOutput) const;
372 };
373 class LLVM_LIBRARY_VISIBILITY Link : public Tool {
Joerg Sonnenberger182564c2011-05-16 13:35:02 +0000374 private:
375 const llvm::Triple ToolTriple;
376
Benjamin Kramer8e50a962011-02-02 18:59:27 +0000377 public:
Joerg Sonnenberger182564c2011-05-16 13:35:02 +0000378 Link(const ToolChain &TC, const llvm::Triple &ToolTriple)
Joerg Sonnenberger468eb7d2011-06-21 08:45:08 +0000379 : Tool("netbsd::Link", "linker", TC), ToolTriple(ToolTriple) {}
Benjamin Kramer8e50a962011-02-02 18:59:27 +0000380
381 virtual bool hasIntegratedCPP() const { return false; }
382
383 virtual void ConstructJob(Compilation &C, const JobAction &JA,
384 const InputInfo &Output,
385 const InputInfoList &Inputs,
386 const ArgList &TCArgs,
387 const char *LinkingOutput) const;
388 };
389} // end namespace netbsd
390
Rafael Espindolaba30bbe2010-08-10 00:25:48 +0000391 /// linux -- Directly call GNU Binutils assembler and linker
392namespace linuxtools {
393 class LLVM_LIBRARY_VISIBILITY Assemble : public Tool {
394 public:
395 Assemble(const ToolChain &TC) : Tool("linux::Assemble", "assembler",
396 TC) {}
397
398 virtual bool hasIntegratedCPP() const { return false; }
399
400 virtual void ConstructJob(Compilation &C, const JobAction &JA,
401 const InputInfo &Output,
402 const InputInfoList &Inputs,
403 const ArgList &TCArgs,
404 const char *LinkingOutput) const;
405 };
Rafael Espindolac1da9812010-11-07 20:14:31 +0000406 class LLVM_LIBRARY_VISIBILITY Link : public Tool {
407 public:
408 Link(const ToolChain &TC) : Tool("linux::Link", "linker", TC) {}
409
410 virtual bool hasIntegratedCPP() const { return false; }
411
412 virtual void ConstructJob(Compilation &C, const JobAction &JA,
413 const InputInfo &Output,
414 const InputInfoList &Inputs,
415 const ArgList &TCArgs,
416 const char *LinkingOutput) const;
417 };
Rafael Espindolaba30bbe2010-08-10 00:25:48 +0000418}
Chris Lattner38e317d2010-07-07 16:01:42 +0000419 /// minix -- Directly call GNU Binutils assembler and linker
420namespace minix {
421 class LLVM_LIBRARY_VISIBILITY Assemble : public Tool {
422 public:
423 Assemble(const ToolChain &TC) : Tool("minix::Assemble", "assembler",
424 TC) {}
425
Chris Lattner38e317d2010-07-07 16:01:42 +0000426 virtual bool hasIntegratedCPP() const { return false; }
427
428 virtual void ConstructJob(Compilation &C, const JobAction &JA,
Chris Lattner38e317d2010-07-07 16:01:42 +0000429 const InputInfo &Output,
430 const InputInfoList &Inputs,
431 const ArgList &TCArgs,
432 const char *LinkingOutput) const;
433 };
434 class LLVM_LIBRARY_VISIBILITY Link : public Tool {
435 public:
436 Link(const ToolChain &TC) : Tool("minix::Link", "linker", TC) {}
437
Chris Lattner38e317d2010-07-07 16:01:42 +0000438 virtual bool hasIntegratedCPP() const { return false; }
439
440 virtual void ConstructJob(Compilation &C, const JobAction &JA,
Chris Lattner38e317d2010-07-07 16:01:42 +0000441 const InputInfo &Output,
442 const InputInfoList &Inputs,
443 const ArgList &TCArgs,
444 const char *LinkingOutput) const;
445 };
446} // end namespace minix
447
Edward O'Callaghane7925a02009-08-22 01:06:46 +0000448 /// auroraux -- Directly call GNU Binutils assembler and linker
449namespace auroraux {
Duncan Sands92dd1912010-05-11 20:16:05 +0000450 class LLVM_LIBRARY_VISIBILITY Assemble : public Tool {
Edward O'Callaghane7925a02009-08-22 01:06:46 +0000451 public:
Daniel Dunbar30382042010-05-22 00:37:18 +0000452 Assemble(const ToolChain &TC) : Tool("auroraux::Assemble", "assembler",
453 TC) {}
Edward O'Callaghane7925a02009-08-22 01:06:46 +0000454
Edward O'Callaghane7925a02009-08-22 01:06:46 +0000455 virtual bool hasIntegratedCPP() const { return false; }
456
457 virtual void ConstructJob(Compilation &C, const JobAction &JA,
Mike Stump1eb44332009-09-09 15:08:12 +0000458 const InputInfo &Output,
459 const InputInfoList &Inputs,
460 const ArgList &TCArgs,
Edward O'Callaghane7925a02009-08-22 01:06:46 +0000461 const char *LinkingOutput) const;
462 };
Duncan Sands92dd1912010-05-11 20:16:05 +0000463 class LLVM_LIBRARY_VISIBILITY Link : public Tool {
Edward O'Callaghane7925a02009-08-22 01:06:46 +0000464 public:
Daniel Dunbar30382042010-05-22 00:37:18 +0000465 Link(const ToolChain &TC) : Tool("auroraux::Link", "linker", TC) {}
Edward O'Callaghane7925a02009-08-22 01:06:46 +0000466
Edward O'Callaghane7925a02009-08-22 01:06:46 +0000467 virtual bool hasIntegratedCPP() const { return false; }
468
469 virtual void ConstructJob(Compilation &C, const JobAction &JA,
Mike Stump1eb44332009-09-09 15:08:12 +0000470 const InputInfo &Output,
471 const InputInfoList &Inputs,
472 const ArgList &TCArgs,
Edward O'Callaghane7925a02009-08-22 01:06:46 +0000473 const char *LinkingOutput) const;
474 };
475} // end namespace auroraux
Daniel Dunbar68a31d42009-03-31 17:45:15 +0000476
Daniel Dunbar11e1b402009-05-02 18:28:39 +0000477 /// dragonfly -- Directly call GNU Binutils assembler and linker
478namespace dragonfly {
Duncan Sands92dd1912010-05-11 20:16:05 +0000479 class LLVM_LIBRARY_VISIBILITY Assemble : public Tool {
Daniel Dunbar11e1b402009-05-02 18:28:39 +0000480 public:
Daniel Dunbar30382042010-05-22 00:37:18 +0000481 Assemble(const ToolChain &TC) : Tool("dragonfly::Assemble", "assembler",
482 TC) {}
Daniel Dunbar11e1b402009-05-02 18:28:39 +0000483
Daniel Dunbar11e1b402009-05-02 18:28:39 +0000484 virtual bool hasIntegratedCPP() const { return false; }
485
486 virtual void ConstructJob(Compilation &C, const JobAction &JA,
Mike Stump1eb44332009-09-09 15:08:12 +0000487 const InputInfo &Output,
488 const InputInfoList &Inputs,
489 const ArgList &TCArgs,
Daniel Dunbar11e1b402009-05-02 18:28:39 +0000490 const char *LinkingOutput) const;
491 };
Duncan Sands92dd1912010-05-11 20:16:05 +0000492 class LLVM_LIBRARY_VISIBILITY Link : public Tool {
Daniel Dunbar11e1b402009-05-02 18:28:39 +0000493 public:
Daniel Dunbar30382042010-05-22 00:37:18 +0000494 Link(const ToolChain &TC) : Tool("dragonfly::Link", "linker", TC) {}
Daniel Dunbar11e1b402009-05-02 18:28:39 +0000495
Daniel Dunbar11e1b402009-05-02 18:28:39 +0000496 virtual bool hasIntegratedCPP() const { return false; }
497
498 virtual void ConstructJob(Compilation &C, const JobAction &JA,
Mike Stump1eb44332009-09-09 15:08:12 +0000499 const InputInfo &Output,
500 const InputInfoList &Inputs,
501 const ArgList &TCArgs,
Daniel Dunbar11e1b402009-05-02 18:28:39 +0000502 const char *LinkingOutput) const;
503 };
Edward O'Callaghane7925a02009-08-22 01:06:46 +0000504} // end namespace dragonfly
Daniel Dunbar11e1b402009-05-02 18:28:39 +0000505
Michael J. Spencerff58e362010-08-21 21:55:07 +0000506 /// Visual studio tools.
507namespace visualstudio {
508 class LLVM_LIBRARY_VISIBILITY Link : public Tool {
509 public:
510 Link(const ToolChain &TC) : Tool("visualstudio::Link", "linker", TC) {}
511
512 virtual bool hasIntegratedCPP() const { return false; }
513
514 virtual void ConstructJob(Compilation &C, const JobAction &JA,
515 const InputInfo &Output,
516 const InputInfoList &Inputs,
517 const ArgList &TCArgs,
518 const char *LinkingOutput) const;
519 };
520} // end namespace visualstudio
521
Daniel Dunbar9c073ff2009-03-17 22:07:58 +0000522} // end namespace toolchains
523} // end namespace driver
524} // end namespace clang
525
Edward O'Callaghane7925a02009-08-22 01:06:46 +0000526#endif // CLANG_LIB_DRIVER_TOOLS_H_