Tools.h revision 182564cd14a2105fff05fd52f5940eff96161d57
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
17182564cd14a2105fff05fd52f5940eff96161d57Joerg Sonnenberger#include "llvm/ADT/Triple.h"
189c073ff462eb75ccbb1c4446e21c148f3fc618e1Daniel Dunbar#include "llvm/Support/Compiler.h"
199c073ff462eb75ccbb1c4446e21c148f3fc618e1Daniel Dunbar
209c073ff462eb75ccbb1c4446e21c148f3fc618e1Daniel Dunbarnamespace clang {
219c073ff462eb75ccbb1c4446e21c148f3fc618e1Daniel Dunbarnamespace driver {
22df91ef3d6c55692a0236f67b6c6b134a3bf84098Douglas Gregor  class Driver;
23df91ef3d6c55692a0236f67b6c6b134a3bf84098Douglas Gregor
2402633b541b04ad5ffc1c70f4c2feeeb13e607057Daniel Dunbarnamespace toolchains {
25f395528158379e7ea9f6ff4bbb791abadca15aabDaniel Dunbar  class Darwin;
2602633b541b04ad5ffc1c70f4c2feeeb13e607057Daniel Dunbar}
2702633b541b04ad5ffc1c70f4c2feeeb13e607057Daniel Dunbar
28985b825eea7387be10478de0430815ed6a673326Daniel Dunbarnamespace tools {
299c073ff462eb75ccbb1c4446e21c148f3fc618e1Daniel Dunbar
3020a9aa50f9a7d4b03f97bc67e96da1d605c309a2Daniel Dunbar  /// \brief Clang compiler tool.
3192dd1915842410005c68d32c43bb3b3cf5a4a702Duncan Sands  class LLVM_LIBRARY_VISIBILITY Clang : public Tool {
32df91ef3d6c55692a0236f67b6c6b134a3bf84098Douglas Gregor    void AddPreprocessingOptions(const Driver &D,
33df91ef3d6c55692a0236f67b6c6b134a3bf84098Douglas Gregor                                 const ArgList &Args,
34c21c485b4fb58ef5d55cf3e523263dd824a2ace4Daniel Dunbar                                 ArgStringList &CmdArgs,
35c21c485b4fb58ef5d55cf3e523263dd824a2ace4Daniel Dunbar                                 const InputInfo &Output,
36c21c485b4fb58ef5d55cf3e523263dd824a2ace4Daniel Dunbar                                 const InputInfoList &Inputs) const;
37c21c485b4fb58ef5d55cf3e523263dd824a2ace4Daniel Dunbar
38fa41d6975058ceb1b8a24564f6dcec72f89f62e8Daniel Dunbar    void AddARMTargetArgs(const ArgList &Args, ArgStringList &CmdArgs,
39fa41d6975058ceb1b8a24564f6dcec72f89f62e8Daniel Dunbar                          bool KernelOrKext) const;
40ed734737d5af31906e30e537d4a41c760ddcfc59Eric Christopher    void AddMIPSTargetArgs(const ArgList &Args, ArgStringList &CmdArgs) const;
419284d215022457ba867080a713f08f026d89ea17Bruno Cardoso Lopes    void AddSparcTargetArgs(const ArgList &Args, ArgStringList &CmdArgs) const;
426acda16e9c194dcbd0dea64341e182bdb65d0f41Daniel Dunbar    void AddX86TargetArgs(const ArgList &Args, ArgStringList &CmdArgs) const;
436acda16e9c194dcbd0dea64341e182bdb65d0f41Daniel Dunbar
449c073ff462eb75ccbb1c4446e21c148f3fc618e1Daniel Dunbar  public:
453038204fd8f6ff22082dd18e4b12ed252b75a5e4Daniel Dunbar    Clang(const ToolChain &TC) : Tool("clang", "clang frontend", TC) {}
469c073ff462eb75ccbb1c4446e21c148f3fc618e1Daniel Dunbar
4760a53f24b160724de0e8dd0e142009981540fd26Daniel Dunbar    virtual bool hasGoodDiagnostics() const { return true; }
488767cbc475ed96397b6f08617814eeb9cab121bdDaniel Dunbar    virtual bool hasIntegratedAssembler() const { return true; }
499c073ff462eb75ccbb1c4446e21c148f3fc618e1Daniel Dunbar    virtual bool hasIntegratedCPP() const { return true; }
5047ac7d27c44bd64a7d0fc03d4babc196cf2b8230Daniel Dunbar
5147ac7d27c44bd64a7d0fc03d4babc196cf2b8230Daniel Dunbar    virtual void ConstructJob(Compilation &C, const JobAction &JA,
5220a9aa50f9a7d4b03f97bc67e96da1d605c309a2Daniel Dunbar                              const InputInfo &Output,
5320a9aa50f9a7d4b03f97bc67e96da1d605c309a2Daniel Dunbar                              const InputInfoList &Inputs,
5420a9aa50f9a7d4b03f97bc67e96da1d605c309a2Daniel Dunbar                              const ArgList &TCArgs,
5520a9aa50f9a7d4b03f97bc67e96da1d605c309a2Daniel Dunbar                              const char *LinkingOutput) const;
5620a9aa50f9a7d4b03f97bc67e96da1d605c309a2Daniel Dunbar  };
5720a9aa50f9a7d4b03f97bc67e96da1d605c309a2Daniel Dunbar
5820a9aa50f9a7d4b03f97bc67e96da1d605c309a2Daniel Dunbar  /// \brief Clang integrated assembler tool.
5920a9aa50f9a7d4b03f97bc67e96da1d605c309a2Daniel Dunbar  class LLVM_LIBRARY_VISIBILITY ClangAs : public Tool {
6020a9aa50f9a7d4b03f97bc67e96da1d605c309a2Daniel Dunbar  public:
613038204fd8f6ff22082dd18e4b12ed252b75a5e4Daniel Dunbar    ClangAs(const ToolChain &TC) : Tool("clang::as",
623038204fd8f6ff22082dd18e4b12ed252b75a5e4Daniel Dunbar                                        "clang integrated assembler", TC) {}
6320a9aa50f9a7d4b03f97bc67e96da1d605c309a2Daniel Dunbar
6420a9aa50f9a7d4b03f97bc67e96da1d605c309a2Daniel Dunbar    virtual bool hasGoodDiagnostics() const { return true; }
6520a9aa50f9a7d4b03f97bc67e96da1d605c309a2Daniel Dunbar    virtual bool hasIntegratedAssembler() const { return false; }
6620a9aa50f9a7d4b03f97bc67e96da1d605c309a2Daniel Dunbar    virtual bool hasIntegratedCPP() const { return false; }
6720a9aa50f9a7d4b03f97bc67e96da1d605c309a2Daniel Dunbar
6820a9aa50f9a7d4b03f97bc67e96da1d605c309a2Daniel Dunbar    virtual void ConstructJob(Compilation &C, const JobAction &JA,
691eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump                              const InputInfo &Output,
701eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump                              const InputInfoList &Inputs,
711eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump                              const ArgList &TCArgs,
7247ac7d27c44bd64a7d0fc03d4babc196cf2b8230Daniel Dunbar                              const char *LinkingOutput) const;
739c073ff462eb75ccbb1c4446e21c148f3fc618e1Daniel Dunbar  };
749c073ff462eb75ccbb1c4446e21c148f3fc618e1Daniel Dunbar
7531b1e5437e7435879fc044afb77ff27096008e72Daniel Dunbar  /// gcc - Generic GCC tool implementations.
7631b1e5437e7435879fc044afb77ff27096008e72Daniel Dunbarnamespace gcc {
7792dd1915842410005c68d32c43bb3b3cf5a4a702Duncan Sands  class LLVM_LIBRARY_VISIBILITY Common : public Tool {
789c073ff462eb75ccbb1c4446e21c148f3fc618e1Daniel Dunbar  public:
793038204fd8f6ff22082dd18e4b12ed252b75a5e4Daniel Dunbar    Common(const char *Name, const char *ShortName,
803038204fd8f6ff22082dd18e4b12ed252b75a5e4Daniel Dunbar           const ToolChain &TC) : Tool(Name, ShortName, TC) {}
8147ac7d27c44bd64a7d0fc03d4babc196cf2b8230Daniel Dunbar
8247ac7d27c44bd64a7d0fc03d4babc196cf2b8230Daniel Dunbar    virtual void ConstructJob(Compilation &C, const JobAction &JA,
831eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump                              const InputInfo &Output,
841eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump                              const InputInfoList &Inputs,
851eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump                              const ArgList &TCArgs,
8647ac7d27c44bd64a7d0fc03d4babc196cf2b8230Daniel Dunbar                              const char *LinkingOutput) const;
87b488c1dac8e53206f07103d794a62a3f5012c0f4Daniel Dunbar
88b488c1dac8e53206f07103d794a62a3f5012c0f4Daniel Dunbar    /// RenderExtraToolArgs - Render any arguments necessary to force
89b488c1dac8e53206f07103d794a62a3f5012c0f4Daniel Dunbar    /// the particular tool mode.
9082b51cce8cea6b6bb6175c406c2ab425c91d9dc8Daniel Dunbar    virtual void RenderExtraToolArgs(const JobAction &JA,
9182b51cce8cea6b6bb6175c406c2ab425c91d9dc8Daniel Dunbar                                     ArgStringList &CmdArgs) const = 0;
929c073ff462eb75ccbb1c4446e21c148f3fc618e1Daniel Dunbar  };
939c073ff462eb75ccbb1c4446e21c148f3fc618e1Daniel Dunbar
941eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump
9592dd1915842410005c68d32c43bb3b3cf5a4a702Duncan Sands  class LLVM_LIBRARY_VISIBILITY Preprocess : public Common {
969c073ff462eb75ccbb1c4446e21c148f3fc618e1Daniel Dunbar  public:
973038204fd8f6ff22082dd18e4b12ed252b75a5e4Daniel Dunbar    Preprocess(const ToolChain &TC) : Common("gcc::Preprocess",
983038204fd8f6ff22082dd18e4b12ed252b75a5e4Daniel Dunbar                                             "gcc preprocessor", TC) {}
99b488c1dac8e53206f07103d794a62a3f5012c0f4Daniel Dunbar
10060a53f24b160724de0e8dd0e142009981540fd26Daniel Dunbar    virtual bool hasGoodDiagnostics() const { return true; }
101b488c1dac8e53206f07103d794a62a3f5012c0f4Daniel Dunbar    virtual bool hasIntegratedCPP() const { return false; }
102b488c1dac8e53206f07103d794a62a3f5012c0f4Daniel Dunbar
10382b51cce8cea6b6bb6175c406c2ab425c91d9dc8Daniel Dunbar    virtual void RenderExtraToolArgs(const JobAction &JA,
10482b51cce8cea6b6bb6175c406c2ab425c91d9dc8Daniel Dunbar                                     ArgStringList &CmdArgs) const;
105b488c1dac8e53206f07103d794a62a3f5012c0f4Daniel Dunbar  };
106b488c1dac8e53206f07103d794a62a3f5012c0f4Daniel Dunbar
10792dd1915842410005c68d32c43bb3b3cf5a4a702Duncan Sands  class LLVM_LIBRARY_VISIBILITY Precompile : public Common  {
108b488c1dac8e53206f07103d794a62a3f5012c0f4Daniel Dunbar  public:
1093038204fd8f6ff22082dd18e4b12ed252b75a5e4Daniel Dunbar    Precompile(const ToolChain &TC) : Common("gcc::Precompile",
1103038204fd8f6ff22082dd18e4b12ed252b75a5e4Daniel Dunbar                                             "gcc precompile", TC) {}
1119c073ff462eb75ccbb1c4446e21c148f3fc618e1Daniel Dunbar
11260a53f24b160724de0e8dd0e142009981540fd26Daniel Dunbar    virtual bool hasGoodDiagnostics() const { return true; }
1139c073ff462eb75ccbb1c4446e21c148f3fc618e1Daniel Dunbar    virtual bool hasIntegratedCPP() const { return true; }
11447ac7d27c44bd64a7d0fc03d4babc196cf2b8230Daniel Dunbar
11582b51cce8cea6b6bb6175c406c2ab425c91d9dc8Daniel Dunbar    virtual void RenderExtraToolArgs(const JobAction &JA,
11682b51cce8cea6b6bb6175c406c2ab425c91d9dc8Daniel Dunbar                                     ArgStringList &CmdArgs) const;
1179c073ff462eb75ccbb1c4446e21c148f3fc618e1Daniel Dunbar  };
1189c073ff462eb75ccbb1c4446e21c148f3fc618e1Daniel Dunbar
11992dd1915842410005c68d32c43bb3b3cf5a4a702Duncan Sands  class LLVM_LIBRARY_VISIBILITY Compile : public Common  {
1209c073ff462eb75ccbb1c4446e21c148f3fc618e1Daniel Dunbar  public:
1213038204fd8f6ff22082dd18e4b12ed252b75a5e4Daniel Dunbar    Compile(const ToolChain &TC) : Common("gcc::Compile",
1223038204fd8f6ff22082dd18e4b12ed252b75a5e4Daniel Dunbar                                          "gcc frontend", TC) {}
1239c073ff462eb75ccbb1c4446e21c148f3fc618e1Daniel Dunbar
12460a53f24b160724de0e8dd0e142009981540fd26Daniel Dunbar    virtual bool hasGoodDiagnostics() const { return true; }
1259c073ff462eb75ccbb1c4446e21c148f3fc618e1Daniel Dunbar    virtual bool hasIntegratedCPP() const { return true; }
12647ac7d27c44bd64a7d0fc03d4babc196cf2b8230Daniel Dunbar
12782b51cce8cea6b6bb6175c406c2ab425c91d9dc8Daniel Dunbar    virtual void RenderExtraToolArgs(const JobAction &JA,
12882b51cce8cea6b6bb6175c406c2ab425c91d9dc8Daniel Dunbar                                     ArgStringList &CmdArgs) const;
1299c073ff462eb75ccbb1c4446e21c148f3fc618e1Daniel Dunbar  };
1309c073ff462eb75ccbb1c4446e21c148f3fc618e1Daniel Dunbar
13192dd1915842410005c68d32c43bb3b3cf5a4a702Duncan Sands  class LLVM_LIBRARY_VISIBILITY Assemble : public Common  {
1329c073ff462eb75ccbb1c4446e21c148f3fc618e1Daniel Dunbar  public:
1333038204fd8f6ff22082dd18e4b12ed252b75a5e4Daniel Dunbar    Assemble(const ToolChain &TC) : Common("gcc::Assemble",
1343038204fd8f6ff22082dd18e4b12ed252b75a5e4Daniel Dunbar                                           "assembler (via gcc)", TC) {}
1359c073ff462eb75ccbb1c4446e21c148f3fc618e1Daniel Dunbar
1369c073ff462eb75ccbb1c4446e21c148f3fc618e1Daniel Dunbar    virtual bool hasIntegratedCPP() const { return false; }
13747ac7d27c44bd64a7d0fc03d4babc196cf2b8230Daniel Dunbar
13882b51cce8cea6b6bb6175c406c2ab425c91d9dc8Daniel Dunbar    virtual void RenderExtraToolArgs(const JobAction &JA,
13982b51cce8cea6b6bb6175c406c2ab425c91d9dc8Daniel Dunbar                                     ArgStringList &CmdArgs) const;
1409c073ff462eb75ccbb1c4446e21c148f3fc618e1Daniel Dunbar  };
1419c073ff462eb75ccbb1c4446e21c148f3fc618e1Daniel Dunbar
14292dd1915842410005c68d32c43bb3b3cf5a4a702Duncan Sands  class LLVM_LIBRARY_VISIBILITY Link : public Common  {
1439c073ff462eb75ccbb1c4446e21c148f3fc618e1Daniel Dunbar  public:
1443038204fd8f6ff22082dd18e4b12ed252b75a5e4Daniel Dunbar    Link(const ToolChain &TC) : Common("gcc::Link",
1453038204fd8f6ff22082dd18e4b12ed252b75a5e4Daniel Dunbar                                       "linker (via gcc)", TC) {}
1469c073ff462eb75ccbb1c4446e21c148f3fc618e1Daniel Dunbar
1479c073ff462eb75ccbb1c4446e21c148f3fc618e1Daniel Dunbar    virtual bool hasIntegratedCPP() const { return false; }
14847ac7d27c44bd64a7d0fc03d4babc196cf2b8230Daniel Dunbar
14982b51cce8cea6b6bb6175c406c2ab425c91d9dc8Daniel Dunbar    virtual void RenderExtraToolArgs(const JobAction &JA,
15082b51cce8cea6b6bb6175c406c2ab425c91d9dc8Daniel Dunbar                                     ArgStringList &CmdArgs) const;
1519c073ff462eb75ccbb1c4446e21c148f3fc618e1Daniel Dunbar  };
15231b1e5437e7435879fc044afb77ff27096008e72Daniel Dunbar} // end namespace gcc
1539c073ff462eb75ccbb1c4446e21c148f3fc618e1Daniel Dunbar
154ff7488dc9a766f94daf54d81b03ab9160d0bfd88Daniel Dunbarnamespace darwin {
15592dd1915842410005c68d32c43bb3b3cf5a4a702Duncan Sands  class LLVM_LIBRARY_VISIBILITY DarwinTool : public Tool {
156fbefe6bd6f62a3361813498dc672ab0d6c0d4fd1Daniel Dunbar  protected:
157fbefe6bd6f62a3361813498dc672ab0d6c0d4fd1Daniel Dunbar    void AddDarwinArch(const ArgList &Args, ArgStringList &CmdArgs) const;
158fbefe6bd6f62a3361813498dc672ab0d6c0d4fd1Daniel Dunbar
159fbefe6bd6f62a3361813498dc672ab0d6c0d4fd1Daniel Dunbar    const toolchains::Darwin &getDarwinToolChain() const {
160fbefe6bd6f62a3361813498dc672ab0d6c0d4fd1Daniel Dunbar      return reinterpret_cast<const toolchains::Darwin&>(getToolChain());
161fbefe6bd6f62a3361813498dc672ab0d6c0d4fd1Daniel Dunbar    }
162fbefe6bd6f62a3361813498dc672ab0d6c0d4fd1Daniel Dunbar
163fbefe6bd6f62a3361813498dc672ab0d6c0d4fd1Daniel Dunbar  public:
1643038204fd8f6ff22082dd18e4b12ed252b75a5e4Daniel Dunbar    DarwinTool(const char *Name, const char *ShortName,
1653038204fd8f6ff22082dd18e4b12ed252b75a5e4Daniel Dunbar               const ToolChain &TC) : Tool(Name, ShortName, TC) {}
166fbefe6bd6f62a3361813498dc672ab0d6c0d4fd1Daniel Dunbar  };
167fbefe6bd6f62a3361813498dc672ab0d6c0d4fd1Daniel Dunbar
16892dd1915842410005c68d32c43bb3b3cf5a4a702Duncan Sands  class LLVM_LIBRARY_VISIBILITY CC1 : public DarwinTool  {
169a5a7bd0de7b6b80212095195a055a4a43f21d4b2Daniel Dunbar  public:
1701eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump    static const char *getBaseInputName(const ArgList &Args,
171a5a7bd0de7b6b80212095195a055a4a43f21d4b2Daniel Dunbar                                 const InputInfoList &Input);
1721eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump    static const char *getBaseInputStem(const ArgList &Args,
173a5a7bd0de7b6b80212095195a055a4a43f21d4b2Daniel Dunbar                                 const InputInfoList &Input);
1741eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump    static const char *getDependencyFileName(const ArgList &Args,
175a5a7bd0de7b6b80212095195a055a4a43f21d4b2Daniel Dunbar                                             const InputInfoList &Inputs);
176a5a7bd0de7b6b80212095195a055a4a43f21d4b2Daniel Dunbar
17740f1265ebd42ece3e7f7917319b56012e8e2bce2Daniel Dunbar  protected:
17840f1265ebd42ece3e7f7917319b56012e8e2bce2Daniel Dunbar    const char *getCC1Name(types::ID Type) const;
179a3ec60e0cf2a1916f479288998d31bd980b1a306Daniel Dunbar
180a3ec60e0cf2a1916f479288998d31bd980b1a306Daniel Dunbar    void AddCC1Args(const ArgList &Args, ArgStringList &CmdArgs) const;
18140f1265ebd42ece3e7f7917319b56012e8e2bce2Daniel Dunbar    void AddCC1OptionsArgs(const ArgList &Args, ArgStringList &CmdArgs,
18240f1265ebd42ece3e7f7917319b56012e8e2bce2Daniel Dunbar                           const InputInfoList &Inputs,
183a3ec60e0cf2a1916f479288998d31bd980b1a306Daniel Dunbar                           const ArgStringList &OutputArgs) const;
18440f1265ebd42ece3e7f7917319b56012e8e2bce2Daniel Dunbar    void AddCPPOptionsArgs(const ArgList &Args, ArgStringList &CmdArgs,
18540f1265ebd42ece3e7f7917319b56012e8e2bce2Daniel Dunbar                           const InputInfoList &Inputs,
186a3ec60e0cf2a1916f479288998d31bd980b1a306Daniel Dunbar                           const ArgStringList &OutputArgs) const;
1871eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump    void AddCPPUniqueOptionsArgs(const ArgList &Args,
188a3ec60e0cf2a1916f479288998d31bd980b1a306Daniel Dunbar                                 ArgStringList &CmdArgs,
189a3ec60e0cf2a1916f479288998d31bd980b1a306Daniel Dunbar                                 const InputInfoList &Inputs) const;
190a3ec60e0cf2a1916f479288998d31bd980b1a306Daniel Dunbar    void AddCPPArgs(const ArgList &Args, ArgStringList &CmdArgs) const;
19140f1265ebd42ece3e7f7917319b56012e8e2bce2Daniel Dunbar
19240f1265ebd42ece3e7f7917319b56012e8e2bce2Daniel Dunbar  public:
1933038204fd8f6ff22082dd18e4b12ed252b75a5e4Daniel Dunbar    CC1(const char *Name, const char *ShortName,
1943038204fd8f6ff22082dd18e4b12ed252b75a5e4Daniel Dunbar        const ToolChain &TC) : DarwinTool(Name, ShortName, TC) {}
19540f1265ebd42ece3e7f7917319b56012e8e2bce2Daniel Dunbar
19660a53f24b160724de0e8dd0e142009981540fd26Daniel Dunbar    virtual bool hasGoodDiagnostics() const { return true; }
19740f1265ebd42ece3e7f7917319b56012e8e2bce2Daniel Dunbar    virtual bool hasIntegratedCPP() const { return true; }
19840f1265ebd42ece3e7f7917319b56012e8e2bce2Daniel Dunbar  };
19940f1265ebd42ece3e7f7917319b56012e8e2bce2Daniel Dunbar
20092dd1915842410005c68d32c43bb3b3cf5a4a702Duncan Sands  class LLVM_LIBRARY_VISIBILITY Preprocess : public CC1  {
20140f1265ebd42ece3e7f7917319b56012e8e2bce2Daniel Dunbar  public:
2023038204fd8f6ff22082dd18e4b12ed252b75a5e4Daniel Dunbar    Preprocess(const ToolChain &TC) : CC1("darwin::Preprocess",
2033038204fd8f6ff22082dd18e4b12ed252b75a5e4Daniel Dunbar                                          "gcc preprocessor", TC) {}
20440f1265ebd42ece3e7f7917319b56012e8e2bce2Daniel Dunbar
20540f1265ebd42ece3e7f7917319b56012e8e2bce2Daniel Dunbar    virtual void ConstructJob(Compilation &C, const JobAction &JA,
2061eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump                              const InputInfo &Output,
2071eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump                              const InputInfoList &Inputs,
2081eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump                              const ArgList &TCArgs,
20940f1265ebd42ece3e7f7917319b56012e8e2bce2Daniel Dunbar                              const char *LinkingOutput) const;
21040f1265ebd42ece3e7f7917319b56012e8e2bce2Daniel Dunbar  };
21140f1265ebd42ece3e7f7917319b56012e8e2bce2Daniel Dunbar
21292dd1915842410005c68d32c43bb3b3cf5a4a702Duncan Sands  class LLVM_LIBRARY_VISIBILITY Compile : public CC1  {
21340f1265ebd42ece3e7f7917319b56012e8e2bce2Daniel Dunbar  public:
2143038204fd8f6ff22082dd18e4b12ed252b75a5e4Daniel Dunbar    Compile(const ToolChain &TC) : CC1("darwin::Compile", "gcc frontend", TC) {}
21540f1265ebd42ece3e7f7917319b56012e8e2bce2Daniel Dunbar
21640f1265ebd42ece3e7f7917319b56012e8e2bce2Daniel Dunbar    virtual void ConstructJob(Compilation &C, const JobAction &JA,
2171eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump                              const InputInfo &Output,
2181eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump                              const InputInfoList &Inputs,
2191eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump                              const ArgList &TCArgs,
22040f1265ebd42ece3e7f7917319b56012e8e2bce2Daniel Dunbar                              const char *LinkingOutput) const;
22140f1265ebd42ece3e7f7917319b56012e8e2bce2Daniel Dunbar  };
22240f1265ebd42ece3e7f7917319b56012e8e2bce2Daniel Dunbar
22392dd1915842410005c68d32c43bb3b3cf5a4a702Duncan Sands  class LLVM_LIBRARY_VISIBILITY Assemble : public DarwinTool  {
2248cac5f7e1ce63dd77ee0fb4ef68f9fa804f41ea6Daniel Dunbar  public:
2253038204fd8f6ff22082dd18e4b12ed252b75a5e4Daniel Dunbar    Assemble(const ToolChain &TC) : DarwinTool("darwin::Assemble",
2263038204fd8f6ff22082dd18e4b12ed252b75a5e4Daniel Dunbar                                               "assembler", TC) {}
2278cac5f7e1ce63dd77ee0fb4ef68f9fa804f41ea6Daniel Dunbar
2288cac5f7e1ce63dd77ee0fb4ef68f9fa804f41ea6Daniel Dunbar    virtual bool hasIntegratedCPP() const { return false; }
2298cac5f7e1ce63dd77ee0fb4ef68f9fa804f41ea6Daniel Dunbar
2308cac5f7e1ce63dd77ee0fb4ef68f9fa804f41ea6Daniel Dunbar    virtual void ConstructJob(Compilation &C, const JobAction &JA,
2311eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump                              const InputInfo &Output,
2321eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump                              const InputInfoList &Inputs,
2331eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump                              const ArgList &TCArgs,
23402633b541b04ad5ffc1c70f4c2feeeb13e607057Daniel Dunbar                              const char *LinkingOutput) const;
23502633b541b04ad5ffc1c70f4c2feeeb13e607057Daniel Dunbar  };
23602633b541b04ad5ffc1c70f4c2feeeb13e607057Daniel Dunbar
23792dd1915842410005c68d32c43bb3b3cf5a4a702Duncan Sands  class LLVM_LIBRARY_VISIBILITY Link : public DarwinTool  {
238748de8eda222f087434d8bd703176b316a061341Daniel Dunbar    void AddLinkArgs(Compilation &C, const ArgList &Args,
239748de8eda222f087434d8bd703176b316a061341Daniel Dunbar                     ArgStringList &CmdArgs) const;
24002633b541b04ad5ffc1c70f4c2feeeb13e607057Daniel Dunbar
24102633b541b04ad5ffc1c70f4c2feeeb13e607057Daniel Dunbar  public:
2423038204fd8f6ff22082dd18e4b12ed252b75a5e4Daniel Dunbar    Link(const ToolChain &TC) : DarwinTool("darwin::Link", "linker", TC) {}
24302633b541b04ad5ffc1c70f4c2feeeb13e607057Daniel Dunbar
24402633b541b04ad5ffc1c70f4c2feeeb13e607057Daniel Dunbar    virtual bool hasIntegratedCPP() const { return false; }
24502633b541b04ad5ffc1c70f4c2feeeb13e607057Daniel Dunbar
24602633b541b04ad5ffc1c70f4c2feeeb13e607057Daniel Dunbar    virtual void ConstructJob(Compilation &C, const JobAction &JA,
2471eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump                              const InputInfo &Output,
2481eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump                              const InputInfoList &Inputs,
2491eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump                              const ArgList &TCArgs,
2508cac5f7e1ce63dd77ee0fb4ef68f9fa804f41ea6Daniel Dunbar                              const char *LinkingOutput) const;
2518cac5f7e1ce63dd77ee0fb4ef68f9fa804f41ea6Daniel Dunbar  };
2528cac5f7e1ce63dd77ee0fb4ef68f9fa804f41ea6Daniel Dunbar
25392dd1915842410005c68d32c43bb3b3cf5a4a702Duncan Sands  class LLVM_LIBRARY_VISIBILITY Lipo : public DarwinTool  {
254ff7488dc9a766f94daf54d81b03ab9160d0bfd88Daniel Dunbar  public:
2553038204fd8f6ff22082dd18e4b12ed252b75a5e4Daniel Dunbar    Lipo(const ToolChain &TC) : DarwinTool("darwin::Lipo", "lipo", TC) {}
256ff7488dc9a766f94daf54d81b03ab9160d0bfd88Daniel Dunbar
257ff7488dc9a766f94daf54d81b03ab9160d0bfd88Daniel Dunbar    virtual bool hasIntegratedCPP() const { return false; }
258ff7488dc9a766f94daf54d81b03ab9160d0bfd88Daniel Dunbar
259ff7488dc9a766f94daf54d81b03ab9160d0bfd88Daniel Dunbar    virtual void ConstructJob(Compilation &C, const JobAction &JA,
2601eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump                              const InputInfo &Output,
2611eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump                              const InputInfoList &Inputs,
2621eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump                              const ArgList &TCArgs,
2636e0f25483b1a801cd1155ea89c2b725feab16332Daniel Dunbar                              const char *LinkingOutput) const;
2646e0f25483b1a801cd1155ea89c2b725feab16332Daniel Dunbar  };
2656e0f25483b1a801cd1155ea89c2b725feab16332Daniel Dunbar
2666e0f25483b1a801cd1155ea89c2b725feab16332Daniel Dunbar  class LLVM_LIBRARY_VISIBILITY Dsymutil : public DarwinTool  {
2676e0f25483b1a801cd1155ea89c2b725feab16332Daniel Dunbar  public:
2686e0f25483b1a801cd1155ea89c2b725feab16332Daniel Dunbar    Dsymutil(const ToolChain &TC) : DarwinTool("darwin::Dsymutil",
2696e0f25483b1a801cd1155ea89c2b725feab16332Daniel Dunbar                                               "dsymutil", TC) {}
2706e0f25483b1a801cd1155ea89c2b725feab16332Daniel Dunbar
2716e0f25483b1a801cd1155ea89c2b725feab16332Daniel Dunbar    virtual bool hasIntegratedCPP() const { return false; }
2726e0f25483b1a801cd1155ea89c2b725feab16332Daniel Dunbar
2736e0f25483b1a801cd1155ea89c2b725feab16332Daniel Dunbar    virtual void ConstructJob(Compilation &C, const JobAction &JA,
2746e0f25483b1a801cd1155ea89c2b725feab16332Daniel Dunbar                              const InputInfo &Output,
2756e0f25483b1a801cd1155ea89c2b725feab16332Daniel Dunbar                              const InputInfoList &Inputs,
2766e0f25483b1a801cd1155ea89c2b725feab16332Daniel Dunbar                              const ArgList &TCArgs,
277f7b8eec37c8c8012fa525c71fb29a58c9f29beefDaniel Dunbar                              const char *LinkingOutput) const;
278f7b8eec37c8c8012fa525c71fb29a58c9f29beefDaniel Dunbar  };
279f7b8eec37c8c8012fa525c71fb29a58c9f29beefDaniel Dunbar}
280f7b8eec37c8c8012fa525c71fb29a58c9f29beefDaniel Dunbar
281f7b8eec37c8c8012fa525c71fb29a58c9f29beefDaniel Dunbar  /// openbsd -- Directly call GNU Binutils assembler and linker
282f7b8eec37c8c8012fa525c71fb29a58c9f29beefDaniel Dunbarnamespace openbsd {
28392dd1915842410005c68d32c43bb3b3cf5a4a702Duncan Sands  class LLVM_LIBRARY_VISIBILITY Assemble : public Tool  {
284f7b8eec37c8c8012fa525c71fb29a58c9f29beefDaniel Dunbar  public:
2853038204fd8f6ff22082dd18e4b12ed252b75a5e4Daniel Dunbar    Assemble(const ToolChain &TC) : Tool("openbsd::Assemble", "assembler",
2863038204fd8f6ff22082dd18e4b12ed252b75a5e4Daniel Dunbar                                         TC) {}
287f7b8eec37c8c8012fa525c71fb29a58c9f29beefDaniel Dunbar
288f7b8eec37c8c8012fa525c71fb29a58c9f29beefDaniel Dunbar    virtual bool hasIntegratedCPP() const { return false; }
289f7b8eec37c8c8012fa525c71fb29a58c9f29beefDaniel Dunbar
290f7b8eec37c8c8012fa525c71fb29a58c9f29beefDaniel Dunbar    virtual void ConstructJob(Compilation &C, const JobAction &JA,
2911eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump                              const InputInfo &Output,
2921eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump                              const InputInfoList &Inputs,
2931eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump                              const ArgList &TCArgs,
294f7b8eec37c8c8012fa525c71fb29a58c9f29beefDaniel Dunbar                              const char *LinkingOutput) const;
295f7b8eec37c8c8012fa525c71fb29a58c9f29beefDaniel Dunbar  };
29692dd1915842410005c68d32c43bb3b3cf5a4a702Duncan Sands  class LLVM_LIBRARY_VISIBILITY Link : public Tool  {
297f7b8eec37c8c8012fa525c71fb29a58c9f29beefDaniel Dunbar  public:
2983038204fd8f6ff22082dd18e4b12ed252b75a5e4Daniel Dunbar    Link(const ToolChain &TC) : Tool("openbsd::Link", "linker", TC) {}
299f7b8eec37c8c8012fa525c71fb29a58c9f29beefDaniel Dunbar
300f7b8eec37c8c8012fa525c71fb29a58c9f29beefDaniel Dunbar    virtual bool hasIntegratedCPP() const { return false; }
301f7b8eec37c8c8012fa525c71fb29a58c9f29beefDaniel Dunbar
302f7b8eec37c8c8012fa525c71fb29a58c9f29beefDaniel Dunbar    virtual void ConstructJob(Compilation &C, const JobAction &JA,
3031eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump                              const InputInfo &Output,
3041eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump                              const InputInfoList &Inputs,
3051eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump                              const ArgList &TCArgs,
306ff7488dc9a766f94daf54d81b03ab9160d0bfd88Daniel Dunbar                              const char *LinkingOutput) const;
307ff7488dc9a766f94daf54d81b03ab9160d0bfd88Daniel Dunbar  };
308e7925a075f110ab21afeae084670a155dea568e3Edward O'Callaghan} // end namespace openbsd
309ff7488dc9a766f94daf54d81b03ab9160d0bfd88Daniel Dunbar
31068a31d406c6dc4382c700d1199b062de2aa7e1daDaniel Dunbar  /// freebsd -- Directly call GNU Binutils assembler and linker
31168a31d406c6dc4382c700d1199b062de2aa7e1daDaniel Dunbarnamespace freebsd {
31292dd1915842410005c68d32c43bb3b3cf5a4a702Duncan Sands  class LLVM_LIBRARY_VISIBILITY Assemble : public Tool  {
31368a31d406c6dc4382c700d1199b062de2aa7e1daDaniel Dunbar  public:
3143038204fd8f6ff22082dd18e4b12ed252b75a5e4Daniel Dunbar    Assemble(const ToolChain &TC) : Tool("freebsd::Assemble", "assembler",
3153038204fd8f6ff22082dd18e4b12ed252b75a5e4Daniel Dunbar                                         TC) {}
31668a31d406c6dc4382c700d1199b062de2aa7e1daDaniel Dunbar
31768a31d406c6dc4382c700d1199b062de2aa7e1daDaniel Dunbar    virtual bool hasIntegratedCPP() const { return false; }
31868a31d406c6dc4382c700d1199b062de2aa7e1daDaniel Dunbar
31968a31d406c6dc4382c700d1199b062de2aa7e1daDaniel Dunbar    virtual void ConstructJob(Compilation &C, const JobAction &JA,
3201eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump                              const InputInfo &Output,
3211eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump                              const InputInfoList &Inputs,
3221eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump                              const ArgList &TCArgs,
32368a31d406c6dc4382c700d1199b062de2aa7e1daDaniel Dunbar                              const char *LinkingOutput) const;
32468a31d406c6dc4382c700d1199b062de2aa7e1daDaniel Dunbar  };
32592dd1915842410005c68d32c43bb3b3cf5a4a702Duncan Sands  class LLVM_LIBRARY_VISIBILITY Link : public Tool  {
326008f54a54299eaafdaa940e2bdeaf55935ecd95aDaniel Dunbar  public:
3273038204fd8f6ff22082dd18e4b12ed252b75a5e4Daniel Dunbar    Link(const ToolChain &TC) : Tool("freebsd::Link", "linker", TC) {}
328008f54a54299eaafdaa940e2bdeaf55935ecd95aDaniel Dunbar
329008f54a54299eaafdaa940e2bdeaf55935ecd95aDaniel Dunbar    virtual bool hasIntegratedCPP() const { return false; }
330008f54a54299eaafdaa940e2bdeaf55935ecd95aDaniel Dunbar
331008f54a54299eaafdaa940e2bdeaf55935ecd95aDaniel Dunbar    virtual void ConstructJob(Compilation &C, const JobAction &JA,
3321eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump                              const InputInfo &Output,
3331eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump                              const InputInfoList &Inputs,
3341eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump                              const ArgList &TCArgs,
335008f54a54299eaafdaa940e2bdeaf55935ecd95aDaniel Dunbar                              const char *LinkingOutput) const;
336008f54a54299eaafdaa940e2bdeaf55935ecd95aDaniel Dunbar  };
337e7925a075f110ab21afeae084670a155dea568e3Edward O'Callaghan} // end namespace freebsd
338e7925a075f110ab21afeae084670a155dea568e3Edward O'Callaghan
3398e50a96b387dca7525caa8a6add31420dd82a2cdBenjamin Kramer  /// netbsd -- Directly call GNU Binutils assembler and linker
3408e50a96b387dca7525caa8a6add31420dd82a2cdBenjamin Kramernamespace netbsd {
3418e50a96b387dca7525caa8a6add31420dd82a2cdBenjamin Kramer  class LLVM_LIBRARY_VISIBILITY Assemble : public Tool  {
342182564cd14a2105fff05fd52f5940eff96161d57Joerg Sonnenberger  private:
343182564cd14a2105fff05fd52f5940eff96161d57Joerg Sonnenberger    const llvm::Triple ToolTriple;
344182564cd14a2105fff05fd52f5940eff96161d57Joerg Sonnenberger
3458e50a96b387dca7525caa8a6add31420dd82a2cdBenjamin Kramer  public:
346182564cd14a2105fff05fd52f5940eff96161d57Joerg Sonnenberger    Assemble(const ToolChain &TC, const llvm::Triple &ToolTriple)
347182564cd14a2105fff05fd52f5940eff96161d57Joerg Sonnenberger      : Tool("netbsd::Assemble", "assembler", TC), ToolTriple(ToolTriple) {}
3488e50a96b387dca7525caa8a6add31420dd82a2cdBenjamin Kramer
3498e50a96b387dca7525caa8a6add31420dd82a2cdBenjamin Kramer    virtual bool hasIntegratedCPP() const { return false; }
3508e50a96b387dca7525caa8a6add31420dd82a2cdBenjamin Kramer
3518e50a96b387dca7525caa8a6add31420dd82a2cdBenjamin Kramer    virtual void ConstructJob(Compilation &C, const JobAction &JA,
3528e50a96b387dca7525caa8a6add31420dd82a2cdBenjamin Kramer                              const InputInfo &Output,
3538e50a96b387dca7525caa8a6add31420dd82a2cdBenjamin Kramer                              const InputInfoList &Inputs,
3548e50a96b387dca7525caa8a6add31420dd82a2cdBenjamin Kramer                              const ArgList &TCArgs,
3558e50a96b387dca7525caa8a6add31420dd82a2cdBenjamin Kramer                              const char *LinkingOutput) const;
3568e50a96b387dca7525caa8a6add31420dd82a2cdBenjamin Kramer  };
3578e50a96b387dca7525caa8a6add31420dd82a2cdBenjamin Kramer  class LLVM_LIBRARY_VISIBILITY Link : public Tool  {
358182564cd14a2105fff05fd52f5940eff96161d57Joerg Sonnenberger  private:
359182564cd14a2105fff05fd52f5940eff96161d57Joerg Sonnenberger    const llvm::Triple ToolTriple;
360182564cd14a2105fff05fd52f5940eff96161d57Joerg Sonnenberger
3618e50a96b387dca7525caa8a6add31420dd82a2cdBenjamin Kramer  public:
362182564cd14a2105fff05fd52f5940eff96161d57Joerg Sonnenberger    Link(const ToolChain &TC, const llvm::Triple &ToolTriple)
363182564cd14a2105fff05fd52f5940eff96161d57Joerg Sonnenberger      : Tool("netbsd::Ling", "linker", TC), ToolTriple(ToolTriple) {}
3648e50a96b387dca7525caa8a6add31420dd82a2cdBenjamin Kramer
3658e50a96b387dca7525caa8a6add31420dd82a2cdBenjamin Kramer    virtual bool hasIntegratedCPP() const { return false; }
3668e50a96b387dca7525caa8a6add31420dd82a2cdBenjamin Kramer
3678e50a96b387dca7525caa8a6add31420dd82a2cdBenjamin Kramer    virtual void ConstructJob(Compilation &C, const JobAction &JA,
3688e50a96b387dca7525caa8a6add31420dd82a2cdBenjamin Kramer                              const InputInfo &Output,
3698e50a96b387dca7525caa8a6add31420dd82a2cdBenjamin Kramer                              const InputInfoList &Inputs,
3708e50a96b387dca7525caa8a6add31420dd82a2cdBenjamin Kramer                              const ArgList &TCArgs,
3718e50a96b387dca7525caa8a6add31420dd82a2cdBenjamin Kramer                              const char *LinkingOutput) const;
3728e50a96b387dca7525caa8a6add31420dd82a2cdBenjamin Kramer  };
3738e50a96b387dca7525caa8a6add31420dd82a2cdBenjamin Kramer} // end namespace netbsd
3748e50a96b387dca7525caa8a6add31420dd82a2cdBenjamin Kramer
375ba30bbe4e36a30a274da809a11a42f9cdc168e92Rafael Espindola  /// linux -- Directly call GNU Binutils assembler and linker
376ba30bbe4e36a30a274da809a11a42f9cdc168e92Rafael Espindolanamespace linuxtools {
377ba30bbe4e36a30a274da809a11a42f9cdc168e92Rafael Espindola  class LLVM_LIBRARY_VISIBILITY Assemble : public Tool  {
378ba30bbe4e36a30a274da809a11a42f9cdc168e92Rafael Espindola  public:
379ba30bbe4e36a30a274da809a11a42f9cdc168e92Rafael Espindola    Assemble(const ToolChain &TC) : Tool("linux::Assemble", "assembler",
380ba30bbe4e36a30a274da809a11a42f9cdc168e92Rafael Espindola                                         TC) {}
381ba30bbe4e36a30a274da809a11a42f9cdc168e92Rafael Espindola
382ba30bbe4e36a30a274da809a11a42f9cdc168e92Rafael Espindola    virtual bool hasIntegratedCPP() const { return false; }
383ba30bbe4e36a30a274da809a11a42f9cdc168e92Rafael Espindola
384ba30bbe4e36a30a274da809a11a42f9cdc168e92Rafael Espindola    virtual void ConstructJob(Compilation &C, const JobAction &JA,
385ba30bbe4e36a30a274da809a11a42f9cdc168e92Rafael Espindola                              const InputInfo &Output,
386ba30bbe4e36a30a274da809a11a42f9cdc168e92Rafael Espindola                              const InputInfoList &Inputs,
387ba30bbe4e36a30a274da809a11a42f9cdc168e92Rafael Espindola                              const ArgList &TCArgs,
388ba30bbe4e36a30a274da809a11a42f9cdc168e92Rafael Espindola                              const char *LinkingOutput) const;
389ba30bbe4e36a30a274da809a11a42f9cdc168e92Rafael Espindola  };
390c1da981bba867681004004b2d54ec2fdf3c08913Rafael Espindola  class LLVM_LIBRARY_VISIBILITY Link : public Tool  {
391c1da981bba867681004004b2d54ec2fdf3c08913Rafael Espindola  public:
392c1da981bba867681004004b2d54ec2fdf3c08913Rafael Espindola    Link(const ToolChain &TC) : Tool("linux::Link", "linker", TC) {}
393c1da981bba867681004004b2d54ec2fdf3c08913Rafael Espindola
394c1da981bba867681004004b2d54ec2fdf3c08913Rafael Espindola    virtual bool hasIntegratedCPP() const { return false; }
395c1da981bba867681004004b2d54ec2fdf3c08913Rafael Espindola
396c1da981bba867681004004b2d54ec2fdf3c08913Rafael Espindola    virtual void ConstructJob(Compilation &C, const JobAction &JA,
397c1da981bba867681004004b2d54ec2fdf3c08913Rafael Espindola                              const InputInfo &Output,
398c1da981bba867681004004b2d54ec2fdf3c08913Rafael Espindola                              const InputInfoList &Inputs,
399c1da981bba867681004004b2d54ec2fdf3c08913Rafael Espindola                              const ArgList &TCArgs,
400c1da981bba867681004004b2d54ec2fdf3c08913Rafael Espindola                              const char *LinkingOutput) const;
401c1da981bba867681004004b2d54ec2fdf3c08913Rafael Espindola  };
402ba30bbe4e36a30a274da809a11a42f9cdc168e92Rafael Espindola}
40338e317d6dce161b249508686cc67eb7176958762Chris Lattner  /// minix -- Directly call GNU Binutils assembler and linker
40438e317d6dce161b249508686cc67eb7176958762Chris Lattnernamespace minix {
40538e317d6dce161b249508686cc67eb7176958762Chris Lattner  class LLVM_LIBRARY_VISIBILITY Assemble : public Tool  {
40638e317d6dce161b249508686cc67eb7176958762Chris Lattner  public:
40738e317d6dce161b249508686cc67eb7176958762Chris Lattner    Assemble(const ToolChain &TC) : Tool("minix::Assemble", "assembler",
40838e317d6dce161b249508686cc67eb7176958762Chris Lattner                                         TC) {}
40938e317d6dce161b249508686cc67eb7176958762Chris Lattner
41038e317d6dce161b249508686cc67eb7176958762Chris Lattner    virtual bool hasIntegratedCPP() const { return false; }
41138e317d6dce161b249508686cc67eb7176958762Chris Lattner
41238e317d6dce161b249508686cc67eb7176958762Chris Lattner    virtual void ConstructJob(Compilation &C, const JobAction &JA,
41338e317d6dce161b249508686cc67eb7176958762Chris Lattner                              const InputInfo &Output,
41438e317d6dce161b249508686cc67eb7176958762Chris Lattner                              const InputInfoList &Inputs,
41538e317d6dce161b249508686cc67eb7176958762Chris Lattner                              const ArgList &TCArgs,
41638e317d6dce161b249508686cc67eb7176958762Chris Lattner                              const char *LinkingOutput) const;
41738e317d6dce161b249508686cc67eb7176958762Chris Lattner  };
41838e317d6dce161b249508686cc67eb7176958762Chris Lattner  class LLVM_LIBRARY_VISIBILITY Link : public Tool  {
41938e317d6dce161b249508686cc67eb7176958762Chris Lattner  public:
42038e317d6dce161b249508686cc67eb7176958762Chris Lattner    Link(const ToolChain &TC) : Tool("minix::Link", "linker", TC) {}
42138e317d6dce161b249508686cc67eb7176958762Chris Lattner
42238e317d6dce161b249508686cc67eb7176958762Chris Lattner    virtual bool hasIntegratedCPP() const { return false; }
42338e317d6dce161b249508686cc67eb7176958762Chris Lattner
42438e317d6dce161b249508686cc67eb7176958762Chris Lattner    virtual void ConstructJob(Compilation &C, const JobAction &JA,
42538e317d6dce161b249508686cc67eb7176958762Chris Lattner                              const InputInfo &Output,
42638e317d6dce161b249508686cc67eb7176958762Chris Lattner                              const InputInfoList &Inputs,
42738e317d6dce161b249508686cc67eb7176958762Chris Lattner                              const ArgList &TCArgs,
42838e317d6dce161b249508686cc67eb7176958762Chris Lattner                              const char *LinkingOutput) const;
42938e317d6dce161b249508686cc67eb7176958762Chris Lattner  };
43038e317d6dce161b249508686cc67eb7176958762Chris Lattner} // end namespace minix
43138e317d6dce161b249508686cc67eb7176958762Chris Lattner
432e7925a075f110ab21afeae084670a155dea568e3Edward O'Callaghan  /// auroraux -- Directly call GNU Binutils assembler and linker
433e7925a075f110ab21afeae084670a155dea568e3Edward O'Callaghannamespace auroraux {
43492dd1915842410005c68d32c43bb3b3cf5a4a702Duncan Sands  class LLVM_LIBRARY_VISIBILITY Assemble : public Tool  {
435e7925a075f110ab21afeae084670a155dea568e3Edward O'Callaghan  public:
4363038204fd8f6ff22082dd18e4b12ed252b75a5e4Daniel Dunbar    Assemble(const ToolChain &TC) : Tool("auroraux::Assemble", "assembler",
4373038204fd8f6ff22082dd18e4b12ed252b75a5e4Daniel Dunbar                                         TC) {}
438e7925a075f110ab21afeae084670a155dea568e3Edward O'Callaghan
439e7925a075f110ab21afeae084670a155dea568e3Edward O'Callaghan    virtual bool hasIntegratedCPP() const { return false; }
440e7925a075f110ab21afeae084670a155dea568e3Edward O'Callaghan
441e7925a075f110ab21afeae084670a155dea568e3Edward O'Callaghan    virtual void ConstructJob(Compilation &C, const JobAction &JA,
4421eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump                              const InputInfo &Output,
4431eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump                              const InputInfoList &Inputs,
4441eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump                              const ArgList &TCArgs,
445e7925a075f110ab21afeae084670a155dea568e3Edward O'Callaghan                              const char *LinkingOutput) const;
446e7925a075f110ab21afeae084670a155dea568e3Edward O'Callaghan  };
44792dd1915842410005c68d32c43bb3b3cf5a4a702Duncan Sands  class LLVM_LIBRARY_VISIBILITY Link : public Tool  {
448e7925a075f110ab21afeae084670a155dea568e3Edward O'Callaghan  public:
4493038204fd8f6ff22082dd18e4b12ed252b75a5e4Daniel Dunbar    Link(const ToolChain &TC) : Tool("auroraux::Link", "linker", TC) {}
450e7925a075f110ab21afeae084670a155dea568e3Edward O'Callaghan
451e7925a075f110ab21afeae084670a155dea568e3Edward O'Callaghan    virtual bool hasIntegratedCPP() const { return false; }
452e7925a075f110ab21afeae084670a155dea568e3Edward O'Callaghan
453e7925a075f110ab21afeae084670a155dea568e3Edward O'Callaghan    virtual void ConstructJob(Compilation &C, const JobAction &JA,
4541eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump                              const InputInfo &Output,
4551eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump                              const InputInfoList &Inputs,
4561eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump                              const ArgList &TCArgs,
457e7925a075f110ab21afeae084670a155dea568e3Edward O'Callaghan                              const char *LinkingOutput) const;
458e7925a075f110ab21afeae084670a155dea568e3Edward O'Callaghan  };
459e7925a075f110ab21afeae084670a155dea568e3Edward O'Callaghan} // end namespace auroraux
46068a31d406c6dc4382c700d1199b062de2aa7e1daDaniel Dunbar
46111e1b40d759a643086f590f6ffbd9d68360bad46Daniel Dunbar  /// dragonfly -- Directly call GNU Binutils assembler and linker
46211e1b40d759a643086f590f6ffbd9d68360bad46Daniel Dunbarnamespace dragonfly {
46392dd1915842410005c68d32c43bb3b3cf5a4a702Duncan Sands  class LLVM_LIBRARY_VISIBILITY Assemble : public Tool  {
46411e1b40d759a643086f590f6ffbd9d68360bad46Daniel Dunbar  public:
4653038204fd8f6ff22082dd18e4b12ed252b75a5e4Daniel Dunbar    Assemble(const ToolChain &TC) : Tool("dragonfly::Assemble", "assembler",
4663038204fd8f6ff22082dd18e4b12ed252b75a5e4Daniel Dunbar                                         TC) {}
46711e1b40d759a643086f590f6ffbd9d68360bad46Daniel Dunbar
46811e1b40d759a643086f590f6ffbd9d68360bad46Daniel Dunbar    virtual bool hasIntegratedCPP() const { return false; }
46911e1b40d759a643086f590f6ffbd9d68360bad46Daniel Dunbar
47011e1b40d759a643086f590f6ffbd9d68360bad46Daniel Dunbar    virtual void ConstructJob(Compilation &C, const JobAction &JA,
4711eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump                              const InputInfo &Output,
4721eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump                              const InputInfoList &Inputs,
4731eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump                              const ArgList &TCArgs,
47411e1b40d759a643086f590f6ffbd9d68360bad46Daniel Dunbar                              const char *LinkingOutput) const;
47511e1b40d759a643086f590f6ffbd9d68360bad46Daniel Dunbar  };
47692dd1915842410005c68d32c43bb3b3cf5a4a702Duncan Sands  class LLVM_LIBRARY_VISIBILITY Link : public Tool  {
47711e1b40d759a643086f590f6ffbd9d68360bad46Daniel Dunbar  public:
4783038204fd8f6ff22082dd18e4b12ed252b75a5e4Daniel Dunbar    Link(const ToolChain &TC) : Tool("dragonfly::Link", "linker", TC) {}
47911e1b40d759a643086f590f6ffbd9d68360bad46Daniel Dunbar
48011e1b40d759a643086f590f6ffbd9d68360bad46Daniel Dunbar    virtual bool hasIntegratedCPP() const { return false; }
48111e1b40d759a643086f590f6ffbd9d68360bad46Daniel Dunbar
48211e1b40d759a643086f590f6ffbd9d68360bad46Daniel Dunbar    virtual void ConstructJob(Compilation &C, const JobAction &JA,
4831eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump                              const InputInfo &Output,
4841eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump                              const InputInfoList &Inputs,
4851eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump                              const ArgList &TCArgs,
48611e1b40d759a643086f590f6ffbd9d68360bad46Daniel Dunbar                              const char *LinkingOutput) const;
48711e1b40d759a643086f590f6ffbd9d68360bad46Daniel Dunbar  };
488e7925a075f110ab21afeae084670a155dea568e3Edward O'Callaghan} // end namespace dragonfly
48911e1b40d759a643086f590f6ffbd9d68360bad46Daniel Dunbar
490ff58e3610f4e12094def69eb2d6dcb4330378d8fMichael J. Spencer  /// Visual studio tools.
491ff58e3610f4e12094def69eb2d6dcb4330378d8fMichael J. Spencernamespace visualstudio {
492ff58e3610f4e12094def69eb2d6dcb4330378d8fMichael J. Spencer  class LLVM_LIBRARY_VISIBILITY Link : public Tool  {
493ff58e3610f4e12094def69eb2d6dcb4330378d8fMichael J. Spencer  public:
494ff58e3610f4e12094def69eb2d6dcb4330378d8fMichael J. Spencer    Link(const ToolChain &TC) : Tool("visualstudio::Link", "linker", TC) {}
495ff58e3610f4e12094def69eb2d6dcb4330378d8fMichael J. Spencer
496ff58e3610f4e12094def69eb2d6dcb4330378d8fMichael J. Spencer    virtual bool hasIntegratedCPP() const { return false; }
497ff58e3610f4e12094def69eb2d6dcb4330378d8fMichael J. Spencer
498ff58e3610f4e12094def69eb2d6dcb4330378d8fMichael J. Spencer    virtual void ConstructJob(Compilation &C, const JobAction &JA,
499ff58e3610f4e12094def69eb2d6dcb4330378d8fMichael J. Spencer                              const InputInfo &Output,
500ff58e3610f4e12094def69eb2d6dcb4330378d8fMichael J. Spencer                              const InputInfoList &Inputs,
501ff58e3610f4e12094def69eb2d6dcb4330378d8fMichael J. Spencer                              const ArgList &TCArgs,
502ff58e3610f4e12094def69eb2d6dcb4330378d8fMichael J. Spencer                              const char *LinkingOutput) const;
503ff58e3610f4e12094def69eb2d6dcb4330378d8fMichael J. Spencer  };
504ff58e3610f4e12094def69eb2d6dcb4330378d8fMichael J. Spencer} // end namespace visualstudio
505ff58e3610f4e12094def69eb2d6dcb4330378d8fMichael J. Spencer
5069c073ff462eb75ccbb1c4446e21c148f3fc618e1Daniel Dunbar} // end namespace toolchains
5079c073ff462eb75ccbb1c4446e21c148f3fc618e1Daniel Dunbar} // end namespace driver
5089c073ff462eb75ccbb1c4446e21c148f3fc618e1Daniel Dunbar} // end namespace clang
5099c073ff462eb75ccbb1c4446e21c148f3fc618e1Daniel Dunbar
510e7925a075f110ab21afeae084670a155dea568e3Edward O'Callaghan#endif // CLANG_LIB_DRIVER_TOOLS_H_
511