Tools.h revision 871adcf4e41285e3f4c3b62eaa1b2e05b60b92da
19c073ff462eb75ccbb1c4446e21c148f3fc618e1Daniel Dunbar//===--- Tools.h - Tool Implementations -------------------------*- C++ -*-===//
29c073ff462eb75ccbb1c4446e21c148f3fc618e1Daniel Dunbar//
39c073ff462eb75ccbb1c4446e21c148f3fc618e1Daniel Dunbar//                     The LLVM Compiler Infrastructure
49c073ff462eb75ccbb1c4446e21c148f3fc618e1Daniel Dunbar//
59c073ff462eb75ccbb1c4446e21c148f3fc618e1Daniel Dunbar// This file is distributed under the University of Illinois Open Source
69c073ff462eb75ccbb1c4446e21c148f3fc618e1Daniel Dunbar// License. See LICENSE.TXT for details.
79c073ff462eb75ccbb1c4446e21c148f3fc618e1Daniel Dunbar//
89c073ff462eb75ccbb1c4446e21c148f3fc618e1Daniel Dunbar//===----------------------------------------------------------------------===//
99c073ff462eb75ccbb1c4446e21c148f3fc618e1Daniel Dunbar
109c073ff462eb75ccbb1c4446e21c148f3fc618e1Daniel Dunbar#ifndef CLANG_LIB_DRIVER_TOOLS_H_
119c073ff462eb75ccbb1c4446e21c148f3fc618e1Daniel Dunbar#define CLANG_LIB_DRIVER_TOOLS_H_
129c073ff462eb75ccbb1c4446e21c148f3fc618e1Daniel Dunbar
139c073ff462eb75ccbb1c4446e21c148f3fc618e1Daniel Dunbar#include "clang/Driver/Tool.h"
149c073ff462eb75ccbb1c4446e21c148f3fc618e1Daniel Dunbar
159c073ff462eb75ccbb1c4446e21c148f3fc618e1Daniel Dunbar#include "llvm/Support/Compiler.h"
169c073ff462eb75ccbb1c4446e21c148f3fc618e1Daniel Dunbar
179c073ff462eb75ccbb1c4446e21c148f3fc618e1Daniel Dunbarnamespace clang {
189c073ff462eb75ccbb1c4446e21c148f3fc618e1Daniel Dunbarnamespace driver {
19985b825eea7387be10478de0430815ed6a673326Daniel Dunbarnamespace tools {
209c073ff462eb75ccbb1c4446e21c148f3fc618e1Daniel Dunbar
21985b825eea7387be10478de0430815ed6a673326Daniel Dunbar  class VISIBILITY_HIDDEN Clang : public Tool {
229c073ff462eb75ccbb1c4446e21c148f3fc618e1Daniel Dunbar  public:
2331b1e5437e7435879fc044afb77ff27096008e72Daniel Dunbar    Clang(const ToolChain &TC) : Tool("clang", TC) {}
249c073ff462eb75ccbb1c4446e21c148f3fc618e1Daniel Dunbar
259c073ff462eb75ccbb1c4446e21c148f3fc618e1Daniel Dunbar    virtual bool acceptsPipedInput() const { return true; }
269c073ff462eb75ccbb1c4446e21c148f3fc618e1Daniel Dunbar    virtual bool canPipeOutput() const { return true; }
279c073ff462eb75ccbb1c4446e21c148f3fc618e1Daniel Dunbar    virtual bool hasIntegratedCPP() const { return true; }
2847ac7d27c44bd64a7d0fc03d4babc196cf2b8230Daniel Dunbar
2947ac7d27c44bd64a7d0fc03d4babc196cf2b8230Daniel Dunbar    virtual void ConstructJob(Compilation &C, const JobAction &JA,
30871adcf4e41285e3f4c3b62eaa1b2e05b60b92daDaniel Dunbar                              Job &Dest,
3162cf601812e03dd9bc5df42b8ef06a0cdedc38bfDaniel Dunbar                              const InputInfo &Output,
3262cf601812e03dd9bc5df42b8ef06a0cdedc38bfDaniel Dunbar                              const InputInfoList &Inputs,
3347ac7d27c44bd64a7d0fc03d4babc196cf2b8230Daniel Dunbar                              const ArgList &TCArgs,
3447ac7d27c44bd64a7d0fc03d4babc196cf2b8230Daniel Dunbar                              const char *LinkingOutput) const;
359c073ff462eb75ccbb1c4446e21c148f3fc618e1Daniel Dunbar  };
369c073ff462eb75ccbb1c4446e21c148f3fc618e1Daniel Dunbar
3731b1e5437e7435879fc044afb77ff27096008e72Daniel Dunbar  /// gcc - Generic GCC tool implementations.
3831b1e5437e7435879fc044afb77ff27096008e72Daniel Dunbarnamespace gcc {
3931b1e5437e7435879fc044afb77ff27096008e72Daniel Dunbar  class VISIBILITY_HIDDEN Preprocess : public Tool {
409c073ff462eb75ccbb1c4446e21c148f3fc618e1Daniel Dunbar  public:
4131b1e5437e7435879fc044afb77ff27096008e72Daniel Dunbar    Preprocess(const ToolChain &TC) : Tool("gcc::Preprocess", TC) {}
429c073ff462eb75ccbb1c4446e21c148f3fc618e1Daniel Dunbar
439c073ff462eb75ccbb1c4446e21c148f3fc618e1Daniel Dunbar    virtual bool acceptsPipedInput() const { return true; }
449c073ff462eb75ccbb1c4446e21c148f3fc618e1Daniel Dunbar    virtual bool canPipeOutput() const { return true; }
459c073ff462eb75ccbb1c4446e21c148f3fc618e1Daniel Dunbar    virtual bool hasIntegratedCPP() const { return false; }
4647ac7d27c44bd64a7d0fc03d4babc196cf2b8230Daniel Dunbar
4747ac7d27c44bd64a7d0fc03d4babc196cf2b8230Daniel Dunbar    virtual void ConstructJob(Compilation &C, const JobAction &JA,
48871adcf4e41285e3f4c3b62eaa1b2e05b60b92daDaniel Dunbar                              Job &Dest,
4962cf601812e03dd9bc5df42b8ef06a0cdedc38bfDaniel Dunbar                              const InputInfo &Output,
5062cf601812e03dd9bc5df42b8ef06a0cdedc38bfDaniel Dunbar                              const InputInfoList &Inputs,
5147ac7d27c44bd64a7d0fc03d4babc196cf2b8230Daniel Dunbar                              const ArgList &TCArgs,
5247ac7d27c44bd64a7d0fc03d4babc196cf2b8230Daniel Dunbar                              const char *LinkingOutput) const;
539c073ff462eb75ccbb1c4446e21c148f3fc618e1Daniel Dunbar  };
549c073ff462eb75ccbb1c4446e21c148f3fc618e1Daniel Dunbar
5531b1e5437e7435879fc044afb77ff27096008e72Daniel Dunbar  class VISIBILITY_HIDDEN Precompile : public Tool  {
569c073ff462eb75ccbb1c4446e21c148f3fc618e1Daniel Dunbar  public:
5731b1e5437e7435879fc044afb77ff27096008e72Daniel Dunbar    Precompile(const ToolChain &TC) : Tool("gcc::Precompile", TC) {}
589c073ff462eb75ccbb1c4446e21c148f3fc618e1Daniel Dunbar
599c073ff462eb75ccbb1c4446e21c148f3fc618e1Daniel Dunbar    virtual bool acceptsPipedInput() const { return true; }
609c073ff462eb75ccbb1c4446e21c148f3fc618e1Daniel Dunbar    virtual bool canPipeOutput() const { return false; }
619c073ff462eb75ccbb1c4446e21c148f3fc618e1Daniel Dunbar    virtual bool hasIntegratedCPP() const { return true; }
6247ac7d27c44bd64a7d0fc03d4babc196cf2b8230Daniel Dunbar
6347ac7d27c44bd64a7d0fc03d4babc196cf2b8230Daniel Dunbar    virtual void ConstructJob(Compilation &C, const JobAction &JA,
64871adcf4e41285e3f4c3b62eaa1b2e05b60b92daDaniel Dunbar                              Job &Dest,
6562cf601812e03dd9bc5df42b8ef06a0cdedc38bfDaniel Dunbar                              const InputInfo &Output,
6662cf601812e03dd9bc5df42b8ef06a0cdedc38bfDaniel Dunbar                              const InputInfoList &Inputs,
6747ac7d27c44bd64a7d0fc03d4babc196cf2b8230Daniel Dunbar                              const ArgList &TCArgs,
6847ac7d27c44bd64a7d0fc03d4babc196cf2b8230Daniel Dunbar                              const char *LinkingOutput) const;
699c073ff462eb75ccbb1c4446e21c148f3fc618e1Daniel Dunbar  };
709c073ff462eb75ccbb1c4446e21c148f3fc618e1Daniel Dunbar
7131b1e5437e7435879fc044afb77ff27096008e72Daniel Dunbar  class VISIBILITY_HIDDEN Compile : public Tool  {
729c073ff462eb75ccbb1c4446e21c148f3fc618e1Daniel Dunbar  public:
7331b1e5437e7435879fc044afb77ff27096008e72Daniel Dunbar    Compile(const ToolChain &TC) : Tool("gcc::Compile", TC) {}
749c073ff462eb75ccbb1c4446e21c148f3fc618e1Daniel Dunbar
759c073ff462eb75ccbb1c4446e21c148f3fc618e1Daniel Dunbar    virtual bool acceptsPipedInput() const { return true; }
769c073ff462eb75ccbb1c4446e21c148f3fc618e1Daniel Dunbar    virtual bool canPipeOutput() const { return true; }
779c073ff462eb75ccbb1c4446e21c148f3fc618e1Daniel Dunbar    virtual bool hasIntegratedCPP() const { return true; }
7847ac7d27c44bd64a7d0fc03d4babc196cf2b8230Daniel Dunbar
7947ac7d27c44bd64a7d0fc03d4babc196cf2b8230Daniel Dunbar    virtual void ConstructJob(Compilation &C, const JobAction &JA,
80871adcf4e41285e3f4c3b62eaa1b2e05b60b92daDaniel Dunbar                              Job &Dest,
8162cf601812e03dd9bc5df42b8ef06a0cdedc38bfDaniel Dunbar                              const InputInfo &Output,
8262cf601812e03dd9bc5df42b8ef06a0cdedc38bfDaniel Dunbar                              const InputInfoList &Inputs,
8347ac7d27c44bd64a7d0fc03d4babc196cf2b8230Daniel Dunbar                              const ArgList &TCArgs,
8447ac7d27c44bd64a7d0fc03d4babc196cf2b8230Daniel Dunbar                              const char *LinkingOutput) const;
859c073ff462eb75ccbb1c4446e21c148f3fc618e1Daniel Dunbar  };
869c073ff462eb75ccbb1c4446e21c148f3fc618e1Daniel Dunbar
8731b1e5437e7435879fc044afb77ff27096008e72Daniel Dunbar  class VISIBILITY_HIDDEN Assemble : public Tool  {
889c073ff462eb75ccbb1c4446e21c148f3fc618e1Daniel Dunbar  public:
8931b1e5437e7435879fc044afb77ff27096008e72Daniel Dunbar    Assemble(const ToolChain &TC) : Tool("gcc::Assemble", TC) {}
909c073ff462eb75ccbb1c4446e21c148f3fc618e1Daniel Dunbar
919c073ff462eb75ccbb1c4446e21c148f3fc618e1Daniel Dunbar    virtual bool acceptsPipedInput() const { return true; }
929c073ff462eb75ccbb1c4446e21c148f3fc618e1Daniel Dunbar    virtual bool canPipeOutput() const { return false; }
939c073ff462eb75ccbb1c4446e21c148f3fc618e1Daniel Dunbar    virtual bool hasIntegratedCPP() const { return false; }
9447ac7d27c44bd64a7d0fc03d4babc196cf2b8230Daniel Dunbar
9547ac7d27c44bd64a7d0fc03d4babc196cf2b8230Daniel Dunbar    virtual void ConstructJob(Compilation &C, const JobAction &JA,
96871adcf4e41285e3f4c3b62eaa1b2e05b60b92daDaniel Dunbar                              Job &Dest,
9762cf601812e03dd9bc5df42b8ef06a0cdedc38bfDaniel Dunbar                              const InputInfo &Output,
9862cf601812e03dd9bc5df42b8ef06a0cdedc38bfDaniel Dunbar                              const InputInfoList &Inputs,
9947ac7d27c44bd64a7d0fc03d4babc196cf2b8230Daniel Dunbar                              const ArgList &TCArgs,
10047ac7d27c44bd64a7d0fc03d4babc196cf2b8230Daniel Dunbar                              const char *LinkingOutput) const;
1019c073ff462eb75ccbb1c4446e21c148f3fc618e1Daniel Dunbar  };
1029c073ff462eb75ccbb1c4446e21c148f3fc618e1Daniel Dunbar
10331b1e5437e7435879fc044afb77ff27096008e72Daniel Dunbar  class VISIBILITY_HIDDEN Link : public Tool  {
1049c073ff462eb75ccbb1c4446e21c148f3fc618e1Daniel Dunbar  public:
10531b1e5437e7435879fc044afb77ff27096008e72Daniel Dunbar    Link(const ToolChain &TC) : Tool("gcc::Link", TC) {}
1069c073ff462eb75ccbb1c4446e21c148f3fc618e1Daniel Dunbar
1079c073ff462eb75ccbb1c4446e21c148f3fc618e1Daniel Dunbar    virtual bool acceptsPipedInput() const { return false; }
1089c073ff462eb75ccbb1c4446e21c148f3fc618e1Daniel Dunbar    virtual bool canPipeOutput() const { return false; }
1099c073ff462eb75ccbb1c4446e21c148f3fc618e1Daniel Dunbar    virtual bool hasIntegratedCPP() const { return false; }
11047ac7d27c44bd64a7d0fc03d4babc196cf2b8230Daniel Dunbar
11147ac7d27c44bd64a7d0fc03d4babc196cf2b8230Daniel Dunbar    virtual void ConstructJob(Compilation &C, const JobAction &JA,
112871adcf4e41285e3f4c3b62eaa1b2e05b60b92daDaniel Dunbar                              Job &Dest,
11362cf601812e03dd9bc5df42b8ef06a0cdedc38bfDaniel Dunbar                              const InputInfo &Output,
11462cf601812e03dd9bc5df42b8ef06a0cdedc38bfDaniel Dunbar                              const InputInfoList &Inputs,
11547ac7d27c44bd64a7d0fc03d4babc196cf2b8230Daniel Dunbar                              const ArgList &TCArgs,
11647ac7d27c44bd64a7d0fc03d4babc196cf2b8230Daniel Dunbar                              const char *LinkingOutput) const;
1179c073ff462eb75ccbb1c4446e21c148f3fc618e1Daniel Dunbar  };
11831b1e5437e7435879fc044afb77ff27096008e72Daniel Dunbar} // end namespace gcc
1199c073ff462eb75ccbb1c4446e21c148f3fc618e1Daniel Dunbar
1209c073ff462eb75ccbb1c4446e21c148f3fc618e1Daniel Dunbar} // end namespace toolchains
1219c073ff462eb75ccbb1c4446e21c148f3fc618e1Daniel Dunbar} // end namespace driver
1229c073ff462eb75ccbb1c4446e21c148f3fc618e1Daniel Dunbar} // end namespace clang
1239c073ff462eb75ccbb1c4446e21c148f3fc618e1Daniel Dunbar
1249c073ff462eb75ccbb1c4446e21c148f3fc618e1Daniel Dunbar#endif
125