Tools.h revision 54db68bf0e389b8aabe1a434f825a81a9c1f7db8
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 {
3254db68bf0e389b8aabe1a434f825a81a9c1f7db8Peter Collingbourne    void AddPreprocessingOptions(Compilation &C,
3354db68bf0e389b8aabe1a434f825a81a9c1f7db8Peter Collingbourne                                 const Driver &D,
34df91ef3d6c55692a0236f67b6c6b134a3bf84098Douglas Gregor                                 const ArgList &Args,
35c21c485b4fb58ef5d55cf3e523263dd824a2ace4Daniel Dunbar                                 ArgStringList &CmdArgs,
36c21c485b4fb58ef5d55cf3e523263dd824a2ace4Daniel Dunbar                                 const InputInfo &Output,
37c21c485b4fb58ef5d55cf3e523263dd824a2ace4Daniel Dunbar                                 const InputInfoList &Inputs) const;
38c21c485b4fb58ef5d55cf3e523263dd824a2ace4Daniel Dunbar
39fa41d6975058ceb1b8a24564f6dcec72f89f62e8Daniel Dunbar    void AddARMTargetArgs(const ArgList &Args, ArgStringList &CmdArgs,
40fa41d6975058ceb1b8a24564f6dcec72f89f62e8Daniel Dunbar                          bool KernelOrKext) const;
41ed734737d5af31906e30e537d4a41c760ddcfc59Eric Christopher    void AddMIPSTargetArgs(const ArgList &Args, ArgStringList &CmdArgs) const;
429284d215022457ba867080a713f08f026d89ea17Bruno Cardoso Lopes    void AddSparcTargetArgs(const ArgList &Args, ArgStringList &CmdArgs) const;
436acda16e9c194dcbd0dea64341e182bdb65d0f41Daniel Dunbar    void AddX86TargetArgs(const ArgList &Args, ArgStringList &CmdArgs) const;
446acda16e9c194dcbd0dea64341e182bdb65d0f41Daniel Dunbar
459c073ff462eb75ccbb1c4446e21c148f3fc618e1Daniel Dunbar  public:
463038204fd8f6ff22082dd18e4b12ed252b75a5e4Daniel Dunbar    Clang(const ToolChain &TC) : Tool("clang", "clang frontend", TC) {}
479c073ff462eb75ccbb1c4446e21c148f3fc618e1Daniel Dunbar
4860a53f24b160724de0e8dd0e142009981540fd26Daniel Dunbar    virtual bool hasGoodDiagnostics() const { return true; }
498767cbc475ed96397b6f08617814eeb9cab121bdDaniel Dunbar    virtual bool hasIntegratedAssembler() const { return true; }
509c073ff462eb75ccbb1c4446e21c148f3fc618e1Daniel Dunbar    virtual bool hasIntegratedCPP() const { return true; }
5147ac7d27c44bd64a7d0fc03d4babc196cf2b8230Daniel Dunbar
5247ac7d27c44bd64a7d0fc03d4babc196cf2b8230Daniel Dunbar    virtual void ConstructJob(Compilation &C, const JobAction &JA,
5320a9aa50f9a7d4b03f97bc67e96da1d605c309a2Daniel Dunbar                              const InputInfo &Output,
5420a9aa50f9a7d4b03f97bc67e96da1d605c309a2Daniel Dunbar                              const InputInfoList &Inputs,
5520a9aa50f9a7d4b03f97bc67e96da1d605c309a2Daniel Dunbar                              const ArgList &TCArgs,
5620a9aa50f9a7d4b03f97bc67e96da1d605c309a2Daniel Dunbar                              const char *LinkingOutput) const;
5720a9aa50f9a7d4b03f97bc67e96da1d605c309a2Daniel Dunbar  };
5820a9aa50f9a7d4b03f97bc67e96da1d605c309a2Daniel Dunbar
5920a9aa50f9a7d4b03f97bc67e96da1d605c309a2Daniel Dunbar  /// \brief Clang integrated assembler tool.
6020a9aa50f9a7d4b03f97bc67e96da1d605c309a2Daniel Dunbar  class LLVM_LIBRARY_VISIBILITY ClangAs : public Tool {
6120a9aa50f9a7d4b03f97bc67e96da1d605c309a2Daniel Dunbar  public:
623038204fd8f6ff22082dd18e4b12ed252b75a5e4Daniel Dunbar    ClangAs(const ToolChain &TC) : Tool("clang::as",
633038204fd8f6ff22082dd18e4b12ed252b75a5e4Daniel Dunbar                                        "clang integrated assembler", TC) {}
6420a9aa50f9a7d4b03f97bc67e96da1d605c309a2Daniel Dunbar
6520a9aa50f9a7d4b03f97bc67e96da1d605c309a2Daniel Dunbar    virtual bool hasGoodDiagnostics() const { return true; }
6620a9aa50f9a7d4b03f97bc67e96da1d605c309a2Daniel Dunbar    virtual bool hasIntegratedAssembler() const { return false; }
6720a9aa50f9a7d4b03f97bc67e96da1d605c309a2Daniel Dunbar    virtual bool hasIntegratedCPP() const { return false; }
6820a9aa50f9a7d4b03f97bc67e96da1d605c309a2Daniel Dunbar
6920a9aa50f9a7d4b03f97bc67e96da1d605c309a2Daniel Dunbar    virtual void ConstructJob(Compilation &C, const JobAction &JA,
701eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump                              const InputInfo &Output,
711eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump                              const InputInfoList &Inputs,
721eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump                              const ArgList &TCArgs,
7347ac7d27c44bd64a7d0fc03d4babc196cf2b8230Daniel Dunbar                              const char *LinkingOutput) const;
749c073ff462eb75ccbb1c4446e21c148f3fc618e1Daniel Dunbar  };
759c073ff462eb75ccbb1c4446e21c148f3fc618e1Daniel Dunbar
7631b1e5437e7435879fc044afb77ff27096008e72Daniel Dunbar  /// gcc - Generic GCC tool implementations.
7731b1e5437e7435879fc044afb77ff27096008e72Daniel Dunbarnamespace gcc {
7892dd1915842410005c68d32c43bb3b3cf5a4a702Duncan Sands  class LLVM_LIBRARY_VISIBILITY Common : public Tool {
799c073ff462eb75ccbb1c4446e21c148f3fc618e1Daniel Dunbar  public:
803038204fd8f6ff22082dd18e4b12ed252b75a5e4Daniel Dunbar    Common(const char *Name, const char *ShortName,
813038204fd8f6ff22082dd18e4b12ed252b75a5e4Daniel Dunbar           const ToolChain &TC) : Tool(Name, ShortName, TC) {}
8247ac7d27c44bd64a7d0fc03d4babc196cf2b8230Daniel Dunbar
8347ac7d27c44bd64a7d0fc03d4babc196cf2b8230Daniel Dunbar    virtual void ConstructJob(Compilation &C, const JobAction &JA,
841eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump                              const InputInfo &Output,
851eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump                              const InputInfoList &Inputs,
861eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump                              const ArgList &TCArgs,
8747ac7d27c44bd64a7d0fc03d4babc196cf2b8230Daniel Dunbar                              const char *LinkingOutput) const;
88b488c1dac8e53206f07103d794a62a3f5012c0f4Daniel Dunbar
89b488c1dac8e53206f07103d794a62a3f5012c0f4Daniel Dunbar    /// RenderExtraToolArgs - Render any arguments necessary to force
90b488c1dac8e53206f07103d794a62a3f5012c0f4Daniel Dunbar    /// the particular tool mode.
9182b51cce8cea6b6bb6175c406c2ab425c91d9dc8Daniel Dunbar    virtual void RenderExtraToolArgs(const JobAction &JA,
9282b51cce8cea6b6bb6175c406c2ab425c91d9dc8Daniel Dunbar                                     ArgStringList &CmdArgs) const = 0;
939c073ff462eb75ccbb1c4446e21c148f3fc618e1Daniel Dunbar  };
949c073ff462eb75ccbb1c4446e21c148f3fc618e1Daniel Dunbar
951eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump
9692dd1915842410005c68d32c43bb3b3cf5a4a702Duncan Sands  class LLVM_LIBRARY_VISIBILITY Preprocess : public Common {
979c073ff462eb75ccbb1c4446e21c148f3fc618e1Daniel Dunbar  public:
983038204fd8f6ff22082dd18e4b12ed252b75a5e4Daniel Dunbar    Preprocess(const ToolChain &TC) : Common("gcc::Preprocess",
993038204fd8f6ff22082dd18e4b12ed252b75a5e4Daniel Dunbar                                             "gcc preprocessor", TC) {}
100b488c1dac8e53206f07103d794a62a3f5012c0f4Daniel Dunbar
10160a53f24b160724de0e8dd0e142009981540fd26Daniel Dunbar    virtual bool hasGoodDiagnostics() const { return true; }
102b488c1dac8e53206f07103d794a62a3f5012c0f4Daniel Dunbar    virtual bool hasIntegratedCPP() const { return false; }
103b488c1dac8e53206f07103d794a62a3f5012c0f4Daniel Dunbar
10482b51cce8cea6b6bb6175c406c2ab425c91d9dc8Daniel Dunbar    virtual void RenderExtraToolArgs(const JobAction &JA,
10582b51cce8cea6b6bb6175c406c2ab425c91d9dc8Daniel Dunbar                                     ArgStringList &CmdArgs) const;
106b488c1dac8e53206f07103d794a62a3f5012c0f4Daniel Dunbar  };
107b488c1dac8e53206f07103d794a62a3f5012c0f4Daniel Dunbar
10892dd1915842410005c68d32c43bb3b3cf5a4a702Duncan Sands  class LLVM_LIBRARY_VISIBILITY Precompile : public Common  {
109b488c1dac8e53206f07103d794a62a3f5012c0f4Daniel Dunbar  public:
1103038204fd8f6ff22082dd18e4b12ed252b75a5e4Daniel Dunbar    Precompile(const ToolChain &TC) : Common("gcc::Precompile",
1113038204fd8f6ff22082dd18e4b12ed252b75a5e4Daniel Dunbar                                             "gcc precompile", TC) {}
1129c073ff462eb75ccbb1c4446e21c148f3fc618e1Daniel Dunbar
11360a53f24b160724de0e8dd0e142009981540fd26Daniel Dunbar    virtual bool hasGoodDiagnostics() const { return true; }
1149c073ff462eb75ccbb1c4446e21c148f3fc618e1Daniel Dunbar    virtual bool hasIntegratedCPP() const { return true; }
11547ac7d27c44bd64a7d0fc03d4babc196cf2b8230Daniel Dunbar
11682b51cce8cea6b6bb6175c406c2ab425c91d9dc8Daniel Dunbar    virtual void RenderExtraToolArgs(const JobAction &JA,
11782b51cce8cea6b6bb6175c406c2ab425c91d9dc8Daniel Dunbar                                     ArgStringList &CmdArgs) const;
1189c073ff462eb75ccbb1c4446e21c148f3fc618e1Daniel Dunbar  };
1199c073ff462eb75ccbb1c4446e21c148f3fc618e1Daniel Dunbar
12092dd1915842410005c68d32c43bb3b3cf5a4a702Duncan Sands  class LLVM_LIBRARY_VISIBILITY Compile : public Common  {
1219c073ff462eb75ccbb1c4446e21c148f3fc618e1Daniel Dunbar  public:
1223038204fd8f6ff22082dd18e4b12ed252b75a5e4Daniel Dunbar    Compile(const ToolChain &TC) : Common("gcc::Compile",
1233038204fd8f6ff22082dd18e4b12ed252b75a5e4Daniel Dunbar                                          "gcc frontend", TC) {}
1249c073ff462eb75ccbb1c4446e21c148f3fc618e1Daniel Dunbar
12560a53f24b160724de0e8dd0e142009981540fd26Daniel Dunbar    virtual bool hasGoodDiagnostics() const { return true; }
1269c073ff462eb75ccbb1c4446e21c148f3fc618e1Daniel Dunbar    virtual bool hasIntegratedCPP() const { return true; }
12747ac7d27c44bd64a7d0fc03d4babc196cf2b8230Daniel Dunbar
12882b51cce8cea6b6bb6175c406c2ab425c91d9dc8Daniel Dunbar    virtual void RenderExtraToolArgs(const JobAction &JA,
12982b51cce8cea6b6bb6175c406c2ab425c91d9dc8Daniel Dunbar                                     ArgStringList &CmdArgs) const;
1309c073ff462eb75ccbb1c4446e21c148f3fc618e1Daniel Dunbar  };
1319c073ff462eb75ccbb1c4446e21c148f3fc618e1Daniel Dunbar
13292dd1915842410005c68d32c43bb3b3cf5a4a702Duncan Sands  class LLVM_LIBRARY_VISIBILITY Assemble : public Common  {
1339c073ff462eb75ccbb1c4446e21c148f3fc618e1Daniel Dunbar  public:
1343038204fd8f6ff22082dd18e4b12ed252b75a5e4Daniel Dunbar    Assemble(const ToolChain &TC) : Common("gcc::Assemble",
1353038204fd8f6ff22082dd18e4b12ed252b75a5e4Daniel Dunbar                                           "assembler (via gcc)", TC) {}
1369c073ff462eb75ccbb1c4446e21c148f3fc618e1Daniel Dunbar
1379c073ff462eb75ccbb1c4446e21c148f3fc618e1Daniel Dunbar    virtual bool hasIntegratedCPP() const { return false; }
13847ac7d27c44bd64a7d0fc03d4babc196cf2b8230Daniel Dunbar
13982b51cce8cea6b6bb6175c406c2ab425c91d9dc8Daniel Dunbar    virtual void RenderExtraToolArgs(const JobAction &JA,
14082b51cce8cea6b6bb6175c406c2ab425c91d9dc8Daniel Dunbar                                     ArgStringList &CmdArgs) const;
1419c073ff462eb75ccbb1c4446e21c148f3fc618e1Daniel Dunbar  };
1429c073ff462eb75ccbb1c4446e21c148f3fc618e1Daniel Dunbar
14392dd1915842410005c68d32c43bb3b3cf5a4a702Duncan Sands  class LLVM_LIBRARY_VISIBILITY Link : public Common  {
1449c073ff462eb75ccbb1c4446e21c148f3fc618e1Daniel Dunbar  public:
1453038204fd8f6ff22082dd18e4b12ed252b75a5e4Daniel Dunbar    Link(const ToolChain &TC) : Common("gcc::Link",
1463038204fd8f6ff22082dd18e4b12ed252b75a5e4Daniel Dunbar                                       "linker (via gcc)", TC) {}
1479c073ff462eb75ccbb1c4446e21c148f3fc618e1Daniel Dunbar
1489c073ff462eb75ccbb1c4446e21c148f3fc618e1Daniel Dunbar    virtual bool hasIntegratedCPP() const { return false; }
14947ac7d27c44bd64a7d0fc03d4babc196cf2b8230Daniel Dunbar
15082b51cce8cea6b6bb6175c406c2ab425c91d9dc8Daniel Dunbar    virtual void RenderExtraToolArgs(const JobAction &JA,
15182b51cce8cea6b6bb6175c406c2ab425c91d9dc8Daniel Dunbar                                     ArgStringList &CmdArgs) const;
1529c073ff462eb75ccbb1c4446e21c148f3fc618e1Daniel Dunbar  };
15331b1e5437e7435879fc044afb77ff27096008e72Daniel Dunbar} // end namespace gcc
1549c073ff462eb75ccbb1c4446e21c148f3fc618e1Daniel Dunbar
155ff7488dc9a766f94daf54d81b03ab9160d0bfd88Daniel Dunbarnamespace darwin {
15692dd1915842410005c68d32c43bb3b3cf5a4a702Duncan Sands  class LLVM_LIBRARY_VISIBILITY DarwinTool : public Tool {
157fbefe6bd6f62a3361813498dc672ab0d6c0d4fd1Daniel Dunbar  protected:
158fbefe6bd6f62a3361813498dc672ab0d6c0d4fd1Daniel Dunbar    void AddDarwinArch(const ArgList &Args, ArgStringList &CmdArgs) const;
159fbefe6bd6f62a3361813498dc672ab0d6c0d4fd1Daniel Dunbar
160fbefe6bd6f62a3361813498dc672ab0d6c0d4fd1Daniel Dunbar    const toolchains::Darwin &getDarwinToolChain() const {
161fbefe6bd6f62a3361813498dc672ab0d6c0d4fd1Daniel Dunbar      return reinterpret_cast<const toolchains::Darwin&>(getToolChain());
162fbefe6bd6f62a3361813498dc672ab0d6c0d4fd1Daniel Dunbar    }
163fbefe6bd6f62a3361813498dc672ab0d6c0d4fd1Daniel Dunbar
164fbefe6bd6f62a3361813498dc672ab0d6c0d4fd1Daniel Dunbar  public:
1653038204fd8f6ff22082dd18e4b12ed252b75a5e4Daniel Dunbar    DarwinTool(const char *Name, const char *ShortName,
1663038204fd8f6ff22082dd18e4b12ed252b75a5e4Daniel Dunbar               const ToolChain &TC) : Tool(Name, ShortName, TC) {}
167fbefe6bd6f62a3361813498dc672ab0d6c0d4fd1Daniel Dunbar  };
168fbefe6bd6f62a3361813498dc672ab0d6c0d4fd1Daniel Dunbar
16992dd1915842410005c68d32c43bb3b3cf5a4a702Duncan Sands  class LLVM_LIBRARY_VISIBILITY CC1 : public DarwinTool  {
170a5a7bd0de7b6b80212095195a055a4a43f21d4b2Daniel Dunbar  public:
1711eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump    static const char *getBaseInputName(const ArgList &Args,
172a5a7bd0de7b6b80212095195a055a4a43f21d4b2Daniel Dunbar                                 const InputInfoList &Input);
1731eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump    static const char *getBaseInputStem(const ArgList &Args,
174a5a7bd0de7b6b80212095195a055a4a43f21d4b2Daniel Dunbar                                 const InputInfoList &Input);
1751eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump    static const char *getDependencyFileName(const ArgList &Args,
176a5a7bd0de7b6b80212095195a055a4a43f21d4b2Daniel Dunbar                                             const InputInfoList &Inputs);
177a5a7bd0de7b6b80212095195a055a4a43f21d4b2Daniel Dunbar
17840f1265ebd42ece3e7f7917319b56012e8e2bce2Daniel Dunbar  protected:
17940f1265ebd42ece3e7f7917319b56012e8e2bce2Daniel Dunbar    const char *getCC1Name(types::ID Type) const;
180a3ec60e0cf2a1916f479288998d31bd980b1a306Daniel Dunbar
181a3ec60e0cf2a1916f479288998d31bd980b1a306Daniel Dunbar    void AddCC1Args(const ArgList &Args, ArgStringList &CmdArgs) const;
182285f9a284704c07cd50e4597408d5f93518cd7c3Chad Rosier    void RemoveCC1UnsupportedArgs(ArgStringList &CmdArgs) const;
18340f1265ebd42ece3e7f7917319b56012e8e2bce2Daniel Dunbar    void AddCC1OptionsArgs(const ArgList &Args, ArgStringList &CmdArgs,
18440f1265ebd42ece3e7f7917319b56012e8e2bce2Daniel Dunbar                           const InputInfoList &Inputs,
185a3ec60e0cf2a1916f479288998d31bd980b1a306Daniel Dunbar                           const ArgStringList &OutputArgs) const;
18640f1265ebd42ece3e7f7917319b56012e8e2bce2Daniel Dunbar    void AddCPPOptionsArgs(const ArgList &Args, ArgStringList &CmdArgs,
18740f1265ebd42ece3e7f7917319b56012e8e2bce2Daniel Dunbar                           const InputInfoList &Inputs,
188a3ec60e0cf2a1916f479288998d31bd980b1a306Daniel Dunbar                           const ArgStringList &OutputArgs) const;
1891eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump    void AddCPPUniqueOptionsArgs(const ArgList &Args,
190a3ec60e0cf2a1916f479288998d31bd980b1a306Daniel Dunbar                                 ArgStringList &CmdArgs,
191a3ec60e0cf2a1916f479288998d31bd980b1a306Daniel Dunbar                                 const InputInfoList &Inputs) const;
192a3ec60e0cf2a1916f479288998d31bd980b1a306Daniel Dunbar    void AddCPPArgs(const ArgList &Args, ArgStringList &CmdArgs) const;
19340f1265ebd42ece3e7f7917319b56012e8e2bce2Daniel Dunbar
19440f1265ebd42ece3e7f7917319b56012e8e2bce2Daniel Dunbar  public:
1953038204fd8f6ff22082dd18e4b12ed252b75a5e4Daniel Dunbar    CC1(const char *Name, const char *ShortName,
1963038204fd8f6ff22082dd18e4b12ed252b75a5e4Daniel Dunbar        const ToolChain &TC) : DarwinTool(Name, ShortName, TC) {}
19740f1265ebd42ece3e7f7917319b56012e8e2bce2Daniel Dunbar
19860a53f24b160724de0e8dd0e142009981540fd26Daniel Dunbar    virtual bool hasGoodDiagnostics() const { return true; }
19940f1265ebd42ece3e7f7917319b56012e8e2bce2Daniel Dunbar    virtual bool hasIntegratedCPP() const { return true; }
20040f1265ebd42ece3e7f7917319b56012e8e2bce2Daniel Dunbar  };
20140f1265ebd42ece3e7f7917319b56012e8e2bce2Daniel Dunbar
20292dd1915842410005c68d32c43bb3b3cf5a4a702Duncan Sands  class LLVM_LIBRARY_VISIBILITY Preprocess : public CC1  {
20340f1265ebd42ece3e7f7917319b56012e8e2bce2Daniel Dunbar  public:
2043038204fd8f6ff22082dd18e4b12ed252b75a5e4Daniel Dunbar    Preprocess(const ToolChain &TC) : CC1("darwin::Preprocess",
2053038204fd8f6ff22082dd18e4b12ed252b75a5e4Daniel Dunbar                                          "gcc preprocessor", TC) {}
20640f1265ebd42ece3e7f7917319b56012e8e2bce2Daniel Dunbar
20740f1265ebd42ece3e7f7917319b56012e8e2bce2Daniel Dunbar    virtual void ConstructJob(Compilation &C, const JobAction &JA,
2081eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump                              const InputInfo &Output,
2091eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump                              const InputInfoList &Inputs,
2101eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump                              const ArgList &TCArgs,
21140f1265ebd42ece3e7f7917319b56012e8e2bce2Daniel Dunbar                              const char *LinkingOutput) const;
21240f1265ebd42ece3e7f7917319b56012e8e2bce2Daniel Dunbar  };
21340f1265ebd42ece3e7f7917319b56012e8e2bce2Daniel Dunbar
21492dd1915842410005c68d32c43bb3b3cf5a4a702Duncan Sands  class LLVM_LIBRARY_VISIBILITY Compile : public CC1  {
21540f1265ebd42ece3e7f7917319b56012e8e2bce2Daniel Dunbar  public:
2163038204fd8f6ff22082dd18e4b12ed252b75a5e4Daniel Dunbar    Compile(const ToolChain &TC) : CC1("darwin::Compile", "gcc frontend", TC) {}
21740f1265ebd42ece3e7f7917319b56012e8e2bce2Daniel Dunbar
21840f1265ebd42ece3e7f7917319b56012e8e2bce2Daniel Dunbar    virtual void ConstructJob(Compilation &C, const JobAction &JA,
2191eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump                              const InputInfo &Output,
2201eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump                              const InputInfoList &Inputs,
2211eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump                              const ArgList &TCArgs,
22240f1265ebd42ece3e7f7917319b56012e8e2bce2Daniel Dunbar                              const char *LinkingOutput) const;
22340f1265ebd42ece3e7f7917319b56012e8e2bce2Daniel Dunbar  };
22440f1265ebd42ece3e7f7917319b56012e8e2bce2Daniel Dunbar
22592dd1915842410005c68d32c43bb3b3cf5a4a702Duncan Sands  class LLVM_LIBRARY_VISIBILITY Assemble : public DarwinTool  {
2268cac5f7e1ce63dd77ee0fb4ef68f9fa804f41ea6Daniel Dunbar  public:
2273038204fd8f6ff22082dd18e4b12ed252b75a5e4Daniel Dunbar    Assemble(const ToolChain &TC) : DarwinTool("darwin::Assemble",
2283038204fd8f6ff22082dd18e4b12ed252b75a5e4Daniel Dunbar                                               "assembler", TC) {}
2298cac5f7e1ce63dd77ee0fb4ef68f9fa804f41ea6Daniel Dunbar
2308cac5f7e1ce63dd77ee0fb4ef68f9fa804f41ea6Daniel Dunbar    virtual bool hasIntegratedCPP() const { return false; }
2318cac5f7e1ce63dd77ee0fb4ef68f9fa804f41ea6Daniel Dunbar
2328cac5f7e1ce63dd77ee0fb4ef68f9fa804f41ea6Daniel Dunbar    virtual void ConstructJob(Compilation &C, const JobAction &JA,
2331eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump                              const InputInfo &Output,
2341eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump                              const InputInfoList &Inputs,
2351eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump                              const ArgList &TCArgs,
23602633b541b04ad5ffc1c70f4c2feeeb13e607057Daniel Dunbar                              const char *LinkingOutput) const;
23702633b541b04ad5ffc1c70f4c2feeeb13e607057Daniel Dunbar  };
23802633b541b04ad5ffc1c70f4c2feeeb13e607057Daniel Dunbar
23992dd1915842410005c68d32c43bb3b3cf5a4a702Duncan Sands  class LLVM_LIBRARY_VISIBILITY Link : public DarwinTool  {
240748de8eda222f087434d8bd703176b316a061341Daniel Dunbar    void AddLinkArgs(Compilation &C, const ArgList &Args,
241748de8eda222f087434d8bd703176b316a061341Daniel Dunbar                     ArgStringList &CmdArgs) const;
24202633b541b04ad5ffc1c70f4c2feeeb13e607057Daniel Dunbar
24302633b541b04ad5ffc1c70f4c2feeeb13e607057Daniel Dunbar  public:
2443038204fd8f6ff22082dd18e4b12ed252b75a5e4Daniel Dunbar    Link(const ToolChain &TC) : DarwinTool("darwin::Link", "linker", TC) {}
24502633b541b04ad5ffc1c70f4c2feeeb13e607057Daniel Dunbar
24602633b541b04ad5ffc1c70f4c2feeeb13e607057Daniel Dunbar    virtual bool hasIntegratedCPP() const { return false; }
24702633b541b04ad5ffc1c70f4c2feeeb13e607057Daniel Dunbar
24802633b541b04ad5ffc1c70f4c2feeeb13e607057Daniel Dunbar    virtual void ConstructJob(Compilation &C, const JobAction &JA,
2491eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump                              const InputInfo &Output,
2501eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump                              const InputInfoList &Inputs,
2511eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump                              const ArgList &TCArgs,
2528cac5f7e1ce63dd77ee0fb4ef68f9fa804f41ea6Daniel Dunbar                              const char *LinkingOutput) const;
2538cac5f7e1ce63dd77ee0fb4ef68f9fa804f41ea6Daniel Dunbar  };
2548cac5f7e1ce63dd77ee0fb4ef68f9fa804f41ea6Daniel Dunbar
25592dd1915842410005c68d32c43bb3b3cf5a4a702Duncan Sands  class LLVM_LIBRARY_VISIBILITY Lipo : public DarwinTool  {
256ff7488dc9a766f94daf54d81b03ab9160d0bfd88Daniel Dunbar  public:
2573038204fd8f6ff22082dd18e4b12ed252b75a5e4Daniel Dunbar    Lipo(const ToolChain &TC) : DarwinTool("darwin::Lipo", "lipo", TC) {}
258ff7488dc9a766f94daf54d81b03ab9160d0bfd88Daniel Dunbar
259ff7488dc9a766f94daf54d81b03ab9160d0bfd88Daniel Dunbar    virtual bool hasIntegratedCPP() const { return false; }
260ff7488dc9a766f94daf54d81b03ab9160d0bfd88Daniel Dunbar
261ff7488dc9a766f94daf54d81b03ab9160d0bfd88Daniel Dunbar    virtual void ConstructJob(Compilation &C, const JobAction &JA,
2621eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump                              const InputInfo &Output,
2631eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump                              const InputInfoList &Inputs,
2641eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump                              const ArgList &TCArgs,
2656e0f25483b1a801cd1155ea89c2b725feab16332Daniel Dunbar                              const char *LinkingOutput) const;
2666e0f25483b1a801cd1155ea89c2b725feab16332Daniel Dunbar  };
2676e0f25483b1a801cd1155ea89c2b725feab16332Daniel Dunbar
2686e0f25483b1a801cd1155ea89c2b725feab16332Daniel Dunbar  class LLVM_LIBRARY_VISIBILITY Dsymutil : public DarwinTool  {
2696e0f25483b1a801cd1155ea89c2b725feab16332Daniel Dunbar  public:
2706e0f25483b1a801cd1155ea89c2b725feab16332Daniel Dunbar    Dsymutil(const ToolChain &TC) : DarwinTool("darwin::Dsymutil",
2716e0f25483b1a801cd1155ea89c2b725feab16332Daniel Dunbar                                               "dsymutil", TC) {}
2726e0f25483b1a801cd1155ea89c2b725feab16332Daniel Dunbar
2736e0f25483b1a801cd1155ea89c2b725feab16332Daniel Dunbar    virtual bool hasIntegratedCPP() const { return false; }
2746e0f25483b1a801cd1155ea89c2b725feab16332Daniel Dunbar
2756e0f25483b1a801cd1155ea89c2b725feab16332Daniel Dunbar    virtual void ConstructJob(Compilation &C, const JobAction &JA,
2766e0f25483b1a801cd1155ea89c2b725feab16332Daniel Dunbar                              const InputInfo &Output,
2776e0f25483b1a801cd1155ea89c2b725feab16332Daniel Dunbar                              const InputInfoList &Inputs,
2786e0f25483b1a801cd1155ea89c2b725feab16332Daniel Dunbar                              const ArgList &TCArgs,
279f7b8eec37c8c8012fa525c71fb29a58c9f29beefDaniel Dunbar                              const char *LinkingOutput) const;
280f7b8eec37c8c8012fa525c71fb29a58c9f29beefDaniel Dunbar  };
281f857186fd1995b34185d063a29b11ad4f948519fEric Christopher
282f857186fd1995b34185d063a29b11ad4f948519fEric Christopher  class LLVM_LIBRARY_VISIBILITY VerifyDebug : public DarwinTool  {
283f857186fd1995b34185d063a29b11ad4f948519fEric Christopher  public:
284f857186fd1995b34185d063a29b11ad4f948519fEric Christopher    VerifyDebug(const ToolChain &TC) : DarwinTool("darwin::VerifyDebug",
285f857186fd1995b34185d063a29b11ad4f948519fEric Christopher						  "dwarfdump", TC) {}
286f857186fd1995b34185d063a29b11ad4f948519fEric Christopher
287f857186fd1995b34185d063a29b11ad4f948519fEric Christopher    virtual bool hasIntegratedCPP() const { return false; }
288f857186fd1995b34185d063a29b11ad4f948519fEric Christopher
289f857186fd1995b34185d063a29b11ad4f948519fEric Christopher    virtual void ConstructJob(Compilation &C, const JobAction &JA,
290f857186fd1995b34185d063a29b11ad4f948519fEric Christopher			      const InputInfo &Output,
291f857186fd1995b34185d063a29b11ad4f948519fEric Christopher			      const InputInfoList &Inputs,
292f857186fd1995b34185d063a29b11ad4f948519fEric Christopher			      const ArgList &TCArgs,
293f857186fd1995b34185d063a29b11ad4f948519fEric Christopher			      const char *LinkingOutput) const;
294f857186fd1995b34185d063a29b11ad4f948519fEric Christopher  };
295f857186fd1995b34185d063a29b11ad4f948519fEric Christopher
296f7b8eec37c8c8012fa525c71fb29a58c9f29beefDaniel Dunbar}
297f7b8eec37c8c8012fa525c71fb29a58c9f29beefDaniel Dunbar
298f7b8eec37c8c8012fa525c71fb29a58c9f29beefDaniel Dunbar  /// openbsd -- Directly call GNU Binutils assembler and linker
299f7b8eec37c8c8012fa525c71fb29a58c9f29beefDaniel Dunbarnamespace openbsd {
30092dd1915842410005c68d32c43bb3b3cf5a4a702Duncan Sands  class LLVM_LIBRARY_VISIBILITY Assemble : public Tool  {
301f7b8eec37c8c8012fa525c71fb29a58c9f29beefDaniel Dunbar  public:
3023038204fd8f6ff22082dd18e4b12ed252b75a5e4Daniel Dunbar    Assemble(const ToolChain &TC) : Tool("openbsd::Assemble", "assembler",
3033038204fd8f6ff22082dd18e4b12ed252b75a5e4Daniel Dunbar                                         TC) {}
304f7b8eec37c8c8012fa525c71fb29a58c9f29beefDaniel Dunbar
305f7b8eec37c8c8012fa525c71fb29a58c9f29beefDaniel Dunbar    virtual bool hasIntegratedCPP() const { return false; }
306f7b8eec37c8c8012fa525c71fb29a58c9f29beefDaniel Dunbar
307f7b8eec37c8c8012fa525c71fb29a58c9f29beefDaniel Dunbar    virtual void ConstructJob(Compilation &C, const JobAction &JA,
3081eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump                              const InputInfo &Output,
3091eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump                              const InputInfoList &Inputs,
3101eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump                              const ArgList &TCArgs,
311f7b8eec37c8c8012fa525c71fb29a58c9f29beefDaniel Dunbar                              const char *LinkingOutput) const;
312f7b8eec37c8c8012fa525c71fb29a58c9f29beefDaniel Dunbar  };
31392dd1915842410005c68d32c43bb3b3cf5a4a702Duncan Sands  class LLVM_LIBRARY_VISIBILITY Link : public Tool  {
314f7b8eec37c8c8012fa525c71fb29a58c9f29beefDaniel Dunbar  public:
3153038204fd8f6ff22082dd18e4b12ed252b75a5e4Daniel Dunbar    Link(const ToolChain &TC) : Tool("openbsd::Link", "linker", TC) {}
316f7b8eec37c8c8012fa525c71fb29a58c9f29beefDaniel Dunbar
317f7b8eec37c8c8012fa525c71fb29a58c9f29beefDaniel Dunbar    virtual bool hasIntegratedCPP() const { return false; }
318f7b8eec37c8c8012fa525c71fb29a58c9f29beefDaniel Dunbar
319f7b8eec37c8c8012fa525c71fb29a58c9f29beefDaniel Dunbar    virtual void ConstructJob(Compilation &C, const JobAction &JA,
3201eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump                              const InputInfo &Output,
3211eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump                              const InputInfoList &Inputs,
3221eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump                              const ArgList &TCArgs,
323ff7488dc9a766f94daf54d81b03ab9160d0bfd88Daniel Dunbar                              const char *LinkingOutput) const;
324ff7488dc9a766f94daf54d81b03ab9160d0bfd88Daniel Dunbar  };
325e7925a075f110ab21afeae084670a155dea568e3Edward O'Callaghan} // end namespace openbsd
326ff7488dc9a766f94daf54d81b03ab9160d0bfd88Daniel Dunbar
32768a31d406c6dc4382c700d1199b062de2aa7e1daDaniel Dunbar  /// freebsd -- Directly call GNU Binutils assembler and linker
32868a31d406c6dc4382c700d1199b062de2aa7e1daDaniel Dunbarnamespace freebsd {
32992dd1915842410005c68d32c43bb3b3cf5a4a702Duncan Sands  class LLVM_LIBRARY_VISIBILITY Assemble : public Tool  {
33068a31d406c6dc4382c700d1199b062de2aa7e1daDaniel Dunbar  public:
3313038204fd8f6ff22082dd18e4b12ed252b75a5e4Daniel Dunbar    Assemble(const ToolChain &TC) : Tool("freebsd::Assemble", "assembler",
3323038204fd8f6ff22082dd18e4b12ed252b75a5e4Daniel Dunbar                                         TC) {}
33368a31d406c6dc4382c700d1199b062de2aa7e1daDaniel Dunbar
33468a31d406c6dc4382c700d1199b062de2aa7e1daDaniel Dunbar    virtual bool hasIntegratedCPP() const { return false; }
33568a31d406c6dc4382c700d1199b062de2aa7e1daDaniel Dunbar
33668a31d406c6dc4382c700d1199b062de2aa7e1daDaniel Dunbar    virtual void ConstructJob(Compilation &C, const JobAction &JA,
3371eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump                              const InputInfo &Output,
3381eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump                              const InputInfoList &Inputs,
3391eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump                              const ArgList &TCArgs,
34068a31d406c6dc4382c700d1199b062de2aa7e1daDaniel Dunbar                              const char *LinkingOutput) const;
34168a31d406c6dc4382c700d1199b062de2aa7e1daDaniel Dunbar  };
34292dd1915842410005c68d32c43bb3b3cf5a4a702Duncan Sands  class LLVM_LIBRARY_VISIBILITY Link : public Tool  {
343008f54a54299eaafdaa940e2bdeaf55935ecd95aDaniel Dunbar  public:
3443038204fd8f6ff22082dd18e4b12ed252b75a5e4Daniel Dunbar    Link(const ToolChain &TC) : Tool("freebsd::Link", "linker", TC) {}
345008f54a54299eaafdaa940e2bdeaf55935ecd95aDaniel Dunbar
346008f54a54299eaafdaa940e2bdeaf55935ecd95aDaniel Dunbar    virtual bool hasIntegratedCPP() const { return false; }
347008f54a54299eaafdaa940e2bdeaf55935ecd95aDaniel Dunbar
348008f54a54299eaafdaa940e2bdeaf55935ecd95aDaniel Dunbar    virtual void ConstructJob(Compilation &C, const JobAction &JA,
3491eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump                              const InputInfo &Output,
3501eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump                              const InputInfoList &Inputs,
3511eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump                              const ArgList &TCArgs,
352008f54a54299eaafdaa940e2bdeaf55935ecd95aDaniel Dunbar                              const char *LinkingOutput) const;
353008f54a54299eaafdaa940e2bdeaf55935ecd95aDaniel Dunbar  };
354e7925a075f110ab21afeae084670a155dea568e3Edward O'Callaghan} // end namespace freebsd
355e7925a075f110ab21afeae084670a155dea568e3Edward O'Callaghan
3568e50a96b387dca7525caa8a6add31420dd82a2cdBenjamin Kramer  /// netbsd -- Directly call GNU Binutils assembler and linker
3578e50a96b387dca7525caa8a6add31420dd82a2cdBenjamin Kramernamespace netbsd {
3588e50a96b387dca7525caa8a6add31420dd82a2cdBenjamin Kramer  class LLVM_LIBRARY_VISIBILITY Assemble : public Tool  {
359182564cd14a2105fff05fd52f5940eff96161d57Joerg Sonnenberger  private:
360182564cd14a2105fff05fd52f5940eff96161d57Joerg Sonnenberger    const llvm::Triple ToolTriple;
361182564cd14a2105fff05fd52f5940eff96161d57Joerg Sonnenberger
3628e50a96b387dca7525caa8a6add31420dd82a2cdBenjamin Kramer  public:
363182564cd14a2105fff05fd52f5940eff96161d57Joerg Sonnenberger    Assemble(const ToolChain &TC, const llvm::Triple &ToolTriple)
364182564cd14a2105fff05fd52f5940eff96161d57Joerg Sonnenberger      : Tool("netbsd::Assemble", "assembler", TC), ToolTriple(ToolTriple) {}
3658e50a96b387dca7525caa8a6add31420dd82a2cdBenjamin Kramer
3668e50a96b387dca7525caa8a6add31420dd82a2cdBenjamin Kramer    virtual bool hasIntegratedCPP() const { return false; }
3678e50a96b387dca7525caa8a6add31420dd82a2cdBenjamin Kramer
3688e50a96b387dca7525caa8a6add31420dd82a2cdBenjamin Kramer    virtual void ConstructJob(Compilation &C, const JobAction &JA,
3698e50a96b387dca7525caa8a6add31420dd82a2cdBenjamin Kramer                              const InputInfo &Output,
3708e50a96b387dca7525caa8a6add31420dd82a2cdBenjamin Kramer                              const InputInfoList &Inputs,
3718e50a96b387dca7525caa8a6add31420dd82a2cdBenjamin Kramer                              const ArgList &TCArgs,
3728e50a96b387dca7525caa8a6add31420dd82a2cdBenjamin Kramer                              const char *LinkingOutput) const;
3738e50a96b387dca7525caa8a6add31420dd82a2cdBenjamin Kramer  };
3748e50a96b387dca7525caa8a6add31420dd82a2cdBenjamin Kramer  class LLVM_LIBRARY_VISIBILITY Link : public Tool  {
375182564cd14a2105fff05fd52f5940eff96161d57Joerg Sonnenberger  private:
376182564cd14a2105fff05fd52f5940eff96161d57Joerg Sonnenberger    const llvm::Triple ToolTriple;
377182564cd14a2105fff05fd52f5940eff96161d57Joerg Sonnenberger
3788e50a96b387dca7525caa8a6add31420dd82a2cdBenjamin Kramer  public:
379182564cd14a2105fff05fd52f5940eff96161d57Joerg Sonnenberger    Link(const ToolChain &TC, const llvm::Triple &ToolTriple)
380468eb7ddd69b5d545139fc46a3b730268c458f38Joerg Sonnenberger      : Tool("netbsd::Link", "linker", TC), ToolTriple(ToolTriple) {}
3818e50a96b387dca7525caa8a6add31420dd82a2cdBenjamin Kramer
3828e50a96b387dca7525caa8a6add31420dd82a2cdBenjamin Kramer    virtual bool hasIntegratedCPP() const { return false; }
3838e50a96b387dca7525caa8a6add31420dd82a2cdBenjamin Kramer
3848e50a96b387dca7525caa8a6add31420dd82a2cdBenjamin Kramer    virtual void ConstructJob(Compilation &C, const JobAction &JA,
3858e50a96b387dca7525caa8a6add31420dd82a2cdBenjamin Kramer                              const InputInfo &Output,
3868e50a96b387dca7525caa8a6add31420dd82a2cdBenjamin Kramer                              const InputInfoList &Inputs,
3878e50a96b387dca7525caa8a6add31420dd82a2cdBenjamin Kramer                              const ArgList &TCArgs,
3888e50a96b387dca7525caa8a6add31420dd82a2cdBenjamin Kramer                              const char *LinkingOutput) const;
3898e50a96b387dca7525caa8a6add31420dd82a2cdBenjamin Kramer  };
3908e50a96b387dca7525caa8a6add31420dd82a2cdBenjamin Kramer} // end namespace netbsd
3918e50a96b387dca7525caa8a6add31420dd82a2cdBenjamin Kramer
392ba30bbe4e36a30a274da809a11a42f9cdc168e92Rafael Espindola  /// linux -- Directly call GNU Binutils assembler and linker
393ba30bbe4e36a30a274da809a11a42f9cdc168e92Rafael Espindolanamespace linuxtools {
394ba30bbe4e36a30a274da809a11a42f9cdc168e92Rafael Espindola  class LLVM_LIBRARY_VISIBILITY Assemble : public Tool  {
395ba30bbe4e36a30a274da809a11a42f9cdc168e92Rafael Espindola  public:
396ba30bbe4e36a30a274da809a11a42f9cdc168e92Rafael Espindola    Assemble(const ToolChain &TC) : Tool("linux::Assemble", "assembler",
397ba30bbe4e36a30a274da809a11a42f9cdc168e92Rafael Espindola                                         TC) {}
398ba30bbe4e36a30a274da809a11a42f9cdc168e92Rafael Espindola
399ba30bbe4e36a30a274da809a11a42f9cdc168e92Rafael Espindola    virtual bool hasIntegratedCPP() const { return false; }
400ba30bbe4e36a30a274da809a11a42f9cdc168e92Rafael Espindola
401ba30bbe4e36a30a274da809a11a42f9cdc168e92Rafael Espindola    virtual void ConstructJob(Compilation &C, const JobAction &JA,
402ba30bbe4e36a30a274da809a11a42f9cdc168e92Rafael Espindola                              const InputInfo &Output,
403ba30bbe4e36a30a274da809a11a42f9cdc168e92Rafael Espindola                              const InputInfoList &Inputs,
404ba30bbe4e36a30a274da809a11a42f9cdc168e92Rafael Espindola                              const ArgList &TCArgs,
405ba30bbe4e36a30a274da809a11a42f9cdc168e92Rafael Espindola                              const char *LinkingOutput) const;
406ba30bbe4e36a30a274da809a11a42f9cdc168e92Rafael Espindola  };
407c1da981bba867681004004b2d54ec2fdf3c08913Rafael Espindola  class LLVM_LIBRARY_VISIBILITY Link : public Tool  {
408c1da981bba867681004004b2d54ec2fdf3c08913Rafael Espindola  public:
409c1da981bba867681004004b2d54ec2fdf3c08913Rafael Espindola    Link(const ToolChain &TC) : Tool("linux::Link", "linker", TC) {}
410c1da981bba867681004004b2d54ec2fdf3c08913Rafael Espindola
411c1da981bba867681004004b2d54ec2fdf3c08913Rafael Espindola    virtual bool hasIntegratedCPP() const { return false; }
412c1da981bba867681004004b2d54ec2fdf3c08913Rafael Espindola
413c1da981bba867681004004b2d54ec2fdf3c08913Rafael Espindola    virtual void ConstructJob(Compilation &C, const JobAction &JA,
414c1da981bba867681004004b2d54ec2fdf3c08913Rafael Espindola                              const InputInfo &Output,
415c1da981bba867681004004b2d54ec2fdf3c08913Rafael Espindola                              const InputInfoList &Inputs,
416c1da981bba867681004004b2d54ec2fdf3c08913Rafael Espindola                              const ArgList &TCArgs,
417c1da981bba867681004004b2d54ec2fdf3c08913Rafael Espindola                              const char *LinkingOutput) const;
418c1da981bba867681004004b2d54ec2fdf3c08913Rafael Espindola  };
419ba30bbe4e36a30a274da809a11a42f9cdc168e92Rafael Espindola}
42038e317d6dce161b249508686cc67eb7176958762Chris Lattner  /// minix -- Directly call GNU Binutils assembler and linker
42138e317d6dce161b249508686cc67eb7176958762Chris Lattnernamespace minix {
42238e317d6dce161b249508686cc67eb7176958762Chris Lattner  class LLVM_LIBRARY_VISIBILITY Assemble : public Tool  {
42338e317d6dce161b249508686cc67eb7176958762Chris Lattner  public:
42438e317d6dce161b249508686cc67eb7176958762Chris Lattner    Assemble(const ToolChain &TC) : Tool("minix::Assemble", "assembler",
42538e317d6dce161b249508686cc67eb7176958762Chris Lattner                                         TC) {}
42638e317d6dce161b249508686cc67eb7176958762Chris Lattner
42738e317d6dce161b249508686cc67eb7176958762Chris Lattner    virtual bool hasIntegratedCPP() const { return false; }
42838e317d6dce161b249508686cc67eb7176958762Chris Lattner
42938e317d6dce161b249508686cc67eb7176958762Chris Lattner    virtual void ConstructJob(Compilation &C, const JobAction &JA,
43038e317d6dce161b249508686cc67eb7176958762Chris Lattner                              const InputInfo &Output,
43138e317d6dce161b249508686cc67eb7176958762Chris Lattner                              const InputInfoList &Inputs,
43238e317d6dce161b249508686cc67eb7176958762Chris Lattner                              const ArgList &TCArgs,
43338e317d6dce161b249508686cc67eb7176958762Chris Lattner                              const char *LinkingOutput) const;
43438e317d6dce161b249508686cc67eb7176958762Chris Lattner  };
43538e317d6dce161b249508686cc67eb7176958762Chris Lattner  class LLVM_LIBRARY_VISIBILITY Link : public Tool  {
43638e317d6dce161b249508686cc67eb7176958762Chris Lattner  public:
43738e317d6dce161b249508686cc67eb7176958762Chris Lattner    Link(const ToolChain &TC) : Tool("minix::Link", "linker", TC) {}
43838e317d6dce161b249508686cc67eb7176958762Chris Lattner
43938e317d6dce161b249508686cc67eb7176958762Chris Lattner    virtual bool hasIntegratedCPP() const { return false; }
44038e317d6dce161b249508686cc67eb7176958762Chris Lattner
44138e317d6dce161b249508686cc67eb7176958762Chris Lattner    virtual void ConstructJob(Compilation &C, const JobAction &JA,
44238e317d6dce161b249508686cc67eb7176958762Chris Lattner                              const InputInfo &Output,
44338e317d6dce161b249508686cc67eb7176958762Chris Lattner                              const InputInfoList &Inputs,
44438e317d6dce161b249508686cc67eb7176958762Chris Lattner                              const ArgList &TCArgs,
44538e317d6dce161b249508686cc67eb7176958762Chris Lattner                              const char *LinkingOutput) const;
44638e317d6dce161b249508686cc67eb7176958762Chris Lattner  };
44738e317d6dce161b249508686cc67eb7176958762Chris Lattner} // end namespace minix
44838e317d6dce161b249508686cc67eb7176958762Chris Lattner
449e7925a075f110ab21afeae084670a155dea568e3Edward O'Callaghan  /// auroraux -- Directly call GNU Binutils assembler and linker
450e7925a075f110ab21afeae084670a155dea568e3Edward O'Callaghannamespace auroraux {
45192dd1915842410005c68d32c43bb3b3cf5a4a702Duncan Sands  class LLVM_LIBRARY_VISIBILITY Assemble : public Tool  {
452e7925a075f110ab21afeae084670a155dea568e3Edward O'Callaghan  public:
4533038204fd8f6ff22082dd18e4b12ed252b75a5e4Daniel Dunbar    Assemble(const ToolChain &TC) : Tool("auroraux::Assemble", "assembler",
4543038204fd8f6ff22082dd18e4b12ed252b75a5e4Daniel Dunbar                                         TC) {}
455e7925a075f110ab21afeae084670a155dea568e3Edward O'Callaghan
456e7925a075f110ab21afeae084670a155dea568e3Edward O'Callaghan    virtual bool hasIntegratedCPP() const { return false; }
457e7925a075f110ab21afeae084670a155dea568e3Edward O'Callaghan
458e7925a075f110ab21afeae084670a155dea568e3Edward O'Callaghan    virtual void ConstructJob(Compilation &C, const JobAction &JA,
4591eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump                              const InputInfo &Output,
4601eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump                              const InputInfoList &Inputs,
4611eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump                              const ArgList &TCArgs,
462e7925a075f110ab21afeae084670a155dea568e3Edward O'Callaghan                              const char *LinkingOutput) const;
463e7925a075f110ab21afeae084670a155dea568e3Edward O'Callaghan  };
46492dd1915842410005c68d32c43bb3b3cf5a4a702Duncan Sands  class LLVM_LIBRARY_VISIBILITY Link : public Tool  {
465e7925a075f110ab21afeae084670a155dea568e3Edward O'Callaghan  public:
4663038204fd8f6ff22082dd18e4b12ed252b75a5e4Daniel Dunbar    Link(const ToolChain &TC) : Tool("auroraux::Link", "linker", TC) {}
467e7925a075f110ab21afeae084670a155dea568e3Edward O'Callaghan
468e7925a075f110ab21afeae084670a155dea568e3Edward O'Callaghan    virtual bool hasIntegratedCPP() const { return false; }
469e7925a075f110ab21afeae084670a155dea568e3Edward O'Callaghan
470e7925a075f110ab21afeae084670a155dea568e3Edward O'Callaghan    virtual void ConstructJob(Compilation &C, const JobAction &JA,
4711eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump                              const InputInfo &Output,
4721eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump                              const InputInfoList &Inputs,
4731eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump                              const ArgList &TCArgs,
474e7925a075f110ab21afeae084670a155dea568e3Edward O'Callaghan                              const char *LinkingOutput) const;
475e7925a075f110ab21afeae084670a155dea568e3Edward O'Callaghan  };
476e7925a075f110ab21afeae084670a155dea568e3Edward O'Callaghan} // end namespace auroraux
47768a31d406c6dc4382c700d1199b062de2aa7e1daDaniel Dunbar
47811e1b40d759a643086f590f6ffbd9d68360bad46Daniel Dunbar  /// dragonfly -- Directly call GNU Binutils assembler and linker
47911e1b40d759a643086f590f6ffbd9d68360bad46Daniel Dunbarnamespace dragonfly {
48092dd1915842410005c68d32c43bb3b3cf5a4a702Duncan Sands  class LLVM_LIBRARY_VISIBILITY Assemble : public Tool  {
48111e1b40d759a643086f590f6ffbd9d68360bad46Daniel Dunbar  public:
4823038204fd8f6ff22082dd18e4b12ed252b75a5e4Daniel Dunbar    Assemble(const ToolChain &TC) : Tool("dragonfly::Assemble", "assembler",
4833038204fd8f6ff22082dd18e4b12ed252b75a5e4Daniel Dunbar                                         TC) {}
48411e1b40d759a643086f590f6ffbd9d68360bad46Daniel Dunbar
48511e1b40d759a643086f590f6ffbd9d68360bad46Daniel Dunbar    virtual bool hasIntegratedCPP() const { return false; }
48611e1b40d759a643086f590f6ffbd9d68360bad46Daniel Dunbar
48711e1b40d759a643086f590f6ffbd9d68360bad46Daniel Dunbar    virtual void ConstructJob(Compilation &C, const JobAction &JA,
4881eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump                              const InputInfo &Output,
4891eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump                              const InputInfoList &Inputs,
4901eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump                              const ArgList &TCArgs,
49111e1b40d759a643086f590f6ffbd9d68360bad46Daniel Dunbar                              const char *LinkingOutput) const;
49211e1b40d759a643086f590f6ffbd9d68360bad46Daniel Dunbar  };
49392dd1915842410005c68d32c43bb3b3cf5a4a702Duncan Sands  class LLVM_LIBRARY_VISIBILITY Link : public Tool  {
49411e1b40d759a643086f590f6ffbd9d68360bad46Daniel Dunbar  public:
4953038204fd8f6ff22082dd18e4b12ed252b75a5e4Daniel Dunbar    Link(const ToolChain &TC) : Tool("dragonfly::Link", "linker", TC) {}
49611e1b40d759a643086f590f6ffbd9d68360bad46Daniel Dunbar
49711e1b40d759a643086f590f6ffbd9d68360bad46Daniel Dunbar    virtual bool hasIntegratedCPP() const { return false; }
49811e1b40d759a643086f590f6ffbd9d68360bad46Daniel Dunbar
49911e1b40d759a643086f590f6ffbd9d68360bad46Daniel Dunbar    virtual void ConstructJob(Compilation &C, const JobAction &JA,
5001eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump                              const InputInfo &Output,
5011eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump                              const InputInfoList &Inputs,
5021eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump                              const ArgList &TCArgs,
50311e1b40d759a643086f590f6ffbd9d68360bad46Daniel Dunbar                              const char *LinkingOutput) const;
50411e1b40d759a643086f590f6ffbd9d68360bad46Daniel Dunbar  };
505e7925a075f110ab21afeae084670a155dea568e3Edward O'Callaghan} // end namespace dragonfly
50611e1b40d759a643086f590f6ffbd9d68360bad46Daniel Dunbar
507ff58e3610f4e12094def69eb2d6dcb4330378d8fMichael J. Spencer  /// Visual studio tools.
508ff58e3610f4e12094def69eb2d6dcb4330378d8fMichael J. Spencernamespace visualstudio {
509ff58e3610f4e12094def69eb2d6dcb4330378d8fMichael J. Spencer  class LLVM_LIBRARY_VISIBILITY Link : public Tool  {
510ff58e3610f4e12094def69eb2d6dcb4330378d8fMichael J. Spencer  public:
511ff58e3610f4e12094def69eb2d6dcb4330378d8fMichael J. Spencer    Link(const ToolChain &TC) : Tool("visualstudio::Link", "linker", TC) {}
512ff58e3610f4e12094def69eb2d6dcb4330378d8fMichael J. Spencer
513ff58e3610f4e12094def69eb2d6dcb4330378d8fMichael J. Spencer    virtual bool hasIntegratedCPP() const { return false; }
514ff58e3610f4e12094def69eb2d6dcb4330378d8fMichael J. Spencer
515ff58e3610f4e12094def69eb2d6dcb4330378d8fMichael J. Spencer    virtual void ConstructJob(Compilation &C, const JobAction &JA,
516ff58e3610f4e12094def69eb2d6dcb4330378d8fMichael J. Spencer                              const InputInfo &Output,
517ff58e3610f4e12094def69eb2d6dcb4330378d8fMichael J. Spencer                              const InputInfoList &Inputs,
518ff58e3610f4e12094def69eb2d6dcb4330378d8fMichael J. Spencer                              const ArgList &TCArgs,
519ff58e3610f4e12094def69eb2d6dcb4330378d8fMichael J. Spencer                              const char *LinkingOutput) const;
520ff58e3610f4e12094def69eb2d6dcb4330378d8fMichael J. Spencer  };
521ff58e3610f4e12094def69eb2d6dcb4330378d8fMichael J. Spencer} // end namespace visualstudio
522ff58e3610f4e12094def69eb2d6dcb4330378d8fMichael J. Spencer
5239c073ff462eb75ccbb1c4446e21c148f3fc618e1Daniel Dunbar} // end namespace toolchains
5249c073ff462eb75ccbb1c4446e21c148f3fc618e1Daniel Dunbar} // end namespace driver
5259c073ff462eb75ccbb1c4446e21c148f3fc618e1Daniel Dunbar} // end namespace clang
5269c073ff462eb75ccbb1c4446e21c148f3fc618e1Daniel Dunbar
527e7925a075f110ab21afeae084670a155dea568e3Edward O'Callaghan#endif // CLANG_LIB_DRIVER_TOOLS_H_
528