blob: a87a7baec5d5476fac3c965a8f254d38f39a24d0 [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 Dunbar7c764122009-03-17 22:18:43 +000020namespace tools {
Daniel Dunbar542fae92009-03-17 22:07:58 +000021
Daniel Dunbar7c764122009-03-17 22:18:43 +000022 class VISIBILITY_HIDDEN Clang : public Tool {
Daniel Dunbar542fae92009-03-17 22:07:58 +000023 public:
Daniel Dunbareed1b422009-03-17 22:45:24 +000024 Clang(const ToolChain &TC) : Tool("clang", TC) {}
Daniel Dunbar542fae92009-03-17 22:07:58 +000025
26 virtual bool acceptsPipedInput() const { return true; }
27 virtual bool canPipeOutput() const { return true; }
28 virtual bool hasIntegratedCPP() const { return true; }
Daniel Dunbar00fd3792009-03-18 06:00:36 +000029
30 virtual void ConstructJob(Compilation &C, const JobAction &JA,
Daniel Dunbar933ac452009-03-18 07:06:02 +000031 Job &Dest,
Daniel Dunbarbe453382009-03-18 06:07:59 +000032 const InputInfo &Output,
33 const InputInfoList &Inputs,
Daniel Dunbar00fd3792009-03-18 06:00:36 +000034 const ArgList &TCArgs,
35 const char *LinkingOutput) const;
Daniel Dunbar542fae92009-03-17 22:07:58 +000036 };
37
Daniel Dunbareed1b422009-03-17 22:45:24 +000038 /// gcc - Generic GCC tool implementations.
39namespace gcc {
Daniel Dunbar09c3aa52009-03-18 08:07:30 +000040 class VISIBILITY_HIDDEN Common : public Tool {
Daniel Dunbar542fae92009-03-17 22:07:58 +000041 public:
Daniel Dunbar09c3aa52009-03-18 08:07:30 +000042 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) {}
Daniel Dunbar542fae92009-03-17 22:07:58 +000060
61 virtual bool acceptsPipedInput() const { return true; }
62 virtual bool canPipeOutput() const { return true; }
63 virtual bool hasIntegratedCPP() const { return false; }
Daniel Dunbar00fd3792009-03-18 06:00:36 +000064
Daniel Dunbar09c3aa52009-03-18 08:07:30 +000065 virtual void RenderExtraToolArgs(ArgStringList &CmdArgs) const;
Daniel Dunbar542fae92009-03-17 22:07:58 +000066 };
67
Daniel Dunbar09c3aa52009-03-18 08:07:30 +000068 class VISIBILITY_HIDDEN Precompile : public Common {
Daniel Dunbar542fae92009-03-17 22:07:58 +000069 public:
Daniel Dunbar09c3aa52009-03-18 08:07:30 +000070 Precompile(const ToolChain &TC) : Common("gcc::Precompile", TC) {}
Daniel Dunbar542fae92009-03-17 22:07:58 +000071
72 virtual bool acceptsPipedInput() const { return true; }
73 virtual bool canPipeOutput() const { return false; }
74 virtual bool hasIntegratedCPP() const { return true; }
Daniel Dunbar00fd3792009-03-18 06:00:36 +000075
Daniel Dunbar09c3aa52009-03-18 08:07:30 +000076 virtual void RenderExtraToolArgs(ArgStringList &CmdArgs) const;
Daniel Dunbar542fae92009-03-17 22:07:58 +000077 };
78
Daniel Dunbar09c3aa52009-03-18 08:07:30 +000079 class VISIBILITY_HIDDEN Compile : public Common {
Daniel Dunbar542fae92009-03-17 22:07:58 +000080 public:
Daniel Dunbar09c3aa52009-03-18 08:07:30 +000081 Compile(const ToolChain &TC) : Common("gcc::Compile", TC) {}
Daniel Dunbar542fae92009-03-17 22:07:58 +000082
83 virtual bool acceptsPipedInput() const { return true; }
84 virtual bool canPipeOutput() const { return true; }
85 virtual bool hasIntegratedCPP() const { return true; }
Daniel Dunbar00fd3792009-03-18 06:00:36 +000086
Daniel Dunbar09c3aa52009-03-18 08:07:30 +000087 virtual void RenderExtraToolArgs(ArgStringList &CmdArgs) const;
Daniel Dunbar542fae92009-03-17 22:07:58 +000088 };
89
Daniel Dunbar09c3aa52009-03-18 08:07:30 +000090 class VISIBILITY_HIDDEN Assemble : public Common {
Daniel Dunbar542fae92009-03-17 22:07:58 +000091 public:
Daniel Dunbar09c3aa52009-03-18 08:07:30 +000092 Assemble(const ToolChain &TC) : Common("gcc::Assemble", TC) {}
Daniel Dunbar542fae92009-03-17 22:07:58 +000093
94 virtual bool acceptsPipedInput() const { return true; }
95 virtual bool canPipeOutput() const { return false; }
96 virtual bool hasIntegratedCPP() const { return false; }
Daniel Dunbar00fd3792009-03-18 06:00:36 +000097
Daniel Dunbar09c3aa52009-03-18 08:07:30 +000098 virtual void RenderExtraToolArgs(ArgStringList &CmdArgs) const;
Daniel Dunbar542fae92009-03-17 22:07:58 +000099 };
100
Daniel Dunbar09c3aa52009-03-18 08:07:30 +0000101 class VISIBILITY_HIDDEN Link : public Common {
Daniel Dunbar542fae92009-03-17 22:07:58 +0000102 public:
Daniel Dunbar09c3aa52009-03-18 08:07:30 +0000103 Link(const ToolChain &TC) : Common("gcc::Link", TC) {}
Daniel Dunbar542fae92009-03-17 22:07:58 +0000104
105 virtual bool acceptsPipedInput() const { return false; }
106 virtual bool canPipeOutput() const { return false; }
107 virtual bool hasIntegratedCPP() const { return false; }
Daniel Dunbar00fd3792009-03-18 06:00:36 +0000108
Daniel Dunbar09c3aa52009-03-18 08:07:30 +0000109 virtual void RenderExtraToolArgs(ArgStringList &CmdArgs) const;
Daniel Dunbar542fae92009-03-17 22:07:58 +0000110 };
Daniel Dunbareed1b422009-03-17 22:45:24 +0000111} // end namespace gcc
Daniel Dunbar542fae92009-03-17 22:07:58 +0000112
113} // end namespace toolchains
114} // end namespace driver
115} // end namespace clang
116
117#endif