blob: da9d3e2ea5aff80e06b40204095eb62537a81f79 [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"
14
15#include "llvm/Support/Compiler.h"
16
17namespace clang {
18namespace driver {
Daniel Dunbar985b8252009-03-17 22:18:43 +000019namespace tools {
Daniel Dunbar9c073ff2009-03-17 22:07:58 +000020
Daniel Dunbar985b8252009-03-17 22:18:43 +000021 class VISIBILITY_HIDDEN Clang : public Tool {
Daniel Dunbar9c073ff2009-03-17 22:07:58 +000022 public:
Daniel Dunbar31b1e542009-03-17 22:45:24 +000023 Clang(const ToolChain &TC) : Tool("clang", TC) {}
Daniel Dunbar9c073ff2009-03-17 22:07:58 +000024
25 virtual bool acceptsPipedInput() const { return true; }
26 virtual bool canPipeOutput() const { return true; }
27 virtual bool hasIntegratedCPP() const { return true; }
Daniel Dunbar47ac7d22009-03-18 06:00:36 +000028
29 virtual void ConstructJob(Compilation &C, const JobAction &JA,
30 InputInfo &Output, InputInfoList &Inputs,
31 const ArgList &TCArgs,
32 const char *LinkingOutput) const;
Daniel Dunbar9c073ff2009-03-17 22:07:58 +000033 };
34
Daniel Dunbar31b1e542009-03-17 22:45:24 +000035 /// gcc - Generic GCC tool implementations.
36namespace gcc {
37 class VISIBILITY_HIDDEN Preprocess : public Tool {
Daniel Dunbar9c073ff2009-03-17 22:07:58 +000038 public:
Daniel Dunbar31b1e542009-03-17 22:45:24 +000039 Preprocess(const ToolChain &TC) : Tool("gcc::Preprocess", TC) {}
Daniel Dunbar9c073ff2009-03-17 22:07:58 +000040
41 virtual bool acceptsPipedInput() const { return true; }
42 virtual bool canPipeOutput() const { return true; }
43 virtual bool hasIntegratedCPP() const { return false; }
Daniel Dunbar47ac7d22009-03-18 06:00:36 +000044
45 virtual void ConstructJob(Compilation &C, const JobAction &JA,
46 InputInfo &Output, InputInfoList &Inputs,
47 const ArgList &TCArgs,
48 const char *LinkingOutput) const;
Daniel Dunbar9c073ff2009-03-17 22:07:58 +000049 };
50
Daniel Dunbar31b1e542009-03-17 22:45:24 +000051 class VISIBILITY_HIDDEN Precompile : public Tool {
Daniel Dunbar9c073ff2009-03-17 22:07:58 +000052 public:
Daniel Dunbar31b1e542009-03-17 22:45:24 +000053 Precompile(const ToolChain &TC) : Tool("gcc::Precompile", TC) {}
Daniel Dunbar9c073ff2009-03-17 22:07:58 +000054
55 virtual bool acceptsPipedInput() const { return true; }
56 virtual bool canPipeOutput() const { return false; }
57 virtual bool hasIntegratedCPP() const { return true; }
Daniel Dunbar47ac7d22009-03-18 06:00:36 +000058
59 virtual void ConstructJob(Compilation &C, const JobAction &JA,
60 InputInfo &Output, InputInfoList &Inputs,
61 const ArgList &TCArgs,
62 const char *LinkingOutput) const;
Daniel Dunbar9c073ff2009-03-17 22:07:58 +000063 };
64
Daniel Dunbar31b1e542009-03-17 22:45:24 +000065 class VISIBILITY_HIDDEN Compile : public Tool {
Daniel Dunbar9c073ff2009-03-17 22:07:58 +000066 public:
Daniel Dunbar31b1e542009-03-17 22:45:24 +000067 Compile(const ToolChain &TC) : Tool("gcc::Compile", TC) {}
Daniel Dunbar9c073ff2009-03-17 22:07:58 +000068
69 virtual bool acceptsPipedInput() const { return true; }
70 virtual bool canPipeOutput() const { return true; }
71 virtual bool hasIntegratedCPP() const { return true; }
Daniel Dunbar47ac7d22009-03-18 06:00:36 +000072
73 virtual void ConstructJob(Compilation &C, const JobAction &JA,
74 InputInfo &Output, InputInfoList &Inputs,
75 const ArgList &TCArgs,
76 const char *LinkingOutput) const;
Daniel Dunbar9c073ff2009-03-17 22:07:58 +000077 };
78
Daniel Dunbar31b1e542009-03-17 22:45:24 +000079 class VISIBILITY_HIDDEN Assemble : public Tool {
Daniel Dunbar9c073ff2009-03-17 22:07:58 +000080 public:
Daniel Dunbar31b1e542009-03-17 22:45:24 +000081 Assemble(const ToolChain &TC) : Tool("gcc::Assemble", TC) {}
Daniel Dunbar9c073ff2009-03-17 22:07:58 +000082
83 virtual bool acceptsPipedInput() const { return true; }
84 virtual bool canPipeOutput() const { return false; }
85 virtual bool hasIntegratedCPP() const { return false; }
Daniel Dunbar47ac7d22009-03-18 06:00:36 +000086
87 virtual void ConstructJob(Compilation &C, const JobAction &JA,
88 InputInfo &Output, InputInfoList &Inputs,
89 const ArgList &TCArgs,
90 const char *LinkingOutput) const;
Daniel Dunbar9c073ff2009-03-17 22:07:58 +000091 };
92
Daniel Dunbar31b1e542009-03-17 22:45:24 +000093 class VISIBILITY_HIDDEN Link : public Tool {
Daniel Dunbar9c073ff2009-03-17 22:07:58 +000094 public:
Daniel Dunbar31b1e542009-03-17 22:45:24 +000095 Link(const ToolChain &TC) : Tool("gcc::Link", TC) {}
Daniel Dunbar9c073ff2009-03-17 22:07:58 +000096
97 virtual bool acceptsPipedInput() const { return false; }
98 virtual bool canPipeOutput() const { return false; }
99 virtual bool hasIntegratedCPP() const { return false; }
Daniel Dunbar47ac7d22009-03-18 06:00:36 +0000100
101 virtual void ConstructJob(Compilation &C, const JobAction &JA,
102 InputInfo &Output, InputInfoList &Inputs,
103 const ArgList &TCArgs,
104 const char *LinkingOutput) const;
Daniel Dunbar9c073ff2009-03-17 22:07:58 +0000105 };
Daniel Dunbar31b1e542009-03-17 22:45:24 +0000106} // end namespace gcc
Daniel Dunbar9c073ff2009-03-17 22:07:58 +0000107
108} // end namespace toolchains
109} // end namespace driver
110} // end namespace clang
111
112#endif