Tools.h revision 8c631e3b6fb4d838809852e85ba4145be45a221f
1656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project//===--- Tools.h - Tool Implementations -------------------------*- C++ -*-===//
2656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project//
3656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project//                     The LLVM Compiler Infrastructure
4656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project//
5656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project// This file is distributed under the University of Illinois Open Source
6656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project// License. See LICENSE.TXT for details.
7656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project//
8656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project//===----------------------------------------------------------------------===//
9656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project
10656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project#ifndef CLANG_LIB_DRIVER_TOOLS_H_
11656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project#define CLANG_LIB_DRIVER_TOOLS_H_
12656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project
13656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project#include "clang/Driver/Tool.h"
14656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project#include "clang/Driver/Types.h"
15656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project#include "clang/Driver/Util.h"
16656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project
17656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project#include "llvm/Support/Compiler.h"
18656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project
19656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Projectnamespace clang {
20656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Projectnamespace driver {
21656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project  class Driver;
22656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project
23656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Projectnamespace toolchains {
24656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project  class Darwin;
25656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project}
26656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project
27656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Projectnamespace tools {
28656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project
29656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project  /// \brief Clang compiler tool.
30656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project  class LLVM_LIBRARY_VISIBILITY Clang : public Tool {
31656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project    void AddPreprocessingOptions(const Driver &D,
32656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project                                 const ArgList &Args,
33656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project                                 ArgStringList &CmdArgs,
34656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project                                 const InputInfo &Output,
35656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project                                 const InputInfoList &Inputs) const;
36656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project
37656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project    void AddARMTargetArgs(const ArgList &Args, ArgStringList &CmdArgs) const;
38656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project    void AddMIPSTargetArgs(const ArgList &Args, ArgStringList &CmdArgs) const;
39656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project    void AddX86TargetArgs(const ArgList &Args, ArgStringList &CmdArgs) const;
40656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project
41656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project  public:
42656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project    Clang(const ToolChain &TC) : Tool("clang", "clang frontend", TC) {}
43656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project
44656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project    virtual bool hasGoodDiagnostics() const { return true; }
45656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project    virtual bool hasIntegratedAssembler() const { return true; }
46656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project    virtual bool hasIntegratedCPP() const { return true; }
47656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project
48656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project    virtual void ConstructJob(Compilation &C, const JobAction &JA,
49656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project                              Job &Dest,
50656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project                              const InputInfo &Output,
51656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project                              const InputInfoList &Inputs,
52656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project                              const ArgList &TCArgs,
53656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project                              const char *LinkingOutput) const;
54656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project  };
55656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project
56656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project  /// \brief Clang integrated assembler tool.
57656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project  class LLVM_LIBRARY_VISIBILITY ClangAs : public Tool {
58656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project  public:
59674ff29eb647c577ba1ef822c373ead69dc386cfBrian Carlstrom    ClangAs(const ToolChain &TC) : Tool("clang::as",
60656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project                                        "clang integrated assembler", TC) {}
61656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project
62656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project    virtual bool hasGoodDiagnostics() const { return true; }
63656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project    virtual bool hasIntegratedAssembler() const { return false; }
64656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project    virtual bool hasIntegratedCPP() const { return false; }
65656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project
66656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project    virtual void ConstructJob(Compilation &C, const JobAction &JA,
67656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project                              Job &Dest,
68656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project                              const InputInfo &Output,
69656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project                              const InputInfoList &Inputs,
70656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project                              const ArgList &TCArgs,
71656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project                              const char *LinkingOutput) const;
72656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project  };
73656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project
74656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project  /// gcc - Generic GCC tool implementations.
75656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Projectnamespace gcc {
76656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project  class LLVM_LIBRARY_VISIBILITY Common : public Tool {
77656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project  public:
78656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project    Common(const char *Name, const char *ShortName,
79656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project           const ToolChain &TC) : Tool(Name, ShortName, TC) {}
80656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project
81656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project    virtual void ConstructJob(Compilation &C, const JobAction &JA,
82656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project                              Job &Dest,
83656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project                              const InputInfo &Output,
84656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project                              const InputInfoList &Inputs,
85656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project                              const ArgList &TCArgs,
86656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project                              const char *LinkingOutput) const;
87656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project
88656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project    /// RenderExtraToolArgs - Render any arguments necessary to force
89656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project    /// the particular tool mode.
90656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project    virtual void RenderExtraToolArgs(const JobAction &JA,
91656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project                                     ArgStringList &CmdArgs) const = 0;
92656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project  };
93656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project
94656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project
95656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project  class LLVM_LIBRARY_VISIBILITY Preprocess : public Common {
96656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project  public:
97656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project    Preprocess(const ToolChain &TC) : Common("gcc::Preprocess",
98656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project                                             "gcc preprocessor", TC) {}
99656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project
100656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project    virtual bool hasGoodDiagnostics() const { return true; }
101656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project    virtual bool hasIntegratedCPP() const { return false; }
102656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project
103656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project    virtual void RenderExtraToolArgs(const JobAction &JA,
104656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project                                     ArgStringList &CmdArgs) const;
105656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project  };
106656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project
107656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project  class LLVM_LIBRARY_VISIBILITY Precompile : public Common  {
108656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project  public:
109656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project    Precompile(const ToolChain &TC) : Common("gcc::Precompile",
110656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project                                             "gcc precompile", TC) {}
111656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project
112674ff29eb647c577ba1ef822c373ead69dc386cfBrian Carlstrom    virtual bool hasGoodDiagnostics() const { return true; }
113674ff29eb647c577ba1ef822c373ead69dc386cfBrian Carlstrom    virtual bool hasIntegratedCPP() const { return true; }
114674ff29eb647c577ba1ef822c373ead69dc386cfBrian Carlstrom
115674ff29eb647c577ba1ef822c373ead69dc386cfBrian Carlstrom    virtual void RenderExtraToolArgs(const JobAction &JA,
116674ff29eb647c577ba1ef822c373ead69dc386cfBrian Carlstrom                                     ArgStringList &CmdArgs) const;
117674ff29eb647c577ba1ef822c373ead69dc386cfBrian Carlstrom  };
118656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project
119674ff29eb647c577ba1ef822c373ead69dc386cfBrian Carlstrom  class LLVM_LIBRARY_VISIBILITY Compile : public Common  {
120674ff29eb647c577ba1ef822c373ead69dc386cfBrian Carlstrom  public:
121674ff29eb647c577ba1ef822c373ead69dc386cfBrian Carlstrom    Compile(const ToolChain &TC) : Common("gcc::Compile",
122656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project                                          "gcc frontend", TC) {}
123674ff29eb647c577ba1ef822c373ead69dc386cfBrian Carlstrom
124674ff29eb647c577ba1ef822c373ead69dc386cfBrian Carlstrom    virtual bool hasGoodDiagnostics() const { return true; }
125674ff29eb647c577ba1ef822c373ead69dc386cfBrian Carlstrom    virtual bool hasIntegratedCPP() const { return true; }
126656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project
127674ff29eb647c577ba1ef822c373ead69dc386cfBrian Carlstrom    virtual void RenderExtraToolArgs(const JobAction &JA,
128674ff29eb647c577ba1ef822c373ead69dc386cfBrian Carlstrom                                     ArgStringList &CmdArgs) const;
129674ff29eb647c577ba1ef822c373ead69dc386cfBrian Carlstrom  };
130656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project
131674ff29eb647c577ba1ef822c373ead69dc386cfBrian Carlstrom  class LLVM_LIBRARY_VISIBILITY Assemble : public Common  {
132674ff29eb647c577ba1ef822c373ead69dc386cfBrian Carlstrom  public:
133674ff29eb647c577ba1ef822c373ead69dc386cfBrian Carlstrom    Assemble(const ToolChain &TC) : Common("gcc::Assemble",
134674ff29eb647c577ba1ef822c373ead69dc386cfBrian Carlstrom                                           "assembler (via gcc)", TC) {}
135656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project
136674ff29eb647c577ba1ef822c373ead69dc386cfBrian Carlstrom    virtual bool hasIntegratedCPP() const { return false; }
137674ff29eb647c577ba1ef822c373ead69dc386cfBrian Carlstrom
138674ff29eb647c577ba1ef822c373ead69dc386cfBrian Carlstrom    virtual void RenderExtraToolArgs(const JobAction &JA,
139674ff29eb647c577ba1ef822c373ead69dc386cfBrian Carlstrom                                     ArgStringList &CmdArgs) const;
140674ff29eb647c577ba1ef822c373ead69dc386cfBrian Carlstrom  };
141656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project
142656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project  class LLVM_LIBRARY_VISIBILITY Link : public Common  {
143656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project  public:
144656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project    Link(const ToolChain &TC) : Common("gcc::Link",
145656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project                                       "linker (via gcc)", TC) {}
146656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project
147656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project    virtual bool hasIntegratedCPP() const { return false; }
148656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project
149656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project    virtual void RenderExtraToolArgs(const JobAction &JA,
150656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project                                     ArgStringList &CmdArgs) const;
151656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project  };
152656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project} // end namespace gcc
153656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project
154656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Projectnamespace darwin {
155656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project  class LLVM_LIBRARY_VISIBILITY DarwinTool : public Tool {
156656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project  protected:
157656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project    void AddDarwinArch(const ArgList &Args, ArgStringList &CmdArgs) const;
158656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project
159656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project    const toolchains::Darwin &getDarwinToolChain() const {
160656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project      return reinterpret_cast<const toolchains::Darwin&>(getToolChain());
161656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project    }
162656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project
163656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project  public:
164656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project    DarwinTool(const char *Name, const char *ShortName,
165656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project               const ToolChain &TC) : Tool(Name, ShortName, TC) {}
166656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project  };
167656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project
168656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project  class LLVM_LIBRARY_VISIBILITY CC1 : public DarwinTool  {
169656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project  public:
170656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project    static const char *getBaseInputName(const ArgList &Args,
171656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project                                 const InputInfoList &Input);
172656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project    static const char *getBaseInputStem(const ArgList &Args,
173656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project                                 const InputInfoList &Input);
174656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project    static const char *getDependencyFileName(const ArgList &Args,
175656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project                                             const InputInfoList &Inputs);
176656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project
177656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project  protected:
178656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project    const char *getCC1Name(types::ID Type) const;
179656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project
180656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project    void AddCC1Args(const ArgList &Args, ArgStringList &CmdArgs) const;
181656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project    void AddCC1OptionsArgs(const ArgList &Args, ArgStringList &CmdArgs,
182656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project                           const InputInfoList &Inputs,
183656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project                           const ArgStringList &OutputArgs) const;
184656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project    void AddCPPOptionsArgs(const ArgList &Args, ArgStringList &CmdArgs,
185656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project                           const InputInfoList &Inputs,
186656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project                           const ArgStringList &OutputArgs) const;
187656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project    void AddCPPUniqueOptionsArgs(const ArgList &Args,
188656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project                                 ArgStringList &CmdArgs,
189656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project                                 const InputInfoList &Inputs) const;
190656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project    void AddCPPArgs(const ArgList &Args, ArgStringList &CmdArgs) const;
191656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project
192656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project  public:
193656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project    CC1(const char *Name, const char *ShortName,
194656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project        const ToolChain &TC) : DarwinTool(Name, ShortName, TC) {}
195656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project
196656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project    virtual bool hasGoodDiagnostics() const { return true; }
197656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project    virtual bool hasIntegratedCPP() const { return true; }
198656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project  };
199656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project
200656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project  class LLVM_LIBRARY_VISIBILITY Preprocess : public CC1  {
201656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project  public:
202656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project    Preprocess(const ToolChain &TC) : CC1("darwin::Preprocess",
203656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project                                          "gcc preprocessor", TC) {}
204656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project
205656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project    virtual void ConstructJob(Compilation &C, const JobAction &JA,
206656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project                              Job &Dest,
207656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project                              const InputInfo &Output,
208656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project                              const InputInfoList &Inputs,
209656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project                              const ArgList &TCArgs,
210656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project                              const char *LinkingOutput) const;
211656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project  };
212656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project
213656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project  class LLVM_LIBRARY_VISIBILITY Compile : public CC1  {
214656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project  public:
215656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project    Compile(const ToolChain &TC) : CC1("darwin::Compile", "gcc frontend", TC) {}
216656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project
217656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project    virtual void ConstructJob(Compilation &C, const JobAction &JA,
218656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project                              Job &Dest,
219656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project                              const InputInfo &Output,
220656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project                              const InputInfoList &Inputs,
221656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project                              const ArgList &TCArgs,
222656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project                              const char *LinkingOutput) const;
223656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project  };
224674ff29eb647c577ba1ef822c373ead69dc386cfBrian Carlstrom
225656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project  class LLVM_LIBRARY_VISIBILITY Assemble : public DarwinTool  {
226674ff29eb647c577ba1ef822c373ead69dc386cfBrian Carlstrom  public:
227674ff29eb647c577ba1ef822c373ead69dc386cfBrian Carlstrom    Assemble(const ToolChain &TC) : DarwinTool("darwin::Assemble",
228674ff29eb647c577ba1ef822c373ead69dc386cfBrian Carlstrom                                               "assembler", TC) {}
229656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project
230656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project    virtual bool hasIntegratedCPP() const { return false; }
231656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project
232e45f106cb6b47af1f21efe76e933bdea2f5dd1caNagendra Modadugu    virtual void ConstructJob(Compilation &C, const JobAction &JA,
233674ff29eb647c577ba1ef822c373ead69dc386cfBrian Carlstrom                              Job &Dest,
234674ff29eb647c577ba1ef822c373ead69dc386cfBrian Carlstrom                              const InputInfo &Output,
235674ff29eb647c577ba1ef822c373ead69dc386cfBrian Carlstrom                              const InputInfoList &Inputs,
236674ff29eb647c577ba1ef822c373ead69dc386cfBrian Carlstrom                              const ArgList &TCArgs,
237674ff29eb647c577ba1ef822c373ead69dc386cfBrian Carlstrom                              const char *LinkingOutput) const;
238656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project  };
239656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project
240656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project  class LLVM_LIBRARY_VISIBILITY Link : public DarwinTool  {
241656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project    void AddLinkArgs(const ArgList &Args, ArgStringList &CmdArgs) const;
242656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project
243656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project  public:
244674ff29eb647c577ba1ef822c373ead69dc386cfBrian Carlstrom    Link(const ToolChain &TC) : DarwinTool("darwin::Link", "linker", TC) {}
245674ff29eb647c577ba1ef822c373ead69dc386cfBrian Carlstrom
246674ff29eb647c577ba1ef822c373ead69dc386cfBrian Carlstrom    virtual bool hasIntegratedCPP() const { return false; }
247656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project
248674ff29eb647c577ba1ef822c373ead69dc386cfBrian Carlstrom    virtual void ConstructJob(Compilation &C, const JobAction &JA,
249674ff29eb647c577ba1ef822c373ead69dc386cfBrian Carlstrom                              Job &Dest,
250674ff29eb647c577ba1ef822c373ead69dc386cfBrian Carlstrom                              const InputInfo &Output,
251674ff29eb647c577ba1ef822c373ead69dc386cfBrian Carlstrom                              const InputInfoList &Inputs,
252674ff29eb647c577ba1ef822c373ead69dc386cfBrian Carlstrom                              const ArgList &TCArgs,
253674ff29eb647c577ba1ef822c373ead69dc386cfBrian Carlstrom                              const char *LinkingOutput) const;
254674ff29eb647c577ba1ef822c373ead69dc386cfBrian Carlstrom  };
255392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom
256674ff29eb647c577ba1ef822c373ead69dc386cfBrian Carlstrom  class LLVM_LIBRARY_VISIBILITY Lipo : public DarwinTool  {
257656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project  public:
258656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project    Lipo(const ToolChain &TC) : DarwinTool("darwin::Lipo", "lipo", TC) {}
259674ff29eb647c577ba1ef822c373ead69dc386cfBrian Carlstrom
260674ff29eb647c577ba1ef822c373ead69dc386cfBrian Carlstrom    virtual bool hasIntegratedCPP() const { return false; }
261674ff29eb647c577ba1ef822c373ead69dc386cfBrian Carlstrom
262674ff29eb647c577ba1ef822c373ead69dc386cfBrian Carlstrom    virtual void ConstructJob(Compilation &C, const JobAction &JA,
263674ff29eb647c577ba1ef822c373ead69dc386cfBrian Carlstrom                              Job &Dest,
264674ff29eb647c577ba1ef822c373ead69dc386cfBrian Carlstrom                              const InputInfo &Output,
265674ff29eb647c577ba1ef822c373ead69dc386cfBrian Carlstrom                              const InputInfoList &Inputs,
266674ff29eb647c577ba1ef822c373ead69dc386cfBrian Carlstrom                              const ArgList &TCArgs,
267c64f6fe2be99cb3fa8e491b5bede9a217de87a4cKenny Root                              const char *LinkingOutput) const;
268674ff29eb647c577ba1ef822c373ead69dc386cfBrian Carlstrom  };
269656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project
270656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project  class LLVM_LIBRARY_VISIBILITY Dsymutil : public DarwinTool  {
271674ff29eb647c577ba1ef822c373ead69dc386cfBrian Carlstrom  public:
272656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project    Dsymutil(const ToolChain &TC) : DarwinTool("darwin::Dsymutil",
273656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project                                               "dsymutil", TC) {}
274674ff29eb647c577ba1ef822c373ead69dc386cfBrian Carlstrom
275674ff29eb647c577ba1ef822c373ead69dc386cfBrian Carlstrom    virtual bool hasIntegratedCPP() const { return false; }
276674ff29eb647c577ba1ef822c373ead69dc386cfBrian Carlstrom
277674ff29eb647c577ba1ef822c373ead69dc386cfBrian Carlstrom    virtual void ConstructJob(Compilation &C, const JobAction &JA,
278674ff29eb647c577ba1ef822c373ead69dc386cfBrian Carlstrom                              Job &Dest,
279674ff29eb647c577ba1ef822c373ead69dc386cfBrian Carlstrom                              const InputInfo &Output,
280392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom                              const InputInfoList &Inputs,
281674ff29eb647c577ba1ef822c373ead69dc386cfBrian Carlstrom                              const ArgList &TCArgs,
282656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project                              const char *LinkingOutput) const;
283656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project  };
284656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project}
285656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project
286656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project  /// openbsd -- Directly call GNU Binutils assembler and linker
287656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Projectnamespace openbsd {
288674ff29eb647c577ba1ef822c373ead69dc386cfBrian Carlstrom  class LLVM_LIBRARY_VISIBILITY Assemble : public Tool  {
289674ff29eb647c577ba1ef822c373ead69dc386cfBrian Carlstrom  public:
290656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project    Assemble(const ToolChain &TC) : Tool("openbsd::Assemble", "assembler",
291392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom                                         TC) {}
292674ff29eb647c577ba1ef822c373ead69dc386cfBrian Carlstrom
293674ff29eb647c577ba1ef822c373ead69dc386cfBrian Carlstrom    virtual bool hasIntegratedCPP() const { return false; }
294656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project
295674ff29eb647c577ba1ef822c373ead69dc386cfBrian Carlstrom    virtual void ConstructJob(Compilation &C, const JobAction &JA,
296656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project                              Job &Dest,
297656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project                              const InputInfo &Output,
298674ff29eb647c577ba1ef822c373ead69dc386cfBrian Carlstrom                              const InputInfoList &Inputs,
299674ff29eb647c577ba1ef822c373ead69dc386cfBrian Carlstrom                              const ArgList &TCArgs,
300674ff29eb647c577ba1ef822c373ead69dc386cfBrian Carlstrom                              const char *LinkingOutput) const;
301392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom  };
302392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom  class LLVM_LIBRARY_VISIBILITY Link : public Tool  {
303674ff29eb647c577ba1ef822c373ead69dc386cfBrian Carlstrom  public:
304656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project    Link(const ToolChain &TC) : Tool("openbsd::Link", "linker", TC) {}
305656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project
306656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project    virtual bool hasIntegratedCPP() const { return false; }
307392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom
308392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom    virtual void ConstructJob(Compilation &C, const JobAction &JA,
309674ff29eb647c577ba1ef822c373ead69dc386cfBrian Carlstrom                              Job &Dest,
310674ff29eb647c577ba1ef822c373ead69dc386cfBrian Carlstrom                              const InputInfo &Output,
311674ff29eb647c577ba1ef822c373ead69dc386cfBrian Carlstrom                              const InputInfoList &Inputs,
312674ff29eb647c577ba1ef822c373ead69dc386cfBrian Carlstrom                              const ArgList &TCArgs,
313656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project                              const char *LinkingOutput) const;
314656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project  };
315656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project} // end namespace openbsd
316656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project
317656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project  /// freebsd -- Directly call GNU Binutils assembler and linker
318656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Projectnamespace freebsd {
319656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project  class LLVM_LIBRARY_VISIBILITY Assemble : public Tool  {
320656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project  public:
321656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project    Assemble(const ToolChain &TC) : Tool("freebsd::Assemble", "assembler",
322656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project                                         TC) {}
323656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project
324656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project    virtual bool hasIntegratedCPP() const { return false; }
325656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project
326656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project    virtual void ConstructJob(Compilation &C, const JobAction &JA,
327656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project                              Job &Dest,
328656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project                              const InputInfo &Output,
329656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project                              const InputInfoList &Inputs,
330656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project                              const ArgList &TCArgs,
331656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project                              const char *LinkingOutput) const;
332656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project  };
333656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project  class LLVM_LIBRARY_VISIBILITY Link : public Tool  {
334656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project  public:
335674ff29eb647c577ba1ef822c373ead69dc386cfBrian Carlstrom    Link(const ToolChain &TC) : Tool("freebsd::Link", "linker", TC) {}
336674ff29eb647c577ba1ef822c373ead69dc386cfBrian Carlstrom
337674ff29eb647c577ba1ef822c373ead69dc386cfBrian Carlstrom    virtual bool hasIntegratedCPP() const { return false; }
338674ff29eb647c577ba1ef822c373ead69dc386cfBrian Carlstrom
339674ff29eb647c577ba1ef822c373ead69dc386cfBrian Carlstrom    virtual void ConstructJob(Compilation &C, const JobAction &JA,
340674ff29eb647c577ba1ef822c373ead69dc386cfBrian Carlstrom                              Job &Dest,
341674ff29eb647c577ba1ef822c373ead69dc386cfBrian Carlstrom                              const InputInfo &Output,
342656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project                              const InputInfoList &Inputs,
343656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project                              const ArgList &TCArgs,
344656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project                              const char *LinkingOutput) const;
345656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project  };
346656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project} // end namespace freebsd
347656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project
348656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project  /// minix -- Directly call GNU Binutils assembler and linker
349656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Projectnamespace minix {
350656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project  class LLVM_LIBRARY_VISIBILITY Assemble : public Tool  {
351656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project  public:
352656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project    Assemble(const ToolChain &TC) : Tool("minix::Assemble", "assembler",
353656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project                                         TC) {}
354656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project
355656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project    virtual bool hasIntegratedCPP() const { return false; }
356656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project
357656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project    virtual void ConstructJob(Compilation &C, const JobAction &JA,
358656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project                              Job &Dest,
359656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project                              const InputInfo &Output,
360656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project                              const InputInfoList &Inputs,
361656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project                              const ArgList &TCArgs,
362656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project                              const char *LinkingOutput) const;
363656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project  };
364656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project  class LLVM_LIBRARY_VISIBILITY Link : public Tool  {
365656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project  public:
366674ff29eb647c577ba1ef822c373ead69dc386cfBrian Carlstrom    Link(const ToolChain &TC) : Tool("minix::Link", "linker", TC) {}
367392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom
368392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom    virtual bool hasIntegratedCPP() const { return false; }
369392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom
370392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom    virtual void ConstructJob(Compilation &C, const JobAction &JA,
371392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom                              Job &Dest,
372392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom                              const InputInfo &Output,
373392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom                              const InputInfoList &Inputs,
374392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom                              const ArgList &TCArgs,
375392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom                              const char *LinkingOutput) const;
376392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom  };
377392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom} // end namespace minix
378392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom
379392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom  /// auroraux -- Directly call GNU Binutils assembler and linker
380392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstromnamespace auroraux {
381392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom  class LLVM_LIBRARY_VISIBILITY Assemble : public Tool  {
382392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom  public:
383392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom    Assemble(const ToolChain &TC) : Tool("auroraux::Assemble", "assembler",
384392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom                                         TC) {}
385392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom
386392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom    virtual bool hasIntegratedCPP() const { return false; }
387656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project
388656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project    virtual void ConstructJob(Compilation &C, const JobAction &JA,
389392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom                              Job &Dest,
390656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project                              const InputInfo &Output,
391656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project                              const InputInfoList &Inputs,
392656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project                              const ArgList &TCArgs,
393656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project                              const char *LinkingOutput) const;
394674ff29eb647c577ba1ef822c373ead69dc386cfBrian Carlstrom  };
395674ff29eb647c577ba1ef822c373ead69dc386cfBrian Carlstrom  class LLVM_LIBRARY_VISIBILITY Link : public Tool  {
396674ff29eb647c577ba1ef822c373ead69dc386cfBrian Carlstrom  public:
397674ff29eb647c577ba1ef822c373ead69dc386cfBrian Carlstrom    Link(const ToolChain &TC) : Tool("auroraux::Link", "linker", TC) {}
398674ff29eb647c577ba1ef822c373ead69dc386cfBrian Carlstrom
399674ff29eb647c577ba1ef822c373ead69dc386cfBrian Carlstrom    virtual bool hasIntegratedCPP() const { return false; }
400674ff29eb647c577ba1ef822c373ead69dc386cfBrian Carlstrom
401674ff29eb647c577ba1ef822c373ead69dc386cfBrian Carlstrom    virtual void ConstructJob(Compilation &C, const JobAction &JA,
402656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project                              Job &Dest,
403656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project                              const InputInfo &Output,
404656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project                              const InputInfoList &Inputs,
405656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project                              const ArgList &TCArgs,
406392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom                              const char *LinkingOutput) const;
407656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project  };
408674ff29eb647c577ba1ef822c373ead69dc386cfBrian Carlstrom} // end namespace auroraux
409656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project
410392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom  /// dragonfly -- Directly call GNU Binutils assembler and linker
411656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Projectnamespace dragonfly {
412656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project  class LLVM_LIBRARY_VISIBILITY Assemble : public Tool  {
413656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project  public:
414656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project    Assemble(const ToolChain &TC) : Tool("dragonfly::Assemble", "assembler",
415656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project                                         TC) {}
416656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project
417656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project    virtual bool hasIntegratedCPP() const { return false; }
418656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project
419656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project    virtual void ConstructJob(Compilation &C, const JobAction &JA,
420656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project                              Job &Dest,
421656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project                              const InputInfo &Output,
422656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project                              const InputInfoList &Inputs,
423656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project                              const ArgList &TCArgs,
424656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project                              const char *LinkingOutput) const;
425656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project  };
426656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project  class LLVM_LIBRARY_VISIBILITY Link : public Tool  {
427656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project  public:
428656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project    Link(const ToolChain &TC) : Tool("dragonfly::Link", "linker", TC) {}
429656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project
430656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project    virtual bool hasIntegratedCPP() const { return false; }
431656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project
432674ff29eb647c577ba1ef822c373ead69dc386cfBrian Carlstrom    virtual void ConstructJob(Compilation &C, const JobAction &JA,
433656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project                              Job &Dest,
434656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project                              const InputInfo &Output,
435656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project                              const InputInfoList &Inputs,
436674ff29eb647c577ba1ef822c373ead69dc386cfBrian Carlstrom                              const ArgList &TCArgs,
437674ff29eb647c577ba1ef822c373ead69dc386cfBrian Carlstrom                              const char *LinkingOutput) const;
438656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project  };
439656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project} // end namespace dragonfly
440656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project
441656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project} // end namespace toolchains
442656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project} // end namespace driver
443392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom} // end namespace clang
444656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project
445656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project#endif // CLANG_LIB_DRIVER_TOOLS_H_
446656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project