Tools.h revision 42f74f21ece01dc8573d5377859d327fbb23b26c
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 {
21260611a32535c851237926bfcf78869b13c07d5bJohn McCall  class ObjCRuntime;
22260611a32535c851237926bfcf78869b13c07d5bJohn McCall
239c073ff462eb75ccbb1c4446e21c148f3fc618e1Daniel Dunbarnamespace driver {
24df91ef3d6c55692a0236f67b6c6b134a3bf84098Douglas Gregor  class Driver;
25df91ef3d6c55692a0236f67b6c6b134a3bf84098Douglas Gregor
2602633b541b04ad5ffc1c70f4c2feeeb13e607057Daniel Dunbarnamespace toolchains {
27f395528158379e7ea9f6ff4bbb791abadca15aabDaniel Dunbar  class Darwin;
2802633b541b04ad5ffc1c70f4c2feeeb13e607057Daniel Dunbar}
2902633b541b04ad5ffc1c70f4c2feeeb13e607057Daniel Dunbar
30985b825eea7387be10478de0430815ed6a673326Daniel Dunbarnamespace tools {
319c073ff462eb75ccbb1c4446e21c148f3fc618e1Daniel Dunbar
3220a9aa50f9a7d4b03f97bc67e96da1d605c309a2Daniel Dunbar  /// \brief Clang compiler tool.
3392dd1915842410005c68d32c43bb3b3cf5a4a702Duncan Sands  class LLVM_LIBRARY_VISIBILITY Clang : public Tool {
3454db68bf0e389b8aabe1a434f825a81a9c1f7db8Peter Collingbourne    void AddPreprocessingOptions(Compilation &C,
3554db68bf0e389b8aabe1a434f825a81a9c1f7db8Peter Collingbourne                                 const Driver &D,
36df91ef3d6c55692a0236f67b6c6b134a3bf84098Douglas Gregor                                 const ArgList &Args,
37c21c485b4fb58ef5d55cf3e523263dd824a2ace4Daniel Dunbar                                 ArgStringList &CmdArgs,
38c21c485b4fb58ef5d55cf3e523263dd824a2ace4Daniel Dunbar                                 const InputInfo &Output,
39c21c485b4fb58ef5d55cf3e523263dd824a2ace4Daniel Dunbar                                 const InputInfoList &Inputs) const;
40c21c485b4fb58ef5d55cf3e523263dd824a2ace4Daniel Dunbar
41fa41d6975058ceb1b8a24564f6dcec72f89f62e8Daniel Dunbar    void AddARMTargetArgs(const ArgList &Args, ArgStringList &CmdArgs,
42fa41d6975058ceb1b8a24564f6dcec72f89f62e8Daniel Dunbar                          bool KernelOrKext) const;
43ed734737d5af31906e30e537d4a41c760ddcfc59Eric Christopher    void AddMIPSTargetArgs(const ArgList &Args, ArgStringList &CmdArgs) const;
4402a84277864e5476b12c0ec687ed09f0b2922471Hal Finkel    void AddPPCTargetArgs(const ArgList &Args, ArgStringList &CmdArgs) const;
459284d215022457ba867080a713f08f026d89ea17Bruno Cardoso Lopes    void AddSparcTargetArgs(const ArgList &Args, ArgStringList &CmdArgs) const;
466acda16e9c194dcbd0dea64341e182bdb65d0f41Daniel Dunbar    void AddX86TargetArgs(const ArgList &Args, ArgStringList &CmdArgs) const;
479631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    void AddHexagonTargetArgs (const ArgList &Args, ArgStringList &CmdArgs) const;
486acda16e9c194dcbd0dea64341e182bdb65d0f41Daniel Dunbar
49260611a32535c851237926bfcf78869b13c07d5bJohn McCall    enum RewriteKind { RK_None, RK_Fragile, RK_NonFragile };
50260611a32535c851237926bfcf78869b13c07d5bJohn McCall
51260611a32535c851237926bfcf78869b13c07d5bJohn McCall    ObjCRuntime AddObjCRuntimeArgs(const ArgList &args, ArgStringList &cmdArgs,
52260611a32535c851237926bfcf78869b13c07d5bJohn McCall                                   RewriteKind rewrite) const;
53260611a32535c851237926bfcf78869b13c07d5bJohn McCall
549c073ff462eb75ccbb1c4446e21c148f3fc618e1Daniel Dunbar  public:
553038204fd8f6ff22082dd18e4b12ed252b75a5e4Daniel Dunbar    Clang(const ToolChain &TC) : Tool("clang", "clang frontend", TC) {}
569c073ff462eb75ccbb1c4446e21c148f3fc618e1Daniel Dunbar
5760a53f24b160724de0e8dd0e142009981540fd26Daniel Dunbar    virtual bool hasGoodDiagnostics() const { return true; }
588767cbc475ed96397b6f08617814eeb9cab121bdDaniel Dunbar    virtual bool hasIntegratedAssembler() const { return true; }
599c073ff462eb75ccbb1c4446e21c148f3fc618e1Daniel Dunbar    virtual bool hasIntegratedCPP() const { return true; }
6047ac7d27c44bd64a7d0fc03d4babc196cf2b8230Daniel Dunbar
6147ac7d27c44bd64a7d0fc03d4babc196cf2b8230Daniel Dunbar    virtual void ConstructJob(Compilation &C, const JobAction &JA,
6220a9aa50f9a7d4b03f97bc67e96da1d605c309a2Daniel Dunbar                              const InputInfo &Output,
6320a9aa50f9a7d4b03f97bc67e96da1d605c309a2Daniel Dunbar                              const InputInfoList &Inputs,
6420a9aa50f9a7d4b03f97bc67e96da1d605c309a2Daniel Dunbar                              const ArgList &TCArgs,
6520a9aa50f9a7d4b03f97bc67e96da1d605c309a2Daniel Dunbar                              const char *LinkingOutput) const;
6620a9aa50f9a7d4b03f97bc67e96da1d605c309a2Daniel Dunbar  };
6720a9aa50f9a7d4b03f97bc67e96da1d605c309a2Daniel Dunbar
6820a9aa50f9a7d4b03f97bc67e96da1d605c309a2Daniel Dunbar  /// \brief Clang integrated assembler tool.
6920a9aa50f9a7d4b03f97bc67e96da1d605c309a2Daniel Dunbar  class LLVM_LIBRARY_VISIBILITY ClangAs : public Tool {
70fc30829694e62040c14f329f5491724fe7476241Jim Grosbach    void AddARMTargetArgs(const ArgList &Args, ArgStringList &CmdArgs) const;
7120a9aa50f9a7d4b03f97bc67e96da1d605c309a2Daniel Dunbar  public:
723038204fd8f6ff22082dd18e4b12ed252b75a5e4Daniel Dunbar    ClangAs(const ToolChain &TC) : Tool("clang::as",
733038204fd8f6ff22082dd18e4b12ed252b75a5e4Daniel Dunbar                                        "clang integrated assembler", TC) {}
7420a9aa50f9a7d4b03f97bc67e96da1d605c309a2Daniel Dunbar
7520a9aa50f9a7d4b03f97bc67e96da1d605c309a2Daniel Dunbar    virtual bool hasGoodDiagnostics() const { return true; }
7620a9aa50f9a7d4b03f97bc67e96da1d605c309a2Daniel Dunbar    virtual bool hasIntegratedAssembler() const { return false; }
7720a9aa50f9a7d4b03f97bc67e96da1d605c309a2Daniel Dunbar    virtual bool hasIntegratedCPP() const { return false; }
7820a9aa50f9a7d4b03f97bc67e96da1d605c309a2Daniel Dunbar
7920a9aa50f9a7d4b03f97bc67e96da1d605c309a2Daniel Dunbar    virtual void ConstructJob(Compilation &C, const JobAction &JA,
801eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump                              const InputInfo &Output,
811eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump                              const InputInfoList &Inputs,
821eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump                              const ArgList &TCArgs,
8347ac7d27c44bd64a7d0fc03d4babc196cf2b8230Daniel Dunbar                              const char *LinkingOutput) const;
849c073ff462eb75ccbb1c4446e21c148f3fc618e1Daniel Dunbar  };
859c073ff462eb75ccbb1c4446e21c148f3fc618e1Daniel Dunbar
8631b1e5437e7435879fc044afb77ff27096008e72Daniel Dunbar  /// gcc - Generic GCC tool implementations.
8731b1e5437e7435879fc044afb77ff27096008e72Daniel Dunbarnamespace gcc {
8892dd1915842410005c68d32c43bb3b3cf5a4a702Duncan Sands  class LLVM_LIBRARY_VISIBILITY Common : public Tool {
899c073ff462eb75ccbb1c4446e21c148f3fc618e1Daniel Dunbar  public:
903038204fd8f6ff22082dd18e4b12ed252b75a5e4Daniel Dunbar    Common(const char *Name, const char *ShortName,
913038204fd8f6ff22082dd18e4b12ed252b75a5e4Daniel Dunbar           const ToolChain &TC) : Tool(Name, ShortName, TC) {}
9247ac7d27c44bd64a7d0fc03d4babc196cf2b8230Daniel Dunbar
9347ac7d27c44bd64a7d0fc03d4babc196cf2b8230Daniel Dunbar    virtual void ConstructJob(Compilation &C, const JobAction &JA,
941eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump                              const InputInfo &Output,
951eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump                              const InputInfoList &Inputs,
961eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump                              const ArgList &TCArgs,
9747ac7d27c44bd64a7d0fc03d4babc196cf2b8230Daniel Dunbar                              const char *LinkingOutput) const;
98b488c1dac8e53206f07103d794a62a3f5012c0f4Daniel Dunbar
99b488c1dac8e53206f07103d794a62a3f5012c0f4Daniel Dunbar    /// RenderExtraToolArgs - Render any arguments necessary to force
100b488c1dac8e53206f07103d794a62a3f5012c0f4Daniel Dunbar    /// the particular tool mode.
10182b51cce8cea6b6bb6175c406c2ab425c91d9dc8Daniel Dunbar    virtual void RenderExtraToolArgs(const JobAction &JA,
10282b51cce8cea6b6bb6175c406c2ab425c91d9dc8Daniel Dunbar                                     ArgStringList &CmdArgs) const = 0;
1039c073ff462eb75ccbb1c4446e21c148f3fc618e1Daniel Dunbar  };
1049c073ff462eb75ccbb1c4446e21c148f3fc618e1Daniel Dunbar
1051eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump
10692dd1915842410005c68d32c43bb3b3cf5a4a702Duncan Sands  class LLVM_LIBRARY_VISIBILITY Preprocess : public Common {
1079c073ff462eb75ccbb1c4446e21c148f3fc618e1Daniel Dunbar  public:
1083038204fd8f6ff22082dd18e4b12ed252b75a5e4Daniel Dunbar    Preprocess(const ToolChain &TC) : Common("gcc::Preprocess",
1093038204fd8f6ff22082dd18e4b12ed252b75a5e4Daniel Dunbar                                             "gcc preprocessor", TC) {}
110b488c1dac8e53206f07103d794a62a3f5012c0f4Daniel Dunbar
11160a53f24b160724de0e8dd0e142009981540fd26Daniel Dunbar    virtual bool hasGoodDiagnostics() const { return true; }
112b488c1dac8e53206f07103d794a62a3f5012c0f4Daniel Dunbar    virtual bool hasIntegratedCPP() const { return false; }
113b488c1dac8e53206f07103d794a62a3f5012c0f4Daniel Dunbar
11482b51cce8cea6b6bb6175c406c2ab425c91d9dc8Daniel Dunbar    virtual void RenderExtraToolArgs(const JobAction &JA,
11582b51cce8cea6b6bb6175c406c2ab425c91d9dc8Daniel Dunbar                                     ArgStringList &CmdArgs) const;
116b488c1dac8e53206f07103d794a62a3f5012c0f4Daniel Dunbar  };
117b488c1dac8e53206f07103d794a62a3f5012c0f4Daniel Dunbar
11892dd1915842410005c68d32c43bb3b3cf5a4a702Duncan Sands  class LLVM_LIBRARY_VISIBILITY Precompile : public Common  {
119b488c1dac8e53206f07103d794a62a3f5012c0f4Daniel Dunbar  public:
1203038204fd8f6ff22082dd18e4b12ed252b75a5e4Daniel Dunbar    Precompile(const ToolChain &TC) : Common("gcc::Precompile",
1213038204fd8f6ff22082dd18e4b12ed252b75a5e4Daniel Dunbar                                             "gcc precompile", 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 Compile : public Common  {
1319c073ff462eb75ccbb1c4446e21c148f3fc618e1Daniel Dunbar  public:
1323038204fd8f6ff22082dd18e4b12ed252b75a5e4Daniel Dunbar    Compile(const ToolChain &TC) : Common("gcc::Compile",
1333038204fd8f6ff22082dd18e4b12ed252b75a5e4Daniel Dunbar                                          "gcc frontend", TC) {}
1349c073ff462eb75ccbb1c4446e21c148f3fc618e1Daniel Dunbar
13560a53f24b160724de0e8dd0e142009981540fd26Daniel Dunbar    virtual bool hasGoodDiagnostics() const { return true; }
1369c073ff462eb75ccbb1c4446e21c148f3fc618e1Daniel Dunbar    virtual bool hasIntegratedCPP() const { return true; }
13747ac7d27c44bd64a7d0fc03d4babc196cf2b8230Daniel Dunbar
13882b51cce8cea6b6bb6175c406c2ab425c91d9dc8Daniel Dunbar    virtual void RenderExtraToolArgs(const JobAction &JA,
13982b51cce8cea6b6bb6175c406c2ab425c91d9dc8Daniel Dunbar                                     ArgStringList &CmdArgs) const;
1409c073ff462eb75ccbb1c4446e21c148f3fc618e1Daniel Dunbar  };
1419c073ff462eb75ccbb1c4446e21c148f3fc618e1Daniel Dunbar
14292dd1915842410005c68d32c43bb3b3cf5a4a702Duncan Sands  class LLVM_LIBRARY_VISIBILITY Assemble : public Common  {
1439c073ff462eb75ccbb1c4446e21c148f3fc618e1Daniel Dunbar  public:
1443038204fd8f6ff22082dd18e4b12ed252b75a5e4Daniel Dunbar    Assemble(const ToolChain &TC) : Common("gcc::Assemble",
1453038204fd8f6ff22082dd18e4b12ed252b75a5e4Daniel Dunbar                                           "assembler (via gcc)", TC) {}
1469c073ff462eb75ccbb1c4446e21c148f3fc618e1Daniel Dunbar
1479c073ff462eb75ccbb1c4446e21c148f3fc618e1Daniel Dunbar    virtual bool hasIntegratedCPP() const { return false; }
14847ac7d27c44bd64a7d0fc03d4babc196cf2b8230Daniel Dunbar
14982b51cce8cea6b6bb6175c406c2ab425c91d9dc8Daniel Dunbar    virtual void RenderExtraToolArgs(const JobAction &JA,
15082b51cce8cea6b6bb6175c406c2ab425c91d9dc8Daniel Dunbar                                     ArgStringList &CmdArgs) const;
1519c073ff462eb75ccbb1c4446e21c148f3fc618e1Daniel Dunbar  };
1529c073ff462eb75ccbb1c4446e21c148f3fc618e1Daniel Dunbar
15392dd1915842410005c68d32c43bb3b3cf5a4a702Duncan Sands  class LLVM_LIBRARY_VISIBILITY Link : public Common  {
1549c073ff462eb75ccbb1c4446e21c148f3fc618e1Daniel Dunbar  public:
1553038204fd8f6ff22082dd18e4b12ed252b75a5e4Daniel Dunbar    Link(const ToolChain &TC) : Common("gcc::Link",
1563038204fd8f6ff22082dd18e4b12ed252b75a5e4Daniel Dunbar                                       "linker (via gcc)", TC) {}
1579c073ff462eb75ccbb1c4446e21c148f3fc618e1Daniel Dunbar
1589c073ff462eb75ccbb1c4446e21c148f3fc618e1Daniel Dunbar    virtual bool hasIntegratedCPP() const { return false; }
1598ba9a6244c56b19bc2a24de5d0c32ff37d50177bChad Rosier    virtual bool isLinkJob() const { return true; }
16047ac7d27c44bd64a7d0fc03d4babc196cf2b8230Daniel Dunbar
16182b51cce8cea6b6bb6175c406c2ab425c91d9dc8Daniel Dunbar    virtual void RenderExtraToolArgs(const JobAction &JA,
16282b51cce8cea6b6bb6175c406c2ab425c91d9dc8Daniel Dunbar                                     ArgStringList &CmdArgs) const;
1639c073ff462eb75ccbb1c4446e21c148f3fc618e1Daniel Dunbar  };
16431b1e5437e7435879fc044afb77ff27096008e72Daniel Dunbar} // end namespace gcc
1659c073ff462eb75ccbb1c4446e21c148f3fc618e1Daniel Dunbar
1669631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicumnamespace hexagon {
1679631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  // For Hexagon, we do not need to instantiate tools for PreProcess, PreCompile and Compile.
1689631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  // We simply use "clang -cc1" for those actions.
1699631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  class LLVM_LIBRARY_VISIBILITY Assemble : public Tool {
1709631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  public:
1719631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    Assemble(const ToolChain &TC) : Tool("hexagon::Assemble",
1729631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum      "hexagon-as", TC) {}
1739631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
1749631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    virtual bool hasIntegratedCPP() const { return false; }
1759631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
1769631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    virtual void RenderExtraToolArgs(const JobAction &JA,
1779631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum                                     ArgStringList &CmdArgs) const;
1789631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    virtual void ConstructJob(Compilation &C, const JobAction &JA,
1799631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum                              const InputInfo &Output,
1809631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum                              const InputInfoList &Inputs,
1819631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum                              const ArgList &TCArgs,
1829631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum                              const char *LinkingOutput) const;
1839631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  };
1849631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
1859631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  class LLVM_LIBRARY_VISIBILITY Link : public Tool {
1869631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  public:
1879631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    Link(const ToolChain &TC) : Tool("hexagon::Link",
1889631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum      "hexagon-ld", TC) {}
1899631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
1909631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    virtual bool hasIntegratedCPP() const { return false; }
1918ba9a6244c56b19bc2a24de5d0c32ff37d50177bChad Rosier    virtual bool isLinkJob() const { return true; }
1929631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
1939631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    virtual void RenderExtraToolArgs(const JobAction &JA,
1949631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum                                     ArgStringList &CmdArgs) const;
1959631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    virtual void ConstructJob(Compilation &C, const JobAction &JA,
1969631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum                              const InputInfo &Output,
1979631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum                              const InputInfoList &Inputs,
1989631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum                              const ArgList &TCArgs,
1999631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum                              const char *LinkingOutput) const;
2009631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  };
2019631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum} // end namespace hexagon.
2029631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
2039631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
204ff7488dc9a766f94daf54d81b03ab9160d0bfd88Daniel Dunbarnamespace darwin {
20592dd1915842410005c68d32c43bb3b3cf5a4a702Duncan Sands  class LLVM_LIBRARY_VISIBILITY DarwinTool : public Tool {
20699ba9e3bd70671f3441fb974895f226a83ce0e66David Blaikie    virtual void anchor();
207fbefe6bd6f62a3361813498dc672ab0d6c0d4fd1Daniel Dunbar  protected:
208fbefe6bd6f62a3361813498dc672ab0d6c0d4fd1Daniel Dunbar    void AddDarwinArch(const ArgList &Args, ArgStringList &CmdArgs) const;
209fbefe6bd6f62a3361813498dc672ab0d6c0d4fd1Daniel Dunbar
210fbefe6bd6f62a3361813498dc672ab0d6c0d4fd1Daniel Dunbar    const toolchains::Darwin &getDarwinToolChain() const {
211fbefe6bd6f62a3361813498dc672ab0d6c0d4fd1Daniel Dunbar      return reinterpret_cast<const toolchains::Darwin&>(getToolChain());
212fbefe6bd6f62a3361813498dc672ab0d6c0d4fd1Daniel Dunbar    }
213fbefe6bd6f62a3361813498dc672ab0d6c0d4fd1Daniel Dunbar
214fbefe6bd6f62a3361813498dc672ab0d6c0d4fd1Daniel Dunbar  public:
2153038204fd8f6ff22082dd18e4b12ed252b75a5e4Daniel Dunbar    DarwinTool(const char *Name, const char *ShortName,
2163038204fd8f6ff22082dd18e4b12ed252b75a5e4Daniel Dunbar               const ToolChain &TC) : Tool(Name, ShortName, TC) {}
217fbefe6bd6f62a3361813498dc672ab0d6c0d4fd1Daniel Dunbar  };
218fbefe6bd6f62a3361813498dc672ab0d6c0d4fd1Daniel Dunbar
21992dd1915842410005c68d32c43bb3b3cf5a4a702Duncan Sands  class LLVM_LIBRARY_VISIBILITY CC1 : public DarwinTool  {
22099ba9e3bd70671f3441fb974895f226a83ce0e66David Blaikie    virtual void anchor();
221a5a7bd0de7b6b80212095195a055a4a43f21d4b2Daniel Dunbar  public:
2221eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump    static const char *getBaseInputName(const ArgList &Args,
223a5a7bd0de7b6b80212095195a055a4a43f21d4b2Daniel Dunbar                                 const InputInfoList &Input);
2241eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump    static const char *getBaseInputStem(const ArgList &Args,
225a5a7bd0de7b6b80212095195a055a4a43f21d4b2Daniel Dunbar                                 const InputInfoList &Input);
2261eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump    static const char *getDependencyFileName(const ArgList &Args,
227a5a7bd0de7b6b80212095195a055a4a43f21d4b2Daniel Dunbar                                             const InputInfoList &Inputs);
228a5a7bd0de7b6b80212095195a055a4a43f21d4b2Daniel Dunbar
22940f1265ebd42ece3e7f7917319b56012e8e2bce2Daniel Dunbar  protected:
23040f1265ebd42ece3e7f7917319b56012e8e2bce2Daniel Dunbar    const char *getCC1Name(types::ID Type) const;
231a3ec60e0cf2a1916f479288998d31bd980b1a306Daniel Dunbar
232a3ec60e0cf2a1916f479288998d31bd980b1a306Daniel Dunbar    void AddCC1Args(const ArgList &Args, ArgStringList &CmdArgs) const;
233285f9a284704c07cd50e4597408d5f93518cd7c3Chad Rosier    void RemoveCC1UnsupportedArgs(ArgStringList &CmdArgs) const;
23440f1265ebd42ece3e7f7917319b56012e8e2bce2Daniel Dunbar    void AddCC1OptionsArgs(const ArgList &Args, ArgStringList &CmdArgs,
23540f1265ebd42ece3e7f7917319b56012e8e2bce2Daniel Dunbar                           const InputInfoList &Inputs,
236a3ec60e0cf2a1916f479288998d31bd980b1a306Daniel Dunbar                           const ArgStringList &OutputArgs) const;
23740f1265ebd42ece3e7f7917319b56012e8e2bce2Daniel Dunbar    void AddCPPOptionsArgs(const ArgList &Args, ArgStringList &CmdArgs,
23840f1265ebd42ece3e7f7917319b56012e8e2bce2Daniel Dunbar                           const InputInfoList &Inputs,
239a3ec60e0cf2a1916f479288998d31bd980b1a306Daniel Dunbar                           const ArgStringList &OutputArgs) const;
2401eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump    void AddCPPUniqueOptionsArgs(const ArgList &Args,
241a3ec60e0cf2a1916f479288998d31bd980b1a306Daniel Dunbar                                 ArgStringList &CmdArgs,
242a3ec60e0cf2a1916f479288998d31bd980b1a306Daniel Dunbar                                 const InputInfoList &Inputs) const;
243a3ec60e0cf2a1916f479288998d31bd980b1a306Daniel Dunbar    void AddCPPArgs(const ArgList &Args, ArgStringList &CmdArgs) const;
24440f1265ebd42ece3e7f7917319b56012e8e2bce2Daniel Dunbar
24540f1265ebd42ece3e7f7917319b56012e8e2bce2Daniel Dunbar  public:
2463038204fd8f6ff22082dd18e4b12ed252b75a5e4Daniel Dunbar    CC1(const char *Name, const char *ShortName,
2473038204fd8f6ff22082dd18e4b12ed252b75a5e4Daniel Dunbar        const ToolChain &TC) : DarwinTool(Name, ShortName, TC) {}
24840f1265ebd42ece3e7f7917319b56012e8e2bce2Daniel Dunbar
24960a53f24b160724de0e8dd0e142009981540fd26Daniel Dunbar    virtual bool hasGoodDiagnostics() const { return true; }
25040f1265ebd42ece3e7f7917319b56012e8e2bce2Daniel Dunbar    virtual bool hasIntegratedCPP() const { return true; }
25140f1265ebd42ece3e7f7917319b56012e8e2bce2Daniel Dunbar  };
25240f1265ebd42ece3e7f7917319b56012e8e2bce2Daniel Dunbar
25392dd1915842410005c68d32c43bb3b3cf5a4a702Duncan Sands  class LLVM_LIBRARY_VISIBILITY Preprocess : public CC1  {
25440f1265ebd42ece3e7f7917319b56012e8e2bce2Daniel Dunbar  public:
2553038204fd8f6ff22082dd18e4b12ed252b75a5e4Daniel Dunbar    Preprocess(const ToolChain &TC) : CC1("darwin::Preprocess",
2563038204fd8f6ff22082dd18e4b12ed252b75a5e4Daniel Dunbar                                          "gcc preprocessor", TC) {}
25740f1265ebd42ece3e7f7917319b56012e8e2bce2Daniel Dunbar
25840f1265ebd42ece3e7f7917319b56012e8e2bce2Daniel Dunbar    virtual void ConstructJob(Compilation &C, const JobAction &JA,
2591eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump                              const InputInfo &Output,
2601eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump                              const InputInfoList &Inputs,
2611eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump                              const ArgList &TCArgs,
26240f1265ebd42ece3e7f7917319b56012e8e2bce2Daniel Dunbar                              const char *LinkingOutput) const;
26340f1265ebd42ece3e7f7917319b56012e8e2bce2Daniel Dunbar  };
26440f1265ebd42ece3e7f7917319b56012e8e2bce2Daniel Dunbar
26592dd1915842410005c68d32c43bb3b3cf5a4a702Duncan Sands  class LLVM_LIBRARY_VISIBILITY Compile : public CC1  {
26640f1265ebd42ece3e7f7917319b56012e8e2bce2Daniel Dunbar  public:
2673038204fd8f6ff22082dd18e4b12ed252b75a5e4Daniel Dunbar    Compile(const ToolChain &TC) : CC1("darwin::Compile", "gcc frontend", TC) {}
26840f1265ebd42ece3e7f7917319b56012e8e2bce2Daniel Dunbar
26940f1265ebd42ece3e7f7917319b56012e8e2bce2Daniel Dunbar    virtual void ConstructJob(Compilation &C, const JobAction &JA,
2701eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump                              const InputInfo &Output,
2711eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump                              const InputInfoList &Inputs,
2721eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump                              const ArgList &TCArgs,
27340f1265ebd42ece3e7f7917319b56012e8e2bce2Daniel Dunbar                              const char *LinkingOutput) const;
27440f1265ebd42ece3e7f7917319b56012e8e2bce2Daniel Dunbar  };
27540f1265ebd42ece3e7f7917319b56012e8e2bce2Daniel Dunbar
27692dd1915842410005c68d32c43bb3b3cf5a4a702Duncan Sands  class LLVM_LIBRARY_VISIBILITY Assemble : public DarwinTool  {
2778cac5f7e1ce63dd77ee0fb4ef68f9fa804f41ea6Daniel Dunbar  public:
2783038204fd8f6ff22082dd18e4b12ed252b75a5e4Daniel Dunbar    Assemble(const ToolChain &TC) : DarwinTool("darwin::Assemble",
2793038204fd8f6ff22082dd18e4b12ed252b75a5e4Daniel Dunbar                                               "assembler", TC) {}
2808cac5f7e1ce63dd77ee0fb4ef68f9fa804f41ea6Daniel Dunbar
2818cac5f7e1ce63dd77ee0fb4ef68f9fa804f41ea6Daniel Dunbar    virtual bool hasIntegratedCPP() const { return false; }
2828cac5f7e1ce63dd77ee0fb4ef68f9fa804f41ea6Daniel Dunbar
2838cac5f7e1ce63dd77ee0fb4ef68f9fa804f41ea6Daniel Dunbar    virtual void ConstructJob(Compilation &C, const JobAction &JA,
2841eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump                              const InputInfo &Output,
2851eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump                              const InputInfoList &Inputs,
2861eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump                              const ArgList &TCArgs,
28702633b541b04ad5ffc1c70f4c2feeeb13e607057Daniel Dunbar                              const char *LinkingOutput) const;
28802633b541b04ad5ffc1c70f4c2feeeb13e607057Daniel Dunbar  };
28902633b541b04ad5ffc1c70f4c2feeeb13e607057Daniel Dunbar
29092dd1915842410005c68d32c43bb3b3cf5a4a702Duncan Sands  class LLVM_LIBRARY_VISIBILITY Link : public DarwinTool  {
291748de8eda222f087434d8bd703176b316a061341Daniel Dunbar    void AddLinkArgs(Compilation &C, const ArgList &Args,
292748de8eda222f087434d8bd703176b316a061341Daniel Dunbar                     ArgStringList &CmdArgs) const;
29302633b541b04ad5ffc1c70f4c2feeeb13e607057Daniel Dunbar
29402633b541b04ad5ffc1c70f4c2feeeb13e607057Daniel Dunbar  public:
2953038204fd8f6ff22082dd18e4b12ed252b75a5e4Daniel Dunbar    Link(const ToolChain &TC) : DarwinTool("darwin::Link", "linker", TC) {}
29602633b541b04ad5ffc1c70f4c2feeeb13e607057Daniel Dunbar
29702633b541b04ad5ffc1c70f4c2feeeb13e607057Daniel Dunbar    virtual bool hasIntegratedCPP() const { return false; }
2988ba9a6244c56b19bc2a24de5d0c32ff37d50177bChad Rosier    virtual bool isLinkJob() const { return true; }
29902633b541b04ad5ffc1c70f4c2feeeb13e607057Daniel Dunbar
30002633b541b04ad5ffc1c70f4c2feeeb13e607057Daniel Dunbar    virtual void ConstructJob(Compilation &C, const JobAction &JA,
3011eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump                              const InputInfo &Output,
3021eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump                              const InputInfoList &Inputs,
3031eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump                              const ArgList &TCArgs,
3048cac5f7e1ce63dd77ee0fb4ef68f9fa804f41ea6Daniel Dunbar                              const char *LinkingOutput) const;
3058cac5f7e1ce63dd77ee0fb4ef68f9fa804f41ea6Daniel Dunbar  };
3068cac5f7e1ce63dd77ee0fb4ef68f9fa804f41ea6Daniel Dunbar
30792dd1915842410005c68d32c43bb3b3cf5a4a702Duncan Sands  class LLVM_LIBRARY_VISIBILITY Lipo : public DarwinTool  {
308ff7488dc9a766f94daf54d81b03ab9160d0bfd88Daniel Dunbar  public:
3093038204fd8f6ff22082dd18e4b12ed252b75a5e4Daniel Dunbar    Lipo(const ToolChain &TC) : DarwinTool("darwin::Lipo", "lipo", TC) {}
310ff7488dc9a766f94daf54d81b03ab9160d0bfd88Daniel Dunbar
311ff7488dc9a766f94daf54d81b03ab9160d0bfd88Daniel Dunbar    virtual bool hasIntegratedCPP() const { return false; }
312ff7488dc9a766f94daf54d81b03ab9160d0bfd88Daniel Dunbar
313ff7488dc9a766f94daf54d81b03ab9160d0bfd88Daniel Dunbar    virtual void ConstructJob(Compilation &C, const JobAction &JA,
3141eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump                              const InputInfo &Output,
3151eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump                              const InputInfoList &Inputs,
3161eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump                              const ArgList &TCArgs,
3176e0f25483b1a801cd1155ea89c2b725feab16332Daniel Dunbar                              const char *LinkingOutput) const;
3186e0f25483b1a801cd1155ea89c2b725feab16332Daniel Dunbar  };
3196e0f25483b1a801cd1155ea89c2b725feab16332Daniel Dunbar
3206e0f25483b1a801cd1155ea89c2b725feab16332Daniel Dunbar  class LLVM_LIBRARY_VISIBILITY Dsymutil : public DarwinTool  {
3216e0f25483b1a801cd1155ea89c2b725feab16332Daniel Dunbar  public:
3226e0f25483b1a801cd1155ea89c2b725feab16332Daniel Dunbar    Dsymutil(const ToolChain &TC) : DarwinTool("darwin::Dsymutil",
3236e0f25483b1a801cd1155ea89c2b725feab16332Daniel Dunbar                                               "dsymutil", TC) {}
3246e0f25483b1a801cd1155ea89c2b725feab16332Daniel Dunbar
3256e0f25483b1a801cd1155ea89c2b725feab16332Daniel Dunbar    virtual bool hasIntegratedCPP() const { return false; }
3266e0f25483b1a801cd1155ea89c2b725feab16332Daniel Dunbar
3276e0f25483b1a801cd1155ea89c2b725feab16332Daniel Dunbar    virtual void ConstructJob(Compilation &C, const JobAction &JA,
3286e0f25483b1a801cd1155ea89c2b725feab16332Daniel Dunbar                              const InputInfo &Output,
3296e0f25483b1a801cd1155ea89c2b725feab16332Daniel Dunbar                              const InputInfoList &Inputs,
3306e0f25483b1a801cd1155ea89c2b725feab16332Daniel Dunbar                              const ArgList &TCArgs,
331f7b8eec37c8c8012fa525c71fb29a58c9f29beefDaniel Dunbar                              const char *LinkingOutput) const;
332f7b8eec37c8c8012fa525c71fb29a58c9f29beefDaniel Dunbar  };
333f857186fd1995b34185d063a29b11ad4f948519fEric Christopher
334f857186fd1995b34185d063a29b11ad4f948519fEric Christopher  class LLVM_LIBRARY_VISIBILITY VerifyDebug : public DarwinTool  {
335f857186fd1995b34185d063a29b11ad4f948519fEric Christopher  public:
336f857186fd1995b34185d063a29b11ad4f948519fEric Christopher    VerifyDebug(const ToolChain &TC) : DarwinTool("darwin::VerifyDebug",
337f857186fd1995b34185d063a29b11ad4f948519fEric Christopher						  "dwarfdump", TC) {}
338f857186fd1995b34185d063a29b11ad4f948519fEric Christopher
339f857186fd1995b34185d063a29b11ad4f948519fEric Christopher    virtual bool hasIntegratedCPP() const { return false; }
340f857186fd1995b34185d063a29b11ad4f948519fEric Christopher
341f857186fd1995b34185d063a29b11ad4f948519fEric Christopher    virtual void ConstructJob(Compilation &C, const JobAction &JA,
342f857186fd1995b34185d063a29b11ad4f948519fEric Christopher			      const InputInfo &Output,
343f857186fd1995b34185d063a29b11ad4f948519fEric Christopher			      const InputInfoList &Inputs,
344f857186fd1995b34185d063a29b11ad4f948519fEric Christopher			      const ArgList &TCArgs,
345f857186fd1995b34185d063a29b11ad4f948519fEric Christopher			      const char *LinkingOutput) const;
346f857186fd1995b34185d063a29b11ad4f948519fEric Christopher  };
347f857186fd1995b34185d063a29b11ad4f948519fEric Christopher
348f7b8eec37c8c8012fa525c71fb29a58c9f29beefDaniel Dunbar}
349f7b8eec37c8c8012fa525c71fb29a58c9f29beefDaniel Dunbar
350f7b8eec37c8c8012fa525c71fb29a58c9f29beefDaniel Dunbar  /// openbsd -- Directly call GNU Binutils assembler and linker
351f7b8eec37c8c8012fa525c71fb29a58c9f29beefDaniel Dunbarnamespace openbsd {
35292dd1915842410005c68d32c43bb3b3cf5a4a702Duncan Sands  class LLVM_LIBRARY_VISIBILITY Assemble : public Tool  {
353f7b8eec37c8c8012fa525c71fb29a58c9f29beefDaniel Dunbar  public:
3543038204fd8f6ff22082dd18e4b12ed252b75a5e4Daniel Dunbar    Assemble(const ToolChain &TC) : Tool("openbsd::Assemble", "assembler",
3553038204fd8f6ff22082dd18e4b12ed252b75a5e4Daniel Dunbar                                         TC) {}
356f7b8eec37c8c8012fa525c71fb29a58c9f29beefDaniel Dunbar
357f7b8eec37c8c8012fa525c71fb29a58c9f29beefDaniel Dunbar    virtual bool hasIntegratedCPP() const { return false; }
358f7b8eec37c8c8012fa525c71fb29a58c9f29beefDaniel Dunbar
359f7b8eec37c8c8012fa525c71fb29a58c9f29beefDaniel Dunbar    virtual void ConstructJob(Compilation &C, const JobAction &JA,
3601eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump                              const InputInfo &Output,
3611eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump                              const InputInfoList &Inputs,
3621eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump                              const ArgList &TCArgs,
363f7b8eec37c8c8012fa525c71fb29a58c9f29beefDaniel Dunbar                              const char *LinkingOutput) const;
364f7b8eec37c8c8012fa525c71fb29a58c9f29beefDaniel Dunbar  };
36592dd1915842410005c68d32c43bb3b3cf5a4a702Duncan Sands  class LLVM_LIBRARY_VISIBILITY Link : public Tool  {
366f7b8eec37c8c8012fa525c71fb29a58c9f29beefDaniel Dunbar  public:
3673038204fd8f6ff22082dd18e4b12ed252b75a5e4Daniel Dunbar    Link(const ToolChain &TC) : Tool("openbsd::Link", "linker", TC) {}
368f7b8eec37c8c8012fa525c71fb29a58c9f29beefDaniel Dunbar
369f7b8eec37c8c8012fa525c71fb29a58c9f29beefDaniel Dunbar    virtual bool hasIntegratedCPP() const { return false; }
3708ba9a6244c56b19bc2a24de5d0c32ff37d50177bChad Rosier    virtual bool isLinkJob() const { return true; }
371f7b8eec37c8c8012fa525c71fb29a58c9f29beefDaniel Dunbar
372f7b8eec37c8c8012fa525c71fb29a58c9f29beefDaniel Dunbar    virtual void ConstructJob(Compilation &C, const JobAction &JA,
3731eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump                              const InputInfo &Output,
3741eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump                              const InputInfoList &Inputs,
3751eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump                              const ArgList &TCArgs,
376ff7488dc9a766f94daf54d81b03ab9160d0bfd88Daniel Dunbar                              const char *LinkingOutput) const;
377ff7488dc9a766f94daf54d81b03ab9160d0bfd88Daniel Dunbar  };
378e7925a075f110ab21afeae084670a155dea568e3Edward O'Callaghan} // end namespace openbsd
379ff7488dc9a766f94daf54d81b03ab9160d0bfd88Daniel Dunbar
38042f74f21ece01dc8573d5377859d327fbb23b26cEli Friedman  /// bitrig -- Directly call GNU Binutils assembler and linker
38142f74f21ece01dc8573d5377859d327fbb23b26cEli Friedmannamespace bitrig {
38242f74f21ece01dc8573d5377859d327fbb23b26cEli Friedman  class LLVM_LIBRARY_VISIBILITY Assemble : public Tool  {
38342f74f21ece01dc8573d5377859d327fbb23b26cEli Friedman  public:
38442f74f21ece01dc8573d5377859d327fbb23b26cEli Friedman    Assemble(const ToolChain &TC) : Tool("bitrig::Assemble", "assembler",
38542f74f21ece01dc8573d5377859d327fbb23b26cEli Friedman                                         TC) {}
38642f74f21ece01dc8573d5377859d327fbb23b26cEli Friedman
38742f74f21ece01dc8573d5377859d327fbb23b26cEli Friedman    virtual bool hasIntegratedCPP() const { return false; }
38842f74f21ece01dc8573d5377859d327fbb23b26cEli Friedman
38942f74f21ece01dc8573d5377859d327fbb23b26cEli Friedman    virtual void ConstructJob(Compilation &C, const JobAction &JA,
39042f74f21ece01dc8573d5377859d327fbb23b26cEli Friedman                              const InputInfo &Output,
39142f74f21ece01dc8573d5377859d327fbb23b26cEli Friedman                              const InputInfoList &Inputs,
39242f74f21ece01dc8573d5377859d327fbb23b26cEli Friedman                              const ArgList &TCArgs,
39342f74f21ece01dc8573d5377859d327fbb23b26cEli Friedman                              const char *LinkingOutput) const;
39442f74f21ece01dc8573d5377859d327fbb23b26cEli Friedman  };
39542f74f21ece01dc8573d5377859d327fbb23b26cEli Friedman  class LLVM_LIBRARY_VISIBILITY Link : public Tool  {
39642f74f21ece01dc8573d5377859d327fbb23b26cEli Friedman  public:
39742f74f21ece01dc8573d5377859d327fbb23b26cEli Friedman    Link(const ToolChain &TC) : Tool("bitrig::Link", "linker", TC) {}
39842f74f21ece01dc8573d5377859d327fbb23b26cEli Friedman
39942f74f21ece01dc8573d5377859d327fbb23b26cEli Friedman    virtual bool hasIntegratedCPP() const { return false; }
40042f74f21ece01dc8573d5377859d327fbb23b26cEli Friedman    virtual bool isLinkJob() const { return true; }
40142f74f21ece01dc8573d5377859d327fbb23b26cEli Friedman
40242f74f21ece01dc8573d5377859d327fbb23b26cEli Friedman    virtual void ConstructJob(Compilation &C, const JobAction &JA,
40342f74f21ece01dc8573d5377859d327fbb23b26cEli Friedman                              const InputInfo &Output,
40442f74f21ece01dc8573d5377859d327fbb23b26cEli Friedman                              const InputInfoList &Inputs,
40542f74f21ece01dc8573d5377859d327fbb23b26cEli Friedman                              const ArgList &TCArgs,
40642f74f21ece01dc8573d5377859d327fbb23b26cEli Friedman                              const char *LinkingOutput) const;
40742f74f21ece01dc8573d5377859d327fbb23b26cEli Friedman  };
40842f74f21ece01dc8573d5377859d327fbb23b26cEli Friedman} // end namespace bitrig
40942f74f21ece01dc8573d5377859d327fbb23b26cEli Friedman
41068a31d406c6dc4382c700d1199b062de2aa7e1daDaniel Dunbar  /// freebsd -- Directly call GNU Binutils assembler and linker
41168a31d406c6dc4382c700d1199b062de2aa7e1daDaniel Dunbarnamespace freebsd {
41292dd1915842410005c68d32c43bb3b3cf5a4a702Duncan Sands  class LLVM_LIBRARY_VISIBILITY Assemble : public Tool  {
41368a31d406c6dc4382c700d1199b062de2aa7e1daDaniel Dunbar  public:
4143038204fd8f6ff22082dd18e4b12ed252b75a5e4Daniel Dunbar    Assemble(const ToolChain &TC) : Tool("freebsd::Assemble", "assembler",
4153038204fd8f6ff22082dd18e4b12ed252b75a5e4Daniel Dunbar                                         TC) {}
41668a31d406c6dc4382c700d1199b062de2aa7e1daDaniel Dunbar
41768a31d406c6dc4382c700d1199b062de2aa7e1daDaniel Dunbar    virtual bool hasIntegratedCPP() const { return false; }
41868a31d406c6dc4382c700d1199b062de2aa7e1daDaniel Dunbar
41968a31d406c6dc4382c700d1199b062de2aa7e1daDaniel Dunbar    virtual void ConstructJob(Compilation &C, const JobAction &JA,
4201eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump                              const InputInfo &Output,
4211eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump                              const InputInfoList &Inputs,
4221eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump                              const ArgList &TCArgs,
42368a31d406c6dc4382c700d1199b062de2aa7e1daDaniel Dunbar                              const char *LinkingOutput) const;
42468a31d406c6dc4382c700d1199b062de2aa7e1daDaniel Dunbar  };
42592dd1915842410005c68d32c43bb3b3cf5a4a702Duncan Sands  class LLVM_LIBRARY_VISIBILITY Link : public Tool  {
426008f54a54299eaafdaa940e2bdeaf55935ecd95aDaniel Dunbar  public:
4273038204fd8f6ff22082dd18e4b12ed252b75a5e4Daniel Dunbar    Link(const ToolChain &TC) : Tool("freebsd::Link", "linker", TC) {}
428008f54a54299eaafdaa940e2bdeaf55935ecd95aDaniel Dunbar
429008f54a54299eaafdaa940e2bdeaf55935ecd95aDaniel Dunbar    virtual bool hasIntegratedCPP() const { return false; }
4308ba9a6244c56b19bc2a24de5d0c32ff37d50177bChad Rosier    virtual bool isLinkJob() const { return true; }
431008f54a54299eaafdaa940e2bdeaf55935ecd95aDaniel Dunbar
432008f54a54299eaafdaa940e2bdeaf55935ecd95aDaniel Dunbar    virtual void ConstructJob(Compilation &C, const JobAction &JA,
4331eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump                              const InputInfo &Output,
4341eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump                              const InputInfoList &Inputs,
4351eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump                              const ArgList &TCArgs,
436008f54a54299eaafdaa940e2bdeaf55935ecd95aDaniel Dunbar                              const char *LinkingOutput) const;
437008f54a54299eaafdaa940e2bdeaf55935ecd95aDaniel Dunbar  };
438e7925a075f110ab21afeae084670a155dea568e3Edward O'Callaghan} // end namespace freebsd
439e7925a075f110ab21afeae084670a155dea568e3Edward O'Callaghan
4408e50a96b387dca7525caa8a6add31420dd82a2cdBenjamin Kramer  /// netbsd -- Directly call GNU Binutils assembler and linker
4418e50a96b387dca7525caa8a6add31420dd82a2cdBenjamin Kramernamespace netbsd {
4428e50a96b387dca7525caa8a6add31420dd82a2cdBenjamin Kramer  class LLVM_LIBRARY_VISIBILITY Assemble : public Tool  {
443182564cd14a2105fff05fd52f5940eff96161d57Joerg Sonnenberger
4448e50a96b387dca7525caa8a6add31420dd82a2cdBenjamin Kramer  public:
4451bd91374498ac78e72545f08f4daa6491f9c9d14Joerg Sonnenberger    Assemble(const ToolChain &TC)
4461bd91374498ac78e72545f08f4daa6491f9c9d14Joerg Sonnenberger      : Tool("netbsd::Assemble", "assembler", TC) {}
4478e50a96b387dca7525caa8a6add31420dd82a2cdBenjamin Kramer
4488e50a96b387dca7525caa8a6add31420dd82a2cdBenjamin Kramer    virtual bool hasIntegratedCPP() const { return false; }
4498e50a96b387dca7525caa8a6add31420dd82a2cdBenjamin Kramer
4508e50a96b387dca7525caa8a6add31420dd82a2cdBenjamin Kramer    virtual void ConstructJob(Compilation &C, const JobAction &JA,
4518e50a96b387dca7525caa8a6add31420dd82a2cdBenjamin Kramer                              const InputInfo &Output,
4528e50a96b387dca7525caa8a6add31420dd82a2cdBenjamin Kramer                              const InputInfoList &Inputs,
4538e50a96b387dca7525caa8a6add31420dd82a2cdBenjamin Kramer                              const ArgList &TCArgs,
4548e50a96b387dca7525caa8a6add31420dd82a2cdBenjamin Kramer                              const char *LinkingOutput) const;
4558e50a96b387dca7525caa8a6add31420dd82a2cdBenjamin Kramer  };
4568e50a96b387dca7525caa8a6add31420dd82a2cdBenjamin Kramer  class LLVM_LIBRARY_VISIBILITY Link : public Tool  {
457182564cd14a2105fff05fd52f5940eff96161d57Joerg Sonnenberger
4588e50a96b387dca7525caa8a6add31420dd82a2cdBenjamin Kramer  public:
4591bd91374498ac78e72545f08f4daa6491f9c9d14Joerg Sonnenberger    Link(const ToolChain &TC)
4601bd91374498ac78e72545f08f4daa6491f9c9d14Joerg Sonnenberger      : Tool("netbsd::Link", "linker", TC) {}
4618e50a96b387dca7525caa8a6add31420dd82a2cdBenjamin Kramer
4628e50a96b387dca7525caa8a6add31420dd82a2cdBenjamin Kramer    virtual bool hasIntegratedCPP() const { return false; }
4638ba9a6244c56b19bc2a24de5d0c32ff37d50177bChad Rosier    virtual bool isLinkJob() const { return true; }
4648e50a96b387dca7525caa8a6add31420dd82a2cdBenjamin Kramer
4658e50a96b387dca7525caa8a6add31420dd82a2cdBenjamin Kramer    virtual void ConstructJob(Compilation &C, const JobAction &JA,
4668e50a96b387dca7525caa8a6add31420dd82a2cdBenjamin Kramer                              const InputInfo &Output,
4678e50a96b387dca7525caa8a6add31420dd82a2cdBenjamin Kramer                              const InputInfoList &Inputs,
4688e50a96b387dca7525caa8a6add31420dd82a2cdBenjamin Kramer                              const ArgList &TCArgs,
4698e50a96b387dca7525caa8a6add31420dd82a2cdBenjamin Kramer                              const char *LinkingOutput) const;
4708e50a96b387dca7525caa8a6add31420dd82a2cdBenjamin Kramer  };
4718e50a96b387dca7525caa8a6add31420dd82a2cdBenjamin Kramer} // end namespace netbsd
4728e50a96b387dca7525caa8a6add31420dd82a2cdBenjamin Kramer
473ba30bbe4e36a30a274da809a11a42f9cdc168e92Rafael Espindola  /// linux -- Directly call GNU Binutils assembler and linker
474ba30bbe4e36a30a274da809a11a42f9cdc168e92Rafael Espindolanamespace linuxtools {
475ba30bbe4e36a30a274da809a11a42f9cdc168e92Rafael Espindola  class LLVM_LIBRARY_VISIBILITY Assemble : public Tool  {
476ba30bbe4e36a30a274da809a11a42f9cdc168e92Rafael Espindola  public:
477ba30bbe4e36a30a274da809a11a42f9cdc168e92Rafael Espindola    Assemble(const ToolChain &TC) : Tool("linux::Assemble", "assembler",
478ba30bbe4e36a30a274da809a11a42f9cdc168e92Rafael Espindola                                         TC) {}
479ba30bbe4e36a30a274da809a11a42f9cdc168e92Rafael Espindola
480ba30bbe4e36a30a274da809a11a42f9cdc168e92Rafael Espindola    virtual bool hasIntegratedCPP() const { return false; }
481ba30bbe4e36a30a274da809a11a42f9cdc168e92Rafael Espindola
482ba30bbe4e36a30a274da809a11a42f9cdc168e92Rafael Espindola    virtual void ConstructJob(Compilation &C, const JobAction &JA,
483ba30bbe4e36a30a274da809a11a42f9cdc168e92Rafael Espindola                              const InputInfo &Output,
484ba30bbe4e36a30a274da809a11a42f9cdc168e92Rafael Espindola                              const InputInfoList &Inputs,
485ba30bbe4e36a30a274da809a11a42f9cdc168e92Rafael Espindola                              const ArgList &TCArgs,
486ba30bbe4e36a30a274da809a11a42f9cdc168e92Rafael Espindola                              const char *LinkingOutput) const;
487ba30bbe4e36a30a274da809a11a42f9cdc168e92Rafael Espindola  };
488c1da981bba867681004004b2d54ec2fdf3c08913Rafael Espindola  class LLVM_LIBRARY_VISIBILITY Link : public Tool  {
489c1da981bba867681004004b2d54ec2fdf3c08913Rafael Espindola  public:
490c1da981bba867681004004b2d54ec2fdf3c08913Rafael Espindola    Link(const ToolChain &TC) : Tool("linux::Link", "linker", TC) {}
491c1da981bba867681004004b2d54ec2fdf3c08913Rafael Espindola
492c1da981bba867681004004b2d54ec2fdf3c08913Rafael Espindola    virtual bool hasIntegratedCPP() const { return false; }
4938ba9a6244c56b19bc2a24de5d0c32ff37d50177bChad Rosier    virtual bool isLinkJob() const { return true; }
494c1da981bba867681004004b2d54ec2fdf3c08913Rafael Espindola
495c1da981bba867681004004b2d54ec2fdf3c08913Rafael Espindola    virtual void ConstructJob(Compilation &C, const JobAction &JA,
496c1da981bba867681004004b2d54ec2fdf3c08913Rafael Espindola                              const InputInfo &Output,
497c1da981bba867681004004b2d54ec2fdf3c08913Rafael Espindola                              const InputInfoList &Inputs,
498c1da981bba867681004004b2d54ec2fdf3c08913Rafael Espindola                              const ArgList &TCArgs,
499c1da981bba867681004004b2d54ec2fdf3c08913Rafael Espindola                              const char *LinkingOutput) const;
500c1da981bba867681004004b2d54ec2fdf3c08913Rafael Espindola  };
501ba30bbe4e36a30a274da809a11a42f9cdc168e92Rafael Espindola}
50238e317d6dce161b249508686cc67eb7176958762Chris Lattner  /// minix -- Directly call GNU Binutils assembler and linker
50338e317d6dce161b249508686cc67eb7176958762Chris Lattnernamespace minix {
50438e317d6dce161b249508686cc67eb7176958762Chris Lattner  class LLVM_LIBRARY_VISIBILITY Assemble : public Tool  {
50538e317d6dce161b249508686cc67eb7176958762Chris Lattner  public:
50638e317d6dce161b249508686cc67eb7176958762Chris Lattner    Assemble(const ToolChain &TC) : Tool("minix::Assemble", "assembler",
50738e317d6dce161b249508686cc67eb7176958762Chris Lattner                                         TC) {}
50838e317d6dce161b249508686cc67eb7176958762Chris Lattner
50938e317d6dce161b249508686cc67eb7176958762Chris Lattner    virtual bool hasIntegratedCPP() const { return false; }
51038e317d6dce161b249508686cc67eb7176958762Chris Lattner
51138e317d6dce161b249508686cc67eb7176958762Chris Lattner    virtual void ConstructJob(Compilation &C, const JobAction &JA,
51238e317d6dce161b249508686cc67eb7176958762Chris Lattner                              const InputInfo &Output,
51338e317d6dce161b249508686cc67eb7176958762Chris Lattner                              const InputInfoList &Inputs,
51438e317d6dce161b249508686cc67eb7176958762Chris Lattner                              const ArgList &TCArgs,
51538e317d6dce161b249508686cc67eb7176958762Chris Lattner                              const char *LinkingOutput) const;
51638e317d6dce161b249508686cc67eb7176958762Chris Lattner  };
51738e317d6dce161b249508686cc67eb7176958762Chris Lattner  class LLVM_LIBRARY_VISIBILITY Link : public Tool  {
51838e317d6dce161b249508686cc67eb7176958762Chris Lattner  public:
51938e317d6dce161b249508686cc67eb7176958762Chris Lattner    Link(const ToolChain &TC) : Tool("minix::Link", "linker", TC) {}
52038e317d6dce161b249508686cc67eb7176958762Chris Lattner
52138e317d6dce161b249508686cc67eb7176958762Chris Lattner    virtual bool hasIntegratedCPP() const { return false; }
5228ba9a6244c56b19bc2a24de5d0c32ff37d50177bChad Rosier    virtual bool isLinkJob() const { return true; }
52338e317d6dce161b249508686cc67eb7176958762Chris Lattner
52438e317d6dce161b249508686cc67eb7176958762Chris Lattner    virtual void ConstructJob(Compilation &C, const JobAction &JA,
52538e317d6dce161b249508686cc67eb7176958762Chris Lattner                              const InputInfo &Output,
52638e317d6dce161b249508686cc67eb7176958762Chris Lattner                              const InputInfoList &Inputs,
52738e317d6dce161b249508686cc67eb7176958762Chris Lattner                              const ArgList &TCArgs,
52838e317d6dce161b249508686cc67eb7176958762Chris Lattner                              const char *LinkingOutput) const;
52938e317d6dce161b249508686cc67eb7176958762Chris Lattner  };
53038e317d6dce161b249508686cc67eb7176958762Chris Lattner} // end namespace minix
53138e317d6dce161b249508686cc67eb7176958762Chris Lattner
53231c4690047f5f362ecf886f1586844b1aef0c4d2David Chisnall  /// solaris -- Directly call Solaris assembler and linker
53331c4690047f5f362ecf886f1586844b1aef0c4d2David Chisnallnamespace solaris {
53431c4690047f5f362ecf886f1586844b1aef0c4d2David Chisnall  class LLVM_LIBRARY_VISIBILITY Assemble : public Tool  {
53531c4690047f5f362ecf886f1586844b1aef0c4d2David Chisnall  public:
53631c4690047f5f362ecf886f1586844b1aef0c4d2David Chisnall    Assemble(const ToolChain &TC) : Tool("solaris::Assemble", "assembler",
53731c4690047f5f362ecf886f1586844b1aef0c4d2David Chisnall                                         TC) {}
53831c4690047f5f362ecf886f1586844b1aef0c4d2David Chisnall
53931c4690047f5f362ecf886f1586844b1aef0c4d2David Chisnall    virtual bool hasIntegratedCPP() const { return false; }
54031c4690047f5f362ecf886f1586844b1aef0c4d2David Chisnall
54131c4690047f5f362ecf886f1586844b1aef0c4d2David Chisnall    virtual void ConstructJob(Compilation &C, const JobAction &JA,
54231c4690047f5f362ecf886f1586844b1aef0c4d2David Chisnall                              const InputInfo &Output,
54331c4690047f5f362ecf886f1586844b1aef0c4d2David Chisnall                              const InputInfoList &Inputs,
54431c4690047f5f362ecf886f1586844b1aef0c4d2David Chisnall                              const ArgList &TCArgs,
54531c4690047f5f362ecf886f1586844b1aef0c4d2David Chisnall                              const char *LinkingOutput) const;
54631c4690047f5f362ecf886f1586844b1aef0c4d2David Chisnall  };
54731c4690047f5f362ecf886f1586844b1aef0c4d2David Chisnall  class LLVM_LIBRARY_VISIBILITY Link : public Tool  {
54831c4690047f5f362ecf886f1586844b1aef0c4d2David Chisnall  public:
54931c4690047f5f362ecf886f1586844b1aef0c4d2David Chisnall    Link(const ToolChain &TC) : Tool("solaris::Link", "linker", TC) {}
55031c4690047f5f362ecf886f1586844b1aef0c4d2David Chisnall
55131c4690047f5f362ecf886f1586844b1aef0c4d2David Chisnall    virtual bool hasIntegratedCPP() const { return false; }
5528ba9a6244c56b19bc2a24de5d0c32ff37d50177bChad Rosier    virtual bool isLinkJob() const { return true; }
55331c4690047f5f362ecf886f1586844b1aef0c4d2David Chisnall
55431c4690047f5f362ecf886f1586844b1aef0c4d2David Chisnall    virtual void ConstructJob(Compilation &C, const JobAction &JA,
55531c4690047f5f362ecf886f1586844b1aef0c4d2David Chisnall                              const InputInfo &Output,
55631c4690047f5f362ecf886f1586844b1aef0c4d2David Chisnall                              const InputInfoList &Inputs,
55731c4690047f5f362ecf886f1586844b1aef0c4d2David Chisnall                              const ArgList &TCArgs,
55831c4690047f5f362ecf886f1586844b1aef0c4d2David Chisnall                              const char *LinkingOutput) const;
55931c4690047f5f362ecf886f1586844b1aef0c4d2David Chisnall  };
560badb6cd2007825308208e6c4275ba54e220e4e28David Chisnall} // end namespace solaris
56131c4690047f5f362ecf886f1586844b1aef0c4d2David Chisnall
562e7925a075f110ab21afeae084670a155dea568e3Edward O'Callaghan  /// auroraux -- Directly call GNU Binutils assembler and linker
563e7925a075f110ab21afeae084670a155dea568e3Edward O'Callaghannamespace auroraux {
56492dd1915842410005c68d32c43bb3b3cf5a4a702Duncan Sands  class LLVM_LIBRARY_VISIBILITY Assemble : public Tool  {
565e7925a075f110ab21afeae084670a155dea568e3Edward O'Callaghan  public:
5663038204fd8f6ff22082dd18e4b12ed252b75a5e4Daniel Dunbar    Assemble(const ToolChain &TC) : Tool("auroraux::Assemble", "assembler",
5673038204fd8f6ff22082dd18e4b12ed252b75a5e4Daniel Dunbar                                         TC) {}
568e7925a075f110ab21afeae084670a155dea568e3Edward O'Callaghan
569e7925a075f110ab21afeae084670a155dea568e3Edward O'Callaghan    virtual bool hasIntegratedCPP() const { return false; }
570e7925a075f110ab21afeae084670a155dea568e3Edward O'Callaghan
571e7925a075f110ab21afeae084670a155dea568e3Edward O'Callaghan    virtual void ConstructJob(Compilation &C, const JobAction &JA,
5721eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump                              const InputInfo &Output,
5731eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump                              const InputInfoList &Inputs,
5741eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump                              const ArgList &TCArgs,
575e7925a075f110ab21afeae084670a155dea568e3Edward O'Callaghan                              const char *LinkingOutput) const;
576e7925a075f110ab21afeae084670a155dea568e3Edward O'Callaghan  };
57792dd1915842410005c68d32c43bb3b3cf5a4a702Duncan Sands  class LLVM_LIBRARY_VISIBILITY Link : public Tool  {
578e7925a075f110ab21afeae084670a155dea568e3Edward O'Callaghan  public:
5793038204fd8f6ff22082dd18e4b12ed252b75a5e4Daniel Dunbar    Link(const ToolChain &TC) : Tool("auroraux::Link", "linker", TC) {}
580e7925a075f110ab21afeae084670a155dea568e3Edward O'Callaghan
581e7925a075f110ab21afeae084670a155dea568e3Edward O'Callaghan    virtual bool hasIntegratedCPP() const { return false; }
5828ba9a6244c56b19bc2a24de5d0c32ff37d50177bChad Rosier    virtual bool isLinkJob() const { return true; }
583e7925a075f110ab21afeae084670a155dea568e3Edward O'Callaghan
584e7925a075f110ab21afeae084670a155dea568e3Edward O'Callaghan    virtual void ConstructJob(Compilation &C, const JobAction &JA,
5851eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump                              const InputInfo &Output,
5861eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump                              const InputInfoList &Inputs,
5871eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump                              const ArgList &TCArgs,
588e7925a075f110ab21afeae084670a155dea568e3Edward O'Callaghan                              const char *LinkingOutput) const;
589e7925a075f110ab21afeae084670a155dea568e3Edward O'Callaghan  };
590e7925a075f110ab21afeae084670a155dea568e3Edward O'Callaghan} // end namespace auroraux
59168a31d406c6dc4382c700d1199b062de2aa7e1daDaniel Dunbar
59211e1b40d759a643086f590f6ffbd9d68360bad46Daniel Dunbar  /// dragonfly -- Directly call GNU Binutils assembler and linker
59311e1b40d759a643086f590f6ffbd9d68360bad46Daniel Dunbarnamespace dragonfly {
59492dd1915842410005c68d32c43bb3b3cf5a4a702Duncan Sands  class LLVM_LIBRARY_VISIBILITY Assemble : public Tool  {
59511e1b40d759a643086f590f6ffbd9d68360bad46Daniel Dunbar  public:
5963038204fd8f6ff22082dd18e4b12ed252b75a5e4Daniel Dunbar    Assemble(const ToolChain &TC) : Tool("dragonfly::Assemble", "assembler",
5973038204fd8f6ff22082dd18e4b12ed252b75a5e4Daniel Dunbar                                         TC) {}
59811e1b40d759a643086f590f6ffbd9d68360bad46Daniel Dunbar
59911e1b40d759a643086f590f6ffbd9d68360bad46Daniel Dunbar    virtual bool hasIntegratedCPP() const { return false; }
60011e1b40d759a643086f590f6ffbd9d68360bad46Daniel Dunbar
60111e1b40d759a643086f590f6ffbd9d68360bad46Daniel Dunbar    virtual void ConstructJob(Compilation &C, const JobAction &JA,
6021eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump                              const InputInfo &Output,
6031eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump                              const InputInfoList &Inputs,
6041eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump                              const ArgList &TCArgs,
60511e1b40d759a643086f590f6ffbd9d68360bad46Daniel Dunbar                              const char *LinkingOutput) const;
60611e1b40d759a643086f590f6ffbd9d68360bad46Daniel Dunbar  };
60792dd1915842410005c68d32c43bb3b3cf5a4a702Duncan Sands  class LLVM_LIBRARY_VISIBILITY Link : public Tool  {
60811e1b40d759a643086f590f6ffbd9d68360bad46Daniel Dunbar  public:
6093038204fd8f6ff22082dd18e4b12ed252b75a5e4Daniel Dunbar    Link(const ToolChain &TC) : Tool("dragonfly::Link", "linker", TC) {}
61011e1b40d759a643086f590f6ffbd9d68360bad46Daniel Dunbar
61111e1b40d759a643086f590f6ffbd9d68360bad46Daniel Dunbar    virtual bool hasIntegratedCPP() const { return false; }
6128ba9a6244c56b19bc2a24de5d0c32ff37d50177bChad Rosier    virtual bool isLinkJob() const { return true; }
61311e1b40d759a643086f590f6ffbd9d68360bad46Daniel Dunbar
61411e1b40d759a643086f590f6ffbd9d68360bad46Daniel Dunbar    virtual void ConstructJob(Compilation &C, const JobAction &JA,
6151eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump                              const InputInfo &Output,
6161eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump                              const InputInfoList &Inputs,
6171eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump                              const ArgList &TCArgs,
61811e1b40d759a643086f590f6ffbd9d68360bad46Daniel Dunbar                              const char *LinkingOutput) const;
61911e1b40d759a643086f590f6ffbd9d68360bad46Daniel Dunbar  };
620e7925a075f110ab21afeae084670a155dea568e3Edward O'Callaghan} // end namespace dragonfly
62111e1b40d759a643086f590f6ffbd9d68360bad46Daniel Dunbar
622ff58e3610f4e12094def69eb2d6dcb4330378d8fMichael J. Spencer  /// Visual studio tools.
623ff58e3610f4e12094def69eb2d6dcb4330378d8fMichael J. Spencernamespace visualstudio {
624ff58e3610f4e12094def69eb2d6dcb4330378d8fMichael J. Spencer  class LLVM_LIBRARY_VISIBILITY Link : public Tool  {
625ff58e3610f4e12094def69eb2d6dcb4330378d8fMichael J. Spencer  public:
626ff58e3610f4e12094def69eb2d6dcb4330378d8fMichael J. Spencer    Link(const ToolChain &TC) : Tool("visualstudio::Link", "linker", TC) {}
627ff58e3610f4e12094def69eb2d6dcb4330378d8fMichael J. Spencer
628ff58e3610f4e12094def69eb2d6dcb4330378d8fMichael J. Spencer    virtual bool hasIntegratedCPP() const { return false; }
6298ba9a6244c56b19bc2a24de5d0c32ff37d50177bChad Rosier    virtual bool isLinkJob() const { return true; }
630ff58e3610f4e12094def69eb2d6dcb4330378d8fMichael J. Spencer
631ff58e3610f4e12094def69eb2d6dcb4330378d8fMichael J. Spencer    virtual void ConstructJob(Compilation &C, const JobAction &JA,
632ff58e3610f4e12094def69eb2d6dcb4330378d8fMichael J. Spencer                              const InputInfo &Output,
633ff58e3610f4e12094def69eb2d6dcb4330378d8fMichael J. Spencer                              const InputInfoList &Inputs,
634ff58e3610f4e12094def69eb2d6dcb4330378d8fMichael J. Spencer                              const ArgList &TCArgs,
635ff58e3610f4e12094def69eb2d6dcb4330378d8fMichael J. Spencer                              const char *LinkingOutput) const;
636ff58e3610f4e12094def69eb2d6dcb4330378d8fMichael J. Spencer  };
637ff58e3610f4e12094def69eb2d6dcb4330378d8fMichael J. Spencer} // end namespace visualstudio
638ff58e3610f4e12094def69eb2d6dcb4330378d8fMichael J. Spencer
6399c073ff462eb75ccbb1c4446e21c148f3fc618e1Daniel Dunbar} // end namespace toolchains
6409c073ff462eb75ccbb1c4446e21c148f3fc618e1Daniel Dunbar} // end namespace driver
6419c073ff462eb75ccbb1c4446e21c148f3fc618e1Daniel Dunbar} // end namespace clang
6429c073ff462eb75ccbb1c4446e21c148f3fc618e1Daniel Dunbar
643e7925a075f110ab21afeae084670a155dea568e3Edward O'Callaghan#endif // CLANG_LIB_DRIVER_TOOLS_H_
644