Tools.h revision 9631939f82c0eaa6fb3936a0ce58a41adfbc9011
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;
449631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    void AddHexagonTargetArgs (const ArgList &Args, ArgStringList &CmdArgs) const;
456acda16e9c194dcbd0dea64341e182bdb65d0f41Daniel Dunbar
469c073ff462eb75ccbb1c4446e21c148f3fc618e1Daniel Dunbar  public:
473038204fd8f6ff22082dd18e4b12ed252b75a5e4Daniel Dunbar    Clang(const ToolChain &TC) : Tool("clang", "clang frontend", TC) {}
489c073ff462eb75ccbb1c4446e21c148f3fc618e1Daniel Dunbar
4960a53f24b160724de0e8dd0e142009981540fd26Daniel Dunbar    virtual bool hasGoodDiagnostics() const { return true; }
508767cbc475ed96397b6f08617814eeb9cab121bdDaniel Dunbar    virtual bool hasIntegratedAssembler() const { return true; }
519c073ff462eb75ccbb1c4446e21c148f3fc618e1Daniel Dunbar    virtual bool hasIntegratedCPP() const { return true; }
5247ac7d27c44bd64a7d0fc03d4babc196cf2b8230Daniel Dunbar
5347ac7d27c44bd64a7d0fc03d4babc196cf2b8230Daniel Dunbar    virtual void ConstructJob(Compilation &C, const JobAction &JA,
5420a9aa50f9a7d4b03f97bc67e96da1d605c309a2Daniel Dunbar                              const InputInfo &Output,
5520a9aa50f9a7d4b03f97bc67e96da1d605c309a2Daniel Dunbar                              const InputInfoList &Inputs,
5620a9aa50f9a7d4b03f97bc67e96da1d605c309a2Daniel Dunbar                              const ArgList &TCArgs,
5720a9aa50f9a7d4b03f97bc67e96da1d605c309a2Daniel Dunbar                              const char *LinkingOutput) const;
5820a9aa50f9a7d4b03f97bc67e96da1d605c309a2Daniel Dunbar  };
5920a9aa50f9a7d4b03f97bc67e96da1d605c309a2Daniel Dunbar
6020a9aa50f9a7d4b03f97bc67e96da1d605c309a2Daniel Dunbar  /// \brief Clang integrated assembler tool.
6120a9aa50f9a7d4b03f97bc67e96da1d605c309a2Daniel Dunbar  class LLVM_LIBRARY_VISIBILITY ClangAs : public Tool {
6220a9aa50f9a7d4b03f97bc67e96da1d605c309a2Daniel Dunbar  public:
633038204fd8f6ff22082dd18e4b12ed252b75a5e4Daniel Dunbar    ClangAs(const ToolChain &TC) : Tool("clang::as",
643038204fd8f6ff22082dd18e4b12ed252b75a5e4Daniel Dunbar                                        "clang integrated assembler", TC) {}
6520a9aa50f9a7d4b03f97bc67e96da1d605c309a2Daniel Dunbar
6620a9aa50f9a7d4b03f97bc67e96da1d605c309a2Daniel Dunbar    virtual bool hasGoodDiagnostics() const { return true; }
6720a9aa50f9a7d4b03f97bc67e96da1d605c309a2Daniel Dunbar    virtual bool hasIntegratedAssembler() const { return false; }
6820a9aa50f9a7d4b03f97bc67e96da1d605c309a2Daniel Dunbar    virtual bool hasIntegratedCPP() const { return false; }
6920a9aa50f9a7d4b03f97bc67e96da1d605c309a2Daniel Dunbar
7020a9aa50f9a7d4b03f97bc67e96da1d605c309a2Daniel Dunbar    virtual void ConstructJob(Compilation &C, const JobAction &JA,
711eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump                              const InputInfo &Output,
721eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump                              const InputInfoList &Inputs,
731eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump                              const ArgList &TCArgs,
7447ac7d27c44bd64a7d0fc03d4babc196cf2b8230Daniel Dunbar                              const char *LinkingOutput) const;
759c073ff462eb75ccbb1c4446e21c148f3fc618e1Daniel Dunbar  };
769c073ff462eb75ccbb1c4446e21c148f3fc618e1Daniel Dunbar
7731b1e5437e7435879fc044afb77ff27096008e72Daniel Dunbar  /// gcc - Generic GCC tool implementations.
7831b1e5437e7435879fc044afb77ff27096008e72Daniel Dunbarnamespace gcc {
7992dd1915842410005c68d32c43bb3b3cf5a4a702Duncan Sands  class LLVM_LIBRARY_VISIBILITY Common : public Tool {
809c073ff462eb75ccbb1c4446e21c148f3fc618e1Daniel Dunbar  public:
813038204fd8f6ff22082dd18e4b12ed252b75a5e4Daniel Dunbar    Common(const char *Name, const char *ShortName,
823038204fd8f6ff22082dd18e4b12ed252b75a5e4Daniel Dunbar           const ToolChain &TC) : Tool(Name, ShortName, TC) {}
8347ac7d27c44bd64a7d0fc03d4babc196cf2b8230Daniel Dunbar
8447ac7d27c44bd64a7d0fc03d4babc196cf2b8230Daniel Dunbar    virtual void ConstructJob(Compilation &C, const JobAction &JA,
851eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump                              const InputInfo &Output,
861eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump                              const InputInfoList &Inputs,
871eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump                              const ArgList &TCArgs,
8847ac7d27c44bd64a7d0fc03d4babc196cf2b8230Daniel Dunbar                              const char *LinkingOutput) const;
89b488c1dac8e53206f07103d794a62a3f5012c0f4Daniel Dunbar
90b488c1dac8e53206f07103d794a62a3f5012c0f4Daniel Dunbar    /// RenderExtraToolArgs - Render any arguments necessary to force
91b488c1dac8e53206f07103d794a62a3f5012c0f4Daniel Dunbar    /// the particular tool mode.
9282b51cce8cea6b6bb6175c406c2ab425c91d9dc8Daniel Dunbar    virtual void RenderExtraToolArgs(const JobAction &JA,
9382b51cce8cea6b6bb6175c406c2ab425c91d9dc8Daniel Dunbar                                     ArgStringList &CmdArgs) const = 0;
949c073ff462eb75ccbb1c4446e21c148f3fc618e1Daniel Dunbar  };
959c073ff462eb75ccbb1c4446e21c148f3fc618e1Daniel Dunbar
961eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump
9792dd1915842410005c68d32c43bb3b3cf5a4a702Duncan Sands  class LLVM_LIBRARY_VISIBILITY Preprocess : public Common {
989c073ff462eb75ccbb1c4446e21c148f3fc618e1Daniel Dunbar  public:
993038204fd8f6ff22082dd18e4b12ed252b75a5e4Daniel Dunbar    Preprocess(const ToolChain &TC) : Common("gcc::Preprocess",
1003038204fd8f6ff22082dd18e4b12ed252b75a5e4Daniel Dunbar                                             "gcc preprocessor", TC) {}
101b488c1dac8e53206f07103d794a62a3f5012c0f4Daniel Dunbar
10260a53f24b160724de0e8dd0e142009981540fd26Daniel Dunbar    virtual bool hasGoodDiagnostics() const { return true; }
103b488c1dac8e53206f07103d794a62a3f5012c0f4Daniel Dunbar    virtual bool hasIntegratedCPP() const { return false; }
104b488c1dac8e53206f07103d794a62a3f5012c0f4Daniel Dunbar
10582b51cce8cea6b6bb6175c406c2ab425c91d9dc8Daniel Dunbar    virtual void RenderExtraToolArgs(const JobAction &JA,
10682b51cce8cea6b6bb6175c406c2ab425c91d9dc8Daniel Dunbar                                     ArgStringList &CmdArgs) const;
107b488c1dac8e53206f07103d794a62a3f5012c0f4Daniel Dunbar  };
108b488c1dac8e53206f07103d794a62a3f5012c0f4Daniel Dunbar
10992dd1915842410005c68d32c43bb3b3cf5a4a702Duncan Sands  class LLVM_LIBRARY_VISIBILITY Precompile : public Common  {
110b488c1dac8e53206f07103d794a62a3f5012c0f4Daniel Dunbar  public:
1113038204fd8f6ff22082dd18e4b12ed252b75a5e4Daniel Dunbar    Precompile(const ToolChain &TC) : Common("gcc::Precompile",
1123038204fd8f6ff22082dd18e4b12ed252b75a5e4Daniel Dunbar                                             "gcc precompile", TC) {}
1139c073ff462eb75ccbb1c4446e21c148f3fc618e1Daniel Dunbar
11460a53f24b160724de0e8dd0e142009981540fd26Daniel Dunbar    virtual bool hasGoodDiagnostics() const { return true; }
1159c073ff462eb75ccbb1c4446e21c148f3fc618e1Daniel Dunbar    virtual bool hasIntegratedCPP() const { return true; }
11647ac7d27c44bd64a7d0fc03d4babc196cf2b8230Daniel Dunbar
11782b51cce8cea6b6bb6175c406c2ab425c91d9dc8Daniel Dunbar    virtual void RenderExtraToolArgs(const JobAction &JA,
11882b51cce8cea6b6bb6175c406c2ab425c91d9dc8Daniel Dunbar                                     ArgStringList &CmdArgs) const;
1199c073ff462eb75ccbb1c4446e21c148f3fc618e1Daniel Dunbar  };
1209c073ff462eb75ccbb1c4446e21c148f3fc618e1Daniel Dunbar
12192dd1915842410005c68d32c43bb3b3cf5a4a702Duncan Sands  class LLVM_LIBRARY_VISIBILITY Compile : public Common  {
1229c073ff462eb75ccbb1c4446e21c148f3fc618e1Daniel Dunbar  public:
1233038204fd8f6ff22082dd18e4b12ed252b75a5e4Daniel Dunbar    Compile(const ToolChain &TC) : Common("gcc::Compile",
1243038204fd8f6ff22082dd18e4b12ed252b75a5e4Daniel Dunbar                                          "gcc frontend", TC) {}
1259c073ff462eb75ccbb1c4446e21c148f3fc618e1Daniel Dunbar
12660a53f24b160724de0e8dd0e142009981540fd26Daniel Dunbar    virtual bool hasGoodDiagnostics() const { return true; }
1279c073ff462eb75ccbb1c4446e21c148f3fc618e1Daniel Dunbar    virtual bool hasIntegratedCPP() const { return true; }
12847ac7d27c44bd64a7d0fc03d4babc196cf2b8230Daniel Dunbar
12982b51cce8cea6b6bb6175c406c2ab425c91d9dc8Daniel Dunbar    virtual void RenderExtraToolArgs(const JobAction &JA,
13082b51cce8cea6b6bb6175c406c2ab425c91d9dc8Daniel Dunbar                                     ArgStringList &CmdArgs) const;
1319c073ff462eb75ccbb1c4446e21c148f3fc618e1Daniel Dunbar  };
1329c073ff462eb75ccbb1c4446e21c148f3fc618e1Daniel Dunbar
13392dd1915842410005c68d32c43bb3b3cf5a4a702Duncan Sands  class LLVM_LIBRARY_VISIBILITY Assemble : public Common  {
1349c073ff462eb75ccbb1c4446e21c148f3fc618e1Daniel Dunbar  public:
1353038204fd8f6ff22082dd18e4b12ed252b75a5e4Daniel Dunbar    Assemble(const ToolChain &TC) : Common("gcc::Assemble",
1363038204fd8f6ff22082dd18e4b12ed252b75a5e4Daniel Dunbar                                           "assembler (via gcc)", TC) {}
1379c073ff462eb75ccbb1c4446e21c148f3fc618e1Daniel Dunbar
1389c073ff462eb75ccbb1c4446e21c148f3fc618e1Daniel Dunbar    virtual bool hasIntegratedCPP() const { return false; }
13947ac7d27c44bd64a7d0fc03d4babc196cf2b8230Daniel Dunbar
14082b51cce8cea6b6bb6175c406c2ab425c91d9dc8Daniel Dunbar    virtual void RenderExtraToolArgs(const JobAction &JA,
14182b51cce8cea6b6bb6175c406c2ab425c91d9dc8Daniel Dunbar                                     ArgStringList &CmdArgs) const;
1429c073ff462eb75ccbb1c4446e21c148f3fc618e1Daniel Dunbar  };
1439c073ff462eb75ccbb1c4446e21c148f3fc618e1Daniel Dunbar
14492dd1915842410005c68d32c43bb3b3cf5a4a702Duncan Sands  class LLVM_LIBRARY_VISIBILITY Link : public Common  {
1459c073ff462eb75ccbb1c4446e21c148f3fc618e1Daniel Dunbar  public:
1463038204fd8f6ff22082dd18e4b12ed252b75a5e4Daniel Dunbar    Link(const ToolChain &TC) : Common("gcc::Link",
1473038204fd8f6ff22082dd18e4b12ed252b75a5e4Daniel Dunbar                                       "linker (via gcc)", TC) {}
1489c073ff462eb75ccbb1c4446e21c148f3fc618e1Daniel Dunbar
1499c073ff462eb75ccbb1c4446e21c148f3fc618e1Daniel Dunbar    virtual bool hasIntegratedCPP() const { return false; }
15047ac7d27c44bd64a7d0fc03d4babc196cf2b8230Daniel Dunbar
15182b51cce8cea6b6bb6175c406c2ab425c91d9dc8Daniel Dunbar    virtual void RenderExtraToolArgs(const JobAction &JA,
15282b51cce8cea6b6bb6175c406c2ab425c91d9dc8Daniel Dunbar                                     ArgStringList &CmdArgs) const;
1539c073ff462eb75ccbb1c4446e21c148f3fc618e1Daniel Dunbar  };
15431b1e5437e7435879fc044afb77ff27096008e72Daniel Dunbar} // end namespace gcc
1559c073ff462eb75ccbb1c4446e21c148f3fc618e1Daniel Dunbar
1569631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicumnamespace hexagon {
1579631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  // For Hexagon, we do not need to instantiate tools for PreProcess, PreCompile and Compile.
1589631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  // We simply use "clang -cc1" for those actions.
1599631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  class LLVM_LIBRARY_VISIBILITY Assemble : public Tool {
1609631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  public:
1619631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    Assemble(const ToolChain &TC) : Tool("hexagon::Assemble",
1629631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum      "hexagon-as", TC) {}
1639631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
1649631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    virtual bool hasIntegratedCPP() const { return false; }
1659631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
1669631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    virtual void RenderExtraToolArgs(const JobAction &JA,
1679631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum                                     ArgStringList &CmdArgs) const;
1689631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    virtual void ConstructJob(Compilation &C, const JobAction &JA,
1699631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum                              const InputInfo &Output,
1709631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum                              const InputInfoList &Inputs,
1719631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum                              const ArgList &TCArgs,
1729631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum                              const char *LinkingOutput) const;
1739631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  };
1749631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
1759631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  class LLVM_LIBRARY_VISIBILITY Link : public Tool {
1769631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  public:
1779631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    Link(const ToolChain &TC) : Tool("hexagon::Link",
1789631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum      "hexagon-ld", TC) {}
1799631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
1809631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    virtual bool hasIntegratedCPP() const { return false; }
1819631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
1829631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    virtual void RenderExtraToolArgs(const JobAction &JA,
1839631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum                                     ArgStringList &CmdArgs) const;
1849631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    virtual void ConstructJob(Compilation &C, const JobAction &JA,
1859631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum                              const InputInfo &Output,
1869631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum                              const InputInfoList &Inputs,
1879631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum                              const ArgList &TCArgs,
1889631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum                              const char *LinkingOutput) const;
1899631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  };
1909631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum} // end namespace hexagon.
1919631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
1929631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
193ff7488dc9a766f94daf54d81b03ab9160d0bfd88Daniel Dunbarnamespace darwin {
19492dd1915842410005c68d32c43bb3b3cf5a4a702Duncan Sands  class LLVM_LIBRARY_VISIBILITY DarwinTool : public Tool {
195fbefe6bd6f62a3361813498dc672ab0d6c0d4fd1Daniel Dunbar  protected:
196fbefe6bd6f62a3361813498dc672ab0d6c0d4fd1Daniel Dunbar    void AddDarwinArch(const ArgList &Args, ArgStringList &CmdArgs) const;
197fbefe6bd6f62a3361813498dc672ab0d6c0d4fd1Daniel Dunbar
198fbefe6bd6f62a3361813498dc672ab0d6c0d4fd1Daniel Dunbar    const toolchains::Darwin &getDarwinToolChain() const {
199fbefe6bd6f62a3361813498dc672ab0d6c0d4fd1Daniel Dunbar      return reinterpret_cast<const toolchains::Darwin&>(getToolChain());
200fbefe6bd6f62a3361813498dc672ab0d6c0d4fd1Daniel Dunbar    }
201fbefe6bd6f62a3361813498dc672ab0d6c0d4fd1Daniel Dunbar
202fbefe6bd6f62a3361813498dc672ab0d6c0d4fd1Daniel Dunbar  public:
2033038204fd8f6ff22082dd18e4b12ed252b75a5e4Daniel Dunbar    DarwinTool(const char *Name, const char *ShortName,
2043038204fd8f6ff22082dd18e4b12ed252b75a5e4Daniel Dunbar               const ToolChain &TC) : Tool(Name, ShortName, TC) {}
205fbefe6bd6f62a3361813498dc672ab0d6c0d4fd1Daniel Dunbar  };
206fbefe6bd6f62a3361813498dc672ab0d6c0d4fd1Daniel Dunbar
20792dd1915842410005c68d32c43bb3b3cf5a4a702Duncan Sands  class LLVM_LIBRARY_VISIBILITY CC1 : public DarwinTool  {
208a5a7bd0de7b6b80212095195a055a4a43f21d4b2Daniel Dunbar  public:
2091eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump    static const char *getBaseInputName(const ArgList &Args,
210a5a7bd0de7b6b80212095195a055a4a43f21d4b2Daniel Dunbar                                 const InputInfoList &Input);
2111eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump    static const char *getBaseInputStem(const ArgList &Args,
212a5a7bd0de7b6b80212095195a055a4a43f21d4b2Daniel Dunbar                                 const InputInfoList &Input);
2131eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump    static const char *getDependencyFileName(const ArgList &Args,
214a5a7bd0de7b6b80212095195a055a4a43f21d4b2Daniel Dunbar                                             const InputInfoList &Inputs);
215a5a7bd0de7b6b80212095195a055a4a43f21d4b2Daniel Dunbar
21640f1265ebd42ece3e7f7917319b56012e8e2bce2Daniel Dunbar  protected:
21740f1265ebd42ece3e7f7917319b56012e8e2bce2Daniel Dunbar    const char *getCC1Name(types::ID Type) const;
218a3ec60e0cf2a1916f479288998d31bd980b1a306Daniel Dunbar
219a3ec60e0cf2a1916f479288998d31bd980b1a306Daniel Dunbar    void AddCC1Args(const ArgList &Args, ArgStringList &CmdArgs) const;
220285f9a284704c07cd50e4597408d5f93518cd7c3Chad Rosier    void RemoveCC1UnsupportedArgs(ArgStringList &CmdArgs) const;
22140f1265ebd42ece3e7f7917319b56012e8e2bce2Daniel Dunbar    void AddCC1OptionsArgs(const ArgList &Args, ArgStringList &CmdArgs,
22240f1265ebd42ece3e7f7917319b56012e8e2bce2Daniel Dunbar                           const InputInfoList &Inputs,
223a3ec60e0cf2a1916f479288998d31bd980b1a306Daniel Dunbar                           const ArgStringList &OutputArgs) const;
22440f1265ebd42ece3e7f7917319b56012e8e2bce2Daniel Dunbar    void AddCPPOptionsArgs(const ArgList &Args, ArgStringList &CmdArgs,
22540f1265ebd42ece3e7f7917319b56012e8e2bce2Daniel Dunbar                           const InputInfoList &Inputs,
226a3ec60e0cf2a1916f479288998d31bd980b1a306Daniel Dunbar                           const ArgStringList &OutputArgs) const;
2271eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump    void AddCPPUniqueOptionsArgs(const ArgList &Args,
228a3ec60e0cf2a1916f479288998d31bd980b1a306Daniel Dunbar                                 ArgStringList &CmdArgs,
229a3ec60e0cf2a1916f479288998d31bd980b1a306Daniel Dunbar                                 const InputInfoList &Inputs) const;
230a3ec60e0cf2a1916f479288998d31bd980b1a306Daniel Dunbar    void AddCPPArgs(const ArgList &Args, ArgStringList &CmdArgs) const;
23140f1265ebd42ece3e7f7917319b56012e8e2bce2Daniel Dunbar
23240f1265ebd42ece3e7f7917319b56012e8e2bce2Daniel Dunbar  public:
2333038204fd8f6ff22082dd18e4b12ed252b75a5e4Daniel Dunbar    CC1(const char *Name, const char *ShortName,
2343038204fd8f6ff22082dd18e4b12ed252b75a5e4Daniel Dunbar        const ToolChain &TC) : DarwinTool(Name, ShortName, TC) {}
23540f1265ebd42ece3e7f7917319b56012e8e2bce2Daniel Dunbar
23660a53f24b160724de0e8dd0e142009981540fd26Daniel Dunbar    virtual bool hasGoodDiagnostics() const { return true; }
23740f1265ebd42ece3e7f7917319b56012e8e2bce2Daniel Dunbar    virtual bool hasIntegratedCPP() const { return true; }
23840f1265ebd42ece3e7f7917319b56012e8e2bce2Daniel Dunbar  };
23940f1265ebd42ece3e7f7917319b56012e8e2bce2Daniel Dunbar
24092dd1915842410005c68d32c43bb3b3cf5a4a702Duncan Sands  class LLVM_LIBRARY_VISIBILITY Preprocess : public CC1  {
24140f1265ebd42ece3e7f7917319b56012e8e2bce2Daniel Dunbar  public:
2423038204fd8f6ff22082dd18e4b12ed252b75a5e4Daniel Dunbar    Preprocess(const ToolChain &TC) : CC1("darwin::Preprocess",
2433038204fd8f6ff22082dd18e4b12ed252b75a5e4Daniel Dunbar                                          "gcc preprocessor", TC) {}
24440f1265ebd42ece3e7f7917319b56012e8e2bce2Daniel Dunbar
24540f1265ebd42ece3e7f7917319b56012e8e2bce2Daniel Dunbar    virtual void ConstructJob(Compilation &C, const JobAction &JA,
2461eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump                              const InputInfo &Output,
2471eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump                              const InputInfoList &Inputs,
2481eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump                              const ArgList &TCArgs,
24940f1265ebd42ece3e7f7917319b56012e8e2bce2Daniel Dunbar                              const char *LinkingOutput) const;
25040f1265ebd42ece3e7f7917319b56012e8e2bce2Daniel Dunbar  };
25140f1265ebd42ece3e7f7917319b56012e8e2bce2Daniel Dunbar
25292dd1915842410005c68d32c43bb3b3cf5a4a702Duncan Sands  class LLVM_LIBRARY_VISIBILITY Compile : public CC1  {
25340f1265ebd42ece3e7f7917319b56012e8e2bce2Daniel Dunbar  public:
2543038204fd8f6ff22082dd18e4b12ed252b75a5e4Daniel Dunbar    Compile(const ToolChain &TC) : CC1("darwin::Compile", "gcc frontend", TC) {}
25540f1265ebd42ece3e7f7917319b56012e8e2bce2Daniel Dunbar
25640f1265ebd42ece3e7f7917319b56012e8e2bce2Daniel Dunbar    virtual void ConstructJob(Compilation &C, const JobAction &JA,
2571eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump                              const InputInfo &Output,
2581eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump                              const InputInfoList &Inputs,
2591eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump                              const ArgList &TCArgs,
26040f1265ebd42ece3e7f7917319b56012e8e2bce2Daniel Dunbar                              const char *LinkingOutput) const;
26140f1265ebd42ece3e7f7917319b56012e8e2bce2Daniel Dunbar  };
26240f1265ebd42ece3e7f7917319b56012e8e2bce2Daniel Dunbar
26392dd1915842410005c68d32c43bb3b3cf5a4a702Duncan Sands  class LLVM_LIBRARY_VISIBILITY Assemble : public DarwinTool  {
2648cac5f7e1ce63dd77ee0fb4ef68f9fa804f41ea6Daniel Dunbar  public:
2653038204fd8f6ff22082dd18e4b12ed252b75a5e4Daniel Dunbar    Assemble(const ToolChain &TC) : DarwinTool("darwin::Assemble",
2663038204fd8f6ff22082dd18e4b12ed252b75a5e4Daniel Dunbar                                               "assembler", TC) {}
2678cac5f7e1ce63dd77ee0fb4ef68f9fa804f41ea6Daniel Dunbar
2688cac5f7e1ce63dd77ee0fb4ef68f9fa804f41ea6Daniel Dunbar    virtual bool hasIntegratedCPP() const { return false; }
2698cac5f7e1ce63dd77ee0fb4ef68f9fa804f41ea6Daniel Dunbar
2708cac5f7e1ce63dd77ee0fb4ef68f9fa804f41ea6Daniel Dunbar    virtual void ConstructJob(Compilation &C, const JobAction &JA,
2711eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump                              const InputInfo &Output,
2721eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump                              const InputInfoList &Inputs,
2731eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump                              const ArgList &TCArgs,
27402633b541b04ad5ffc1c70f4c2feeeb13e607057Daniel Dunbar                              const char *LinkingOutput) const;
27502633b541b04ad5ffc1c70f4c2feeeb13e607057Daniel Dunbar  };
27602633b541b04ad5ffc1c70f4c2feeeb13e607057Daniel Dunbar
27792dd1915842410005c68d32c43bb3b3cf5a4a702Duncan Sands  class LLVM_LIBRARY_VISIBILITY Link : public DarwinTool  {
278748de8eda222f087434d8bd703176b316a061341Daniel Dunbar    void AddLinkArgs(Compilation &C, const ArgList &Args,
279748de8eda222f087434d8bd703176b316a061341Daniel Dunbar                     ArgStringList &CmdArgs) const;
28002633b541b04ad5ffc1c70f4c2feeeb13e607057Daniel Dunbar
28102633b541b04ad5ffc1c70f4c2feeeb13e607057Daniel Dunbar  public:
2823038204fd8f6ff22082dd18e4b12ed252b75a5e4Daniel Dunbar    Link(const ToolChain &TC) : DarwinTool("darwin::Link", "linker", TC) {}
28302633b541b04ad5ffc1c70f4c2feeeb13e607057Daniel Dunbar
28402633b541b04ad5ffc1c70f4c2feeeb13e607057Daniel Dunbar    virtual bool hasIntegratedCPP() const { return false; }
28502633b541b04ad5ffc1c70f4c2feeeb13e607057Daniel Dunbar
28602633b541b04ad5ffc1c70f4c2feeeb13e607057Daniel Dunbar    virtual void ConstructJob(Compilation &C, const JobAction &JA,
2871eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump                              const InputInfo &Output,
2881eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump                              const InputInfoList &Inputs,
2891eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump                              const ArgList &TCArgs,
2908cac5f7e1ce63dd77ee0fb4ef68f9fa804f41ea6Daniel Dunbar                              const char *LinkingOutput) const;
2918cac5f7e1ce63dd77ee0fb4ef68f9fa804f41ea6Daniel Dunbar  };
2928cac5f7e1ce63dd77ee0fb4ef68f9fa804f41ea6Daniel Dunbar
29392dd1915842410005c68d32c43bb3b3cf5a4a702Duncan Sands  class LLVM_LIBRARY_VISIBILITY Lipo : public DarwinTool  {
294ff7488dc9a766f94daf54d81b03ab9160d0bfd88Daniel Dunbar  public:
2953038204fd8f6ff22082dd18e4b12ed252b75a5e4Daniel Dunbar    Lipo(const ToolChain &TC) : DarwinTool("darwin::Lipo", "lipo", TC) {}
296ff7488dc9a766f94daf54d81b03ab9160d0bfd88Daniel Dunbar
297ff7488dc9a766f94daf54d81b03ab9160d0bfd88Daniel Dunbar    virtual bool hasIntegratedCPP() const { return false; }
298ff7488dc9a766f94daf54d81b03ab9160d0bfd88Daniel Dunbar
299ff7488dc9a766f94daf54d81b03ab9160d0bfd88Daniel Dunbar    virtual void ConstructJob(Compilation &C, const JobAction &JA,
3001eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump                              const InputInfo &Output,
3011eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump                              const InputInfoList &Inputs,
3021eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump                              const ArgList &TCArgs,
3036e0f25483b1a801cd1155ea89c2b725feab16332Daniel Dunbar                              const char *LinkingOutput) const;
3046e0f25483b1a801cd1155ea89c2b725feab16332Daniel Dunbar  };
3056e0f25483b1a801cd1155ea89c2b725feab16332Daniel Dunbar
3066e0f25483b1a801cd1155ea89c2b725feab16332Daniel Dunbar  class LLVM_LIBRARY_VISIBILITY Dsymutil : public DarwinTool  {
3076e0f25483b1a801cd1155ea89c2b725feab16332Daniel Dunbar  public:
3086e0f25483b1a801cd1155ea89c2b725feab16332Daniel Dunbar    Dsymutil(const ToolChain &TC) : DarwinTool("darwin::Dsymutil",
3096e0f25483b1a801cd1155ea89c2b725feab16332Daniel Dunbar                                               "dsymutil", TC) {}
3106e0f25483b1a801cd1155ea89c2b725feab16332Daniel Dunbar
3116e0f25483b1a801cd1155ea89c2b725feab16332Daniel Dunbar    virtual bool hasIntegratedCPP() const { return false; }
3126e0f25483b1a801cd1155ea89c2b725feab16332Daniel Dunbar
3136e0f25483b1a801cd1155ea89c2b725feab16332Daniel Dunbar    virtual void ConstructJob(Compilation &C, const JobAction &JA,
3146e0f25483b1a801cd1155ea89c2b725feab16332Daniel Dunbar                              const InputInfo &Output,
3156e0f25483b1a801cd1155ea89c2b725feab16332Daniel Dunbar                              const InputInfoList &Inputs,
3166e0f25483b1a801cd1155ea89c2b725feab16332Daniel Dunbar                              const ArgList &TCArgs,
317f7b8eec37c8c8012fa525c71fb29a58c9f29beefDaniel Dunbar                              const char *LinkingOutput) const;
318f7b8eec37c8c8012fa525c71fb29a58c9f29beefDaniel Dunbar  };
319f857186fd1995b34185d063a29b11ad4f948519fEric Christopher
320f857186fd1995b34185d063a29b11ad4f948519fEric Christopher  class LLVM_LIBRARY_VISIBILITY VerifyDebug : public DarwinTool  {
321f857186fd1995b34185d063a29b11ad4f948519fEric Christopher  public:
322f857186fd1995b34185d063a29b11ad4f948519fEric Christopher    VerifyDebug(const ToolChain &TC) : DarwinTool("darwin::VerifyDebug",
323f857186fd1995b34185d063a29b11ad4f948519fEric Christopher						  "dwarfdump", TC) {}
324f857186fd1995b34185d063a29b11ad4f948519fEric Christopher
325f857186fd1995b34185d063a29b11ad4f948519fEric Christopher    virtual bool hasIntegratedCPP() const { return false; }
326f857186fd1995b34185d063a29b11ad4f948519fEric Christopher
327f857186fd1995b34185d063a29b11ad4f948519fEric Christopher    virtual void ConstructJob(Compilation &C, const JobAction &JA,
328f857186fd1995b34185d063a29b11ad4f948519fEric Christopher			      const InputInfo &Output,
329f857186fd1995b34185d063a29b11ad4f948519fEric Christopher			      const InputInfoList &Inputs,
330f857186fd1995b34185d063a29b11ad4f948519fEric Christopher			      const ArgList &TCArgs,
331f857186fd1995b34185d063a29b11ad4f948519fEric Christopher			      const char *LinkingOutput) const;
332f857186fd1995b34185d063a29b11ad4f948519fEric Christopher  };
333f857186fd1995b34185d063a29b11ad4f948519fEric Christopher
334f7b8eec37c8c8012fa525c71fb29a58c9f29beefDaniel Dunbar}
335f7b8eec37c8c8012fa525c71fb29a58c9f29beefDaniel Dunbar
336f7b8eec37c8c8012fa525c71fb29a58c9f29beefDaniel Dunbar  /// openbsd -- Directly call GNU Binutils assembler and linker
337f7b8eec37c8c8012fa525c71fb29a58c9f29beefDaniel Dunbarnamespace openbsd {
33892dd1915842410005c68d32c43bb3b3cf5a4a702Duncan Sands  class LLVM_LIBRARY_VISIBILITY Assemble : public Tool  {
339f7b8eec37c8c8012fa525c71fb29a58c9f29beefDaniel Dunbar  public:
3403038204fd8f6ff22082dd18e4b12ed252b75a5e4Daniel Dunbar    Assemble(const ToolChain &TC) : Tool("openbsd::Assemble", "assembler",
3413038204fd8f6ff22082dd18e4b12ed252b75a5e4Daniel Dunbar                                         TC) {}
342f7b8eec37c8c8012fa525c71fb29a58c9f29beefDaniel Dunbar
343f7b8eec37c8c8012fa525c71fb29a58c9f29beefDaniel Dunbar    virtual bool hasIntegratedCPP() const { return false; }
344f7b8eec37c8c8012fa525c71fb29a58c9f29beefDaniel Dunbar
345f7b8eec37c8c8012fa525c71fb29a58c9f29beefDaniel Dunbar    virtual void ConstructJob(Compilation &C, const JobAction &JA,
3461eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump                              const InputInfo &Output,
3471eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump                              const InputInfoList &Inputs,
3481eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump                              const ArgList &TCArgs,
349f7b8eec37c8c8012fa525c71fb29a58c9f29beefDaniel Dunbar                              const char *LinkingOutput) const;
350f7b8eec37c8c8012fa525c71fb29a58c9f29beefDaniel Dunbar  };
35192dd1915842410005c68d32c43bb3b3cf5a4a702Duncan Sands  class LLVM_LIBRARY_VISIBILITY Link : public Tool  {
352f7b8eec37c8c8012fa525c71fb29a58c9f29beefDaniel Dunbar  public:
3533038204fd8f6ff22082dd18e4b12ed252b75a5e4Daniel Dunbar    Link(const ToolChain &TC) : Tool("openbsd::Link", "linker", TC) {}
354f7b8eec37c8c8012fa525c71fb29a58c9f29beefDaniel Dunbar
355f7b8eec37c8c8012fa525c71fb29a58c9f29beefDaniel Dunbar    virtual bool hasIntegratedCPP() const { return false; }
356f7b8eec37c8c8012fa525c71fb29a58c9f29beefDaniel Dunbar
357f7b8eec37c8c8012fa525c71fb29a58c9f29beefDaniel Dunbar    virtual void ConstructJob(Compilation &C, const JobAction &JA,
3581eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump                              const InputInfo &Output,
3591eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump                              const InputInfoList &Inputs,
3601eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump                              const ArgList &TCArgs,
361ff7488dc9a766f94daf54d81b03ab9160d0bfd88Daniel Dunbar                              const char *LinkingOutput) const;
362ff7488dc9a766f94daf54d81b03ab9160d0bfd88Daniel Dunbar  };
363e7925a075f110ab21afeae084670a155dea568e3Edward O'Callaghan} // end namespace openbsd
364ff7488dc9a766f94daf54d81b03ab9160d0bfd88Daniel Dunbar
36568a31d406c6dc4382c700d1199b062de2aa7e1daDaniel Dunbar  /// freebsd -- Directly call GNU Binutils assembler and linker
36668a31d406c6dc4382c700d1199b062de2aa7e1daDaniel Dunbarnamespace freebsd {
36792dd1915842410005c68d32c43bb3b3cf5a4a702Duncan Sands  class LLVM_LIBRARY_VISIBILITY Assemble : public Tool  {
36868a31d406c6dc4382c700d1199b062de2aa7e1daDaniel Dunbar  public:
3693038204fd8f6ff22082dd18e4b12ed252b75a5e4Daniel Dunbar    Assemble(const ToolChain &TC) : Tool("freebsd::Assemble", "assembler",
3703038204fd8f6ff22082dd18e4b12ed252b75a5e4Daniel Dunbar                                         TC) {}
37168a31d406c6dc4382c700d1199b062de2aa7e1daDaniel Dunbar
37268a31d406c6dc4382c700d1199b062de2aa7e1daDaniel Dunbar    virtual bool hasIntegratedCPP() const { return false; }
37368a31d406c6dc4382c700d1199b062de2aa7e1daDaniel Dunbar
37468a31d406c6dc4382c700d1199b062de2aa7e1daDaniel Dunbar    virtual void ConstructJob(Compilation &C, const JobAction &JA,
3751eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump                              const InputInfo &Output,
3761eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump                              const InputInfoList &Inputs,
3771eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump                              const ArgList &TCArgs,
37868a31d406c6dc4382c700d1199b062de2aa7e1daDaniel Dunbar                              const char *LinkingOutput) const;
37968a31d406c6dc4382c700d1199b062de2aa7e1daDaniel Dunbar  };
38092dd1915842410005c68d32c43bb3b3cf5a4a702Duncan Sands  class LLVM_LIBRARY_VISIBILITY Link : public Tool  {
381008f54a54299eaafdaa940e2bdeaf55935ecd95aDaniel Dunbar  public:
3823038204fd8f6ff22082dd18e4b12ed252b75a5e4Daniel Dunbar    Link(const ToolChain &TC) : Tool("freebsd::Link", "linker", TC) {}
383008f54a54299eaafdaa940e2bdeaf55935ecd95aDaniel Dunbar
384008f54a54299eaafdaa940e2bdeaf55935ecd95aDaniel Dunbar    virtual bool hasIntegratedCPP() const { return false; }
385008f54a54299eaafdaa940e2bdeaf55935ecd95aDaniel Dunbar
386008f54a54299eaafdaa940e2bdeaf55935ecd95aDaniel Dunbar    virtual void ConstructJob(Compilation &C, const JobAction &JA,
3871eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump                              const InputInfo &Output,
3881eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump                              const InputInfoList &Inputs,
3891eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump                              const ArgList &TCArgs,
390008f54a54299eaafdaa940e2bdeaf55935ecd95aDaniel Dunbar                              const char *LinkingOutput) const;
391008f54a54299eaafdaa940e2bdeaf55935ecd95aDaniel Dunbar  };
392e7925a075f110ab21afeae084670a155dea568e3Edward O'Callaghan} // end namespace freebsd
393e7925a075f110ab21afeae084670a155dea568e3Edward O'Callaghan
3948e50a96b387dca7525caa8a6add31420dd82a2cdBenjamin Kramer  /// netbsd -- Directly call GNU Binutils assembler and linker
3958e50a96b387dca7525caa8a6add31420dd82a2cdBenjamin Kramernamespace netbsd {
3968e50a96b387dca7525caa8a6add31420dd82a2cdBenjamin Kramer  class LLVM_LIBRARY_VISIBILITY Assemble : public Tool  {
397182564cd14a2105fff05fd52f5940eff96161d57Joerg Sonnenberger  private:
398182564cd14a2105fff05fd52f5940eff96161d57Joerg Sonnenberger    const llvm::Triple ToolTriple;
399182564cd14a2105fff05fd52f5940eff96161d57Joerg Sonnenberger
4008e50a96b387dca7525caa8a6add31420dd82a2cdBenjamin Kramer  public:
401182564cd14a2105fff05fd52f5940eff96161d57Joerg Sonnenberger    Assemble(const ToolChain &TC, const llvm::Triple &ToolTriple)
402182564cd14a2105fff05fd52f5940eff96161d57Joerg Sonnenberger      : Tool("netbsd::Assemble", "assembler", TC), ToolTriple(ToolTriple) {}
4038e50a96b387dca7525caa8a6add31420dd82a2cdBenjamin Kramer
4048e50a96b387dca7525caa8a6add31420dd82a2cdBenjamin Kramer    virtual bool hasIntegratedCPP() const { return false; }
4058e50a96b387dca7525caa8a6add31420dd82a2cdBenjamin Kramer
4068e50a96b387dca7525caa8a6add31420dd82a2cdBenjamin Kramer    virtual void ConstructJob(Compilation &C, const JobAction &JA,
4078e50a96b387dca7525caa8a6add31420dd82a2cdBenjamin Kramer                              const InputInfo &Output,
4088e50a96b387dca7525caa8a6add31420dd82a2cdBenjamin Kramer                              const InputInfoList &Inputs,
4098e50a96b387dca7525caa8a6add31420dd82a2cdBenjamin Kramer                              const ArgList &TCArgs,
4108e50a96b387dca7525caa8a6add31420dd82a2cdBenjamin Kramer                              const char *LinkingOutput) const;
4118e50a96b387dca7525caa8a6add31420dd82a2cdBenjamin Kramer  };
4128e50a96b387dca7525caa8a6add31420dd82a2cdBenjamin Kramer  class LLVM_LIBRARY_VISIBILITY Link : public Tool  {
413182564cd14a2105fff05fd52f5940eff96161d57Joerg Sonnenberger  private:
414182564cd14a2105fff05fd52f5940eff96161d57Joerg Sonnenberger    const llvm::Triple ToolTriple;
415182564cd14a2105fff05fd52f5940eff96161d57Joerg Sonnenberger
4168e50a96b387dca7525caa8a6add31420dd82a2cdBenjamin Kramer  public:
417182564cd14a2105fff05fd52f5940eff96161d57Joerg Sonnenberger    Link(const ToolChain &TC, const llvm::Triple &ToolTriple)
418468eb7ddd69b5d545139fc46a3b730268c458f38Joerg Sonnenberger      : Tool("netbsd::Link", "linker", TC), ToolTriple(ToolTriple) {}
4198e50a96b387dca7525caa8a6add31420dd82a2cdBenjamin Kramer
4208e50a96b387dca7525caa8a6add31420dd82a2cdBenjamin Kramer    virtual bool hasIntegratedCPP() const { return false; }
4218e50a96b387dca7525caa8a6add31420dd82a2cdBenjamin Kramer
4228e50a96b387dca7525caa8a6add31420dd82a2cdBenjamin Kramer    virtual void ConstructJob(Compilation &C, const JobAction &JA,
4238e50a96b387dca7525caa8a6add31420dd82a2cdBenjamin Kramer                              const InputInfo &Output,
4248e50a96b387dca7525caa8a6add31420dd82a2cdBenjamin Kramer                              const InputInfoList &Inputs,
4258e50a96b387dca7525caa8a6add31420dd82a2cdBenjamin Kramer                              const ArgList &TCArgs,
4268e50a96b387dca7525caa8a6add31420dd82a2cdBenjamin Kramer                              const char *LinkingOutput) const;
4278e50a96b387dca7525caa8a6add31420dd82a2cdBenjamin Kramer  };
4288e50a96b387dca7525caa8a6add31420dd82a2cdBenjamin Kramer} // end namespace netbsd
4298e50a96b387dca7525caa8a6add31420dd82a2cdBenjamin Kramer
430ba30bbe4e36a30a274da809a11a42f9cdc168e92Rafael Espindola  /// linux -- Directly call GNU Binutils assembler and linker
431ba30bbe4e36a30a274da809a11a42f9cdc168e92Rafael Espindolanamespace linuxtools {
432ba30bbe4e36a30a274da809a11a42f9cdc168e92Rafael Espindola  class LLVM_LIBRARY_VISIBILITY Assemble : public Tool  {
433ba30bbe4e36a30a274da809a11a42f9cdc168e92Rafael Espindola  public:
434ba30bbe4e36a30a274da809a11a42f9cdc168e92Rafael Espindola    Assemble(const ToolChain &TC) : Tool("linux::Assemble", "assembler",
435ba30bbe4e36a30a274da809a11a42f9cdc168e92Rafael Espindola                                         TC) {}
436ba30bbe4e36a30a274da809a11a42f9cdc168e92Rafael Espindola
437ba30bbe4e36a30a274da809a11a42f9cdc168e92Rafael Espindola    virtual bool hasIntegratedCPP() const { return false; }
438ba30bbe4e36a30a274da809a11a42f9cdc168e92Rafael Espindola
439ba30bbe4e36a30a274da809a11a42f9cdc168e92Rafael Espindola    virtual void ConstructJob(Compilation &C, const JobAction &JA,
440ba30bbe4e36a30a274da809a11a42f9cdc168e92Rafael Espindola                              const InputInfo &Output,
441ba30bbe4e36a30a274da809a11a42f9cdc168e92Rafael Espindola                              const InputInfoList &Inputs,
442ba30bbe4e36a30a274da809a11a42f9cdc168e92Rafael Espindola                              const ArgList &TCArgs,
443ba30bbe4e36a30a274da809a11a42f9cdc168e92Rafael Espindola                              const char *LinkingOutput) const;
444ba30bbe4e36a30a274da809a11a42f9cdc168e92Rafael Espindola  };
445c1da981bba867681004004b2d54ec2fdf3c08913Rafael Espindola  class LLVM_LIBRARY_VISIBILITY Link : public Tool  {
446c1da981bba867681004004b2d54ec2fdf3c08913Rafael Espindola  public:
447c1da981bba867681004004b2d54ec2fdf3c08913Rafael Espindola    Link(const ToolChain &TC) : Tool("linux::Link", "linker", TC) {}
448c1da981bba867681004004b2d54ec2fdf3c08913Rafael Espindola
449c1da981bba867681004004b2d54ec2fdf3c08913Rafael Espindola    virtual bool hasIntegratedCPP() const { return false; }
450c1da981bba867681004004b2d54ec2fdf3c08913Rafael Espindola
451c1da981bba867681004004b2d54ec2fdf3c08913Rafael Espindola    virtual void ConstructJob(Compilation &C, const JobAction &JA,
452c1da981bba867681004004b2d54ec2fdf3c08913Rafael Espindola                              const InputInfo &Output,
453c1da981bba867681004004b2d54ec2fdf3c08913Rafael Espindola                              const InputInfoList &Inputs,
454c1da981bba867681004004b2d54ec2fdf3c08913Rafael Espindola                              const ArgList &TCArgs,
455c1da981bba867681004004b2d54ec2fdf3c08913Rafael Espindola                              const char *LinkingOutput) const;
456c1da981bba867681004004b2d54ec2fdf3c08913Rafael Espindola  };
457ba30bbe4e36a30a274da809a11a42f9cdc168e92Rafael Espindola}
45838e317d6dce161b249508686cc67eb7176958762Chris Lattner  /// minix -- Directly call GNU Binutils assembler and linker
45938e317d6dce161b249508686cc67eb7176958762Chris Lattnernamespace minix {
46038e317d6dce161b249508686cc67eb7176958762Chris Lattner  class LLVM_LIBRARY_VISIBILITY Assemble : public Tool  {
46138e317d6dce161b249508686cc67eb7176958762Chris Lattner  public:
46238e317d6dce161b249508686cc67eb7176958762Chris Lattner    Assemble(const ToolChain &TC) : Tool("minix::Assemble", "assembler",
46338e317d6dce161b249508686cc67eb7176958762Chris Lattner                                         TC) {}
46438e317d6dce161b249508686cc67eb7176958762Chris Lattner
46538e317d6dce161b249508686cc67eb7176958762Chris Lattner    virtual bool hasIntegratedCPP() const { return false; }
46638e317d6dce161b249508686cc67eb7176958762Chris Lattner
46738e317d6dce161b249508686cc67eb7176958762Chris Lattner    virtual void ConstructJob(Compilation &C, const JobAction &JA,
46838e317d6dce161b249508686cc67eb7176958762Chris Lattner                              const InputInfo &Output,
46938e317d6dce161b249508686cc67eb7176958762Chris Lattner                              const InputInfoList &Inputs,
47038e317d6dce161b249508686cc67eb7176958762Chris Lattner                              const ArgList &TCArgs,
47138e317d6dce161b249508686cc67eb7176958762Chris Lattner                              const char *LinkingOutput) const;
47238e317d6dce161b249508686cc67eb7176958762Chris Lattner  };
47338e317d6dce161b249508686cc67eb7176958762Chris Lattner  class LLVM_LIBRARY_VISIBILITY Link : public Tool  {
47438e317d6dce161b249508686cc67eb7176958762Chris Lattner  public:
47538e317d6dce161b249508686cc67eb7176958762Chris Lattner    Link(const ToolChain &TC) : Tool("minix::Link", "linker", TC) {}
47638e317d6dce161b249508686cc67eb7176958762Chris Lattner
47738e317d6dce161b249508686cc67eb7176958762Chris Lattner    virtual bool hasIntegratedCPP() const { return false; }
47838e317d6dce161b249508686cc67eb7176958762Chris Lattner
47938e317d6dce161b249508686cc67eb7176958762Chris Lattner    virtual void ConstructJob(Compilation &C, const JobAction &JA,
48038e317d6dce161b249508686cc67eb7176958762Chris Lattner                              const InputInfo &Output,
48138e317d6dce161b249508686cc67eb7176958762Chris Lattner                              const InputInfoList &Inputs,
48238e317d6dce161b249508686cc67eb7176958762Chris Lattner                              const ArgList &TCArgs,
48338e317d6dce161b249508686cc67eb7176958762Chris Lattner                              const char *LinkingOutput) const;
48438e317d6dce161b249508686cc67eb7176958762Chris Lattner  };
48538e317d6dce161b249508686cc67eb7176958762Chris Lattner} // end namespace minix
48638e317d6dce161b249508686cc67eb7176958762Chris Lattner
487e7925a075f110ab21afeae084670a155dea568e3Edward O'Callaghan  /// auroraux -- Directly call GNU Binutils assembler and linker
488e7925a075f110ab21afeae084670a155dea568e3Edward O'Callaghannamespace auroraux {
48992dd1915842410005c68d32c43bb3b3cf5a4a702Duncan Sands  class LLVM_LIBRARY_VISIBILITY Assemble : public Tool  {
490e7925a075f110ab21afeae084670a155dea568e3Edward O'Callaghan  public:
4913038204fd8f6ff22082dd18e4b12ed252b75a5e4Daniel Dunbar    Assemble(const ToolChain &TC) : Tool("auroraux::Assemble", "assembler",
4923038204fd8f6ff22082dd18e4b12ed252b75a5e4Daniel Dunbar                                         TC) {}
493e7925a075f110ab21afeae084670a155dea568e3Edward O'Callaghan
494e7925a075f110ab21afeae084670a155dea568e3Edward O'Callaghan    virtual bool hasIntegratedCPP() const { return false; }
495e7925a075f110ab21afeae084670a155dea568e3Edward O'Callaghan
496e7925a075f110ab21afeae084670a155dea568e3Edward O'Callaghan    virtual void ConstructJob(Compilation &C, const JobAction &JA,
4971eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump                              const InputInfo &Output,
4981eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump                              const InputInfoList &Inputs,
4991eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump                              const ArgList &TCArgs,
500e7925a075f110ab21afeae084670a155dea568e3Edward O'Callaghan                              const char *LinkingOutput) const;
501e7925a075f110ab21afeae084670a155dea568e3Edward O'Callaghan  };
50292dd1915842410005c68d32c43bb3b3cf5a4a702Duncan Sands  class LLVM_LIBRARY_VISIBILITY Link : public Tool  {
503e7925a075f110ab21afeae084670a155dea568e3Edward O'Callaghan  public:
5043038204fd8f6ff22082dd18e4b12ed252b75a5e4Daniel Dunbar    Link(const ToolChain &TC) : Tool("auroraux::Link", "linker", TC) {}
505e7925a075f110ab21afeae084670a155dea568e3Edward O'Callaghan
506e7925a075f110ab21afeae084670a155dea568e3Edward O'Callaghan    virtual bool hasIntegratedCPP() const { return false; }
507e7925a075f110ab21afeae084670a155dea568e3Edward O'Callaghan
508e7925a075f110ab21afeae084670a155dea568e3Edward O'Callaghan    virtual void ConstructJob(Compilation &C, const JobAction &JA,
5091eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump                              const InputInfo &Output,
5101eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump                              const InputInfoList &Inputs,
5111eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump                              const ArgList &TCArgs,
512e7925a075f110ab21afeae084670a155dea568e3Edward O'Callaghan                              const char *LinkingOutput) const;
513e7925a075f110ab21afeae084670a155dea568e3Edward O'Callaghan  };
514e7925a075f110ab21afeae084670a155dea568e3Edward O'Callaghan} // end namespace auroraux
51568a31d406c6dc4382c700d1199b062de2aa7e1daDaniel Dunbar
51611e1b40d759a643086f590f6ffbd9d68360bad46Daniel Dunbar  /// dragonfly -- Directly call GNU Binutils assembler and linker
51711e1b40d759a643086f590f6ffbd9d68360bad46Daniel Dunbarnamespace dragonfly {
51892dd1915842410005c68d32c43bb3b3cf5a4a702Duncan Sands  class LLVM_LIBRARY_VISIBILITY Assemble : public Tool  {
51911e1b40d759a643086f590f6ffbd9d68360bad46Daniel Dunbar  public:
5203038204fd8f6ff22082dd18e4b12ed252b75a5e4Daniel Dunbar    Assemble(const ToolChain &TC) : Tool("dragonfly::Assemble", "assembler",
5213038204fd8f6ff22082dd18e4b12ed252b75a5e4Daniel Dunbar                                         TC) {}
52211e1b40d759a643086f590f6ffbd9d68360bad46Daniel Dunbar
52311e1b40d759a643086f590f6ffbd9d68360bad46Daniel Dunbar    virtual bool hasIntegratedCPP() const { return false; }
52411e1b40d759a643086f590f6ffbd9d68360bad46Daniel Dunbar
52511e1b40d759a643086f590f6ffbd9d68360bad46Daniel Dunbar    virtual void ConstructJob(Compilation &C, const JobAction &JA,
5261eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump                              const InputInfo &Output,
5271eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump                              const InputInfoList &Inputs,
5281eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump                              const ArgList &TCArgs,
52911e1b40d759a643086f590f6ffbd9d68360bad46Daniel Dunbar                              const char *LinkingOutput) const;
53011e1b40d759a643086f590f6ffbd9d68360bad46Daniel Dunbar  };
53192dd1915842410005c68d32c43bb3b3cf5a4a702Duncan Sands  class LLVM_LIBRARY_VISIBILITY Link : public Tool  {
53211e1b40d759a643086f590f6ffbd9d68360bad46Daniel Dunbar  public:
5333038204fd8f6ff22082dd18e4b12ed252b75a5e4Daniel Dunbar    Link(const ToolChain &TC) : Tool("dragonfly::Link", "linker", TC) {}
53411e1b40d759a643086f590f6ffbd9d68360bad46Daniel Dunbar
53511e1b40d759a643086f590f6ffbd9d68360bad46Daniel Dunbar    virtual bool hasIntegratedCPP() const { return false; }
53611e1b40d759a643086f590f6ffbd9d68360bad46Daniel Dunbar
53711e1b40d759a643086f590f6ffbd9d68360bad46Daniel Dunbar    virtual void ConstructJob(Compilation &C, const JobAction &JA,
5381eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump                              const InputInfo &Output,
5391eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump                              const InputInfoList &Inputs,
5401eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump                              const ArgList &TCArgs,
54111e1b40d759a643086f590f6ffbd9d68360bad46Daniel Dunbar                              const char *LinkingOutput) const;
54211e1b40d759a643086f590f6ffbd9d68360bad46Daniel Dunbar  };
543e7925a075f110ab21afeae084670a155dea568e3Edward O'Callaghan} // end namespace dragonfly
54411e1b40d759a643086f590f6ffbd9d68360bad46Daniel Dunbar
545ff58e3610f4e12094def69eb2d6dcb4330378d8fMichael J. Spencer  /// Visual studio tools.
546ff58e3610f4e12094def69eb2d6dcb4330378d8fMichael J. Spencernamespace visualstudio {
547ff58e3610f4e12094def69eb2d6dcb4330378d8fMichael J. Spencer  class LLVM_LIBRARY_VISIBILITY Link : public Tool  {
548ff58e3610f4e12094def69eb2d6dcb4330378d8fMichael J. Spencer  public:
549ff58e3610f4e12094def69eb2d6dcb4330378d8fMichael J. Spencer    Link(const ToolChain &TC) : Tool("visualstudio::Link", "linker", TC) {}
550ff58e3610f4e12094def69eb2d6dcb4330378d8fMichael J. Spencer
551ff58e3610f4e12094def69eb2d6dcb4330378d8fMichael J. Spencer    virtual bool hasIntegratedCPP() const { return false; }
552ff58e3610f4e12094def69eb2d6dcb4330378d8fMichael J. Spencer
553ff58e3610f4e12094def69eb2d6dcb4330378d8fMichael J. Spencer    virtual void ConstructJob(Compilation &C, const JobAction &JA,
554ff58e3610f4e12094def69eb2d6dcb4330378d8fMichael J. Spencer                              const InputInfo &Output,
555ff58e3610f4e12094def69eb2d6dcb4330378d8fMichael J. Spencer                              const InputInfoList &Inputs,
556ff58e3610f4e12094def69eb2d6dcb4330378d8fMichael J. Spencer                              const ArgList &TCArgs,
557ff58e3610f4e12094def69eb2d6dcb4330378d8fMichael J. Spencer                              const char *LinkingOutput) const;
558ff58e3610f4e12094def69eb2d6dcb4330378d8fMichael J. Spencer  };
559ff58e3610f4e12094def69eb2d6dcb4330378d8fMichael J. Spencer} // end namespace visualstudio
560ff58e3610f4e12094def69eb2d6dcb4330378d8fMichael J. Spencer
5619c073ff462eb75ccbb1c4446e21c148f3fc618e1Daniel Dunbar} // end namespace toolchains
5629c073ff462eb75ccbb1c4446e21c148f3fc618e1Daniel Dunbar} // end namespace driver
5639c073ff462eb75ccbb1c4446e21c148f3fc618e1Daniel Dunbar} // end namespace clang
5649c073ff462eb75ccbb1c4446e21c148f3fc618e1Daniel Dunbar
565e7925a075f110ab21afeae084670a155dea568e3Edward O'Callaghan#endif // CLANG_LIB_DRIVER_TOOLS_H_
566