blob: 2b06a3d04d705a68585a86f9d83070fc2461819e [file] [log] [blame]
Daniel Dunbar542fae92009-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 Dunbar09c3aa52009-03-18 08:07:30 +000014#include "clang/Driver/Util.h"
Daniel Dunbar542fae92009-03-17 22:07:58 +000015
16#include "llvm/Support/Compiler.h"
17
18namespace clang {
19namespace driver {
Daniel Dunbareb1be3f2009-03-26 16:23:12 +000020namespace toolchains {
21 class Darwin_X86;
22}
23
Daniel Dunbar7c764122009-03-17 22:18:43 +000024namespace tools {
Daniel Dunbar542fae92009-03-17 22:07:58 +000025
Daniel Dunbar7c764122009-03-17 22:18:43 +000026 class VISIBILITY_HIDDEN Clang : public Tool {
Daniel Dunbar542fae92009-03-17 22:07:58 +000027 public:
Daniel Dunbareed1b422009-03-17 22:45:24 +000028 Clang(const ToolChain &TC) : Tool("clang", TC) {}
Daniel Dunbar542fae92009-03-17 22:07:58 +000029
30 virtual bool acceptsPipedInput() const { return true; }
31 virtual bool canPipeOutput() const { return true; }
32 virtual bool hasIntegratedCPP() const { return true; }
Daniel Dunbar00fd3792009-03-18 06:00:36 +000033
34 virtual void ConstructJob(Compilation &C, const JobAction &JA,
Daniel Dunbar933ac452009-03-18 07:06:02 +000035 Job &Dest,
Daniel Dunbarbe453382009-03-18 06:07:59 +000036 const InputInfo &Output,
37 const InputInfoList &Inputs,
Daniel Dunbar00fd3792009-03-18 06:00:36 +000038 const ArgList &TCArgs,
39 const char *LinkingOutput) const;
Daniel Dunbar542fae92009-03-17 22:07:58 +000040 };
41
Daniel Dunbareed1b422009-03-17 22:45:24 +000042 /// gcc - Generic GCC tool implementations.
43namespace gcc {
Daniel Dunbar09c3aa52009-03-18 08:07:30 +000044 class VISIBILITY_HIDDEN Common : public Tool {
Daniel Dunbar542fae92009-03-17 22:07:58 +000045 public:
Daniel Dunbar09c3aa52009-03-18 08:07:30 +000046 Common(const char *Name, const ToolChain &TC) : Tool(Name, TC) {}
47
48 virtual void ConstructJob(Compilation &C, const JobAction &JA,
49 Job &Dest,
50 const InputInfo &Output,
51 const InputInfoList &Inputs,
52 const ArgList &TCArgs,
53 const char *LinkingOutput) const;
54
55 /// RenderExtraToolArgs - Render any arguments necessary to force
56 /// the particular tool mode.
57 virtual void RenderExtraToolArgs(ArgStringList &CmdArgs) const = 0;
58 };
59
60
61 class VISIBILITY_HIDDEN Preprocess : public Common {
62 public:
63 Preprocess(const ToolChain &TC) : Common("gcc::Preprocess", TC) {}
Daniel Dunbar542fae92009-03-17 22:07:58 +000064
65 virtual bool acceptsPipedInput() const { return true; }
66 virtual bool canPipeOutput() const { return true; }
67 virtual bool hasIntegratedCPP() const { return false; }
Daniel Dunbar00fd3792009-03-18 06:00:36 +000068
Daniel Dunbar09c3aa52009-03-18 08:07:30 +000069 virtual void RenderExtraToolArgs(ArgStringList &CmdArgs) const;
Daniel Dunbar542fae92009-03-17 22:07:58 +000070 };
71
Daniel Dunbar09c3aa52009-03-18 08:07:30 +000072 class VISIBILITY_HIDDEN Precompile : public Common {
Daniel Dunbar542fae92009-03-17 22:07:58 +000073 public:
Daniel Dunbar09c3aa52009-03-18 08:07:30 +000074 Precompile(const ToolChain &TC) : Common("gcc::Precompile", TC) {}
Daniel Dunbar542fae92009-03-17 22:07:58 +000075
76 virtual bool acceptsPipedInput() const { return true; }
77 virtual bool canPipeOutput() const { return false; }
78 virtual bool hasIntegratedCPP() const { return true; }
Daniel Dunbar00fd3792009-03-18 06:00:36 +000079
Daniel Dunbar09c3aa52009-03-18 08:07:30 +000080 virtual void RenderExtraToolArgs(ArgStringList &CmdArgs) const;
Daniel Dunbar542fae92009-03-17 22:07:58 +000081 };
82
Daniel Dunbar09c3aa52009-03-18 08:07:30 +000083 class VISIBILITY_HIDDEN Compile : public Common {
Daniel Dunbar542fae92009-03-17 22:07:58 +000084 public:
Daniel Dunbar09c3aa52009-03-18 08:07:30 +000085 Compile(const ToolChain &TC) : Common("gcc::Compile", TC) {}
Daniel Dunbar542fae92009-03-17 22:07:58 +000086
87 virtual bool acceptsPipedInput() const { return true; }
88 virtual bool canPipeOutput() const { return true; }
89 virtual bool hasIntegratedCPP() const { return true; }
Daniel Dunbar00fd3792009-03-18 06:00:36 +000090
Daniel Dunbar09c3aa52009-03-18 08:07:30 +000091 virtual void RenderExtraToolArgs(ArgStringList &CmdArgs) const;
Daniel Dunbar542fae92009-03-17 22:07:58 +000092 };
93
Daniel Dunbar09c3aa52009-03-18 08:07:30 +000094 class VISIBILITY_HIDDEN Assemble : public Common {
Daniel Dunbar542fae92009-03-17 22:07:58 +000095 public:
Daniel Dunbar09c3aa52009-03-18 08:07:30 +000096 Assemble(const ToolChain &TC) : Common("gcc::Assemble", TC) {}
Daniel Dunbar542fae92009-03-17 22:07:58 +000097
98 virtual bool acceptsPipedInput() const { return true; }
99 virtual bool canPipeOutput() const { return false; }
100 virtual bool hasIntegratedCPP() const { return false; }
Daniel Dunbar00fd3792009-03-18 06:00:36 +0000101
Daniel Dunbar09c3aa52009-03-18 08:07:30 +0000102 virtual void RenderExtraToolArgs(ArgStringList &CmdArgs) const;
Daniel Dunbar542fae92009-03-17 22:07:58 +0000103 };
104
Daniel Dunbar09c3aa52009-03-18 08:07:30 +0000105 class VISIBILITY_HIDDEN Link : public Common {
Daniel Dunbar542fae92009-03-17 22:07:58 +0000106 public:
Daniel Dunbar09c3aa52009-03-18 08:07:30 +0000107 Link(const ToolChain &TC) : Common("gcc::Link", TC) {}
Daniel Dunbar542fae92009-03-17 22:07:58 +0000108
109 virtual bool acceptsPipedInput() const { return false; }
110 virtual bool canPipeOutput() const { return false; }
111 virtual bool hasIntegratedCPP() const { return false; }
Daniel Dunbar00fd3792009-03-18 06:00:36 +0000112
Daniel Dunbar09c3aa52009-03-18 08:07:30 +0000113 virtual void RenderExtraToolArgs(ArgStringList &CmdArgs) const;
Daniel Dunbar542fae92009-03-17 22:07:58 +0000114 };
Daniel Dunbareed1b422009-03-17 22:45:24 +0000115} // end namespace gcc
Daniel Dunbar542fae92009-03-17 22:07:58 +0000116
Daniel Dunbarb9b1fb22009-03-20 00:52:38 +0000117namespace darwin {
Daniel Dunbar32a8df32009-03-20 16:06:39 +0000118 class VISIBILITY_HIDDEN Assemble : public Tool {
119 public:
120 Assemble(const ToolChain &TC) : Tool("darwin::Assemble", TC) {}
121
122 virtual bool acceptsPipedInput() const { return true; }
123 virtual bool canPipeOutput() const { return false; }
124 virtual bool hasIntegratedCPP() const { return false; }
125
126 virtual void ConstructJob(Compilation &C, const JobAction &JA,
127 Job &Dest,
128 const InputInfo &Output,
129 const InputInfoList &Inputs,
130 const ArgList &TCArgs,
131 const char *LinkingOutput) const;
132 };
133
Daniel Dunbareb1be3f2009-03-26 16:23:12 +0000134 class VISIBILITY_HIDDEN Link : public Tool {
135 void AddDarwinArch(const ArgList &Args, ArgStringList &CmdArgs) const;
136 void AddDarwinSubArch(const ArgList &Args, ArgStringList &CmdArgs) const;
137 void AddLinkArgs(const ArgList &Args, ArgStringList &CmdArgs) const;
138
139 /// The default macosx-version-min.
140 const char *MacosxVersionMin;
141
142 const toolchains::Darwin_X86 &getDarwinToolChain() const;
143
144 public:
145 Link(const ToolChain &TC,
146 const char *_MacosxVersionMin)
147 : Tool("darwin::Link", TC), MacosxVersionMin(_MacosxVersionMin) {
148 }
149
150 virtual bool acceptsPipedInput() const { return false; }
151 virtual bool canPipeOutput() const { return false; }
152 virtual bool hasIntegratedCPP() const { return false; }
153
154 virtual void ConstructJob(Compilation &C, const JobAction &JA,
155 Job &Dest,
156 const InputInfo &Output,
157 const InputInfoList &Inputs,
158 const ArgList &TCArgs,
159 const char *LinkingOutput) const;
160 };
161
Daniel Dunbarb9b1fb22009-03-20 00:52:38 +0000162 class VISIBILITY_HIDDEN Lipo : public Tool {
163 public:
Daniel Dunbar32a8df32009-03-20 16:06:39 +0000164 Lipo(const ToolChain &TC) : Tool("darwin::Lipo", TC) {}
Daniel Dunbarb9b1fb22009-03-20 00:52:38 +0000165
166 virtual bool acceptsPipedInput() const { return false; }
167 virtual bool canPipeOutput() const { return false; }
168 virtual bool hasIntegratedCPP() const { return false; }
169
170 virtual void ConstructJob(Compilation &C, const JobAction &JA,
171 Job &Dest,
172 const InputInfo &Output,
173 const InputInfoList &Inputs,
174 const ArgList &TCArgs,
175 const char *LinkingOutput) const;
176 };
177}
178
Daniel Dunbar542fae92009-03-17 22:07:58 +0000179} // end namespace toolchains
180} // end namespace driver
181} // end namespace clang
182
183#endif