Tools.h revision fa41d6975058ceb1b8a24564f6dcec72f89f62e8
19c073ff462eb75ccbb1c4446e21c148f3fc618e1Daniel Dunbar//===--- Tools.h - Tool Implementations -------------------------*- C++ -*-===//
29c073ff462eb75ccbb1c4446e21c148f3fc618e1Daniel Dunbar//
39c073ff462eb75ccbb1c4446e21c148f3fc618e1Daniel Dunbar//                     The LLVM Compiler Infrastructure
49c073ff462eb75ccbb1c4446e21c148f3fc618e1Daniel Dunbar//
59c073ff462eb75ccbb1c4446e21c148f3fc618e1Daniel Dunbar// This file is distributed under the University of Illinois Open Source
69c073ff462eb75ccbb1c4446e21c148f3fc618e1Daniel Dunbar// License. See LICENSE.TXT for details.
79c073ff462eb75ccbb1c4446e21c148f3fc618e1Daniel Dunbar//
89c073ff462eb75ccbb1c4446e21c148f3fc618e1Daniel Dunbar//===----------------------------------------------------------------------===//
99c073ff462eb75ccbb1c4446e21c148f3fc618e1Daniel Dunbar
109c073ff462eb75ccbb1c4446e21c148f3fc618e1Daniel Dunbar#ifndef CLANG_LIB_DRIVER_TOOLS_H_
119c073ff462eb75ccbb1c4446e21c148f3fc618e1Daniel Dunbar#define CLANG_LIB_DRIVER_TOOLS_H_
129c073ff462eb75ccbb1c4446e21c148f3fc618e1Daniel Dunbar
139c073ff462eb75ccbb1c4446e21c148f3fc618e1Daniel Dunbar#include "clang/Driver/Tool.h"
1440f1265ebd42ece3e7f7917319b56012e8e2bce2Daniel Dunbar#include "clang/Driver/Types.h"
15b488c1dac8e53206f07103d794a62a3f5012c0f4Daniel Dunbar#include "clang/Driver/Util.h"
169c073ff462eb75ccbb1c4446e21c148f3fc618e1Daniel Dunbar
179c073ff462eb75ccbb1c4446e21c148f3fc618e1Daniel Dunbar#include "llvm/Support/Compiler.h"
189c073ff462eb75ccbb1c4446e21c148f3fc618e1Daniel Dunbar
199c073ff462eb75ccbb1c4446e21c148f3fc618e1Daniel Dunbarnamespace clang {
209c073ff462eb75ccbb1c4446e21c148f3fc618e1Daniel Dunbarnamespace driver {
21df91ef3d6c55692a0236f67b6c6b134a3bf84098Douglas Gregor  class Driver;
22df91ef3d6c55692a0236f67b6c6b134a3bf84098Douglas Gregor
2302633b541b04ad5ffc1c70f4c2feeeb13e607057Daniel Dunbarnamespace toolchains {
24f395528158379e7ea9f6ff4bbb791abadca15aabDaniel Dunbar  class Darwin;
2502633b541b04ad5ffc1c70f4c2feeeb13e607057Daniel Dunbar}
2602633b541b04ad5ffc1c70f4c2feeeb13e607057Daniel Dunbar
27985b825eea7387be10478de0430815ed6a673326Daniel Dunbarnamespace tools {
289c073ff462eb75ccbb1c4446e21c148f3fc618e1Daniel Dunbar
2920a9aa50f9a7d4b03f97bc67e96da1d605c309a2Daniel Dunbar  /// \brief Clang compiler tool.
3092dd1915842410005c68d32c43bb3b3cf5a4a702Duncan Sands  class LLVM_LIBRARY_VISIBILITY Clang : public Tool {
31df91ef3d6c55692a0236f67b6c6b134a3bf84098Douglas Gregor    void AddPreprocessingOptions(const Driver &D,
32df91ef3d6c55692a0236f67b6c6b134a3bf84098Douglas Gregor                                 const ArgList &Args,
33c21c485b4fb58ef5d55cf3e523263dd824a2ace4Daniel Dunbar                                 ArgStringList &CmdArgs,
34c21c485b4fb58ef5d55cf3e523263dd824a2ace4Daniel Dunbar                                 const InputInfo &Output,
35c21c485b4fb58ef5d55cf3e523263dd824a2ace4Daniel Dunbar                                 const InputInfoList &Inputs) const;
36c21c485b4fb58ef5d55cf3e523263dd824a2ace4Daniel Dunbar
37fa41d6975058ceb1b8a24564f6dcec72f89f62e8Daniel Dunbar    void AddARMTargetArgs(const ArgList &Args, ArgStringList &CmdArgs,
38fa41d6975058ceb1b8a24564f6dcec72f89f62e8Daniel Dunbar                          bool KernelOrKext) const;
39ed734737d5af31906e30e537d4a41c760ddcfc59Eric Christopher    void AddMIPSTargetArgs(const ArgList &Args, ArgStringList &CmdArgs) const;
409284d215022457ba867080a713f08f026d89ea17Bruno Cardoso Lopes    void AddSparcTargetArgs(const ArgList &Args, ArgStringList &CmdArgs) const;
416acda16e9c194dcbd0dea64341e182bdb65d0f41Daniel Dunbar    void AddX86TargetArgs(const ArgList &Args, ArgStringList &CmdArgs) const;
426acda16e9c194dcbd0dea64341e182bdb65d0f41Daniel Dunbar
439c073ff462eb75ccbb1c4446e21c148f3fc618e1Daniel Dunbar  public:
443038204fd8f6ff22082dd18e4b12ed252b75a5e4Daniel Dunbar    Clang(const ToolChain &TC) : Tool("clang", "clang frontend", TC) {}
459c073ff462eb75ccbb1c4446e21c148f3fc618e1Daniel Dunbar
4660a53f24b160724de0e8dd0e142009981540fd26Daniel Dunbar    virtual bool hasGoodDiagnostics() const { return true; }
478767cbc475ed96397b6f08617814eeb9cab121bdDaniel Dunbar    virtual bool hasIntegratedAssembler() const { return true; }
489c073ff462eb75ccbb1c4446e21c148f3fc618e1Daniel Dunbar    virtual bool hasIntegratedCPP() const { return true; }
4947ac7d27c44bd64a7d0fc03d4babc196cf2b8230Daniel Dunbar
5047ac7d27c44bd64a7d0fc03d4babc196cf2b8230Daniel Dunbar    virtual void ConstructJob(Compilation &C, const JobAction &JA,
5120a9aa50f9a7d4b03f97bc67e96da1d605c309a2Daniel Dunbar                              const InputInfo &Output,
5220a9aa50f9a7d4b03f97bc67e96da1d605c309a2Daniel Dunbar                              const InputInfoList &Inputs,
5320a9aa50f9a7d4b03f97bc67e96da1d605c309a2Daniel Dunbar                              const ArgList &TCArgs,
5420a9aa50f9a7d4b03f97bc67e96da1d605c309a2Daniel Dunbar                              const char *LinkingOutput) const;
5520a9aa50f9a7d4b03f97bc67e96da1d605c309a2Daniel Dunbar  };
5620a9aa50f9a7d4b03f97bc67e96da1d605c309a2Daniel Dunbar
5720a9aa50f9a7d4b03f97bc67e96da1d605c309a2Daniel Dunbar  /// \brief Clang integrated assembler tool.
5820a9aa50f9a7d4b03f97bc67e96da1d605c309a2Daniel Dunbar  class LLVM_LIBRARY_VISIBILITY ClangAs : public Tool {
5920a9aa50f9a7d4b03f97bc67e96da1d605c309a2Daniel Dunbar  public:
603038204fd8f6ff22082dd18e4b12ed252b75a5e4Daniel Dunbar    ClangAs(const ToolChain &TC) : Tool("clang::as",
613038204fd8f6ff22082dd18e4b12ed252b75a5e4Daniel Dunbar                                        "clang integrated assembler", TC) {}
6220a9aa50f9a7d4b03f97bc67e96da1d605c309a2Daniel Dunbar
6320a9aa50f9a7d4b03f97bc67e96da1d605c309a2Daniel Dunbar    virtual bool hasGoodDiagnostics() const { return true; }
6420a9aa50f9a7d4b03f97bc67e96da1d605c309a2Daniel Dunbar    virtual bool hasIntegratedAssembler() const { return false; }
6520a9aa50f9a7d4b03f97bc67e96da1d605c309a2Daniel Dunbar    virtual bool hasIntegratedCPP() const { return false; }
6620a9aa50f9a7d4b03f97bc67e96da1d605c309a2Daniel Dunbar
6720a9aa50f9a7d4b03f97bc67e96da1d605c309a2Daniel Dunbar    virtual void ConstructJob(Compilation &C, const JobAction &JA,
681eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump                              const InputInfo &Output,
691eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump                              const InputInfoList &Inputs,
701eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump                              const ArgList &TCArgs,
7147ac7d27c44bd64a7d0fc03d4babc196cf2b8230Daniel Dunbar                              const char *LinkingOutput) const;
729c073ff462eb75ccbb1c4446e21c148f3fc618e1Daniel Dunbar  };
739c073ff462eb75ccbb1c4446e21c148f3fc618e1Daniel Dunbar
7431b1e5437e7435879fc044afb77ff27096008e72Daniel Dunbar  /// gcc - Generic GCC tool implementations.
7531b1e5437e7435879fc044afb77ff27096008e72Daniel Dunbarnamespace gcc {
7692dd1915842410005c68d32c43bb3b3cf5a4a702Duncan Sands  class LLVM_LIBRARY_VISIBILITY Common : public Tool {
779c073ff462eb75ccbb1c4446e21c148f3fc618e1Daniel Dunbar  public:
783038204fd8f6ff22082dd18e4b12ed252b75a5e4Daniel Dunbar    Common(const char *Name, const char *ShortName,
793038204fd8f6ff22082dd18e4b12ed252b75a5e4Daniel Dunbar           const ToolChain &TC) : Tool(Name, ShortName, TC) {}
8047ac7d27c44bd64a7d0fc03d4babc196cf2b8230Daniel Dunbar
8147ac7d27c44bd64a7d0fc03d4babc196cf2b8230Daniel Dunbar    virtual void ConstructJob(Compilation &C, const JobAction &JA,
821eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump                              const InputInfo &Output,
831eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump                              const InputInfoList &Inputs,
841eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump                              const ArgList &TCArgs,
8547ac7d27c44bd64a7d0fc03d4babc196cf2b8230Daniel Dunbar                              const char *LinkingOutput) const;
86b488c1dac8e53206f07103d794a62a3f5012c0f4Daniel Dunbar
87b488c1dac8e53206f07103d794a62a3f5012c0f4Daniel Dunbar    /// RenderExtraToolArgs - Render any arguments necessary to force
88b488c1dac8e53206f07103d794a62a3f5012c0f4Daniel Dunbar    /// the particular tool mode.
8982b51cce8cea6b6bb6175c406c2ab425c91d9dc8Daniel Dunbar    virtual void RenderExtraToolArgs(const JobAction &JA,
9082b51cce8cea6b6bb6175c406c2ab425c91d9dc8Daniel Dunbar                                     ArgStringList &CmdArgs) const = 0;
919c073ff462eb75ccbb1c4446e21c148f3fc618e1Daniel Dunbar  };
929c073ff462eb75ccbb1c4446e21c148f3fc618e1Daniel Dunbar
931eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump
9492dd1915842410005c68d32c43bb3b3cf5a4a702Duncan Sands  class LLVM_LIBRARY_VISIBILITY Preprocess : public Common {
959c073ff462eb75ccbb1c4446e21c148f3fc618e1Daniel Dunbar  public:
963038204fd8f6ff22082dd18e4b12ed252b75a5e4Daniel Dunbar    Preprocess(const ToolChain &TC) : Common("gcc::Preprocess",
973038204fd8f6ff22082dd18e4b12ed252b75a5e4Daniel Dunbar                                             "gcc preprocessor", TC) {}
98b488c1dac8e53206f07103d794a62a3f5012c0f4Daniel Dunbar
9960a53f24b160724de0e8dd0e142009981540fd26Daniel Dunbar    virtual bool hasGoodDiagnostics() const { return true; }
100b488c1dac8e53206f07103d794a62a3f5012c0f4Daniel Dunbar    virtual bool hasIntegratedCPP() const { return false; }
101b488c1dac8e53206f07103d794a62a3f5012c0f4Daniel Dunbar
10282b51cce8cea6b6bb6175c406c2ab425c91d9dc8Daniel Dunbar    virtual void RenderExtraToolArgs(const JobAction &JA,
10382b51cce8cea6b6bb6175c406c2ab425c91d9dc8Daniel Dunbar                                     ArgStringList &CmdArgs) const;
104b488c1dac8e53206f07103d794a62a3f5012c0f4Daniel Dunbar  };
105b488c1dac8e53206f07103d794a62a3f5012c0f4Daniel Dunbar
10692dd1915842410005c68d32c43bb3b3cf5a4a702Duncan Sands  class LLVM_LIBRARY_VISIBILITY Precompile : public Common  {
107b488c1dac8e53206f07103d794a62a3f5012c0f4Daniel Dunbar  public:
1083038204fd8f6ff22082dd18e4b12ed252b75a5e4Daniel Dunbar    Precompile(const ToolChain &TC) : Common("gcc::Precompile",
1093038204fd8f6ff22082dd18e4b12ed252b75a5e4Daniel Dunbar                                             "gcc precompile", TC) {}
1109c073ff462eb75ccbb1c4446e21c148f3fc618e1Daniel Dunbar
11160a53f24b160724de0e8dd0e142009981540fd26Daniel Dunbar    virtual bool hasGoodDiagnostics() const { return true; }
1129c073ff462eb75ccbb1c4446e21c148f3fc618e1Daniel Dunbar    virtual bool hasIntegratedCPP() const { return true; }
11347ac7d27c44bd64a7d0fc03d4babc196cf2b8230Daniel Dunbar
11482b51cce8cea6b6bb6175c406c2ab425c91d9dc8Daniel Dunbar    virtual void RenderExtraToolArgs(const JobAction &JA,
11582b51cce8cea6b6bb6175c406c2ab425c91d9dc8Daniel Dunbar                                     ArgStringList &CmdArgs) const;
1169c073ff462eb75ccbb1c4446e21c148f3fc618e1Daniel Dunbar  };
1179c073ff462eb75ccbb1c4446e21c148f3fc618e1Daniel Dunbar
11892dd1915842410005c68d32c43bb3b3cf5a4a702Duncan Sands  class LLVM_LIBRARY_VISIBILITY Compile : public Common  {
1199c073ff462eb75ccbb1c4446e21c148f3fc618e1Daniel Dunbar  public:
1203038204fd8f6ff22082dd18e4b12ed252b75a5e4Daniel Dunbar    Compile(const ToolChain &TC) : Common("gcc::Compile",
1213038204fd8f6ff22082dd18e4b12ed252b75a5e4Daniel Dunbar                                          "gcc frontend", TC) {}
1229c073ff462eb75ccbb1c4446e21c148f3fc618e1Daniel Dunbar
12360a53f24b160724de0e8dd0e142009981540fd26Daniel Dunbar    virtual bool hasGoodDiagnostics() const { return true; }
1249c073ff462eb75ccbb1c4446e21c148f3fc618e1Daniel Dunbar    virtual bool hasIntegratedCPP() const { return true; }
12547ac7d27c44bd64a7d0fc03d4babc196cf2b8230Daniel Dunbar
12682b51cce8cea6b6bb6175c406c2ab425c91d9dc8Daniel Dunbar    virtual void RenderExtraToolArgs(const JobAction &JA,
12782b51cce8cea6b6bb6175c406c2ab425c91d9dc8Daniel Dunbar                                     ArgStringList &CmdArgs) const;
1289c073ff462eb75ccbb1c4446e21c148f3fc618e1Daniel Dunbar  };
1299c073ff462eb75ccbb1c4446e21c148f3fc618e1Daniel Dunbar
13092dd1915842410005c68d32c43bb3b3cf5a4a702Duncan Sands  class LLVM_LIBRARY_VISIBILITY Assemble : public Common  {
1319c073ff462eb75ccbb1c4446e21c148f3fc618e1Daniel Dunbar  public:
1323038204fd8f6ff22082dd18e4b12ed252b75a5e4Daniel Dunbar    Assemble(const ToolChain &TC) : Common("gcc::Assemble",
1333038204fd8f6ff22082dd18e4b12ed252b75a5e4Daniel Dunbar                                           "assembler (via gcc)", TC) {}
1349c073ff462eb75ccbb1c4446e21c148f3fc618e1Daniel Dunbar
1359c073ff462eb75ccbb1c4446e21c148f3fc618e1Daniel Dunbar    virtual bool hasIntegratedCPP() const { return false; }
13647ac7d27c44bd64a7d0fc03d4babc196cf2b8230Daniel Dunbar
13782b51cce8cea6b6bb6175c406c2ab425c91d9dc8Daniel Dunbar    virtual void RenderExtraToolArgs(const JobAction &JA,
13882b51cce8cea6b6bb6175c406c2ab425c91d9dc8Daniel Dunbar                                     ArgStringList &CmdArgs) const;
1399c073ff462eb75ccbb1c4446e21c148f3fc618e1Daniel Dunbar  };
1409c073ff462eb75ccbb1c4446e21c148f3fc618e1Daniel Dunbar
14192dd1915842410005c68d32c43bb3b3cf5a4a702Duncan Sands  class LLVM_LIBRARY_VISIBILITY Link : public Common  {
1429c073ff462eb75ccbb1c4446e21c148f3fc618e1Daniel Dunbar  public:
1433038204fd8f6ff22082dd18e4b12ed252b75a5e4Daniel Dunbar    Link(const ToolChain &TC) : Common("gcc::Link",
1443038204fd8f6ff22082dd18e4b12ed252b75a5e4Daniel Dunbar                                       "linker (via gcc)", TC) {}
1459c073ff462eb75ccbb1c4446e21c148f3fc618e1Daniel Dunbar
1469c073ff462eb75ccbb1c4446e21c148f3fc618e1Daniel Dunbar    virtual bool hasIntegratedCPP() const { return false; }
14747ac7d27c44bd64a7d0fc03d4babc196cf2b8230Daniel Dunbar
14882b51cce8cea6b6bb6175c406c2ab425c91d9dc8Daniel Dunbar    virtual void RenderExtraToolArgs(const JobAction &JA,
14982b51cce8cea6b6bb6175c406c2ab425c91d9dc8Daniel Dunbar                                     ArgStringList &CmdArgs) const;
1509c073ff462eb75ccbb1c4446e21c148f3fc618e1Daniel Dunbar  };
15131b1e5437e7435879fc044afb77ff27096008e72Daniel Dunbar} // end namespace gcc
1529c073ff462eb75ccbb1c4446e21c148f3fc618e1Daniel Dunbar
153ff7488dc9a766f94daf54d81b03ab9160d0bfd88Daniel Dunbarnamespace darwin {
15492dd1915842410005c68d32c43bb3b3cf5a4a702Duncan Sands  class LLVM_LIBRARY_VISIBILITY DarwinTool : public Tool {
155fbefe6bd6f62a3361813498dc672ab0d6c0d4fd1Daniel Dunbar  protected:
156fbefe6bd6f62a3361813498dc672ab0d6c0d4fd1Daniel Dunbar    void AddDarwinArch(const ArgList &Args, ArgStringList &CmdArgs) const;
157fbefe6bd6f62a3361813498dc672ab0d6c0d4fd1Daniel Dunbar
158fbefe6bd6f62a3361813498dc672ab0d6c0d4fd1Daniel Dunbar    const toolchains::Darwin &getDarwinToolChain() const {
159fbefe6bd6f62a3361813498dc672ab0d6c0d4fd1Daniel Dunbar      return reinterpret_cast<const toolchains::Darwin&>(getToolChain());
160fbefe6bd6f62a3361813498dc672ab0d6c0d4fd1Daniel Dunbar    }
161fbefe6bd6f62a3361813498dc672ab0d6c0d4fd1Daniel Dunbar
162fbefe6bd6f62a3361813498dc672ab0d6c0d4fd1Daniel Dunbar  public:
1633038204fd8f6ff22082dd18e4b12ed252b75a5e4Daniel Dunbar    DarwinTool(const char *Name, const char *ShortName,
1643038204fd8f6ff22082dd18e4b12ed252b75a5e4Daniel Dunbar               const ToolChain &TC) : Tool(Name, ShortName, TC) {}
165fbefe6bd6f62a3361813498dc672ab0d6c0d4fd1Daniel Dunbar  };
166fbefe6bd6f62a3361813498dc672ab0d6c0d4fd1Daniel Dunbar
16792dd1915842410005c68d32c43bb3b3cf5a4a702Duncan Sands  class LLVM_LIBRARY_VISIBILITY CC1 : public DarwinTool  {
168a5a7bd0de7b6b80212095195a055a4a43f21d4b2Daniel Dunbar  public:
1691eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump    static const char *getBaseInputName(const ArgList &Args,
170a5a7bd0de7b6b80212095195a055a4a43f21d4b2Daniel Dunbar                                 const InputInfoList &Input);
1711eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump    static const char *getBaseInputStem(const ArgList &Args,
172a5a7bd0de7b6b80212095195a055a4a43f21d4b2Daniel Dunbar                                 const InputInfoList &Input);
1731eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump    static const char *getDependencyFileName(const ArgList &Args,
174a5a7bd0de7b6b80212095195a055a4a43f21d4b2Daniel Dunbar                                             const InputInfoList &Inputs);
175a5a7bd0de7b6b80212095195a055a4a43f21d4b2Daniel Dunbar
17640f1265ebd42ece3e7f7917319b56012e8e2bce2Daniel Dunbar  protected:
17740f1265ebd42ece3e7f7917319b56012e8e2bce2Daniel Dunbar    const char *getCC1Name(types::ID Type) const;
178a3ec60e0cf2a1916f479288998d31bd980b1a306Daniel Dunbar
179a3ec60e0cf2a1916f479288998d31bd980b1a306Daniel Dunbar    void AddCC1Args(const ArgList &Args, ArgStringList &CmdArgs) const;
18040f1265ebd42ece3e7f7917319b56012e8e2bce2Daniel Dunbar    void AddCC1OptionsArgs(const ArgList &Args, ArgStringList &CmdArgs,
18140f1265ebd42ece3e7f7917319b56012e8e2bce2Daniel Dunbar                           const InputInfoList &Inputs,
182a3ec60e0cf2a1916f479288998d31bd980b1a306Daniel Dunbar                           const ArgStringList &OutputArgs) const;
18340f1265ebd42ece3e7f7917319b56012e8e2bce2Daniel Dunbar    void AddCPPOptionsArgs(const ArgList &Args, ArgStringList &CmdArgs,
18440f1265ebd42ece3e7f7917319b56012e8e2bce2Daniel Dunbar                           const InputInfoList &Inputs,
185a3ec60e0cf2a1916f479288998d31bd980b1a306Daniel Dunbar                           const ArgStringList &OutputArgs) const;
1861eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump    void AddCPPUniqueOptionsArgs(const ArgList &Args,
187a3ec60e0cf2a1916f479288998d31bd980b1a306Daniel Dunbar                                 ArgStringList &CmdArgs,
188a3ec60e0cf2a1916f479288998d31bd980b1a306Daniel Dunbar                                 const InputInfoList &Inputs) const;
189a3ec60e0cf2a1916f479288998d31bd980b1a306Daniel Dunbar    void AddCPPArgs(const ArgList &Args, ArgStringList &CmdArgs) const;
19040f1265ebd42ece3e7f7917319b56012e8e2bce2Daniel Dunbar
19140f1265ebd42ece3e7f7917319b56012e8e2bce2Daniel Dunbar  public:
1923038204fd8f6ff22082dd18e4b12ed252b75a5e4Daniel Dunbar    CC1(const char *Name, const char *ShortName,
1933038204fd8f6ff22082dd18e4b12ed252b75a5e4Daniel Dunbar        const ToolChain &TC) : DarwinTool(Name, ShortName, TC) {}
19440f1265ebd42ece3e7f7917319b56012e8e2bce2Daniel Dunbar
19560a53f24b160724de0e8dd0e142009981540fd26Daniel Dunbar    virtual bool hasGoodDiagnostics() const { return true; }
19640f1265ebd42ece3e7f7917319b56012e8e2bce2Daniel Dunbar    virtual bool hasIntegratedCPP() const { return true; }
19740f1265ebd42ece3e7f7917319b56012e8e2bce2Daniel Dunbar  };
19840f1265ebd42ece3e7f7917319b56012e8e2bce2Daniel Dunbar
19992dd1915842410005c68d32c43bb3b3cf5a4a702Duncan Sands  class LLVM_LIBRARY_VISIBILITY Preprocess : public CC1  {
20040f1265ebd42ece3e7f7917319b56012e8e2bce2Daniel Dunbar  public:
2013038204fd8f6ff22082dd18e4b12ed252b75a5e4Daniel Dunbar    Preprocess(const ToolChain &TC) : CC1("darwin::Preprocess",
2023038204fd8f6ff22082dd18e4b12ed252b75a5e4Daniel Dunbar                                          "gcc preprocessor", TC) {}
20340f1265ebd42ece3e7f7917319b56012e8e2bce2Daniel Dunbar
20440f1265ebd42ece3e7f7917319b56012e8e2bce2Daniel Dunbar    virtual void ConstructJob(Compilation &C, const JobAction &JA,
2051eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump                              const InputInfo &Output,
2061eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump                              const InputInfoList &Inputs,
2071eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump                              const ArgList &TCArgs,
20840f1265ebd42ece3e7f7917319b56012e8e2bce2Daniel Dunbar                              const char *LinkingOutput) const;
20940f1265ebd42ece3e7f7917319b56012e8e2bce2Daniel Dunbar  };
21040f1265ebd42ece3e7f7917319b56012e8e2bce2Daniel Dunbar
21192dd1915842410005c68d32c43bb3b3cf5a4a702Duncan Sands  class LLVM_LIBRARY_VISIBILITY Compile : public CC1  {
21240f1265ebd42ece3e7f7917319b56012e8e2bce2Daniel Dunbar  public:
2133038204fd8f6ff22082dd18e4b12ed252b75a5e4Daniel Dunbar    Compile(const ToolChain &TC) : CC1("darwin::Compile", "gcc frontend", TC) {}
21440f1265ebd42ece3e7f7917319b56012e8e2bce2Daniel Dunbar
21540f1265ebd42ece3e7f7917319b56012e8e2bce2Daniel Dunbar    virtual void ConstructJob(Compilation &C, const JobAction &JA,
2161eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump                              const InputInfo &Output,
2171eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump                              const InputInfoList &Inputs,
2181eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump                              const ArgList &TCArgs,
21940f1265ebd42ece3e7f7917319b56012e8e2bce2Daniel Dunbar                              const char *LinkingOutput) const;
22040f1265ebd42ece3e7f7917319b56012e8e2bce2Daniel Dunbar  };
22140f1265ebd42ece3e7f7917319b56012e8e2bce2Daniel Dunbar
22292dd1915842410005c68d32c43bb3b3cf5a4a702Duncan Sands  class LLVM_LIBRARY_VISIBILITY Assemble : public DarwinTool  {
2238cac5f7e1ce63dd77ee0fb4ef68f9fa804f41ea6Daniel Dunbar  public:
2243038204fd8f6ff22082dd18e4b12ed252b75a5e4Daniel Dunbar    Assemble(const ToolChain &TC) : DarwinTool("darwin::Assemble",
2253038204fd8f6ff22082dd18e4b12ed252b75a5e4Daniel Dunbar                                               "assembler", TC) {}
2268cac5f7e1ce63dd77ee0fb4ef68f9fa804f41ea6Daniel Dunbar
2278cac5f7e1ce63dd77ee0fb4ef68f9fa804f41ea6Daniel Dunbar    virtual bool hasIntegratedCPP() const { return false; }
2288cac5f7e1ce63dd77ee0fb4ef68f9fa804f41ea6Daniel Dunbar
2298cac5f7e1ce63dd77ee0fb4ef68f9fa804f41ea6Daniel Dunbar    virtual void ConstructJob(Compilation &C, const JobAction &JA,
2301eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump                              const InputInfo &Output,
2311eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump                              const InputInfoList &Inputs,
2321eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump                              const ArgList &TCArgs,
23302633b541b04ad5ffc1c70f4c2feeeb13e607057Daniel Dunbar                              const char *LinkingOutput) const;
23402633b541b04ad5ffc1c70f4c2feeeb13e607057Daniel Dunbar  };
23502633b541b04ad5ffc1c70f4c2feeeb13e607057Daniel Dunbar
23692dd1915842410005c68d32c43bb3b3cf5a4a702Duncan Sands  class LLVM_LIBRARY_VISIBILITY Link : public DarwinTool  {
237748de8eda222f087434d8bd703176b316a061341Daniel Dunbar    void AddLinkArgs(Compilation &C, const ArgList &Args,
238748de8eda222f087434d8bd703176b316a061341Daniel Dunbar                     ArgStringList &CmdArgs) const;
23902633b541b04ad5ffc1c70f4c2feeeb13e607057Daniel Dunbar
24002633b541b04ad5ffc1c70f4c2feeeb13e607057Daniel Dunbar  public:
2413038204fd8f6ff22082dd18e4b12ed252b75a5e4Daniel Dunbar    Link(const ToolChain &TC) : DarwinTool("darwin::Link", "linker", TC) {}
24202633b541b04ad5ffc1c70f4c2feeeb13e607057Daniel Dunbar
24302633b541b04ad5ffc1c70f4c2feeeb13e607057Daniel Dunbar    virtual bool hasIntegratedCPP() const { return false; }
24402633b541b04ad5ffc1c70f4c2feeeb13e607057Daniel Dunbar
24502633b541b04ad5ffc1c70f4c2feeeb13e607057Daniel Dunbar    virtual void ConstructJob(Compilation &C, const JobAction &JA,
2461eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump                              const InputInfo &Output,
2471eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump                              const InputInfoList &Inputs,
2481eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump                              const ArgList &TCArgs,
2498cac5f7e1ce63dd77ee0fb4ef68f9fa804f41ea6Daniel Dunbar                              const char *LinkingOutput) const;
2508cac5f7e1ce63dd77ee0fb4ef68f9fa804f41ea6Daniel Dunbar  };
2518cac5f7e1ce63dd77ee0fb4ef68f9fa804f41ea6Daniel Dunbar
25292dd1915842410005c68d32c43bb3b3cf5a4a702Duncan Sands  class LLVM_LIBRARY_VISIBILITY Lipo : public DarwinTool  {
253ff7488dc9a766f94daf54d81b03ab9160d0bfd88Daniel Dunbar  public:
2543038204fd8f6ff22082dd18e4b12ed252b75a5e4Daniel Dunbar    Lipo(const ToolChain &TC) : DarwinTool("darwin::Lipo", "lipo", TC) {}
255ff7488dc9a766f94daf54d81b03ab9160d0bfd88Daniel Dunbar
256ff7488dc9a766f94daf54d81b03ab9160d0bfd88Daniel Dunbar    virtual bool hasIntegratedCPP() const { return false; }
257ff7488dc9a766f94daf54d81b03ab9160d0bfd88Daniel Dunbar
258ff7488dc9a766f94daf54d81b03ab9160d0bfd88Daniel Dunbar    virtual void ConstructJob(Compilation &C, const JobAction &JA,
2591eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump                              const InputInfo &Output,
2601eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump                              const InputInfoList &Inputs,
2611eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump                              const ArgList &TCArgs,
2626e0f25483b1a801cd1155ea89c2b725feab16332Daniel Dunbar                              const char *LinkingOutput) const;
2636e0f25483b1a801cd1155ea89c2b725feab16332Daniel Dunbar  };
2646e0f25483b1a801cd1155ea89c2b725feab16332Daniel Dunbar
2656e0f25483b1a801cd1155ea89c2b725feab16332Daniel Dunbar  class LLVM_LIBRARY_VISIBILITY Dsymutil : public DarwinTool  {
2666e0f25483b1a801cd1155ea89c2b725feab16332Daniel Dunbar  public:
2676e0f25483b1a801cd1155ea89c2b725feab16332Daniel Dunbar    Dsymutil(const ToolChain &TC) : DarwinTool("darwin::Dsymutil",
2686e0f25483b1a801cd1155ea89c2b725feab16332Daniel Dunbar                                               "dsymutil", TC) {}
2696e0f25483b1a801cd1155ea89c2b725feab16332Daniel Dunbar
2706e0f25483b1a801cd1155ea89c2b725feab16332Daniel Dunbar    virtual bool hasIntegratedCPP() const { return false; }
2716e0f25483b1a801cd1155ea89c2b725feab16332Daniel Dunbar
2726e0f25483b1a801cd1155ea89c2b725feab16332Daniel Dunbar    virtual void ConstructJob(Compilation &C, const JobAction &JA,
2736e0f25483b1a801cd1155ea89c2b725feab16332Daniel Dunbar                              const InputInfo &Output,
2746e0f25483b1a801cd1155ea89c2b725feab16332Daniel Dunbar                              const InputInfoList &Inputs,
2756e0f25483b1a801cd1155ea89c2b725feab16332Daniel Dunbar                              const ArgList &TCArgs,
276f7b8eec37c8c8012fa525c71fb29a58c9f29beefDaniel Dunbar                              const char *LinkingOutput) const;
277f7b8eec37c8c8012fa525c71fb29a58c9f29beefDaniel Dunbar  };
278f7b8eec37c8c8012fa525c71fb29a58c9f29beefDaniel Dunbar}
279f7b8eec37c8c8012fa525c71fb29a58c9f29beefDaniel Dunbar
280f7b8eec37c8c8012fa525c71fb29a58c9f29beefDaniel Dunbar  /// openbsd -- Directly call GNU Binutils assembler and linker
281f7b8eec37c8c8012fa525c71fb29a58c9f29beefDaniel Dunbarnamespace openbsd {
28292dd1915842410005c68d32c43bb3b3cf5a4a702Duncan Sands  class LLVM_LIBRARY_VISIBILITY Assemble : public Tool  {
283f7b8eec37c8c8012fa525c71fb29a58c9f29beefDaniel Dunbar  public:
2843038204fd8f6ff22082dd18e4b12ed252b75a5e4Daniel Dunbar    Assemble(const ToolChain &TC) : Tool("openbsd::Assemble", "assembler",
2853038204fd8f6ff22082dd18e4b12ed252b75a5e4Daniel Dunbar                                         TC) {}
286f7b8eec37c8c8012fa525c71fb29a58c9f29beefDaniel Dunbar
287f7b8eec37c8c8012fa525c71fb29a58c9f29beefDaniel Dunbar    virtual bool hasIntegratedCPP() const { return false; }
288f7b8eec37c8c8012fa525c71fb29a58c9f29beefDaniel Dunbar
289f7b8eec37c8c8012fa525c71fb29a58c9f29beefDaniel Dunbar    virtual void ConstructJob(Compilation &C, const JobAction &JA,
2901eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump                              const InputInfo &Output,
2911eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump                              const InputInfoList &Inputs,
2921eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump                              const ArgList &TCArgs,
293f7b8eec37c8c8012fa525c71fb29a58c9f29beefDaniel Dunbar                              const char *LinkingOutput) const;
294f7b8eec37c8c8012fa525c71fb29a58c9f29beefDaniel Dunbar  };
29592dd1915842410005c68d32c43bb3b3cf5a4a702Duncan Sands  class LLVM_LIBRARY_VISIBILITY Link : public Tool  {
296f7b8eec37c8c8012fa525c71fb29a58c9f29beefDaniel Dunbar  public:
2973038204fd8f6ff22082dd18e4b12ed252b75a5e4Daniel Dunbar    Link(const ToolChain &TC) : Tool("openbsd::Link", "linker", TC) {}
298f7b8eec37c8c8012fa525c71fb29a58c9f29beefDaniel Dunbar
299f7b8eec37c8c8012fa525c71fb29a58c9f29beefDaniel Dunbar    virtual bool hasIntegratedCPP() const { return false; }
300f7b8eec37c8c8012fa525c71fb29a58c9f29beefDaniel Dunbar
301f7b8eec37c8c8012fa525c71fb29a58c9f29beefDaniel Dunbar    virtual void ConstructJob(Compilation &C, const JobAction &JA,
3021eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump                              const InputInfo &Output,
3031eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump                              const InputInfoList &Inputs,
3041eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump                              const ArgList &TCArgs,
305ff7488dc9a766f94daf54d81b03ab9160d0bfd88Daniel Dunbar                              const char *LinkingOutput) const;
306ff7488dc9a766f94daf54d81b03ab9160d0bfd88Daniel Dunbar  };
307e7925a075f110ab21afeae084670a155dea568e3Edward O'Callaghan} // end namespace openbsd
308ff7488dc9a766f94daf54d81b03ab9160d0bfd88Daniel Dunbar
30968a31d406c6dc4382c700d1199b062de2aa7e1daDaniel Dunbar  /// freebsd -- Directly call GNU Binutils assembler and linker
31068a31d406c6dc4382c700d1199b062de2aa7e1daDaniel Dunbarnamespace freebsd {
31192dd1915842410005c68d32c43bb3b3cf5a4a702Duncan Sands  class LLVM_LIBRARY_VISIBILITY Assemble : public Tool  {
31268a31d406c6dc4382c700d1199b062de2aa7e1daDaniel Dunbar  public:
3133038204fd8f6ff22082dd18e4b12ed252b75a5e4Daniel Dunbar    Assemble(const ToolChain &TC) : Tool("freebsd::Assemble", "assembler",
3143038204fd8f6ff22082dd18e4b12ed252b75a5e4Daniel Dunbar                                         TC) {}
31568a31d406c6dc4382c700d1199b062de2aa7e1daDaniel Dunbar
31668a31d406c6dc4382c700d1199b062de2aa7e1daDaniel Dunbar    virtual bool hasIntegratedCPP() const { return false; }
31768a31d406c6dc4382c700d1199b062de2aa7e1daDaniel Dunbar
31868a31d406c6dc4382c700d1199b062de2aa7e1daDaniel Dunbar    virtual void ConstructJob(Compilation &C, const JobAction &JA,
3191eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump                              const InputInfo &Output,
3201eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump                              const InputInfoList &Inputs,
3211eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump                              const ArgList &TCArgs,
32268a31d406c6dc4382c700d1199b062de2aa7e1daDaniel Dunbar                              const char *LinkingOutput) const;
32368a31d406c6dc4382c700d1199b062de2aa7e1daDaniel Dunbar  };
32492dd1915842410005c68d32c43bb3b3cf5a4a702Duncan Sands  class LLVM_LIBRARY_VISIBILITY Link : public Tool  {
325008f54a54299eaafdaa940e2bdeaf55935ecd95aDaniel Dunbar  public:
3263038204fd8f6ff22082dd18e4b12ed252b75a5e4Daniel Dunbar    Link(const ToolChain &TC) : Tool("freebsd::Link", "linker", TC) {}
327008f54a54299eaafdaa940e2bdeaf55935ecd95aDaniel Dunbar
328008f54a54299eaafdaa940e2bdeaf55935ecd95aDaniel Dunbar    virtual bool hasIntegratedCPP() const { return false; }
329008f54a54299eaafdaa940e2bdeaf55935ecd95aDaniel Dunbar
330008f54a54299eaafdaa940e2bdeaf55935ecd95aDaniel Dunbar    virtual void ConstructJob(Compilation &C, const JobAction &JA,
3311eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump                              const InputInfo &Output,
3321eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump                              const InputInfoList &Inputs,
3331eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump                              const ArgList &TCArgs,
334008f54a54299eaafdaa940e2bdeaf55935ecd95aDaniel Dunbar                              const char *LinkingOutput) const;
335008f54a54299eaafdaa940e2bdeaf55935ecd95aDaniel Dunbar  };
336e7925a075f110ab21afeae084670a155dea568e3Edward O'Callaghan} // end namespace freebsd
337e7925a075f110ab21afeae084670a155dea568e3Edward O'Callaghan
3388e50a96b387dca7525caa8a6add31420dd82a2cdBenjamin Kramer  /// netbsd -- Directly call GNU Binutils assembler and linker
3398e50a96b387dca7525caa8a6add31420dd82a2cdBenjamin Kramernamespace netbsd {
3408e50a96b387dca7525caa8a6add31420dd82a2cdBenjamin Kramer  class LLVM_LIBRARY_VISIBILITY Assemble : public Tool  {
3418e50a96b387dca7525caa8a6add31420dd82a2cdBenjamin Kramer  public:
3428e50a96b387dca7525caa8a6add31420dd82a2cdBenjamin Kramer    Assemble(const ToolChain &TC) : Tool("netbsd::Assemble", "assembler",
3438e50a96b387dca7525caa8a6add31420dd82a2cdBenjamin Kramer                                         TC) {}
3448e50a96b387dca7525caa8a6add31420dd82a2cdBenjamin Kramer
3458e50a96b387dca7525caa8a6add31420dd82a2cdBenjamin Kramer    virtual bool hasIntegratedCPP() const { return false; }
3468e50a96b387dca7525caa8a6add31420dd82a2cdBenjamin Kramer
3478e50a96b387dca7525caa8a6add31420dd82a2cdBenjamin Kramer    virtual void ConstructJob(Compilation &C, const JobAction &JA,
3488e50a96b387dca7525caa8a6add31420dd82a2cdBenjamin Kramer                              const InputInfo &Output,
3498e50a96b387dca7525caa8a6add31420dd82a2cdBenjamin Kramer                              const InputInfoList &Inputs,
3508e50a96b387dca7525caa8a6add31420dd82a2cdBenjamin Kramer                              const ArgList &TCArgs,
3518e50a96b387dca7525caa8a6add31420dd82a2cdBenjamin Kramer                              const char *LinkingOutput) const;
3528e50a96b387dca7525caa8a6add31420dd82a2cdBenjamin Kramer  };
3538e50a96b387dca7525caa8a6add31420dd82a2cdBenjamin Kramer  class LLVM_LIBRARY_VISIBILITY Link : public Tool  {
3548e50a96b387dca7525caa8a6add31420dd82a2cdBenjamin Kramer  public:
3558e50a96b387dca7525caa8a6add31420dd82a2cdBenjamin Kramer    Link(const ToolChain &TC) : Tool("netbsd::Link", "linker", TC) {}
3568e50a96b387dca7525caa8a6add31420dd82a2cdBenjamin Kramer
3578e50a96b387dca7525caa8a6add31420dd82a2cdBenjamin Kramer    virtual bool hasIntegratedCPP() const { return false; }
3588e50a96b387dca7525caa8a6add31420dd82a2cdBenjamin Kramer
3598e50a96b387dca7525caa8a6add31420dd82a2cdBenjamin Kramer    virtual void ConstructJob(Compilation &C, const JobAction &JA,
3608e50a96b387dca7525caa8a6add31420dd82a2cdBenjamin Kramer                              const InputInfo &Output,
3618e50a96b387dca7525caa8a6add31420dd82a2cdBenjamin Kramer                              const InputInfoList &Inputs,
3628e50a96b387dca7525caa8a6add31420dd82a2cdBenjamin Kramer                              const ArgList &TCArgs,
3638e50a96b387dca7525caa8a6add31420dd82a2cdBenjamin Kramer                              const char *LinkingOutput) const;
3648e50a96b387dca7525caa8a6add31420dd82a2cdBenjamin Kramer  };
3658e50a96b387dca7525caa8a6add31420dd82a2cdBenjamin Kramer} // end namespace netbsd
3668e50a96b387dca7525caa8a6add31420dd82a2cdBenjamin Kramer
367ba30bbe4e36a30a274da809a11a42f9cdc168e92Rafael Espindola  /// linux -- Directly call GNU Binutils assembler and linker
368ba30bbe4e36a30a274da809a11a42f9cdc168e92Rafael Espindolanamespace linuxtools {
369ba30bbe4e36a30a274da809a11a42f9cdc168e92Rafael Espindola  class LLVM_LIBRARY_VISIBILITY Assemble : public Tool  {
370ba30bbe4e36a30a274da809a11a42f9cdc168e92Rafael Espindola  public:
371ba30bbe4e36a30a274da809a11a42f9cdc168e92Rafael Espindola    Assemble(const ToolChain &TC) : Tool("linux::Assemble", "assembler",
372ba30bbe4e36a30a274da809a11a42f9cdc168e92Rafael Espindola                                         TC) {}
373ba30bbe4e36a30a274da809a11a42f9cdc168e92Rafael Espindola
374ba30bbe4e36a30a274da809a11a42f9cdc168e92Rafael Espindola    virtual bool hasIntegratedCPP() const { return false; }
375ba30bbe4e36a30a274da809a11a42f9cdc168e92Rafael Espindola
376ba30bbe4e36a30a274da809a11a42f9cdc168e92Rafael Espindola    virtual void ConstructJob(Compilation &C, const JobAction &JA,
377ba30bbe4e36a30a274da809a11a42f9cdc168e92Rafael Espindola                              const InputInfo &Output,
378ba30bbe4e36a30a274da809a11a42f9cdc168e92Rafael Espindola                              const InputInfoList &Inputs,
379ba30bbe4e36a30a274da809a11a42f9cdc168e92Rafael Espindola                              const ArgList &TCArgs,
380ba30bbe4e36a30a274da809a11a42f9cdc168e92Rafael Espindola                              const char *LinkingOutput) const;
381ba30bbe4e36a30a274da809a11a42f9cdc168e92Rafael Espindola  };
382c1da981bba867681004004b2d54ec2fdf3c08913Rafael Espindola  class LLVM_LIBRARY_VISIBILITY Link : public Tool  {
383c1da981bba867681004004b2d54ec2fdf3c08913Rafael Espindola  public:
384c1da981bba867681004004b2d54ec2fdf3c08913Rafael Espindola    Link(const ToolChain &TC) : Tool("linux::Link", "linker", TC) {}
385c1da981bba867681004004b2d54ec2fdf3c08913Rafael Espindola
386c1da981bba867681004004b2d54ec2fdf3c08913Rafael Espindola    virtual bool hasIntegratedCPP() const { return false; }
387c1da981bba867681004004b2d54ec2fdf3c08913Rafael Espindola
388c1da981bba867681004004b2d54ec2fdf3c08913Rafael Espindola    virtual void ConstructJob(Compilation &C, const JobAction &JA,
389c1da981bba867681004004b2d54ec2fdf3c08913Rafael Espindola                              const InputInfo &Output,
390c1da981bba867681004004b2d54ec2fdf3c08913Rafael Espindola                              const InputInfoList &Inputs,
391c1da981bba867681004004b2d54ec2fdf3c08913Rafael Espindola                              const ArgList &TCArgs,
392c1da981bba867681004004b2d54ec2fdf3c08913Rafael Espindola                              const char *LinkingOutput) const;
393c1da981bba867681004004b2d54ec2fdf3c08913Rafael Espindola  };
394ba30bbe4e36a30a274da809a11a42f9cdc168e92Rafael Espindola}
39538e317d6dce161b249508686cc67eb7176958762Chris Lattner  /// minix -- Directly call GNU Binutils assembler and linker
39638e317d6dce161b249508686cc67eb7176958762Chris Lattnernamespace minix {
39738e317d6dce161b249508686cc67eb7176958762Chris Lattner  class LLVM_LIBRARY_VISIBILITY Assemble : public Tool  {
39838e317d6dce161b249508686cc67eb7176958762Chris Lattner  public:
39938e317d6dce161b249508686cc67eb7176958762Chris Lattner    Assemble(const ToolChain &TC) : Tool("minix::Assemble", "assembler",
40038e317d6dce161b249508686cc67eb7176958762Chris Lattner                                         TC) {}
40138e317d6dce161b249508686cc67eb7176958762Chris Lattner
40238e317d6dce161b249508686cc67eb7176958762Chris Lattner    virtual bool hasIntegratedCPP() const { return false; }
40338e317d6dce161b249508686cc67eb7176958762Chris Lattner
40438e317d6dce161b249508686cc67eb7176958762Chris Lattner    virtual void ConstructJob(Compilation &C, const JobAction &JA,
40538e317d6dce161b249508686cc67eb7176958762Chris Lattner                              const InputInfo &Output,
40638e317d6dce161b249508686cc67eb7176958762Chris Lattner                              const InputInfoList &Inputs,
40738e317d6dce161b249508686cc67eb7176958762Chris Lattner                              const ArgList &TCArgs,
40838e317d6dce161b249508686cc67eb7176958762Chris Lattner                              const char *LinkingOutput) const;
40938e317d6dce161b249508686cc67eb7176958762Chris Lattner  };
41038e317d6dce161b249508686cc67eb7176958762Chris Lattner  class LLVM_LIBRARY_VISIBILITY Link : public Tool  {
41138e317d6dce161b249508686cc67eb7176958762Chris Lattner  public:
41238e317d6dce161b249508686cc67eb7176958762Chris Lattner    Link(const ToolChain &TC) : Tool("minix::Link", "linker", TC) {}
41338e317d6dce161b249508686cc67eb7176958762Chris Lattner
41438e317d6dce161b249508686cc67eb7176958762Chris Lattner    virtual bool hasIntegratedCPP() const { return false; }
41538e317d6dce161b249508686cc67eb7176958762Chris Lattner
41638e317d6dce161b249508686cc67eb7176958762Chris Lattner    virtual void ConstructJob(Compilation &C, const JobAction &JA,
41738e317d6dce161b249508686cc67eb7176958762Chris Lattner                              const InputInfo &Output,
41838e317d6dce161b249508686cc67eb7176958762Chris Lattner                              const InputInfoList &Inputs,
41938e317d6dce161b249508686cc67eb7176958762Chris Lattner                              const ArgList &TCArgs,
42038e317d6dce161b249508686cc67eb7176958762Chris Lattner                              const char *LinkingOutput) const;
42138e317d6dce161b249508686cc67eb7176958762Chris Lattner  };
42238e317d6dce161b249508686cc67eb7176958762Chris Lattner} // end namespace minix
42338e317d6dce161b249508686cc67eb7176958762Chris Lattner
424e7925a075f110ab21afeae084670a155dea568e3Edward O'Callaghan  /// auroraux -- Directly call GNU Binutils assembler and linker
425e7925a075f110ab21afeae084670a155dea568e3Edward O'Callaghannamespace auroraux {
42692dd1915842410005c68d32c43bb3b3cf5a4a702Duncan Sands  class LLVM_LIBRARY_VISIBILITY Assemble : public Tool  {
427e7925a075f110ab21afeae084670a155dea568e3Edward O'Callaghan  public:
4283038204fd8f6ff22082dd18e4b12ed252b75a5e4Daniel Dunbar    Assemble(const ToolChain &TC) : Tool("auroraux::Assemble", "assembler",
4293038204fd8f6ff22082dd18e4b12ed252b75a5e4Daniel Dunbar                                         TC) {}
430e7925a075f110ab21afeae084670a155dea568e3Edward O'Callaghan
431e7925a075f110ab21afeae084670a155dea568e3Edward O'Callaghan    virtual bool hasIntegratedCPP() const { return false; }
432e7925a075f110ab21afeae084670a155dea568e3Edward O'Callaghan
433e7925a075f110ab21afeae084670a155dea568e3Edward O'Callaghan    virtual void ConstructJob(Compilation &C, const JobAction &JA,
4341eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump                              const InputInfo &Output,
4351eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump                              const InputInfoList &Inputs,
4361eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump                              const ArgList &TCArgs,
437e7925a075f110ab21afeae084670a155dea568e3Edward O'Callaghan                              const char *LinkingOutput) const;
438e7925a075f110ab21afeae084670a155dea568e3Edward O'Callaghan  };
43992dd1915842410005c68d32c43bb3b3cf5a4a702Duncan Sands  class LLVM_LIBRARY_VISIBILITY Link : public Tool  {
440e7925a075f110ab21afeae084670a155dea568e3Edward O'Callaghan  public:
4413038204fd8f6ff22082dd18e4b12ed252b75a5e4Daniel Dunbar    Link(const ToolChain &TC) : Tool("auroraux::Link", "linker", TC) {}
442e7925a075f110ab21afeae084670a155dea568e3Edward O'Callaghan
443e7925a075f110ab21afeae084670a155dea568e3Edward O'Callaghan    virtual bool hasIntegratedCPP() const { return false; }
444e7925a075f110ab21afeae084670a155dea568e3Edward O'Callaghan
445e7925a075f110ab21afeae084670a155dea568e3Edward O'Callaghan    virtual void ConstructJob(Compilation &C, const JobAction &JA,
4461eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump                              const InputInfo &Output,
4471eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump                              const InputInfoList &Inputs,
4481eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump                              const ArgList &TCArgs,
449e7925a075f110ab21afeae084670a155dea568e3Edward O'Callaghan                              const char *LinkingOutput) const;
450e7925a075f110ab21afeae084670a155dea568e3Edward O'Callaghan  };
451e7925a075f110ab21afeae084670a155dea568e3Edward O'Callaghan} // end namespace auroraux
45268a31d406c6dc4382c700d1199b062de2aa7e1daDaniel Dunbar
45311e1b40d759a643086f590f6ffbd9d68360bad46Daniel Dunbar  /// dragonfly -- Directly call GNU Binutils assembler and linker
45411e1b40d759a643086f590f6ffbd9d68360bad46Daniel Dunbarnamespace dragonfly {
45592dd1915842410005c68d32c43bb3b3cf5a4a702Duncan Sands  class LLVM_LIBRARY_VISIBILITY Assemble : public Tool  {
45611e1b40d759a643086f590f6ffbd9d68360bad46Daniel Dunbar  public:
4573038204fd8f6ff22082dd18e4b12ed252b75a5e4Daniel Dunbar    Assemble(const ToolChain &TC) : Tool("dragonfly::Assemble", "assembler",
4583038204fd8f6ff22082dd18e4b12ed252b75a5e4Daniel Dunbar                                         TC) {}
45911e1b40d759a643086f590f6ffbd9d68360bad46Daniel Dunbar
46011e1b40d759a643086f590f6ffbd9d68360bad46Daniel Dunbar    virtual bool hasIntegratedCPP() const { return false; }
46111e1b40d759a643086f590f6ffbd9d68360bad46Daniel Dunbar
46211e1b40d759a643086f590f6ffbd9d68360bad46Daniel Dunbar    virtual void ConstructJob(Compilation &C, const JobAction &JA,
4631eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump                              const InputInfo &Output,
4641eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump                              const InputInfoList &Inputs,
4651eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump                              const ArgList &TCArgs,
46611e1b40d759a643086f590f6ffbd9d68360bad46Daniel Dunbar                              const char *LinkingOutput) const;
46711e1b40d759a643086f590f6ffbd9d68360bad46Daniel Dunbar  };
46892dd1915842410005c68d32c43bb3b3cf5a4a702Duncan Sands  class LLVM_LIBRARY_VISIBILITY Link : public Tool  {
46911e1b40d759a643086f590f6ffbd9d68360bad46Daniel Dunbar  public:
4703038204fd8f6ff22082dd18e4b12ed252b75a5e4Daniel Dunbar    Link(const ToolChain &TC) : Tool("dragonfly::Link", "linker", TC) {}
47111e1b40d759a643086f590f6ffbd9d68360bad46Daniel Dunbar
47211e1b40d759a643086f590f6ffbd9d68360bad46Daniel Dunbar    virtual bool hasIntegratedCPP() const { return false; }
47311e1b40d759a643086f590f6ffbd9d68360bad46Daniel Dunbar
47411e1b40d759a643086f590f6ffbd9d68360bad46Daniel Dunbar    virtual void ConstructJob(Compilation &C, const JobAction &JA,
4751eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump                              const InputInfo &Output,
4761eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump                              const InputInfoList &Inputs,
4771eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump                              const ArgList &TCArgs,
47811e1b40d759a643086f590f6ffbd9d68360bad46Daniel Dunbar                              const char *LinkingOutput) const;
47911e1b40d759a643086f590f6ffbd9d68360bad46Daniel Dunbar  };
480e7925a075f110ab21afeae084670a155dea568e3Edward O'Callaghan} // end namespace dragonfly
48111e1b40d759a643086f590f6ffbd9d68360bad46Daniel Dunbar
482ff58e3610f4e12094def69eb2d6dcb4330378d8fMichael J. Spencer  /// Visual studio tools.
483ff58e3610f4e12094def69eb2d6dcb4330378d8fMichael J. Spencernamespace visualstudio {
484ff58e3610f4e12094def69eb2d6dcb4330378d8fMichael J. Spencer  class LLVM_LIBRARY_VISIBILITY Link : public Tool  {
485ff58e3610f4e12094def69eb2d6dcb4330378d8fMichael J. Spencer  public:
486ff58e3610f4e12094def69eb2d6dcb4330378d8fMichael J. Spencer    Link(const ToolChain &TC) : Tool("visualstudio::Link", "linker", TC) {}
487ff58e3610f4e12094def69eb2d6dcb4330378d8fMichael J. Spencer
488ff58e3610f4e12094def69eb2d6dcb4330378d8fMichael J. Spencer    virtual bool hasIntegratedCPP() const { return false; }
489ff58e3610f4e12094def69eb2d6dcb4330378d8fMichael J. Spencer
490ff58e3610f4e12094def69eb2d6dcb4330378d8fMichael J. Spencer    virtual void ConstructJob(Compilation &C, const JobAction &JA,
491ff58e3610f4e12094def69eb2d6dcb4330378d8fMichael J. Spencer                              const InputInfo &Output,
492ff58e3610f4e12094def69eb2d6dcb4330378d8fMichael J. Spencer                              const InputInfoList &Inputs,
493ff58e3610f4e12094def69eb2d6dcb4330378d8fMichael J. Spencer                              const ArgList &TCArgs,
494ff58e3610f4e12094def69eb2d6dcb4330378d8fMichael J. Spencer                              const char *LinkingOutput) const;
495ff58e3610f4e12094def69eb2d6dcb4330378d8fMichael J. Spencer  };
496ff58e3610f4e12094def69eb2d6dcb4330378d8fMichael J. Spencer} // end namespace visualstudio
497ff58e3610f4e12094def69eb2d6dcb4330378d8fMichael J. Spencer
4989c073ff462eb75ccbb1c4446e21c148f3fc618e1Daniel Dunbar} // end namespace toolchains
4999c073ff462eb75ccbb1c4446e21c148f3fc618e1Daniel Dunbar} // end namespace driver
5009c073ff462eb75ccbb1c4446e21c148f3fc618e1Daniel Dunbar} // end namespace clang
5019c073ff462eb75ccbb1c4446e21c148f3fc618e1Daniel Dunbar
502e7925a075f110ab21afeae084670a155dea568e3Edward O'Callaghan#endif // CLANG_LIB_DRIVER_TOOLS_H_
503