Tools.h revision b488c1dac8e53206f07103d794a62a3f5012c0f4
1//===--- 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"
14#include "clang/Driver/Util.h"
15
16#include "llvm/Support/Compiler.h"
17
18namespace clang {
19namespace driver {
20namespace tools {
21
22  class VISIBILITY_HIDDEN Clang : public Tool {
23  public:
24    Clang(const ToolChain &TC) : Tool("clang", TC) {}
25
26    virtual bool acceptsPipedInput() const { return true; }
27    virtual bool canPipeOutput() const { return true; }
28    virtual bool hasIntegratedCPP() const { return true; }
29
30    virtual void ConstructJob(Compilation &C, const JobAction &JA,
31                              Job &Dest,
32                              const InputInfo &Output,
33                              const InputInfoList &Inputs,
34                              const ArgList &TCArgs,
35                              const char *LinkingOutput) const;
36  };
37
38  /// gcc - Generic GCC tool implementations.
39namespace gcc {
40  class VISIBILITY_HIDDEN Common : public Tool {
41  public:
42    Common(const char *Name, const ToolChain &TC) : Tool(Name, TC) {}
43
44    virtual void ConstructJob(Compilation &C, const JobAction &JA,
45                              Job &Dest,
46                              const InputInfo &Output,
47                              const InputInfoList &Inputs,
48                              const ArgList &TCArgs,
49                              const char *LinkingOutput) const;
50
51    /// RenderExtraToolArgs - Render any arguments necessary to force
52    /// the particular tool mode.
53    virtual void RenderExtraToolArgs(ArgStringList &CmdArgs) const = 0;
54  };
55
56
57  class VISIBILITY_HIDDEN Preprocess : public Common {
58  public:
59    Preprocess(const ToolChain &TC) : Common("gcc::Preprocess", TC) {}
60
61    virtual bool acceptsPipedInput() const { return true; }
62    virtual bool canPipeOutput() const { return true; }
63    virtual bool hasIntegratedCPP() const { return false; }
64
65    virtual void RenderExtraToolArgs(ArgStringList &CmdArgs) const;
66  };
67
68  class VISIBILITY_HIDDEN Precompile : public Common  {
69  public:
70    Precompile(const ToolChain &TC) : Common("gcc::Precompile", TC) {}
71
72    virtual bool acceptsPipedInput() const { return true; }
73    virtual bool canPipeOutput() const { return false; }
74    virtual bool hasIntegratedCPP() const { return true; }
75
76    virtual void RenderExtraToolArgs(ArgStringList &CmdArgs) const;
77  };
78
79  class VISIBILITY_HIDDEN Compile : public Common  {
80  public:
81    Compile(const ToolChain &TC) : Common("gcc::Compile", TC) {}
82
83    virtual bool acceptsPipedInput() const { return true; }
84    virtual bool canPipeOutput() const { return true; }
85    virtual bool hasIntegratedCPP() const { return true; }
86
87    virtual void RenderExtraToolArgs(ArgStringList &CmdArgs) const;
88  };
89
90  class VISIBILITY_HIDDEN Assemble : public Common  {
91  public:
92    Assemble(const ToolChain &TC) : Common("gcc::Assemble", TC) {}
93
94    virtual bool acceptsPipedInput() const { return true; }
95    virtual bool canPipeOutput() const { return false; }
96    virtual bool hasIntegratedCPP() const { return false; }
97
98    virtual void RenderExtraToolArgs(ArgStringList &CmdArgs) const;
99  };
100
101  class VISIBILITY_HIDDEN Link : public Common  {
102  public:
103    Link(const ToolChain &TC) : Common("gcc::Link", TC) {}
104
105    virtual bool acceptsPipedInput() const { return false; }
106    virtual bool canPipeOutput() const { return false; }
107    virtual bool hasIntegratedCPP() const { return false; }
108
109    virtual void RenderExtraToolArgs(ArgStringList &CmdArgs) const;
110  };
111} // end namespace gcc
112
113} // end namespace toolchains
114} // end namespace driver
115} // end namespace clang
116
117#endif
118