blob: 93abf75722eb9f68ef0f0dad75aa15278aead3a4 [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 Dunbarfa41d692011-03-17 17:10:06 +000037 void AddARMTargetArgs(const ArgList &Args, ArgStringList &CmdArgs,
38 bool KernelOrKext) const;
Eric Christophered734732010-03-02 02:41:08 +000039 void AddMIPSTargetArgs(const ArgList &Args, ArgStringList &CmdArgs) const;
Bruno Cardoso Lopes9284d212010-11-09 17:21:19 +000040 void AddSparcTargetArgs(const ArgList &Args, ArgStringList &CmdArgs) const;
Daniel Dunbar6acda162009-09-09 22:33:08 +000041 void AddX86TargetArgs(const ArgList &Args, ArgStringList &CmdArgs) const;
42
Daniel Dunbar9c073ff2009-03-17 22:07:58 +000043 public:
Daniel Dunbar30382042010-05-22 00:37:18 +000044 Clang(const ToolChain &TC) : Tool("clang", "clang frontend", TC) {}
Daniel Dunbar9c073ff2009-03-17 22:07:58 +000045
Daniel Dunbar60a53f22010-04-06 17:07:49 +000046 virtual bool hasGoodDiagnostics() const { return true; }
Daniel Dunbar8767cbc2010-02-03 03:07:56 +000047 virtual bool hasIntegratedAssembler() const { return true; }
Daniel Dunbar9c073ff2009-03-17 22:07:58 +000048 virtual bool hasIntegratedCPP() const { return true; }
Daniel Dunbar47ac7d22009-03-18 06:00:36 +000049
50 virtual void ConstructJob(Compilation &C, const JobAction &JA,
Mike Stump1eb44332009-09-09 15:08:12 +000051 const InputInfo &Output,
52 const InputInfoList &Inputs,
53 const ArgList &TCArgs,
Daniel Dunbar47ac7d22009-03-18 06:00:36 +000054 const char *LinkingOutput) const;
Daniel Dunbar9c073ff2009-03-17 22:07:58 +000055 };
56
Daniel Dunbar20a9aa52010-05-20 21:30:13 +000057 /// \brief Clang integrated assembler tool.
58 class LLVM_LIBRARY_VISIBILITY ClangAs : public Tool {
59 public:
Daniel Dunbar30382042010-05-22 00:37:18 +000060 ClangAs(const ToolChain &TC) : Tool("clang::as",
61 "clang integrated assembler", TC) {}
Daniel Dunbar20a9aa52010-05-20 21:30:13 +000062
Daniel Dunbar20a9aa52010-05-20 21:30:13 +000063 virtual bool hasGoodDiagnostics() const { return true; }
64 virtual bool hasIntegratedAssembler() const { return false; }
65 virtual bool hasIntegratedCPP() const { return false; }
66
67 virtual void ConstructJob(Compilation &C, const JobAction &JA,
Daniel Dunbar20a9aa52010-05-20 21:30:13 +000068 const InputInfo &Output,
69 const InputInfoList &Inputs,
70 const ArgList &TCArgs,
71 const char *LinkingOutput) const;
72 };
73
Daniel Dunbar31b1e542009-03-17 22:45:24 +000074 /// gcc - Generic GCC tool implementations.
75namespace gcc {
Duncan Sands92dd1912010-05-11 20:16:05 +000076 class LLVM_LIBRARY_VISIBILITY Common : public Tool {
Daniel Dunbar9c073ff2009-03-17 22:07:58 +000077 public:
Daniel Dunbar30382042010-05-22 00:37:18 +000078 Common(const char *Name, const char *ShortName,
79 const ToolChain &TC) : Tool(Name, ShortName, TC) {}
Daniel Dunbarb488c1d2009-03-18 08:07:30 +000080
81 virtual void ConstructJob(Compilation &C, const JobAction &JA,
Mike Stump1eb44332009-09-09 15:08:12 +000082 const InputInfo &Output,
83 const InputInfoList &Inputs,
84 const ArgList &TCArgs,
Daniel Dunbarb488c1d2009-03-18 08:07:30 +000085 const char *LinkingOutput) const;
86
87 /// RenderExtraToolArgs - Render any arguments necessary to force
88 /// the particular tool mode.
Daniel Dunbar82b51cc2010-01-25 22:35:08 +000089 virtual void RenderExtraToolArgs(const JobAction &JA,
90 ArgStringList &CmdArgs) const = 0;
Daniel Dunbarb488c1d2009-03-18 08:07:30 +000091 };
92
Mike Stump1eb44332009-09-09 15:08:12 +000093
Duncan Sands92dd1912010-05-11 20:16:05 +000094 class LLVM_LIBRARY_VISIBILITY Preprocess : public Common {
Daniel Dunbarb488c1d2009-03-18 08:07:30 +000095 public:
Daniel Dunbar30382042010-05-22 00:37:18 +000096 Preprocess(const ToolChain &TC) : Common("gcc::Preprocess",
97 "gcc preprocessor", TC) {}
Daniel Dunbar9c073ff2009-03-17 22:07:58 +000098
Daniel Dunbar60a53f22010-04-06 17:07:49 +000099 virtual bool hasGoodDiagnostics() const { return true; }
Daniel Dunbar9c073ff2009-03-17 22:07:58 +0000100 virtual bool hasIntegratedCPP() const { return false; }
Daniel Dunbar47ac7d22009-03-18 06:00:36 +0000101
Daniel Dunbar82b51cc2010-01-25 22:35:08 +0000102 virtual void RenderExtraToolArgs(const JobAction &JA,
103 ArgStringList &CmdArgs) const;
Daniel Dunbar9c073ff2009-03-17 22:07:58 +0000104 };
105
Duncan Sands92dd1912010-05-11 20:16:05 +0000106 class LLVM_LIBRARY_VISIBILITY Precompile : public Common {
Daniel Dunbar9c073ff2009-03-17 22:07:58 +0000107 public:
Daniel Dunbar30382042010-05-22 00:37:18 +0000108 Precompile(const ToolChain &TC) : Common("gcc::Precompile",
109 "gcc precompile", TC) {}
Daniel Dunbar9c073ff2009-03-17 22:07:58 +0000110
Daniel Dunbar60a53f22010-04-06 17:07:49 +0000111 virtual bool hasGoodDiagnostics() const { return true; }
Daniel Dunbar9c073ff2009-03-17 22:07:58 +0000112 virtual bool hasIntegratedCPP() const { return true; }
Daniel Dunbar47ac7d22009-03-18 06:00:36 +0000113
Daniel Dunbar82b51cc2010-01-25 22:35:08 +0000114 virtual void RenderExtraToolArgs(const JobAction &JA,
115 ArgStringList &CmdArgs) const;
Daniel Dunbar9c073ff2009-03-17 22:07:58 +0000116 };
117
Duncan Sands92dd1912010-05-11 20:16:05 +0000118 class LLVM_LIBRARY_VISIBILITY Compile : public Common {
Daniel Dunbar9c073ff2009-03-17 22:07:58 +0000119 public:
Daniel Dunbar30382042010-05-22 00:37:18 +0000120 Compile(const ToolChain &TC) : Common("gcc::Compile",
121 "gcc frontend", TC) {}
Daniel Dunbar9c073ff2009-03-17 22:07:58 +0000122
Daniel Dunbar60a53f22010-04-06 17:07:49 +0000123 virtual bool hasGoodDiagnostics() const { return true; }
Daniel Dunbar9c073ff2009-03-17 22:07:58 +0000124 virtual bool hasIntegratedCPP() const { return true; }
Daniel Dunbar47ac7d22009-03-18 06:00:36 +0000125
Daniel Dunbar82b51cc2010-01-25 22:35:08 +0000126 virtual void RenderExtraToolArgs(const JobAction &JA,
127 ArgStringList &CmdArgs) const;
Daniel Dunbar9c073ff2009-03-17 22:07:58 +0000128 };
129
Duncan Sands92dd1912010-05-11 20:16:05 +0000130 class LLVM_LIBRARY_VISIBILITY Assemble : public Common {
Daniel Dunbar9c073ff2009-03-17 22:07:58 +0000131 public:
Daniel Dunbar30382042010-05-22 00:37:18 +0000132 Assemble(const ToolChain &TC) : Common("gcc::Assemble",
133 "assembler (via gcc)", TC) {}
Daniel Dunbar9c073ff2009-03-17 22:07:58 +0000134
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,
138 ArgStringList &CmdArgs) const;
Daniel Dunbar9c073ff2009-03-17 22:07:58 +0000139 };
140
Duncan Sands92dd1912010-05-11 20:16:05 +0000141 class LLVM_LIBRARY_VISIBILITY Link : public Common {
Daniel Dunbar9c073ff2009-03-17 22:07:58 +0000142 public:
Daniel Dunbar30382042010-05-22 00:37:18 +0000143 Link(const ToolChain &TC) : Common("gcc::Link",
144 "linker (via gcc)", TC) {}
Daniel Dunbar9c073ff2009-03-17 22:07:58 +0000145
Daniel Dunbar9c073ff2009-03-17 22:07:58 +0000146 virtual bool hasIntegratedCPP() const { return false; }
Daniel Dunbar47ac7d22009-03-18 06:00:36 +0000147
Daniel Dunbar82b51cc2010-01-25 22:35:08 +0000148 virtual void RenderExtraToolArgs(const JobAction &JA,
149 ArgStringList &CmdArgs) const;
Daniel Dunbar9c073ff2009-03-17 22:07:58 +0000150 };
Daniel Dunbar31b1e542009-03-17 22:45:24 +0000151} // end namespace gcc
Daniel Dunbar9c073ff2009-03-17 22:07:58 +0000152
Daniel Dunbarff7488d2009-03-20 00:52:38 +0000153namespace darwin {
Duncan Sands92dd1912010-05-11 20:16:05 +0000154 class LLVM_LIBRARY_VISIBILITY DarwinTool : public Tool {
Daniel Dunbarfbefe6b2009-09-09 18:36:20 +0000155 protected:
156 void AddDarwinArch(const ArgList &Args, ArgStringList &CmdArgs) const;
Daniel Dunbarfbefe6b2009-09-09 18:36:20 +0000157
158 const toolchains::Darwin &getDarwinToolChain() const {
159 return reinterpret_cast<const toolchains::Darwin&>(getToolChain());
160 }
161
162 public:
Daniel Dunbar30382042010-05-22 00:37:18 +0000163 DarwinTool(const char *Name, const char *ShortName,
164 const ToolChain &TC) : Tool(Name, ShortName, TC) {}
Daniel Dunbarfbefe6b2009-09-09 18:36:20 +0000165 };
166
Duncan Sands92dd1912010-05-11 20:16:05 +0000167 class LLVM_LIBRARY_VISIBILITY CC1 : public DarwinTool {
Daniel Dunbara5a7bd02009-03-30 00:34:04 +0000168 public:
Mike Stump1eb44332009-09-09 15:08:12 +0000169 static const char *getBaseInputName(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 *getBaseInputStem(const ArgList &Args,
Daniel Dunbara5a7bd02009-03-30 00:34:04 +0000172 const InputInfoList &Input);
Mike Stump1eb44332009-09-09 15:08:12 +0000173 static const char *getDependencyFileName(const ArgList &Args,
Daniel Dunbara5a7bd02009-03-30 00:34:04 +0000174 const InputInfoList &Inputs);
175
Daniel Dunbar40f12652009-03-29 17:08:39 +0000176 protected:
177 const char *getCC1Name(types::ID Type) const;
178
Daniel Dunbara3ec60e2009-03-29 18:40:18 +0000179 void AddCC1Args(const ArgList &Args, ArgStringList &CmdArgs) const;
Daniel Dunbar40f12652009-03-29 17:08:39 +0000180 void AddCC1OptionsArgs(const ArgList &Args, ArgStringList &CmdArgs,
181 const InputInfoList &Inputs,
Daniel Dunbara3ec60e2009-03-29 18:40:18 +0000182 const ArgStringList &OutputArgs) const;
Daniel Dunbar40f12652009-03-29 17:08:39 +0000183 void AddCPPOptionsArgs(const ArgList &Args, ArgStringList &CmdArgs,
184 const InputInfoList &Inputs,
Daniel Dunbara3ec60e2009-03-29 18:40:18 +0000185 const ArgStringList &OutputArgs) const;
Mike Stump1eb44332009-09-09 15:08:12 +0000186 void AddCPPUniqueOptionsArgs(const ArgList &Args,
Daniel Dunbara3ec60e2009-03-29 18:40:18 +0000187 ArgStringList &CmdArgs,
188 const InputInfoList &Inputs) const;
189 void AddCPPArgs(const ArgList &Args, ArgStringList &CmdArgs) const;
Daniel Dunbar40f12652009-03-29 17:08:39 +0000190
191 public:
Daniel Dunbar30382042010-05-22 00:37:18 +0000192 CC1(const char *Name, const char *ShortName,
193 const ToolChain &TC) : DarwinTool(Name, ShortName, TC) {}
Daniel Dunbar40f12652009-03-29 17:08:39 +0000194
Daniel Dunbar60a53f22010-04-06 17:07:49 +0000195 virtual bool hasGoodDiagnostics() const { return true; }
Daniel Dunbar40f12652009-03-29 17:08:39 +0000196 virtual bool hasIntegratedCPP() const { return true; }
197 };
198
Duncan Sands92dd1912010-05-11 20:16:05 +0000199 class LLVM_LIBRARY_VISIBILITY Preprocess : public CC1 {
Daniel Dunbar40f12652009-03-29 17:08:39 +0000200 public:
Daniel Dunbar30382042010-05-22 00:37:18 +0000201 Preprocess(const ToolChain &TC) : CC1("darwin::Preprocess",
202 "gcc preprocessor", TC) {}
Daniel Dunbar40f12652009-03-29 17:08:39 +0000203
204 virtual void ConstructJob(Compilation &C, const JobAction &JA,
Mike Stump1eb44332009-09-09 15:08:12 +0000205 const InputInfo &Output,
206 const InputInfoList &Inputs,
207 const ArgList &TCArgs,
Daniel Dunbar40f12652009-03-29 17:08:39 +0000208 const char *LinkingOutput) const;
209 };
210
Duncan Sands92dd1912010-05-11 20:16:05 +0000211 class LLVM_LIBRARY_VISIBILITY Compile : public CC1 {
Daniel Dunbar40f12652009-03-29 17:08:39 +0000212 public:
Daniel Dunbar30382042010-05-22 00:37:18 +0000213 Compile(const ToolChain &TC) : CC1("darwin::Compile", "gcc frontend", TC) {}
Daniel Dunbar40f12652009-03-29 17:08:39 +0000214
215 virtual void ConstructJob(Compilation &C, const JobAction &JA,
Mike Stump1eb44332009-09-09 15:08:12 +0000216 const InputInfo &Output,
217 const InputInfoList &Inputs,
218 const ArgList &TCArgs,
Daniel Dunbar40f12652009-03-29 17:08:39 +0000219 const char *LinkingOutput) const;
220 };
221
Duncan Sands92dd1912010-05-11 20:16:05 +0000222 class LLVM_LIBRARY_VISIBILITY Assemble : public DarwinTool {
Daniel Dunbar8cac5f72009-03-20 16:06:39 +0000223 public:
Daniel Dunbar30382042010-05-22 00:37:18 +0000224 Assemble(const ToolChain &TC) : DarwinTool("darwin::Assemble",
225 "assembler", TC) {}
Daniel Dunbar8cac5f72009-03-20 16:06:39 +0000226
Daniel Dunbar8cac5f72009-03-20 16:06:39 +0000227 virtual bool hasIntegratedCPP() const { return false; }
228
229 virtual void ConstructJob(Compilation &C, const JobAction &JA,
Mike Stump1eb44332009-09-09 15:08:12 +0000230 const InputInfo &Output,
231 const InputInfoList &Inputs,
232 const ArgList &TCArgs,
Daniel Dunbar8cac5f72009-03-20 16:06:39 +0000233 const char *LinkingOutput) const;
234 };
235
Duncan Sands92dd1912010-05-11 20:16:05 +0000236 class LLVM_LIBRARY_VISIBILITY Link : public DarwinTool {
Daniel Dunbar748de8e2010-09-09 21:51:05 +0000237 void AddLinkArgs(Compilation &C, const ArgList &Args,
238 ArgStringList &CmdArgs) const;
Daniel Dunbar02633b52009-03-26 16:23:12 +0000239
Daniel Dunbar02633b52009-03-26 16:23:12 +0000240 public:
Daniel Dunbar30382042010-05-22 00:37:18 +0000241 Link(const ToolChain &TC) : DarwinTool("darwin::Link", "linker", TC) {}
Daniel Dunbar02633b52009-03-26 16:23:12 +0000242
Daniel Dunbar02633b52009-03-26 16:23:12 +0000243 virtual bool hasIntegratedCPP() const { return false; }
244
245 virtual void ConstructJob(Compilation &C, const JobAction &JA,
Mike Stump1eb44332009-09-09 15:08:12 +0000246 const InputInfo &Output,
247 const InputInfoList &Inputs,
248 const ArgList &TCArgs,
Daniel Dunbar02633b52009-03-26 16:23:12 +0000249 const char *LinkingOutput) const;
250 };
251
Duncan Sands92dd1912010-05-11 20:16:05 +0000252 class LLVM_LIBRARY_VISIBILITY Lipo : public DarwinTool {
Daniel Dunbarff7488d2009-03-20 00:52:38 +0000253 public:
Daniel Dunbar30382042010-05-22 00:37:18 +0000254 Lipo(const ToolChain &TC) : DarwinTool("darwin::Lipo", "lipo", TC) {}
Daniel Dunbarff7488d2009-03-20 00:52:38 +0000255
Daniel Dunbarff7488d2009-03-20 00:52:38 +0000256 virtual bool hasIntegratedCPP() const { return false; }
257
258 virtual void ConstructJob(Compilation &C, const JobAction &JA,
Mike Stump1eb44332009-09-09 15:08:12 +0000259 const InputInfo &Output,
260 const InputInfoList &Inputs,
261 const ArgList &TCArgs,
Daniel Dunbarff7488d2009-03-20 00:52:38 +0000262 const char *LinkingOutput) const;
263 };
Daniel Dunbar6e0f2542010-06-04 18:28:36 +0000264
265 class LLVM_LIBRARY_VISIBILITY Dsymutil : public DarwinTool {
266 public:
267 Dsymutil(const ToolChain &TC) : DarwinTool("darwin::Dsymutil",
268 "dsymutil", TC) {}
269
Daniel Dunbar6e0f2542010-06-04 18:28:36 +0000270 virtual bool hasIntegratedCPP() const { return false; }
271
272 virtual void ConstructJob(Compilation &C, const JobAction &JA,
Daniel Dunbar6e0f2542010-06-04 18:28:36 +0000273 const InputInfo &Output,
274 const InputInfoList &Inputs,
275 const ArgList &TCArgs,
276 const char *LinkingOutput) const;
277 };
Daniel Dunbarff7488d2009-03-20 00:52:38 +0000278}
279
Daniel Dunbarf7b8eec2009-06-29 20:52:51 +0000280 /// openbsd -- Directly call GNU Binutils assembler and linker
281namespace openbsd {
Duncan Sands92dd1912010-05-11 20:16:05 +0000282 class LLVM_LIBRARY_VISIBILITY Assemble : public Tool {
Daniel Dunbarf7b8eec2009-06-29 20:52:51 +0000283 public:
Daniel Dunbar30382042010-05-22 00:37:18 +0000284 Assemble(const ToolChain &TC) : Tool("openbsd::Assemble", "assembler",
285 TC) {}
Daniel Dunbarf7b8eec2009-06-29 20:52:51 +0000286
Daniel Dunbarf7b8eec2009-06-29 20:52:51 +0000287 virtual bool hasIntegratedCPP() const { return false; }
288
289 virtual void ConstructJob(Compilation &C, const JobAction &JA,
Mike Stump1eb44332009-09-09 15:08:12 +0000290 const InputInfo &Output,
291 const InputInfoList &Inputs,
292 const ArgList &TCArgs,
Daniel Dunbarf7b8eec2009-06-29 20:52:51 +0000293 const char *LinkingOutput) const;
294 };
Duncan Sands92dd1912010-05-11 20:16:05 +0000295 class LLVM_LIBRARY_VISIBILITY Link : public Tool {
Daniel Dunbarf7b8eec2009-06-29 20:52:51 +0000296 public:
Daniel Dunbar30382042010-05-22 00:37:18 +0000297 Link(const ToolChain &TC) : Tool("openbsd::Link", "linker", TC) {}
Daniel Dunbarf7b8eec2009-06-29 20:52:51 +0000298
Daniel Dunbarf7b8eec2009-06-29 20:52:51 +0000299 virtual bool hasIntegratedCPP() const { return false; }
300
301 virtual void ConstructJob(Compilation &C, const JobAction &JA,
Mike Stump1eb44332009-09-09 15:08:12 +0000302 const InputInfo &Output,
303 const InputInfoList &Inputs,
304 const ArgList &TCArgs,
Daniel Dunbarf7b8eec2009-06-29 20:52:51 +0000305 const char *LinkingOutput) const;
306 };
Edward O'Callaghane7925a02009-08-22 01:06:46 +0000307} // end namespace openbsd
Daniel Dunbarf7b8eec2009-06-29 20:52:51 +0000308
Daniel Dunbar68a31d42009-03-31 17:45:15 +0000309 /// freebsd -- Directly call GNU Binutils assembler and linker
310namespace freebsd {
Duncan Sands92dd1912010-05-11 20:16:05 +0000311 class LLVM_LIBRARY_VISIBILITY Assemble : public Tool {
Daniel Dunbar68a31d42009-03-31 17:45:15 +0000312 public:
Daniel Dunbar30382042010-05-22 00:37:18 +0000313 Assemble(const ToolChain &TC) : Tool("freebsd::Assemble", "assembler",
314 TC) {}
Daniel Dunbar68a31d42009-03-31 17:45:15 +0000315
Daniel Dunbar68a31d42009-03-31 17:45:15 +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 Dunbar68a31d42009-03-31 17:45:15 +0000322 const char *LinkingOutput) const;
323 };
Duncan Sands92dd1912010-05-11 20:16:05 +0000324 class LLVM_LIBRARY_VISIBILITY Link : public Tool {
Daniel Dunbar008f54a2009-04-01 19:36:32 +0000325 public:
Daniel Dunbar30382042010-05-22 00:37:18 +0000326 Link(const ToolChain &TC) : Tool("freebsd::Link", "linker", TC) {}
Daniel Dunbar008f54a2009-04-01 19:36:32 +0000327
Daniel Dunbar008f54a2009-04-01 19:36:32 +0000328 virtual bool hasIntegratedCPP() const { return false; }
329
330 virtual void ConstructJob(Compilation &C, const JobAction &JA,
Mike Stump1eb44332009-09-09 15:08:12 +0000331 const InputInfo &Output,
332 const InputInfoList &Inputs,
333 const ArgList &TCArgs,
Daniel Dunbar008f54a2009-04-01 19:36:32 +0000334 const char *LinkingOutput) const;
335 };
Edward O'Callaghane7925a02009-08-22 01:06:46 +0000336} // end namespace freebsd
337
Benjamin Kramer8e50a962011-02-02 18:59:27 +0000338 /// netbsd -- Directly call GNU Binutils assembler and linker
339namespace netbsd {
340 class LLVM_LIBRARY_VISIBILITY Assemble : public Tool {
341 public:
342 Assemble(const ToolChain &TC) : Tool("netbsd::Assemble", "assembler",
343 TC) {}
344
345 virtual bool hasIntegratedCPP() const { return false; }
346
347 virtual void ConstructJob(Compilation &C, const JobAction &JA,
348 const InputInfo &Output,
349 const InputInfoList &Inputs,
350 const ArgList &TCArgs,
351 const char *LinkingOutput) const;
352 };
353 class LLVM_LIBRARY_VISIBILITY Link : public Tool {
354 public:
355 Link(const ToolChain &TC) : Tool("netbsd::Link", "linker", TC) {}
356
357 virtual bool hasIntegratedCPP() const { return false; }
358
359 virtual void ConstructJob(Compilation &C, const JobAction &JA,
360 const InputInfo &Output,
361 const InputInfoList &Inputs,
362 const ArgList &TCArgs,
363 const char *LinkingOutput) const;
364 };
365} // end namespace netbsd
366
Rafael Espindolaba30bbe2010-08-10 00:25:48 +0000367 /// linux -- Directly call GNU Binutils assembler and linker
368namespace linuxtools {
369 class LLVM_LIBRARY_VISIBILITY Assemble : public Tool {
370 public:
371 Assemble(const ToolChain &TC) : Tool("linux::Assemble", "assembler",
372 TC) {}
373
374 virtual bool hasIntegratedCPP() const { return false; }
375
376 virtual void ConstructJob(Compilation &C, const JobAction &JA,
377 const InputInfo &Output,
378 const InputInfoList &Inputs,
379 const ArgList &TCArgs,
380 const char *LinkingOutput) const;
381 };
Rafael Espindolac1da9812010-11-07 20:14:31 +0000382 class LLVM_LIBRARY_VISIBILITY Link : public Tool {
383 public:
384 Link(const ToolChain &TC) : Tool("linux::Link", "linker", TC) {}
385
386 virtual bool hasIntegratedCPP() const { return false; }
387
388 virtual void ConstructJob(Compilation &C, const JobAction &JA,
389 const InputInfo &Output,
390 const InputInfoList &Inputs,
391 const ArgList &TCArgs,
392 const char *LinkingOutput) const;
393 };
Rafael Espindolaba30bbe2010-08-10 00:25:48 +0000394}
Chris Lattner38e317d2010-07-07 16:01:42 +0000395 /// minix -- Directly call GNU Binutils assembler and linker
396namespace minix {
397 class LLVM_LIBRARY_VISIBILITY Assemble : public Tool {
398 public:
399 Assemble(const ToolChain &TC) : Tool("minix::Assemble", "assembler",
400 TC) {}
401
Chris Lattner38e317d2010-07-07 16:01:42 +0000402 virtual bool hasIntegratedCPP() const { return false; }
403
404 virtual void ConstructJob(Compilation &C, const JobAction &JA,
Chris Lattner38e317d2010-07-07 16:01:42 +0000405 const InputInfo &Output,
406 const InputInfoList &Inputs,
407 const ArgList &TCArgs,
408 const char *LinkingOutput) const;
409 };
410 class LLVM_LIBRARY_VISIBILITY Link : public Tool {
411 public:
412 Link(const ToolChain &TC) : Tool("minix::Link", "linker", TC) {}
413
Chris Lattner38e317d2010-07-07 16:01:42 +0000414 virtual bool hasIntegratedCPP() const { return false; }
415
416 virtual void ConstructJob(Compilation &C, const JobAction &JA,
Chris Lattner38e317d2010-07-07 16:01:42 +0000417 const InputInfo &Output,
418 const InputInfoList &Inputs,
419 const ArgList &TCArgs,
420 const char *LinkingOutput) const;
421 };
422} // end namespace minix
423
Edward O'Callaghane7925a02009-08-22 01:06:46 +0000424 /// auroraux -- Directly call GNU Binutils assembler and linker
425namespace auroraux {
Duncan Sands92dd1912010-05-11 20:16:05 +0000426 class LLVM_LIBRARY_VISIBILITY Assemble : public Tool {
Edward O'Callaghane7925a02009-08-22 01:06:46 +0000427 public:
Daniel Dunbar30382042010-05-22 00:37:18 +0000428 Assemble(const ToolChain &TC) : Tool("auroraux::Assemble", "assembler",
429 TC) {}
Edward O'Callaghane7925a02009-08-22 01:06:46 +0000430
Edward O'Callaghane7925a02009-08-22 01:06:46 +0000431 virtual bool hasIntegratedCPP() const { return false; }
432
433 virtual void ConstructJob(Compilation &C, const JobAction &JA,
Mike Stump1eb44332009-09-09 15:08:12 +0000434 const InputInfo &Output,
435 const InputInfoList &Inputs,
436 const ArgList &TCArgs,
Edward O'Callaghane7925a02009-08-22 01:06:46 +0000437 const char *LinkingOutput) const;
438 };
Duncan Sands92dd1912010-05-11 20:16:05 +0000439 class LLVM_LIBRARY_VISIBILITY Link : public Tool {
Edward O'Callaghane7925a02009-08-22 01:06:46 +0000440 public:
Daniel Dunbar30382042010-05-22 00:37:18 +0000441 Link(const ToolChain &TC) : Tool("auroraux::Link", "linker", TC) {}
Edward O'Callaghane7925a02009-08-22 01:06:46 +0000442
Edward O'Callaghane7925a02009-08-22 01:06:46 +0000443 virtual bool hasIntegratedCPP() const { return false; }
444
445 virtual void ConstructJob(Compilation &C, const JobAction &JA,
Mike Stump1eb44332009-09-09 15:08:12 +0000446 const InputInfo &Output,
447 const InputInfoList &Inputs,
448 const ArgList &TCArgs,
Edward O'Callaghane7925a02009-08-22 01:06:46 +0000449 const char *LinkingOutput) const;
450 };
451} // end namespace auroraux
Daniel Dunbar68a31d42009-03-31 17:45:15 +0000452
Daniel Dunbar11e1b402009-05-02 18:28:39 +0000453 /// dragonfly -- Directly call GNU Binutils assembler and linker
454namespace dragonfly {
Duncan Sands92dd1912010-05-11 20:16:05 +0000455 class LLVM_LIBRARY_VISIBILITY Assemble : public Tool {
Daniel Dunbar11e1b402009-05-02 18:28:39 +0000456 public:
Daniel Dunbar30382042010-05-22 00:37:18 +0000457 Assemble(const ToolChain &TC) : Tool("dragonfly::Assemble", "assembler",
458 TC) {}
Daniel Dunbar11e1b402009-05-02 18:28:39 +0000459
Daniel Dunbar11e1b402009-05-02 18:28:39 +0000460 virtual bool hasIntegratedCPP() const { return false; }
461
462 virtual void ConstructJob(Compilation &C, const JobAction &JA,
Mike Stump1eb44332009-09-09 15:08:12 +0000463 const InputInfo &Output,
464 const InputInfoList &Inputs,
465 const ArgList &TCArgs,
Daniel Dunbar11e1b402009-05-02 18:28:39 +0000466 const char *LinkingOutput) const;
467 };
Duncan Sands92dd1912010-05-11 20:16:05 +0000468 class LLVM_LIBRARY_VISIBILITY Link : public Tool {
Daniel Dunbar11e1b402009-05-02 18:28:39 +0000469 public:
Daniel Dunbar30382042010-05-22 00:37:18 +0000470 Link(const ToolChain &TC) : Tool("dragonfly::Link", "linker", TC) {}
Daniel Dunbar11e1b402009-05-02 18:28:39 +0000471
Daniel Dunbar11e1b402009-05-02 18:28:39 +0000472 virtual bool hasIntegratedCPP() const { return false; }
473
474 virtual void ConstructJob(Compilation &C, const JobAction &JA,
Mike Stump1eb44332009-09-09 15:08:12 +0000475 const InputInfo &Output,
476 const InputInfoList &Inputs,
477 const ArgList &TCArgs,
Daniel Dunbar11e1b402009-05-02 18:28:39 +0000478 const char *LinkingOutput) const;
479 };
Edward O'Callaghane7925a02009-08-22 01:06:46 +0000480} // end namespace dragonfly
Daniel Dunbar11e1b402009-05-02 18:28:39 +0000481
Michael J. Spencerff58e362010-08-21 21:55:07 +0000482 /// Visual studio tools.
483namespace visualstudio {
484 class LLVM_LIBRARY_VISIBILITY Link : public Tool {
485 public:
486 Link(const ToolChain &TC) : Tool("visualstudio::Link", "linker", TC) {}
487
488 virtual bool hasIntegratedCPP() const { return false; }
489
490 virtual void ConstructJob(Compilation &C, const JobAction &JA,
491 const InputInfo &Output,
492 const InputInfoList &Inputs,
493 const ArgList &TCArgs,
494 const char *LinkingOutput) const;
495 };
496} // end namespace visualstudio
497
Daniel Dunbar9c073ff2009-03-17 22:07:58 +0000498} // end namespace toolchains
499} // end namespace driver
500} // end namespace clang
501
Edward O'Callaghane7925a02009-08-22 01:06:46 +0000502#endif // CLANG_LIB_DRIVER_TOOLS_H_