Tools.h revision ba30bbe4e36a30a274da809a11a42f9cdc168e92
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"
1440f1265ebd42ece3e7f7917319b56012e8e2bce2Daniel Dunbar#include "clang/Driver/Types.h"
15b488c1dac8e53206f07103d794a62a3f5012c0f4Daniel Dunbar#include "clang/Driver/Util.h"
169c073ff462eb75ccbb1c4446e21c148f3fc618e1Daniel Dunbar
179c073ff462eb75ccbb1c4446e21c148f3fc618e1Daniel Dunbar#include "llvm/Support/Compiler.h"
189c073ff462eb75ccbb1c4446e21c148f3fc618e1Daniel Dunbar
199c073ff462eb75ccbb1c4446e21c148f3fc618e1Daniel Dunbarnamespace clang {
209c073ff462eb75ccbb1c4446e21c148f3fc618e1Daniel Dunbarnamespace driver {
21df91ef3d6c55692a0236f67b6c6b134a3bf84098Douglas Gregor  class Driver;
22df91ef3d6c55692a0236f67b6c6b134a3bf84098Douglas Gregor
2302633b541b04ad5ffc1c70f4c2feeeb13e607057Daniel Dunbarnamespace toolchains {
24f395528158379e7ea9f6ff4bbb791abadca15aabDaniel Dunbar  class Darwin;
2502633b541b04ad5ffc1c70f4c2feeeb13e607057Daniel Dunbar}
2602633b541b04ad5ffc1c70f4c2feeeb13e607057Daniel Dunbar
27985b825eea7387be10478de0430815ed6a673326Daniel Dunbarnamespace tools {
289c073ff462eb75ccbb1c4446e21c148f3fc618e1Daniel Dunbar
2920a9aa50f9a7d4b03f97bc67e96da1d605c309a2Daniel Dunbar  /// \brief Clang compiler tool.
3092dd1915842410005c68d32c43bb3b3cf5a4a702Duncan Sands  class LLVM_LIBRARY_VISIBILITY Clang : public Tool {
31df91ef3d6c55692a0236f67b6c6b134a3bf84098Douglas Gregor    void AddPreprocessingOptions(const Driver &D,
32df91ef3d6c55692a0236f67b6c6b134a3bf84098Douglas Gregor                                 const ArgList &Args,
33c21c485b4fb58ef5d55cf3e523263dd824a2ace4Daniel Dunbar                                 ArgStringList &CmdArgs,
34c21c485b4fb58ef5d55cf3e523263dd824a2ace4Daniel Dunbar                                 const InputInfo &Output,
35c21c485b4fb58ef5d55cf3e523263dd824a2ace4Daniel Dunbar                                 const InputInfoList &Inputs) const;
36c21c485b4fb58ef5d55cf3e523263dd824a2ace4Daniel Dunbar
37b163ef7e7a5d904ef0962a7c38c460be083c4d63Daniel Dunbar    void AddARMTargetArgs(const ArgList &Args, ArgStringList &CmdArgs) const;
38ed734737d5af31906e30e537d4a41c760ddcfc59Eric Christopher    void AddMIPSTargetArgs(const ArgList &Args, ArgStringList &CmdArgs) const;
396acda16e9c194dcbd0dea64341e182bdb65d0f41Daniel Dunbar    void AddX86TargetArgs(const ArgList &Args, ArgStringList &CmdArgs) const;
406acda16e9c194dcbd0dea64341e182bdb65d0f41Daniel Dunbar
419c073ff462eb75ccbb1c4446e21c148f3fc618e1Daniel Dunbar  public:
423038204fd8f6ff22082dd18e4b12ed252b75a5e4Daniel Dunbar    Clang(const ToolChain &TC) : Tool("clang", "clang frontend", TC) {}
439c073ff462eb75ccbb1c4446e21c148f3fc618e1Daniel Dunbar
4460a53f24b160724de0e8dd0e142009981540fd26Daniel Dunbar    virtual bool hasGoodDiagnostics() const { return true; }
458767cbc475ed96397b6f08617814eeb9cab121bdDaniel Dunbar    virtual bool hasIntegratedAssembler() const { return true; }
469c073ff462eb75ccbb1c4446e21c148f3fc618e1Daniel Dunbar    virtual bool hasIntegratedCPP() const { return true; }
4747ac7d27c44bd64a7d0fc03d4babc196cf2b8230Daniel Dunbar
4847ac7d27c44bd64a7d0fc03d4babc196cf2b8230Daniel Dunbar    virtual void ConstructJob(Compilation &C, const JobAction &JA,
4920a9aa50f9a7d4b03f97bc67e96da1d605c309a2Daniel Dunbar                              const InputInfo &Output,
5020a9aa50f9a7d4b03f97bc67e96da1d605c309a2Daniel Dunbar                              const InputInfoList &Inputs,
5120a9aa50f9a7d4b03f97bc67e96da1d605c309a2Daniel Dunbar                              const ArgList &TCArgs,
5220a9aa50f9a7d4b03f97bc67e96da1d605c309a2Daniel Dunbar                              const char *LinkingOutput) const;
5320a9aa50f9a7d4b03f97bc67e96da1d605c309a2Daniel Dunbar  };
5420a9aa50f9a7d4b03f97bc67e96da1d605c309a2Daniel Dunbar
5520a9aa50f9a7d4b03f97bc67e96da1d605c309a2Daniel Dunbar  /// \brief Clang integrated assembler tool.
5620a9aa50f9a7d4b03f97bc67e96da1d605c309a2Daniel Dunbar  class LLVM_LIBRARY_VISIBILITY ClangAs : public Tool {
5720a9aa50f9a7d4b03f97bc67e96da1d605c309a2Daniel Dunbar  public:
583038204fd8f6ff22082dd18e4b12ed252b75a5e4Daniel Dunbar    ClangAs(const ToolChain &TC) : Tool("clang::as",
593038204fd8f6ff22082dd18e4b12ed252b75a5e4Daniel Dunbar                                        "clang integrated assembler", TC) {}
6020a9aa50f9a7d4b03f97bc67e96da1d605c309a2Daniel Dunbar
6120a9aa50f9a7d4b03f97bc67e96da1d605c309a2Daniel Dunbar    virtual bool hasGoodDiagnostics() const { return true; }
6220a9aa50f9a7d4b03f97bc67e96da1d605c309a2Daniel Dunbar    virtual bool hasIntegratedAssembler() const { return false; }
6320a9aa50f9a7d4b03f97bc67e96da1d605c309a2Daniel Dunbar    virtual bool hasIntegratedCPP() const { return false; }
6420a9aa50f9a7d4b03f97bc67e96da1d605c309a2Daniel Dunbar
6520a9aa50f9a7d4b03f97bc67e96da1d605c309a2Daniel Dunbar    virtual void ConstructJob(Compilation &C, const JobAction &JA,
661eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump                              const InputInfo &Output,
671eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump                              const InputInfoList &Inputs,
681eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump                              const ArgList &TCArgs,
6947ac7d27c44bd64a7d0fc03d4babc196cf2b8230Daniel Dunbar                              const char *LinkingOutput) const;
709c073ff462eb75ccbb1c4446e21c148f3fc618e1Daniel Dunbar  };
719c073ff462eb75ccbb1c4446e21c148f3fc618e1Daniel Dunbar
7231b1e5437e7435879fc044afb77ff27096008e72Daniel Dunbar  /// gcc - Generic GCC tool implementations.
7331b1e5437e7435879fc044afb77ff27096008e72Daniel Dunbarnamespace gcc {
7492dd1915842410005c68d32c43bb3b3cf5a4a702Duncan Sands  class LLVM_LIBRARY_VISIBILITY Common : public Tool {
759c073ff462eb75ccbb1c4446e21c148f3fc618e1Daniel Dunbar  public:
763038204fd8f6ff22082dd18e4b12ed252b75a5e4Daniel Dunbar    Common(const char *Name, const char *ShortName,
773038204fd8f6ff22082dd18e4b12ed252b75a5e4Daniel Dunbar           const ToolChain &TC) : Tool(Name, ShortName, TC) {}
7847ac7d27c44bd64a7d0fc03d4babc196cf2b8230Daniel Dunbar
7947ac7d27c44bd64a7d0fc03d4babc196cf2b8230Daniel Dunbar    virtual void ConstructJob(Compilation &C, const JobAction &JA,
801eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump                              const InputInfo &Output,
811eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump                              const InputInfoList &Inputs,
821eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump                              const ArgList &TCArgs,
8347ac7d27c44bd64a7d0fc03d4babc196cf2b8230Daniel Dunbar                              const char *LinkingOutput) const;
84b488c1dac8e53206f07103d794a62a3f5012c0f4Daniel Dunbar
85b488c1dac8e53206f07103d794a62a3f5012c0f4Daniel Dunbar    /// RenderExtraToolArgs - Render any arguments necessary to force
86b488c1dac8e53206f07103d794a62a3f5012c0f4Daniel Dunbar    /// the particular tool mode.
8782b51cce8cea6b6bb6175c406c2ab425c91d9dc8Daniel Dunbar    virtual void RenderExtraToolArgs(const JobAction &JA,
8882b51cce8cea6b6bb6175c406c2ab425c91d9dc8Daniel Dunbar                                     ArgStringList &CmdArgs) const = 0;
899c073ff462eb75ccbb1c4446e21c148f3fc618e1Daniel Dunbar  };
909c073ff462eb75ccbb1c4446e21c148f3fc618e1Daniel Dunbar
911eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump
9292dd1915842410005c68d32c43bb3b3cf5a4a702Duncan Sands  class LLVM_LIBRARY_VISIBILITY Preprocess : public Common {
939c073ff462eb75ccbb1c4446e21c148f3fc618e1Daniel Dunbar  public:
943038204fd8f6ff22082dd18e4b12ed252b75a5e4Daniel Dunbar    Preprocess(const ToolChain &TC) : Common("gcc::Preprocess",
953038204fd8f6ff22082dd18e4b12ed252b75a5e4Daniel Dunbar                                             "gcc preprocessor", TC) {}
96b488c1dac8e53206f07103d794a62a3f5012c0f4Daniel Dunbar
9760a53f24b160724de0e8dd0e142009981540fd26Daniel Dunbar    virtual bool hasGoodDiagnostics() const { return true; }
98b488c1dac8e53206f07103d794a62a3f5012c0f4Daniel Dunbar    virtual bool hasIntegratedCPP() const { return false; }
99b488c1dac8e53206f07103d794a62a3f5012c0f4Daniel Dunbar
10082b51cce8cea6b6bb6175c406c2ab425c91d9dc8Daniel Dunbar    virtual void RenderExtraToolArgs(const JobAction &JA,
10182b51cce8cea6b6bb6175c406c2ab425c91d9dc8Daniel Dunbar                                     ArgStringList &CmdArgs) const;
102b488c1dac8e53206f07103d794a62a3f5012c0f4Daniel Dunbar  };
103b488c1dac8e53206f07103d794a62a3f5012c0f4Daniel Dunbar
10492dd1915842410005c68d32c43bb3b3cf5a4a702Duncan Sands  class LLVM_LIBRARY_VISIBILITY Precompile : public Common  {
105b488c1dac8e53206f07103d794a62a3f5012c0f4Daniel Dunbar  public:
1063038204fd8f6ff22082dd18e4b12ed252b75a5e4Daniel Dunbar    Precompile(const ToolChain &TC) : Common("gcc::Precompile",
1073038204fd8f6ff22082dd18e4b12ed252b75a5e4Daniel Dunbar                                             "gcc precompile", TC) {}
1089c073ff462eb75ccbb1c4446e21c148f3fc618e1Daniel Dunbar
10960a53f24b160724de0e8dd0e142009981540fd26Daniel Dunbar    virtual bool hasGoodDiagnostics() const { return true; }
1109c073ff462eb75ccbb1c4446e21c148f3fc618e1Daniel Dunbar    virtual bool hasIntegratedCPP() const { return true; }
11147ac7d27c44bd64a7d0fc03d4babc196cf2b8230Daniel Dunbar
11282b51cce8cea6b6bb6175c406c2ab425c91d9dc8Daniel Dunbar    virtual void RenderExtraToolArgs(const JobAction &JA,
11382b51cce8cea6b6bb6175c406c2ab425c91d9dc8Daniel Dunbar                                     ArgStringList &CmdArgs) const;
1149c073ff462eb75ccbb1c4446e21c148f3fc618e1Daniel Dunbar  };
1159c073ff462eb75ccbb1c4446e21c148f3fc618e1Daniel Dunbar
11692dd1915842410005c68d32c43bb3b3cf5a4a702Duncan Sands  class LLVM_LIBRARY_VISIBILITY Compile : public Common  {
1179c073ff462eb75ccbb1c4446e21c148f3fc618e1Daniel Dunbar  public:
1183038204fd8f6ff22082dd18e4b12ed252b75a5e4Daniel Dunbar    Compile(const ToolChain &TC) : Common("gcc::Compile",
1193038204fd8f6ff22082dd18e4b12ed252b75a5e4Daniel Dunbar                                          "gcc frontend", TC) {}
1209c073ff462eb75ccbb1c4446e21c148f3fc618e1Daniel Dunbar
12160a53f24b160724de0e8dd0e142009981540fd26Daniel Dunbar    virtual bool hasGoodDiagnostics() const { return true; }
1229c073ff462eb75ccbb1c4446e21c148f3fc618e1Daniel Dunbar    virtual bool hasIntegratedCPP() const { return true; }
12347ac7d27c44bd64a7d0fc03d4babc196cf2b8230Daniel Dunbar
12482b51cce8cea6b6bb6175c406c2ab425c91d9dc8Daniel Dunbar    virtual void RenderExtraToolArgs(const JobAction &JA,
12582b51cce8cea6b6bb6175c406c2ab425c91d9dc8Daniel Dunbar                                     ArgStringList &CmdArgs) const;
1269c073ff462eb75ccbb1c4446e21c148f3fc618e1Daniel Dunbar  };
1279c073ff462eb75ccbb1c4446e21c148f3fc618e1Daniel Dunbar
12892dd1915842410005c68d32c43bb3b3cf5a4a702Duncan Sands  class LLVM_LIBRARY_VISIBILITY Assemble : public Common  {
1299c073ff462eb75ccbb1c4446e21c148f3fc618e1Daniel Dunbar  public:
1303038204fd8f6ff22082dd18e4b12ed252b75a5e4Daniel Dunbar    Assemble(const ToolChain &TC) : Common("gcc::Assemble",
1313038204fd8f6ff22082dd18e4b12ed252b75a5e4Daniel Dunbar                                           "assembler (via gcc)", TC) {}
1329c073ff462eb75ccbb1c4446e21c148f3fc618e1Daniel Dunbar
1339c073ff462eb75ccbb1c4446e21c148f3fc618e1Daniel Dunbar    virtual bool hasIntegratedCPP() const { return false; }
13447ac7d27c44bd64a7d0fc03d4babc196cf2b8230Daniel Dunbar
13582b51cce8cea6b6bb6175c406c2ab425c91d9dc8Daniel Dunbar    virtual void RenderExtraToolArgs(const JobAction &JA,
13682b51cce8cea6b6bb6175c406c2ab425c91d9dc8Daniel Dunbar                                     ArgStringList &CmdArgs) const;
1379c073ff462eb75ccbb1c4446e21c148f3fc618e1Daniel Dunbar  };
1389c073ff462eb75ccbb1c4446e21c148f3fc618e1Daniel Dunbar
13992dd1915842410005c68d32c43bb3b3cf5a4a702Duncan Sands  class LLVM_LIBRARY_VISIBILITY Link : public Common  {
1409c073ff462eb75ccbb1c4446e21c148f3fc618e1Daniel Dunbar  public:
1413038204fd8f6ff22082dd18e4b12ed252b75a5e4Daniel Dunbar    Link(const ToolChain &TC) : Common("gcc::Link",
1423038204fd8f6ff22082dd18e4b12ed252b75a5e4Daniel Dunbar                                       "linker (via gcc)", TC) {}
1439c073ff462eb75ccbb1c4446e21c148f3fc618e1Daniel Dunbar
1449c073ff462eb75ccbb1c4446e21c148f3fc618e1Daniel Dunbar    virtual bool hasIntegratedCPP() const { return false; }
14547ac7d27c44bd64a7d0fc03d4babc196cf2b8230Daniel Dunbar
14682b51cce8cea6b6bb6175c406c2ab425c91d9dc8Daniel Dunbar    virtual void RenderExtraToolArgs(const JobAction &JA,
14782b51cce8cea6b6bb6175c406c2ab425c91d9dc8Daniel Dunbar                                     ArgStringList &CmdArgs) const;
1489c073ff462eb75ccbb1c4446e21c148f3fc618e1Daniel Dunbar  };
14931b1e5437e7435879fc044afb77ff27096008e72Daniel Dunbar} // end namespace gcc
1509c073ff462eb75ccbb1c4446e21c148f3fc618e1Daniel Dunbar
151ff7488dc9a766f94daf54d81b03ab9160d0bfd88Daniel Dunbarnamespace darwin {
15292dd1915842410005c68d32c43bb3b3cf5a4a702Duncan Sands  class LLVM_LIBRARY_VISIBILITY DarwinTool : public Tool {
153fbefe6bd6f62a3361813498dc672ab0d6c0d4fd1Daniel Dunbar  protected:
154fbefe6bd6f62a3361813498dc672ab0d6c0d4fd1Daniel Dunbar    void AddDarwinArch(const ArgList &Args, ArgStringList &CmdArgs) const;
155fbefe6bd6f62a3361813498dc672ab0d6c0d4fd1Daniel Dunbar
156fbefe6bd6f62a3361813498dc672ab0d6c0d4fd1Daniel Dunbar    const toolchains::Darwin &getDarwinToolChain() const {
157fbefe6bd6f62a3361813498dc672ab0d6c0d4fd1Daniel Dunbar      return reinterpret_cast<const toolchains::Darwin&>(getToolChain());
158fbefe6bd6f62a3361813498dc672ab0d6c0d4fd1Daniel Dunbar    }
159fbefe6bd6f62a3361813498dc672ab0d6c0d4fd1Daniel Dunbar
160fbefe6bd6f62a3361813498dc672ab0d6c0d4fd1Daniel Dunbar  public:
1613038204fd8f6ff22082dd18e4b12ed252b75a5e4Daniel Dunbar    DarwinTool(const char *Name, const char *ShortName,
1623038204fd8f6ff22082dd18e4b12ed252b75a5e4Daniel Dunbar               const ToolChain &TC) : Tool(Name, ShortName, TC) {}
163fbefe6bd6f62a3361813498dc672ab0d6c0d4fd1Daniel Dunbar  };
164fbefe6bd6f62a3361813498dc672ab0d6c0d4fd1Daniel Dunbar
16592dd1915842410005c68d32c43bb3b3cf5a4a702Duncan Sands  class LLVM_LIBRARY_VISIBILITY CC1 : public DarwinTool  {
166a5a7bd0de7b6b80212095195a055a4a43f21d4b2Daniel Dunbar  public:
1671eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump    static const char *getBaseInputName(const ArgList &Args,
168a5a7bd0de7b6b80212095195a055a4a43f21d4b2Daniel Dunbar                                 const InputInfoList &Input);
1691eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump    static const char *getBaseInputStem(const ArgList &Args,
170a5a7bd0de7b6b80212095195a055a4a43f21d4b2Daniel Dunbar                                 const InputInfoList &Input);
1711eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump    static const char *getDependencyFileName(const ArgList &Args,
172a5a7bd0de7b6b80212095195a055a4a43f21d4b2Daniel Dunbar                                             const InputInfoList &Inputs);
173a5a7bd0de7b6b80212095195a055a4a43f21d4b2Daniel Dunbar
17440f1265ebd42ece3e7f7917319b56012e8e2bce2Daniel Dunbar  protected:
17540f1265ebd42ece3e7f7917319b56012e8e2bce2Daniel Dunbar    const char *getCC1Name(types::ID Type) const;
176a3ec60e0cf2a1916f479288998d31bd980b1a306Daniel Dunbar
177a3ec60e0cf2a1916f479288998d31bd980b1a306Daniel Dunbar    void AddCC1Args(const ArgList &Args, ArgStringList &CmdArgs) const;
17840f1265ebd42ece3e7f7917319b56012e8e2bce2Daniel Dunbar    void AddCC1OptionsArgs(const ArgList &Args, ArgStringList &CmdArgs,
17940f1265ebd42ece3e7f7917319b56012e8e2bce2Daniel Dunbar                           const InputInfoList &Inputs,
180a3ec60e0cf2a1916f479288998d31bd980b1a306Daniel Dunbar                           const ArgStringList &OutputArgs) const;
18140f1265ebd42ece3e7f7917319b56012e8e2bce2Daniel Dunbar    void AddCPPOptionsArgs(const ArgList &Args, ArgStringList &CmdArgs,
18240f1265ebd42ece3e7f7917319b56012e8e2bce2Daniel Dunbar                           const InputInfoList &Inputs,
183a3ec60e0cf2a1916f479288998d31bd980b1a306Daniel Dunbar                           const ArgStringList &OutputArgs) const;
1841eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump    void AddCPPUniqueOptionsArgs(const ArgList &Args,
185a3ec60e0cf2a1916f479288998d31bd980b1a306Daniel Dunbar                                 ArgStringList &CmdArgs,
186a3ec60e0cf2a1916f479288998d31bd980b1a306Daniel Dunbar                                 const InputInfoList &Inputs) const;
187a3ec60e0cf2a1916f479288998d31bd980b1a306Daniel Dunbar    void AddCPPArgs(const ArgList &Args, ArgStringList &CmdArgs) const;
18840f1265ebd42ece3e7f7917319b56012e8e2bce2Daniel Dunbar
18940f1265ebd42ece3e7f7917319b56012e8e2bce2Daniel Dunbar  public:
1903038204fd8f6ff22082dd18e4b12ed252b75a5e4Daniel Dunbar    CC1(const char *Name, const char *ShortName,
1913038204fd8f6ff22082dd18e4b12ed252b75a5e4Daniel Dunbar        const ToolChain &TC) : DarwinTool(Name, ShortName, TC) {}
19240f1265ebd42ece3e7f7917319b56012e8e2bce2Daniel Dunbar
19360a53f24b160724de0e8dd0e142009981540fd26Daniel Dunbar    virtual bool hasGoodDiagnostics() const { return true; }
19440f1265ebd42ece3e7f7917319b56012e8e2bce2Daniel Dunbar    virtual bool hasIntegratedCPP() const { return true; }
19540f1265ebd42ece3e7f7917319b56012e8e2bce2Daniel Dunbar  };
19640f1265ebd42ece3e7f7917319b56012e8e2bce2Daniel Dunbar
19792dd1915842410005c68d32c43bb3b3cf5a4a702Duncan Sands  class LLVM_LIBRARY_VISIBILITY Preprocess : public CC1  {
19840f1265ebd42ece3e7f7917319b56012e8e2bce2Daniel Dunbar  public:
1993038204fd8f6ff22082dd18e4b12ed252b75a5e4Daniel Dunbar    Preprocess(const ToolChain &TC) : CC1("darwin::Preprocess",
2003038204fd8f6ff22082dd18e4b12ed252b75a5e4Daniel Dunbar                                          "gcc preprocessor", TC) {}
20140f1265ebd42ece3e7f7917319b56012e8e2bce2Daniel Dunbar
20240f1265ebd42ece3e7f7917319b56012e8e2bce2Daniel Dunbar    virtual void ConstructJob(Compilation &C, const JobAction &JA,
2031eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump                              const InputInfo &Output,
2041eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump                              const InputInfoList &Inputs,
2051eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump                              const ArgList &TCArgs,
20640f1265ebd42ece3e7f7917319b56012e8e2bce2Daniel Dunbar                              const char *LinkingOutput) const;
20740f1265ebd42ece3e7f7917319b56012e8e2bce2Daniel Dunbar  };
20840f1265ebd42ece3e7f7917319b56012e8e2bce2Daniel Dunbar
20992dd1915842410005c68d32c43bb3b3cf5a4a702Duncan Sands  class LLVM_LIBRARY_VISIBILITY Compile : public CC1  {
21040f1265ebd42ece3e7f7917319b56012e8e2bce2Daniel Dunbar  public:
2113038204fd8f6ff22082dd18e4b12ed252b75a5e4Daniel Dunbar    Compile(const ToolChain &TC) : CC1("darwin::Compile", "gcc frontend", TC) {}
21240f1265ebd42ece3e7f7917319b56012e8e2bce2Daniel Dunbar
21340f1265ebd42ece3e7f7917319b56012e8e2bce2Daniel Dunbar    virtual void ConstructJob(Compilation &C, const JobAction &JA,
2141eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump                              const InputInfo &Output,
2151eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump                              const InputInfoList &Inputs,
2161eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump                              const ArgList &TCArgs,
21740f1265ebd42ece3e7f7917319b56012e8e2bce2Daniel Dunbar                              const char *LinkingOutput) const;
21840f1265ebd42ece3e7f7917319b56012e8e2bce2Daniel Dunbar  };
21940f1265ebd42ece3e7f7917319b56012e8e2bce2Daniel Dunbar
22092dd1915842410005c68d32c43bb3b3cf5a4a702Duncan Sands  class LLVM_LIBRARY_VISIBILITY Assemble : public DarwinTool  {
2218cac5f7e1ce63dd77ee0fb4ef68f9fa804f41ea6Daniel Dunbar  public:
2223038204fd8f6ff22082dd18e4b12ed252b75a5e4Daniel Dunbar    Assemble(const ToolChain &TC) : DarwinTool("darwin::Assemble",
2233038204fd8f6ff22082dd18e4b12ed252b75a5e4Daniel Dunbar                                               "assembler", TC) {}
2248cac5f7e1ce63dd77ee0fb4ef68f9fa804f41ea6Daniel Dunbar
2258cac5f7e1ce63dd77ee0fb4ef68f9fa804f41ea6Daniel Dunbar    virtual bool hasIntegratedCPP() const { return false; }
2268cac5f7e1ce63dd77ee0fb4ef68f9fa804f41ea6Daniel Dunbar
2278cac5f7e1ce63dd77ee0fb4ef68f9fa804f41ea6Daniel Dunbar    virtual void ConstructJob(Compilation &C, const JobAction &JA,
2281eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump                              const InputInfo &Output,
2291eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump                              const InputInfoList &Inputs,
2301eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump                              const ArgList &TCArgs,
23102633b541b04ad5ffc1c70f4c2feeeb13e607057Daniel Dunbar                              const char *LinkingOutput) const;
23202633b541b04ad5ffc1c70f4c2feeeb13e607057Daniel Dunbar  };
23302633b541b04ad5ffc1c70f4c2feeeb13e607057Daniel Dunbar
23492dd1915842410005c68d32c43bb3b3cf5a4a702Duncan Sands  class LLVM_LIBRARY_VISIBILITY Link : public DarwinTool  {
23502633b541b04ad5ffc1c70f4c2feeeb13e607057Daniel Dunbar    void AddLinkArgs(const ArgList &Args, ArgStringList &CmdArgs) const;
23602633b541b04ad5ffc1c70f4c2feeeb13e607057Daniel Dunbar
23702633b541b04ad5ffc1c70f4c2feeeb13e607057Daniel Dunbar  public:
2383038204fd8f6ff22082dd18e4b12ed252b75a5e4Daniel Dunbar    Link(const ToolChain &TC) : DarwinTool("darwin::Link", "linker", TC) {}
23902633b541b04ad5ffc1c70f4c2feeeb13e607057Daniel Dunbar
24002633b541b04ad5ffc1c70f4c2feeeb13e607057Daniel Dunbar    virtual bool hasIntegratedCPP() const { return false; }
24102633b541b04ad5ffc1c70f4c2feeeb13e607057Daniel Dunbar
24202633b541b04ad5ffc1c70f4c2feeeb13e607057Daniel Dunbar    virtual void ConstructJob(Compilation &C, const JobAction &JA,
2431eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump                              const InputInfo &Output,
2441eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump                              const InputInfoList &Inputs,
2451eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump                              const ArgList &TCArgs,
2468cac5f7e1ce63dd77ee0fb4ef68f9fa804f41ea6Daniel Dunbar                              const char *LinkingOutput) const;
2478cac5f7e1ce63dd77ee0fb4ef68f9fa804f41ea6Daniel Dunbar  };
2488cac5f7e1ce63dd77ee0fb4ef68f9fa804f41ea6Daniel Dunbar
24992dd1915842410005c68d32c43bb3b3cf5a4a702Duncan Sands  class LLVM_LIBRARY_VISIBILITY Lipo : public DarwinTool  {
250ff7488dc9a766f94daf54d81b03ab9160d0bfd88Daniel Dunbar  public:
2513038204fd8f6ff22082dd18e4b12ed252b75a5e4Daniel Dunbar    Lipo(const ToolChain &TC) : DarwinTool("darwin::Lipo", "lipo", TC) {}
252ff7488dc9a766f94daf54d81b03ab9160d0bfd88Daniel Dunbar
253ff7488dc9a766f94daf54d81b03ab9160d0bfd88Daniel Dunbar    virtual bool hasIntegratedCPP() const { return false; }
254ff7488dc9a766f94daf54d81b03ab9160d0bfd88Daniel Dunbar
255ff7488dc9a766f94daf54d81b03ab9160d0bfd88Daniel Dunbar    virtual void ConstructJob(Compilation &C, const JobAction &JA,
2561eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump                              const InputInfo &Output,
2571eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump                              const InputInfoList &Inputs,
2581eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump                              const ArgList &TCArgs,
2596e0f25483b1a801cd1155ea89c2b725feab16332Daniel Dunbar                              const char *LinkingOutput) const;
2606e0f25483b1a801cd1155ea89c2b725feab16332Daniel Dunbar  };
2616e0f25483b1a801cd1155ea89c2b725feab16332Daniel Dunbar
2626e0f25483b1a801cd1155ea89c2b725feab16332Daniel Dunbar  class LLVM_LIBRARY_VISIBILITY Dsymutil : public DarwinTool  {
2636e0f25483b1a801cd1155ea89c2b725feab16332Daniel Dunbar  public:
2646e0f25483b1a801cd1155ea89c2b725feab16332Daniel Dunbar    Dsymutil(const ToolChain &TC) : DarwinTool("darwin::Dsymutil",
2656e0f25483b1a801cd1155ea89c2b725feab16332Daniel Dunbar                                               "dsymutil", TC) {}
2666e0f25483b1a801cd1155ea89c2b725feab16332Daniel Dunbar
2676e0f25483b1a801cd1155ea89c2b725feab16332Daniel Dunbar    virtual bool hasIntegratedCPP() const { return false; }
2686e0f25483b1a801cd1155ea89c2b725feab16332Daniel Dunbar
2696e0f25483b1a801cd1155ea89c2b725feab16332Daniel Dunbar    virtual void ConstructJob(Compilation &C, const JobAction &JA,
2706e0f25483b1a801cd1155ea89c2b725feab16332Daniel Dunbar                              const InputInfo &Output,
2716e0f25483b1a801cd1155ea89c2b725feab16332Daniel Dunbar                              const InputInfoList &Inputs,
2726e0f25483b1a801cd1155ea89c2b725feab16332Daniel Dunbar                              const ArgList &TCArgs,
273f7b8eec37c8c8012fa525c71fb29a58c9f29beefDaniel Dunbar                              const char *LinkingOutput) const;
274f7b8eec37c8c8012fa525c71fb29a58c9f29beefDaniel Dunbar  };
275f7b8eec37c8c8012fa525c71fb29a58c9f29beefDaniel Dunbar}
276f7b8eec37c8c8012fa525c71fb29a58c9f29beefDaniel Dunbar
277f7b8eec37c8c8012fa525c71fb29a58c9f29beefDaniel Dunbar  /// openbsd -- Directly call GNU Binutils assembler and linker
278f7b8eec37c8c8012fa525c71fb29a58c9f29beefDaniel Dunbarnamespace openbsd {
27992dd1915842410005c68d32c43bb3b3cf5a4a702Duncan Sands  class LLVM_LIBRARY_VISIBILITY Assemble : public Tool  {
280f7b8eec37c8c8012fa525c71fb29a58c9f29beefDaniel Dunbar  public:
2813038204fd8f6ff22082dd18e4b12ed252b75a5e4Daniel Dunbar    Assemble(const ToolChain &TC) : Tool("openbsd::Assemble", "assembler",
2823038204fd8f6ff22082dd18e4b12ed252b75a5e4Daniel Dunbar                                         TC) {}
283f7b8eec37c8c8012fa525c71fb29a58c9f29beefDaniel Dunbar
284f7b8eec37c8c8012fa525c71fb29a58c9f29beefDaniel Dunbar    virtual bool hasIntegratedCPP() const { return false; }
285f7b8eec37c8c8012fa525c71fb29a58c9f29beefDaniel Dunbar
286f7b8eec37c8c8012fa525c71fb29a58c9f29beefDaniel Dunbar    virtual void ConstructJob(Compilation &C, const JobAction &JA,
2871eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump                              const InputInfo &Output,
2881eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump                              const InputInfoList &Inputs,
2891eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump                              const ArgList &TCArgs,
290f7b8eec37c8c8012fa525c71fb29a58c9f29beefDaniel Dunbar                              const char *LinkingOutput) const;
291f7b8eec37c8c8012fa525c71fb29a58c9f29beefDaniel Dunbar  };
29292dd1915842410005c68d32c43bb3b3cf5a4a702Duncan Sands  class LLVM_LIBRARY_VISIBILITY Link : public Tool  {
293f7b8eec37c8c8012fa525c71fb29a58c9f29beefDaniel Dunbar  public:
2943038204fd8f6ff22082dd18e4b12ed252b75a5e4Daniel Dunbar    Link(const ToolChain &TC) : Tool("openbsd::Link", "linker", TC) {}
295f7b8eec37c8c8012fa525c71fb29a58c9f29beefDaniel Dunbar
296f7b8eec37c8c8012fa525c71fb29a58c9f29beefDaniel Dunbar    virtual bool hasIntegratedCPP() const { return false; }
297f7b8eec37c8c8012fa525c71fb29a58c9f29beefDaniel Dunbar
298f7b8eec37c8c8012fa525c71fb29a58c9f29beefDaniel Dunbar    virtual void ConstructJob(Compilation &C, const JobAction &JA,
2991eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump                              const InputInfo &Output,
3001eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump                              const InputInfoList &Inputs,
3011eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump                              const ArgList &TCArgs,
302ff7488dc9a766f94daf54d81b03ab9160d0bfd88Daniel Dunbar                              const char *LinkingOutput) const;
303ff7488dc9a766f94daf54d81b03ab9160d0bfd88Daniel Dunbar  };
304e7925a075f110ab21afeae084670a155dea568e3Edward O'Callaghan} // end namespace openbsd
305ff7488dc9a766f94daf54d81b03ab9160d0bfd88Daniel Dunbar
30668a31d406c6dc4382c700d1199b062de2aa7e1daDaniel Dunbar  /// freebsd -- Directly call GNU Binutils assembler and linker
30768a31d406c6dc4382c700d1199b062de2aa7e1daDaniel Dunbarnamespace freebsd {
30892dd1915842410005c68d32c43bb3b3cf5a4a702Duncan Sands  class LLVM_LIBRARY_VISIBILITY Assemble : public Tool  {
30968a31d406c6dc4382c700d1199b062de2aa7e1daDaniel Dunbar  public:
3103038204fd8f6ff22082dd18e4b12ed252b75a5e4Daniel Dunbar    Assemble(const ToolChain &TC) : Tool("freebsd::Assemble", "assembler",
3113038204fd8f6ff22082dd18e4b12ed252b75a5e4Daniel Dunbar                                         TC) {}
31268a31d406c6dc4382c700d1199b062de2aa7e1daDaniel Dunbar
31368a31d406c6dc4382c700d1199b062de2aa7e1daDaniel Dunbar    virtual bool hasIntegratedCPP() const { return false; }
31468a31d406c6dc4382c700d1199b062de2aa7e1daDaniel Dunbar
31568a31d406c6dc4382c700d1199b062de2aa7e1daDaniel Dunbar    virtual void ConstructJob(Compilation &C, const JobAction &JA,
3161eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump                              const InputInfo &Output,
3171eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump                              const InputInfoList &Inputs,
3181eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump                              const ArgList &TCArgs,
31968a31d406c6dc4382c700d1199b062de2aa7e1daDaniel Dunbar                              const char *LinkingOutput) const;
32068a31d406c6dc4382c700d1199b062de2aa7e1daDaniel Dunbar  };
32192dd1915842410005c68d32c43bb3b3cf5a4a702Duncan Sands  class LLVM_LIBRARY_VISIBILITY Link : public Tool  {
322008f54a54299eaafdaa940e2bdeaf55935ecd95aDaniel Dunbar  public:
3233038204fd8f6ff22082dd18e4b12ed252b75a5e4Daniel Dunbar    Link(const ToolChain &TC) : Tool("freebsd::Link", "linker", TC) {}
324008f54a54299eaafdaa940e2bdeaf55935ecd95aDaniel Dunbar
325008f54a54299eaafdaa940e2bdeaf55935ecd95aDaniel Dunbar    virtual bool hasIntegratedCPP() const { return false; }
326008f54a54299eaafdaa940e2bdeaf55935ecd95aDaniel Dunbar
327008f54a54299eaafdaa940e2bdeaf55935ecd95aDaniel Dunbar    virtual void ConstructJob(Compilation &C, const JobAction &JA,
3281eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump                              const InputInfo &Output,
3291eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump                              const InputInfoList &Inputs,
3301eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump                              const ArgList &TCArgs,
331008f54a54299eaafdaa940e2bdeaf55935ecd95aDaniel Dunbar                              const char *LinkingOutput) const;
332008f54a54299eaafdaa940e2bdeaf55935ecd95aDaniel Dunbar  };
333e7925a075f110ab21afeae084670a155dea568e3Edward O'Callaghan} // end namespace freebsd
334e7925a075f110ab21afeae084670a155dea568e3Edward O'Callaghan
335ba30bbe4e36a30a274da809a11a42f9cdc168e92Rafael Espindola  /// linux -- Directly call GNU Binutils assembler and linker
336ba30bbe4e36a30a274da809a11a42f9cdc168e92Rafael Espindolanamespace linuxtools {
337ba30bbe4e36a30a274da809a11a42f9cdc168e92Rafael Espindola  class LLVM_LIBRARY_VISIBILITY Assemble : public Tool  {
338ba30bbe4e36a30a274da809a11a42f9cdc168e92Rafael Espindola  public:
339ba30bbe4e36a30a274da809a11a42f9cdc168e92Rafael Espindola    Assemble(const ToolChain &TC) : Tool("linux::Assemble", "assembler",
340ba30bbe4e36a30a274da809a11a42f9cdc168e92Rafael Espindola                                         TC) {}
341ba30bbe4e36a30a274da809a11a42f9cdc168e92Rafael Espindola
342ba30bbe4e36a30a274da809a11a42f9cdc168e92Rafael Espindola    virtual bool hasIntegratedCPP() const { return false; }
343ba30bbe4e36a30a274da809a11a42f9cdc168e92Rafael Espindola
344ba30bbe4e36a30a274da809a11a42f9cdc168e92Rafael Espindola    virtual void ConstructJob(Compilation &C, const JobAction &JA,
345ba30bbe4e36a30a274da809a11a42f9cdc168e92Rafael Espindola                              const InputInfo &Output,
346ba30bbe4e36a30a274da809a11a42f9cdc168e92Rafael Espindola                              const InputInfoList &Inputs,
347ba30bbe4e36a30a274da809a11a42f9cdc168e92Rafael Espindola                              const ArgList &TCArgs,
348ba30bbe4e36a30a274da809a11a42f9cdc168e92Rafael Espindola                              const char *LinkingOutput) const;
349ba30bbe4e36a30a274da809a11a42f9cdc168e92Rafael Espindola  };
350ba30bbe4e36a30a274da809a11a42f9cdc168e92Rafael Espindola}
35138e317d6dce161b249508686cc67eb7176958762Chris Lattner  /// minix -- Directly call GNU Binutils assembler and linker
35238e317d6dce161b249508686cc67eb7176958762Chris Lattnernamespace minix {
35338e317d6dce161b249508686cc67eb7176958762Chris Lattner  class LLVM_LIBRARY_VISIBILITY Assemble : public Tool  {
35438e317d6dce161b249508686cc67eb7176958762Chris Lattner  public:
35538e317d6dce161b249508686cc67eb7176958762Chris Lattner    Assemble(const ToolChain &TC) : Tool("minix::Assemble", "assembler",
35638e317d6dce161b249508686cc67eb7176958762Chris Lattner                                         TC) {}
35738e317d6dce161b249508686cc67eb7176958762Chris Lattner
35838e317d6dce161b249508686cc67eb7176958762Chris Lattner    virtual bool hasIntegratedCPP() const { return false; }
35938e317d6dce161b249508686cc67eb7176958762Chris Lattner
36038e317d6dce161b249508686cc67eb7176958762Chris Lattner    virtual void ConstructJob(Compilation &C, const JobAction &JA,
36138e317d6dce161b249508686cc67eb7176958762Chris Lattner                              const InputInfo &Output,
36238e317d6dce161b249508686cc67eb7176958762Chris Lattner                              const InputInfoList &Inputs,
36338e317d6dce161b249508686cc67eb7176958762Chris Lattner                              const ArgList &TCArgs,
36438e317d6dce161b249508686cc67eb7176958762Chris Lattner                              const char *LinkingOutput) const;
36538e317d6dce161b249508686cc67eb7176958762Chris Lattner  };
36638e317d6dce161b249508686cc67eb7176958762Chris Lattner  class LLVM_LIBRARY_VISIBILITY Link : public Tool  {
36738e317d6dce161b249508686cc67eb7176958762Chris Lattner  public:
36838e317d6dce161b249508686cc67eb7176958762Chris Lattner    Link(const ToolChain &TC) : Tool("minix::Link", "linker", TC) {}
36938e317d6dce161b249508686cc67eb7176958762Chris Lattner
37038e317d6dce161b249508686cc67eb7176958762Chris Lattner    virtual bool hasIntegratedCPP() const { return false; }
37138e317d6dce161b249508686cc67eb7176958762Chris Lattner
37238e317d6dce161b249508686cc67eb7176958762Chris Lattner    virtual void ConstructJob(Compilation &C, const JobAction &JA,
37338e317d6dce161b249508686cc67eb7176958762Chris Lattner                              const InputInfo &Output,
37438e317d6dce161b249508686cc67eb7176958762Chris Lattner                              const InputInfoList &Inputs,
37538e317d6dce161b249508686cc67eb7176958762Chris Lattner                              const ArgList &TCArgs,
37638e317d6dce161b249508686cc67eb7176958762Chris Lattner                              const char *LinkingOutput) const;
37738e317d6dce161b249508686cc67eb7176958762Chris Lattner  };
37838e317d6dce161b249508686cc67eb7176958762Chris Lattner} // end namespace minix
37938e317d6dce161b249508686cc67eb7176958762Chris Lattner
380e7925a075f110ab21afeae084670a155dea568e3Edward O'Callaghan  /// auroraux -- Directly call GNU Binutils assembler and linker
381e7925a075f110ab21afeae084670a155dea568e3Edward O'Callaghannamespace auroraux {
38292dd1915842410005c68d32c43bb3b3cf5a4a702Duncan Sands  class LLVM_LIBRARY_VISIBILITY Assemble : public Tool  {
383e7925a075f110ab21afeae084670a155dea568e3Edward O'Callaghan  public:
3843038204fd8f6ff22082dd18e4b12ed252b75a5e4Daniel Dunbar    Assemble(const ToolChain &TC) : Tool("auroraux::Assemble", "assembler",
3853038204fd8f6ff22082dd18e4b12ed252b75a5e4Daniel Dunbar                                         TC) {}
386e7925a075f110ab21afeae084670a155dea568e3Edward O'Callaghan
387e7925a075f110ab21afeae084670a155dea568e3Edward O'Callaghan    virtual bool hasIntegratedCPP() const { return false; }
388e7925a075f110ab21afeae084670a155dea568e3Edward O'Callaghan
389e7925a075f110ab21afeae084670a155dea568e3Edward O'Callaghan    virtual void ConstructJob(Compilation &C, const JobAction &JA,
3901eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump                              const InputInfo &Output,
3911eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump                              const InputInfoList &Inputs,
3921eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump                              const ArgList &TCArgs,
393e7925a075f110ab21afeae084670a155dea568e3Edward O'Callaghan                              const char *LinkingOutput) const;
394e7925a075f110ab21afeae084670a155dea568e3Edward O'Callaghan  };
39592dd1915842410005c68d32c43bb3b3cf5a4a702Duncan Sands  class LLVM_LIBRARY_VISIBILITY Link : public Tool  {
396e7925a075f110ab21afeae084670a155dea568e3Edward O'Callaghan  public:
3973038204fd8f6ff22082dd18e4b12ed252b75a5e4Daniel Dunbar    Link(const ToolChain &TC) : Tool("auroraux::Link", "linker", TC) {}
398e7925a075f110ab21afeae084670a155dea568e3Edward O'Callaghan
399e7925a075f110ab21afeae084670a155dea568e3Edward O'Callaghan    virtual bool hasIntegratedCPP() const { return false; }
400e7925a075f110ab21afeae084670a155dea568e3Edward O'Callaghan
401e7925a075f110ab21afeae084670a155dea568e3Edward O'Callaghan    virtual void ConstructJob(Compilation &C, const JobAction &JA,
4021eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump                              const InputInfo &Output,
4031eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump                              const InputInfoList &Inputs,
4041eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump                              const ArgList &TCArgs,
405e7925a075f110ab21afeae084670a155dea568e3Edward O'Callaghan                              const char *LinkingOutput) const;
406e7925a075f110ab21afeae084670a155dea568e3Edward O'Callaghan  };
407e7925a075f110ab21afeae084670a155dea568e3Edward O'Callaghan} // end namespace auroraux
40868a31d406c6dc4382c700d1199b062de2aa7e1daDaniel Dunbar
40911e1b40d759a643086f590f6ffbd9d68360bad46Daniel Dunbar  /// dragonfly -- Directly call GNU Binutils assembler and linker
41011e1b40d759a643086f590f6ffbd9d68360bad46Daniel Dunbarnamespace dragonfly {
41192dd1915842410005c68d32c43bb3b3cf5a4a702Duncan Sands  class LLVM_LIBRARY_VISIBILITY Assemble : public Tool  {
41211e1b40d759a643086f590f6ffbd9d68360bad46Daniel Dunbar  public:
4133038204fd8f6ff22082dd18e4b12ed252b75a5e4Daniel Dunbar    Assemble(const ToolChain &TC) : Tool("dragonfly::Assemble", "assembler",
4143038204fd8f6ff22082dd18e4b12ed252b75a5e4Daniel Dunbar                                         TC) {}
41511e1b40d759a643086f590f6ffbd9d68360bad46Daniel Dunbar
41611e1b40d759a643086f590f6ffbd9d68360bad46Daniel Dunbar    virtual bool hasIntegratedCPP() const { return false; }
41711e1b40d759a643086f590f6ffbd9d68360bad46Daniel Dunbar
41811e1b40d759a643086f590f6ffbd9d68360bad46Daniel Dunbar    virtual void ConstructJob(Compilation &C, const JobAction &JA,
4191eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump                              const InputInfo &Output,
4201eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump                              const InputInfoList &Inputs,
4211eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump                              const ArgList &TCArgs,
42211e1b40d759a643086f590f6ffbd9d68360bad46Daniel Dunbar                              const char *LinkingOutput) const;
42311e1b40d759a643086f590f6ffbd9d68360bad46Daniel Dunbar  };
42492dd1915842410005c68d32c43bb3b3cf5a4a702Duncan Sands  class LLVM_LIBRARY_VISIBILITY Link : public Tool  {
42511e1b40d759a643086f590f6ffbd9d68360bad46Daniel Dunbar  public:
4263038204fd8f6ff22082dd18e4b12ed252b75a5e4Daniel Dunbar    Link(const ToolChain &TC) : Tool("dragonfly::Link", "linker", TC) {}
42711e1b40d759a643086f590f6ffbd9d68360bad46Daniel Dunbar
42811e1b40d759a643086f590f6ffbd9d68360bad46Daniel Dunbar    virtual bool hasIntegratedCPP() const { return false; }
42911e1b40d759a643086f590f6ffbd9d68360bad46Daniel Dunbar
43011e1b40d759a643086f590f6ffbd9d68360bad46Daniel Dunbar    virtual void ConstructJob(Compilation &C, const JobAction &JA,
4311eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump                              const InputInfo &Output,
4321eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump                              const InputInfoList &Inputs,
4331eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump                              const ArgList &TCArgs,
43411e1b40d759a643086f590f6ffbd9d68360bad46Daniel Dunbar                              const char *LinkingOutput) const;
43511e1b40d759a643086f590f6ffbd9d68360bad46Daniel Dunbar  };
436e7925a075f110ab21afeae084670a155dea568e3Edward O'Callaghan} // end namespace dragonfly
43711e1b40d759a643086f590f6ffbd9d68360bad46Daniel Dunbar
4389c073ff462eb75ccbb1c4446e21c148f3fc618e1Daniel Dunbar} // end namespace toolchains
4399c073ff462eb75ccbb1c4446e21c148f3fc618e1Daniel Dunbar} // end namespace driver
4409c073ff462eb75ccbb1c4446e21c148f3fc618e1Daniel Dunbar} // end namespace clang
4419c073ff462eb75ccbb1c4446e21c148f3fc618e1Daniel Dunbar
442e7925a075f110ab21afeae084670a155dea568e3Edward O'Callaghan#endif // CLANG_LIB_DRIVER_TOOLS_H_
443