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