Tools.h revision 47ac7d27c44bd64a7d0fc03d4babc196cf2b8230
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,
3047ac7d27c44bd64a7d0fc03d4babc196cf2b8230Daniel Dunbar                              InputInfo &Output, InputInfoList &Inputs,
3147ac7d27c44bd64a7d0fc03d4babc196cf2b8230Daniel Dunbar                              const ArgList &TCArgs,
3247ac7d27c44bd64a7d0fc03d4babc196cf2b8230Daniel Dunbar                              const char *LinkingOutput) const;
339c073ff462eb75ccbb1c4446e21c148f3fc618e1Daniel Dunbar  };
349c073ff462eb75ccbb1c4446e21c148f3fc618e1Daniel Dunbar
3531b1e5437e7435879fc044afb77ff27096008e72Daniel Dunbar  /// gcc - Generic GCC tool implementations.
3631b1e5437e7435879fc044afb77ff27096008e72Daniel Dunbarnamespace gcc {
3731b1e5437e7435879fc044afb77ff27096008e72Daniel Dunbar  class VISIBILITY_HIDDEN Preprocess : public Tool {
389c073ff462eb75ccbb1c4446e21c148f3fc618e1Daniel Dunbar  public:
3931b1e5437e7435879fc044afb77ff27096008e72Daniel Dunbar    Preprocess(const ToolChain &TC) : Tool("gcc::Preprocess", TC) {}
409c073ff462eb75ccbb1c4446e21c148f3fc618e1Daniel Dunbar
419c073ff462eb75ccbb1c4446e21c148f3fc618e1Daniel Dunbar    virtual bool acceptsPipedInput() const { return true; }
429c073ff462eb75ccbb1c4446e21c148f3fc618e1Daniel Dunbar    virtual bool canPipeOutput() const { return true; }
439c073ff462eb75ccbb1c4446e21c148f3fc618e1Daniel Dunbar    virtual bool hasIntegratedCPP() const { return false; }
4447ac7d27c44bd64a7d0fc03d4babc196cf2b8230Daniel Dunbar
4547ac7d27c44bd64a7d0fc03d4babc196cf2b8230Daniel Dunbar    virtual void ConstructJob(Compilation &C, const JobAction &JA,
4647ac7d27c44bd64a7d0fc03d4babc196cf2b8230Daniel Dunbar                              InputInfo &Output, InputInfoList &Inputs,
4747ac7d27c44bd64a7d0fc03d4babc196cf2b8230Daniel Dunbar                              const ArgList &TCArgs,
4847ac7d27c44bd64a7d0fc03d4babc196cf2b8230Daniel Dunbar                              const char *LinkingOutput) const;
499c073ff462eb75ccbb1c4446e21c148f3fc618e1Daniel Dunbar  };
509c073ff462eb75ccbb1c4446e21c148f3fc618e1Daniel Dunbar
5131b1e5437e7435879fc044afb77ff27096008e72Daniel Dunbar  class VISIBILITY_HIDDEN Precompile : public Tool  {
529c073ff462eb75ccbb1c4446e21c148f3fc618e1Daniel Dunbar  public:
5331b1e5437e7435879fc044afb77ff27096008e72Daniel Dunbar    Precompile(const ToolChain &TC) : Tool("gcc::Precompile", TC) {}
549c073ff462eb75ccbb1c4446e21c148f3fc618e1Daniel Dunbar
559c073ff462eb75ccbb1c4446e21c148f3fc618e1Daniel Dunbar    virtual bool acceptsPipedInput() const { return true; }
569c073ff462eb75ccbb1c4446e21c148f3fc618e1Daniel Dunbar    virtual bool canPipeOutput() const { return false; }
579c073ff462eb75ccbb1c4446e21c148f3fc618e1Daniel Dunbar    virtual bool hasIntegratedCPP() const { return true; }
5847ac7d27c44bd64a7d0fc03d4babc196cf2b8230Daniel Dunbar
5947ac7d27c44bd64a7d0fc03d4babc196cf2b8230Daniel Dunbar    virtual void ConstructJob(Compilation &C, const JobAction &JA,
6047ac7d27c44bd64a7d0fc03d4babc196cf2b8230Daniel Dunbar                              InputInfo &Output, InputInfoList &Inputs,
6147ac7d27c44bd64a7d0fc03d4babc196cf2b8230Daniel Dunbar                              const ArgList &TCArgs,
6247ac7d27c44bd64a7d0fc03d4babc196cf2b8230Daniel Dunbar                              const char *LinkingOutput) const;
639c073ff462eb75ccbb1c4446e21c148f3fc618e1Daniel Dunbar  };
649c073ff462eb75ccbb1c4446e21c148f3fc618e1Daniel Dunbar
6531b1e5437e7435879fc044afb77ff27096008e72Daniel Dunbar  class VISIBILITY_HIDDEN Compile : public Tool  {
669c073ff462eb75ccbb1c4446e21c148f3fc618e1Daniel Dunbar  public:
6731b1e5437e7435879fc044afb77ff27096008e72Daniel Dunbar    Compile(const ToolChain &TC) : Tool("gcc::Compile", TC) {}
689c073ff462eb75ccbb1c4446e21c148f3fc618e1Daniel Dunbar
699c073ff462eb75ccbb1c4446e21c148f3fc618e1Daniel Dunbar    virtual bool acceptsPipedInput() const { return true; }
709c073ff462eb75ccbb1c4446e21c148f3fc618e1Daniel Dunbar    virtual bool canPipeOutput() const { return true; }
719c073ff462eb75ccbb1c4446e21c148f3fc618e1Daniel Dunbar    virtual bool hasIntegratedCPP() const { return true; }
7247ac7d27c44bd64a7d0fc03d4babc196cf2b8230Daniel Dunbar
7347ac7d27c44bd64a7d0fc03d4babc196cf2b8230Daniel Dunbar    virtual void ConstructJob(Compilation &C, const JobAction &JA,
7447ac7d27c44bd64a7d0fc03d4babc196cf2b8230Daniel Dunbar                              InputInfo &Output, InputInfoList &Inputs,
7547ac7d27c44bd64a7d0fc03d4babc196cf2b8230Daniel Dunbar                              const ArgList &TCArgs,
7647ac7d27c44bd64a7d0fc03d4babc196cf2b8230Daniel Dunbar                              const char *LinkingOutput) const;
779c073ff462eb75ccbb1c4446e21c148f3fc618e1Daniel Dunbar  };
789c073ff462eb75ccbb1c4446e21c148f3fc618e1Daniel Dunbar
7931b1e5437e7435879fc044afb77ff27096008e72Daniel Dunbar  class VISIBILITY_HIDDEN Assemble : public Tool  {
809c073ff462eb75ccbb1c4446e21c148f3fc618e1Daniel Dunbar  public:
8131b1e5437e7435879fc044afb77ff27096008e72Daniel Dunbar    Assemble(const ToolChain &TC) : Tool("gcc::Assemble", TC) {}
829c073ff462eb75ccbb1c4446e21c148f3fc618e1Daniel Dunbar
839c073ff462eb75ccbb1c4446e21c148f3fc618e1Daniel Dunbar    virtual bool acceptsPipedInput() const { return true; }
849c073ff462eb75ccbb1c4446e21c148f3fc618e1Daniel Dunbar    virtual bool canPipeOutput() const { return false; }
859c073ff462eb75ccbb1c4446e21c148f3fc618e1Daniel Dunbar    virtual bool hasIntegratedCPP() const { return false; }
8647ac7d27c44bd64a7d0fc03d4babc196cf2b8230Daniel Dunbar
8747ac7d27c44bd64a7d0fc03d4babc196cf2b8230Daniel Dunbar    virtual void ConstructJob(Compilation &C, const JobAction &JA,
8847ac7d27c44bd64a7d0fc03d4babc196cf2b8230Daniel Dunbar                              InputInfo &Output, InputInfoList &Inputs,
8947ac7d27c44bd64a7d0fc03d4babc196cf2b8230Daniel Dunbar                              const ArgList &TCArgs,
9047ac7d27c44bd64a7d0fc03d4babc196cf2b8230Daniel Dunbar                              const char *LinkingOutput) const;
919c073ff462eb75ccbb1c4446e21c148f3fc618e1Daniel Dunbar  };
929c073ff462eb75ccbb1c4446e21c148f3fc618e1Daniel Dunbar
9331b1e5437e7435879fc044afb77ff27096008e72Daniel Dunbar  class VISIBILITY_HIDDEN Link : public Tool  {
949c073ff462eb75ccbb1c4446e21c148f3fc618e1Daniel Dunbar  public:
9531b1e5437e7435879fc044afb77ff27096008e72Daniel Dunbar    Link(const ToolChain &TC) : Tool("gcc::Link", TC) {}
969c073ff462eb75ccbb1c4446e21c148f3fc618e1Daniel Dunbar
979c073ff462eb75ccbb1c4446e21c148f3fc618e1Daniel Dunbar    virtual bool acceptsPipedInput() const { return false; }
989c073ff462eb75ccbb1c4446e21c148f3fc618e1Daniel Dunbar    virtual bool canPipeOutput() const { return false; }
999c073ff462eb75ccbb1c4446e21c148f3fc618e1Daniel Dunbar    virtual bool hasIntegratedCPP() const { return false; }
10047ac7d27c44bd64a7d0fc03d4babc196cf2b8230Daniel Dunbar
10147ac7d27c44bd64a7d0fc03d4babc196cf2b8230Daniel Dunbar    virtual void ConstructJob(Compilation &C, const JobAction &JA,
10247ac7d27c44bd64a7d0fc03d4babc196cf2b8230Daniel Dunbar                              InputInfo &Output, InputInfoList &Inputs,
10347ac7d27c44bd64a7d0fc03d4babc196cf2b8230Daniel Dunbar                              const ArgList &TCArgs,
10447ac7d27c44bd64a7d0fc03d4babc196cf2b8230Daniel Dunbar                              const char *LinkingOutput) const;
1059c073ff462eb75ccbb1c4446e21c148f3fc618e1Daniel Dunbar  };
10631b1e5437e7435879fc044afb77ff27096008e72Daniel Dunbar} // end namespace gcc
1079c073ff462eb75ccbb1c4446e21c148f3fc618e1Daniel Dunbar
1089c073ff462eb75ccbb1c4446e21c148f3fc618e1Daniel Dunbar} // end namespace toolchains
1099c073ff462eb75ccbb1c4446e21c148f3fc618e1Daniel Dunbar} // end namespace driver
1109c073ff462eb75ccbb1c4446e21c148f3fc618e1Daniel Dunbar} // end namespace clang
1119c073ff462eb75ccbb1c4446e21c148f3fc618e1Daniel Dunbar
1129c073ff462eb75ccbb1c4446e21c148f3fc618e1Daniel Dunbar#endif
113