blob: d774e02ff0ce1f63a07a3b872791c514f15f5996 [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"
14
15#include "llvm/Support/Compiler.h"
16
17namespace clang {
18namespace driver {
Daniel Dunbar7c764122009-03-17 22:18:43 +000019namespace tools {
Daniel Dunbar542fae92009-03-17 22:07:58 +000020
Daniel Dunbar7c764122009-03-17 22:18:43 +000021 class VISIBILITY_HIDDEN Clang : public Tool {
Daniel Dunbar542fae92009-03-17 22:07:58 +000022 public:
Daniel Dunbareed1b422009-03-17 22:45:24 +000023 Clang(const ToolChain &TC) : Tool("clang", TC) {}
Daniel Dunbar542fae92009-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 Dunbar00fd3792009-03-18 06:00:36 +000028
29 virtual void ConstructJob(Compilation &C, const JobAction &JA,
Daniel Dunbarbe453382009-03-18 06:07:59 +000030 const InputInfo &Output,
31 const InputInfoList &Inputs,
Daniel Dunbar00fd3792009-03-18 06:00:36 +000032 const ArgList &TCArgs,
33 const char *LinkingOutput) const;
Daniel Dunbar542fae92009-03-17 22:07:58 +000034 };
35
Daniel Dunbareed1b422009-03-17 22:45:24 +000036 /// gcc - Generic GCC tool implementations.
37namespace gcc {
38 class VISIBILITY_HIDDEN Preprocess : public Tool {
Daniel Dunbar542fae92009-03-17 22:07:58 +000039 public:
Daniel Dunbareed1b422009-03-17 22:45:24 +000040 Preprocess(const ToolChain &TC) : Tool("gcc::Preprocess", TC) {}
Daniel Dunbar542fae92009-03-17 22:07:58 +000041
42 virtual bool acceptsPipedInput() const { return true; }
43 virtual bool canPipeOutput() const { return true; }
44 virtual bool hasIntegratedCPP() const { return false; }
Daniel Dunbar00fd3792009-03-18 06:00:36 +000045
46 virtual void ConstructJob(Compilation &C, const JobAction &JA,
Daniel Dunbarbe453382009-03-18 06:07:59 +000047 const InputInfo &Output,
48 const InputInfoList &Inputs,
Daniel Dunbar00fd3792009-03-18 06:00:36 +000049 const ArgList &TCArgs,
50 const char *LinkingOutput) const;
Daniel Dunbar542fae92009-03-17 22:07:58 +000051 };
52
Daniel Dunbareed1b422009-03-17 22:45:24 +000053 class VISIBILITY_HIDDEN Precompile : public Tool {
Daniel Dunbar542fae92009-03-17 22:07:58 +000054 public:
Daniel Dunbareed1b422009-03-17 22:45:24 +000055 Precompile(const ToolChain &TC) : Tool("gcc::Precompile", TC) {}
Daniel Dunbar542fae92009-03-17 22:07:58 +000056
57 virtual bool acceptsPipedInput() const { return true; }
58 virtual bool canPipeOutput() const { return false; }
59 virtual bool hasIntegratedCPP() const { return true; }
Daniel Dunbar00fd3792009-03-18 06:00:36 +000060
61 virtual void ConstructJob(Compilation &C, const JobAction &JA,
Daniel Dunbarbe453382009-03-18 06:07:59 +000062 const InputInfo &Output,
63 const InputInfoList &Inputs,
Daniel Dunbar00fd3792009-03-18 06:00:36 +000064 const ArgList &TCArgs,
65 const char *LinkingOutput) const;
Daniel Dunbar542fae92009-03-17 22:07:58 +000066 };
67
Daniel Dunbareed1b422009-03-17 22:45:24 +000068 class VISIBILITY_HIDDEN Compile : public Tool {
Daniel Dunbar542fae92009-03-17 22:07:58 +000069 public:
Daniel Dunbareed1b422009-03-17 22:45:24 +000070 Compile(const ToolChain &TC) : Tool("gcc::Compile", TC) {}
Daniel Dunbar542fae92009-03-17 22:07:58 +000071
72 virtual bool acceptsPipedInput() const { return true; }
73 virtual bool canPipeOutput() const { return true; }
74 virtual bool hasIntegratedCPP() const { return true; }
Daniel Dunbar00fd3792009-03-18 06:00:36 +000075
76 virtual void ConstructJob(Compilation &C, const JobAction &JA,
Daniel Dunbarbe453382009-03-18 06:07:59 +000077 const InputInfo &Output,
78 const InputInfoList &Inputs,
Daniel Dunbar00fd3792009-03-18 06:00:36 +000079 const ArgList &TCArgs,
80 const char *LinkingOutput) const;
Daniel Dunbar542fae92009-03-17 22:07:58 +000081 };
82
Daniel Dunbareed1b422009-03-17 22:45:24 +000083 class VISIBILITY_HIDDEN Assemble : public Tool {
Daniel Dunbar542fae92009-03-17 22:07:58 +000084 public:
Daniel Dunbareed1b422009-03-17 22:45:24 +000085 Assemble(const ToolChain &TC) : Tool("gcc::Assemble", TC) {}
Daniel Dunbar542fae92009-03-17 22:07:58 +000086
87 virtual bool acceptsPipedInput() const { return true; }
88 virtual bool canPipeOutput() const { return false; }
89 virtual bool hasIntegratedCPP() const { return false; }
Daniel Dunbar00fd3792009-03-18 06:00:36 +000090
91 virtual void ConstructJob(Compilation &C, const JobAction &JA,
Daniel Dunbarbe453382009-03-18 06:07:59 +000092 const InputInfo &Output,
93 const InputInfoList &Inputs,
Daniel Dunbar00fd3792009-03-18 06:00:36 +000094 const ArgList &TCArgs,
95 const char *LinkingOutput) const;
Daniel Dunbar542fae92009-03-17 22:07:58 +000096 };
97
Daniel Dunbareed1b422009-03-17 22:45:24 +000098 class VISIBILITY_HIDDEN Link : public Tool {
Daniel Dunbar542fae92009-03-17 22:07:58 +000099 public:
Daniel Dunbareed1b422009-03-17 22:45:24 +0000100 Link(const ToolChain &TC) : Tool("gcc::Link", TC) {}
Daniel Dunbar542fae92009-03-17 22:07:58 +0000101
102 virtual bool acceptsPipedInput() const { return false; }
103 virtual bool canPipeOutput() const { return false; }
104 virtual bool hasIntegratedCPP() const { return false; }
Daniel Dunbar00fd3792009-03-18 06:00:36 +0000105
106 virtual void ConstructJob(Compilation &C, const JobAction &JA,
Daniel Dunbarbe453382009-03-18 06:07:59 +0000107 const InputInfo &Output,
108 const InputInfoList &Inputs,
Daniel Dunbar00fd3792009-03-18 06:00:36 +0000109 const ArgList &TCArgs,
110 const char *LinkingOutput) const;
Daniel Dunbar542fae92009-03-17 22:07:58 +0000111 };
Daniel Dunbareed1b422009-03-17 22:45:24 +0000112} // end namespace gcc
Daniel Dunbar542fae92009-03-17 22:07:58 +0000113
114} // end namespace toolchains
115} // end namespace driver
116} // end namespace clang
117
118#endif