Tools.h revision 008f54a54299eaafdaa940e2bdeaf55935ecd95a
19c073ff462eb75ccbb1c4446e21c148f3fc618e1Daniel Dunbar//===--- Tools.h - Tool Implementations -------------------------*- C++ -*-===//
29c073ff462eb75ccbb1c4446e21c148f3fc618e1Daniel Dunbar//
39c073ff462eb75ccbb1c4446e21c148f3fc618e1Daniel Dunbar//                     The LLVM Compiler Infrastructure
49c073ff462eb75ccbb1c4446e21c148f3fc618e1Daniel Dunbar//
59c073ff462eb75ccbb1c4446e21c148f3fc618e1Daniel Dunbar// This file is distributed under the University of Illinois Open Source
69c073ff462eb75ccbb1c4446e21c148f3fc618e1Daniel Dunbar// License. See LICENSE.TXT for details.
79c073ff462eb75ccbb1c4446e21c148f3fc618e1Daniel Dunbar//
89c073ff462eb75ccbb1c4446e21c148f3fc618e1Daniel Dunbar//===----------------------------------------------------------------------===//
99c073ff462eb75ccbb1c4446e21c148f3fc618e1Daniel Dunbar
109c073ff462eb75ccbb1c4446e21c148f3fc618e1Daniel Dunbar#ifndef CLANG_LIB_DRIVER_TOOLS_H_
119c073ff462eb75ccbb1c4446e21c148f3fc618e1Daniel Dunbar#define CLANG_LIB_DRIVER_TOOLS_H_
129c073ff462eb75ccbb1c4446e21c148f3fc618e1Daniel Dunbar
139c073ff462eb75ccbb1c4446e21c148f3fc618e1Daniel Dunbar#include "clang/Driver/Tool.h"
1440f1265ebd42ece3e7f7917319b56012e8e2bce2Daniel Dunbar#include "clang/Driver/Types.h"
15b488c1dac8e53206f07103d794a62a3f5012c0f4Daniel Dunbar#include "clang/Driver/Util.h"
169c073ff462eb75ccbb1c4446e21c148f3fc618e1Daniel Dunbar
179c073ff462eb75ccbb1c4446e21c148f3fc618e1Daniel Dunbar#include "llvm/Support/Compiler.h"
189c073ff462eb75ccbb1c4446e21c148f3fc618e1Daniel Dunbar
199c073ff462eb75ccbb1c4446e21c148f3fc618e1Daniel Dunbarnamespace clang {
209c073ff462eb75ccbb1c4446e21c148f3fc618e1Daniel Dunbarnamespace driver {
2102633b541b04ad5ffc1c70f4c2feeeb13e607057Daniel Dunbarnamespace toolchains {
2202633b541b04ad5ffc1c70f4c2feeeb13e607057Daniel Dunbar  class Darwin_X86;
2302633b541b04ad5ffc1c70f4c2feeeb13e607057Daniel Dunbar}
2402633b541b04ad5ffc1c70f4c2feeeb13e607057Daniel Dunbar
25985b825eea7387be10478de0430815ed6a673326Daniel Dunbarnamespace tools {
269c073ff462eb75ccbb1c4446e21c148f3fc618e1Daniel Dunbar
27985b825eea7387be10478de0430815ed6a673326Daniel Dunbar  class VISIBILITY_HIDDEN Clang : public Tool {
289c073ff462eb75ccbb1c4446e21c148f3fc618e1Daniel Dunbar  public:
2931b1e5437e7435879fc044afb77ff27096008e72Daniel Dunbar    Clang(const ToolChain &TC) : Tool("clang", TC) {}
309c073ff462eb75ccbb1c4446e21c148f3fc618e1Daniel Dunbar
319c073ff462eb75ccbb1c4446e21c148f3fc618e1Daniel Dunbar    virtual bool acceptsPipedInput() const { return true; }
329c073ff462eb75ccbb1c4446e21c148f3fc618e1Daniel Dunbar    virtual bool canPipeOutput() const { return true; }
339c073ff462eb75ccbb1c4446e21c148f3fc618e1Daniel Dunbar    virtual bool hasIntegratedCPP() const { return true; }
3447ac7d27c44bd64a7d0fc03d4babc196cf2b8230Daniel Dunbar
3547ac7d27c44bd64a7d0fc03d4babc196cf2b8230Daniel Dunbar    virtual void ConstructJob(Compilation &C, const JobAction &JA,
36871adcf4e41285e3f4c3b62eaa1b2e05b60b92daDaniel Dunbar                              Job &Dest,
3762cf601812e03dd9bc5df42b8ef06a0cdedc38bfDaniel Dunbar                              const InputInfo &Output,
3862cf601812e03dd9bc5df42b8ef06a0cdedc38bfDaniel Dunbar                              const InputInfoList &Inputs,
3947ac7d27c44bd64a7d0fc03d4babc196cf2b8230Daniel Dunbar                              const ArgList &TCArgs,
4047ac7d27c44bd64a7d0fc03d4babc196cf2b8230Daniel Dunbar                              const char *LinkingOutput) const;
419c073ff462eb75ccbb1c4446e21c148f3fc618e1Daniel Dunbar  };
429c073ff462eb75ccbb1c4446e21c148f3fc618e1Daniel Dunbar
4331b1e5437e7435879fc044afb77ff27096008e72Daniel Dunbar  /// gcc - Generic GCC tool implementations.
4431b1e5437e7435879fc044afb77ff27096008e72Daniel Dunbarnamespace gcc {
45b488c1dac8e53206f07103d794a62a3f5012c0f4Daniel Dunbar  class VISIBILITY_HIDDEN Common : public Tool {
469c073ff462eb75ccbb1c4446e21c148f3fc618e1Daniel Dunbar  public:
47b488c1dac8e53206f07103d794a62a3f5012c0f4Daniel Dunbar    Common(const char *Name, const ToolChain &TC) : Tool(Name, TC) {}
4847ac7d27c44bd64a7d0fc03d4babc196cf2b8230Daniel Dunbar
4947ac7d27c44bd64a7d0fc03d4babc196cf2b8230Daniel Dunbar    virtual void ConstructJob(Compilation &C, const JobAction &JA,
50871adcf4e41285e3f4c3b62eaa1b2e05b60b92daDaniel Dunbar                              Job &Dest,
5162cf601812e03dd9bc5df42b8ef06a0cdedc38bfDaniel Dunbar                              const InputInfo &Output,
5262cf601812e03dd9bc5df42b8ef06a0cdedc38bfDaniel Dunbar                              const InputInfoList &Inputs,
5347ac7d27c44bd64a7d0fc03d4babc196cf2b8230Daniel Dunbar                              const ArgList &TCArgs,
5447ac7d27c44bd64a7d0fc03d4babc196cf2b8230Daniel Dunbar                              const char *LinkingOutput) const;
55b488c1dac8e53206f07103d794a62a3f5012c0f4Daniel Dunbar
56b488c1dac8e53206f07103d794a62a3f5012c0f4Daniel Dunbar    /// RenderExtraToolArgs - Render any arguments necessary to force
57b488c1dac8e53206f07103d794a62a3f5012c0f4Daniel Dunbar    /// the particular tool mode.
58b488c1dac8e53206f07103d794a62a3f5012c0f4Daniel Dunbar    virtual void RenderExtraToolArgs(ArgStringList &CmdArgs) const = 0;
599c073ff462eb75ccbb1c4446e21c148f3fc618e1Daniel Dunbar  };
609c073ff462eb75ccbb1c4446e21c148f3fc618e1Daniel Dunbar
61b488c1dac8e53206f07103d794a62a3f5012c0f4Daniel Dunbar
62b488c1dac8e53206f07103d794a62a3f5012c0f4Daniel Dunbar  class VISIBILITY_HIDDEN Preprocess : public Common {
639c073ff462eb75ccbb1c4446e21c148f3fc618e1Daniel Dunbar  public:
64b488c1dac8e53206f07103d794a62a3f5012c0f4Daniel Dunbar    Preprocess(const ToolChain &TC) : Common("gcc::Preprocess", TC) {}
65b488c1dac8e53206f07103d794a62a3f5012c0f4Daniel Dunbar
66b488c1dac8e53206f07103d794a62a3f5012c0f4Daniel Dunbar    virtual bool acceptsPipedInput() const { return true; }
67b488c1dac8e53206f07103d794a62a3f5012c0f4Daniel Dunbar    virtual bool canPipeOutput() const { return true; }
68b488c1dac8e53206f07103d794a62a3f5012c0f4Daniel Dunbar    virtual bool hasIntegratedCPP() const { return false; }
69b488c1dac8e53206f07103d794a62a3f5012c0f4Daniel Dunbar
70b488c1dac8e53206f07103d794a62a3f5012c0f4Daniel Dunbar    virtual void RenderExtraToolArgs(ArgStringList &CmdArgs) const;
71b488c1dac8e53206f07103d794a62a3f5012c0f4Daniel Dunbar  };
72b488c1dac8e53206f07103d794a62a3f5012c0f4Daniel Dunbar
73b488c1dac8e53206f07103d794a62a3f5012c0f4Daniel Dunbar  class VISIBILITY_HIDDEN Precompile : public Common  {
74b488c1dac8e53206f07103d794a62a3f5012c0f4Daniel Dunbar  public:
75b488c1dac8e53206f07103d794a62a3f5012c0f4Daniel Dunbar    Precompile(const ToolChain &TC) : Common("gcc::Precompile", TC) {}
769c073ff462eb75ccbb1c4446e21c148f3fc618e1Daniel Dunbar
779c073ff462eb75ccbb1c4446e21c148f3fc618e1Daniel Dunbar    virtual bool acceptsPipedInput() const { return true; }
789c073ff462eb75ccbb1c4446e21c148f3fc618e1Daniel Dunbar    virtual bool canPipeOutput() const { return false; }
799c073ff462eb75ccbb1c4446e21c148f3fc618e1Daniel Dunbar    virtual bool hasIntegratedCPP() const { return true; }
8047ac7d27c44bd64a7d0fc03d4babc196cf2b8230Daniel Dunbar
81b488c1dac8e53206f07103d794a62a3f5012c0f4Daniel Dunbar    virtual void RenderExtraToolArgs(ArgStringList &CmdArgs) const;
829c073ff462eb75ccbb1c4446e21c148f3fc618e1Daniel Dunbar  };
839c073ff462eb75ccbb1c4446e21c148f3fc618e1Daniel Dunbar
84b488c1dac8e53206f07103d794a62a3f5012c0f4Daniel Dunbar  class VISIBILITY_HIDDEN Compile : public Common  {
859c073ff462eb75ccbb1c4446e21c148f3fc618e1Daniel Dunbar  public:
86b488c1dac8e53206f07103d794a62a3f5012c0f4Daniel Dunbar    Compile(const ToolChain &TC) : Common("gcc::Compile", TC) {}
879c073ff462eb75ccbb1c4446e21c148f3fc618e1Daniel Dunbar
889c073ff462eb75ccbb1c4446e21c148f3fc618e1Daniel Dunbar    virtual bool acceptsPipedInput() const { return true; }
899c073ff462eb75ccbb1c4446e21c148f3fc618e1Daniel Dunbar    virtual bool canPipeOutput() const { return true; }
909c073ff462eb75ccbb1c4446e21c148f3fc618e1Daniel Dunbar    virtual bool hasIntegratedCPP() const { return true; }
9147ac7d27c44bd64a7d0fc03d4babc196cf2b8230Daniel Dunbar
92b488c1dac8e53206f07103d794a62a3f5012c0f4Daniel Dunbar    virtual void RenderExtraToolArgs(ArgStringList &CmdArgs) const;
939c073ff462eb75ccbb1c4446e21c148f3fc618e1Daniel Dunbar  };
949c073ff462eb75ccbb1c4446e21c148f3fc618e1Daniel Dunbar
95b488c1dac8e53206f07103d794a62a3f5012c0f4Daniel Dunbar  class VISIBILITY_HIDDEN Assemble : public Common  {
969c073ff462eb75ccbb1c4446e21c148f3fc618e1Daniel Dunbar  public:
97b488c1dac8e53206f07103d794a62a3f5012c0f4Daniel Dunbar    Assemble(const ToolChain &TC) : Common("gcc::Assemble", TC) {}
989c073ff462eb75ccbb1c4446e21c148f3fc618e1Daniel Dunbar
999c073ff462eb75ccbb1c4446e21c148f3fc618e1Daniel Dunbar    virtual bool acceptsPipedInput() const { return true; }
1009c073ff462eb75ccbb1c4446e21c148f3fc618e1Daniel Dunbar    virtual bool canPipeOutput() const { return false; }
1019c073ff462eb75ccbb1c4446e21c148f3fc618e1Daniel Dunbar    virtual bool hasIntegratedCPP() const { return false; }
10247ac7d27c44bd64a7d0fc03d4babc196cf2b8230Daniel Dunbar
103b488c1dac8e53206f07103d794a62a3f5012c0f4Daniel Dunbar    virtual void RenderExtraToolArgs(ArgStringList &CmdArgs) const;
1049c073ff462eb75ccbb1c4446e21c148f3fc618e1Daniel Dunbar  };
1059c073ff462eb75ccbb1c4446e21c148f3fc618e1Daniel Dunbar
106b488c1dac8e53206f07103d794a62a3f5012c0f4Daniel Dunbar  class VISIBILITY_HIDDEN Link : public Common  {
1079c073ff462eb75ccbb1c4446e21c148f3fc618e1Daniel Dunbar  public:
108b488c1dac8e53206f07103d794a62a3f5012c0f4Daniel Dunbar    Link(const ToolChain &TC) : Common("gcc::Link", TC) {}
1099c073ff462eb75ccbb1c4446e21c148f3fc618e1Daniel Dunbar
1109c073ff462eb75ccbb1c4446e21c148f3fc618e1Daniel Dunbar    virtual bool acceptsPipedInput() const { return false; }
1119c073ff462eb75ccbb1c4446e21c148f3fc618e1Daniel Dunbar    virtual bool canPipeOutput() const { return false; }
1129c073ff462eb75ccbb1c4446e21c148f3fc618e1Daniel Dunbar    virtual bool hasIntegratedCPP() const { return false; }
11347ac7d27c44bd64a7d0fc03d4babc196cf2b8230Daniel Dunbar
114b488c1dac8e53206f07103d794a62a3f5012c0f4Daniel Dunbar    virtual void RenderExtraToolArgs(ArgStringList &CmdArgs) const;
1159c073ff462eb75ccbb1c4446e21c148f3fc618e1Daniel Dunbar  };
11631b1e5437e7435879fc044afb77ff27096008e72Daniel Dunbar} // end namespace gcc
1179c073ff462eb75ccbb1c4446e21c148f3fc618e1Daniel Dunbar
118ff7488dc9a766f94daf54d81b03ab9160d0bfd88Daniel Dunbarnamespace darwin {
11940f1265ebd42ece3e7f7917319b56012e8e2bce2Daniel Dunbar  class VISIBILITY_HIDDEN CC1 : public Tool  {
120a5a7bd0de7b6b80212095195a055a4a43f21d4b2Daniel Dunbar  public:
121a5a7bd0de7b6b80212095195a055a4a43f21d4b2Daniel Dunbar    static const char *getBaseInputName(const ArgList &Args,
122a5a7bd0de7b6b80212095195a055a4a43f21d4b2Daniel Dunbar                                 const InputInfoList &Input);
123a5a7bd0de7b6b80212095195a055a4a43f21d4b2Daniel Dunbar    static const char *getBaseInputStem(const ArgList &Args,
124a5a7bd0de7b6b80212095195a055a4a43f21d4b2Daniel Dunbar                                 const InputInfoList &Input);
125a5a7bd0de7b6b80212095195a055a4a43f21d4b2Daniel Dunbar    static const char *getDependencyFileName(const ArgList &Args,
126a5a7bd0de7b6b80212095195a055a4a43f21d4b2Daniel Dunbar                                             const InputInfoList &Inputs);
127a5a7bd0de7b6b80212095195a055a4a43f21d4b2Daniel Dunbar
12840f1265ebd42ece3e7f7917319b56012e8e2bce2Daniel Dunbar  protected:
12940f1265ebd42ece3e7f7917319b56012e8e2bce2Daniel Dunbar    const char *getCC1Name(types::ID Type) const;
130a3ec60e0cf2a1916f479288998d31bd980b1a306Daniel Dunbar
131a3ec60e0cf2a1916f479288998d31bd980b1a306Daniel Dunbar    void AddCC1Args(const ArgList &Args, ArgStringList &CmdArgs) const;
13240f1265ebd42ece3e7f7917319b56012e8e2bce2Daniel Dunbar    void AddCC1OptionsArgs(const ArgList &Args, ArgStringList &CmdArgs,
13340f1265ebd42ece3e7f7917319b56012e8e2bce2Daniel Dunbar                           const InputInfoList &Inputs,
134a3ec60e0cf2a1916f479288998d31bd980b1a306Daniel Dunbar                           const ArgStringList &OutputArgs) const;
13540f1265ebd42ece3e7f7917319b56012e8e2bce2Daniel Dunbar    void AddCPPOptionsArgs(const ArgList &Args, ArgStringList &CmdArgs,
13640f1265ebd42ece3e7f7917319b56012e8e2bce2Daniel Dunbar                           const InputInfoList &Inputs,
137a3ec60e0cf2a1916f479288998d31bd980b1a306Daniel Dunbar                           const ArgStringList &OutputArgs) const;
138a3ec60e0cf2a1916f479288998d31bd980b1a306Daniel Dunbar    void AddCPPUniqueOptionsArgs(const ArgList &Args,
139a3ec60e0cf2a1916f479288998d31bd980b1a306Daniel Dunbar                                 ArgStringList &CmdArgs,
140a3ec60e0cf2a1916f479288998d31bd980b1a306Daniel Dunbar                                 const InputInfoList &Inputs) const;
141a3ec60e0cf2a1916f479288998d31bd980b1a306Daniel Dunbar    void AddCPPArgs(const ArgList &Args, ArgStringList &CmdArgs) const;
14240f1265ebd42ece3e7f7917319b56012e8e2bce2Daniel Dunbar
14340f1265ebd42ece3e7f7917319b56012e8e2bce2Daniel Dunbar  public:
14440f1265ebd42ece3e7f7917319b56012e8e2bce2Daniel Dunbar    CC1(const char *Name, const ToolChain &TC) : Tool(Name, TC) {}
14540f1265ebd42ece3e7f7917319b56012e8e2bce2Daniel Dunbar
14640f1265ebd42ece3e7f7917319b56012e8e2bce2Daniel Dunbar    virtual bool acceptsPipedInput() const { return true; }
14740f1265ebd42ece3e7f7917319b56012e8e2bce2Daniel Dunbar    virtual bool canPipeOutput() const { return true; }
14840f1265ebd42ece3e7f7917319b56012e8e2bce2Daniel Dunbar    virtual bool hasIntegratedCPP() const { return true; }
14940f1265ebd42ece3e7f7917319b56012e8e2bce2Daniel Dunbar  };
15040f1265ebd42ece3e7f7917319b56012e8e2bce2Daniel Dunbar
15140f1265ebd42ece3e7f7917319b56012e8e2bce2Daniel Dunbar  class VISIBILITY_HIDDEN Preprocess : public CC1  {
15240f1265ebd42ece3e7f7917319b56012e8e2bce2Daniel Dunbar  public:
15340f1265ebd42ece3e7f7917319b56012e8e2bce2Daniel Dunbar    Preprocess(const ToolChain &TC) : CC1("darwin::Preprocess", TC) {}
15440f1265ebd42ece3e7f7917319b56012e8e2bce2Daniel Dunbar
15540f1265ebd42ece3e7f7917319b56012e8e2bce2Daniel Dunbar    virtual void ConstructJob(Compilation &C, const JobAction &JA,
15640f1265ebd42ece3e7f7917319b56012e8e2bce2Daniel Dunbar                              Job &Dest,
15740f1265ebd42ece3e7f7917319b56012e8e2bce2Daniel Dunbar                              const InputInfo &Output,
15840f1265ebd42ece3e7f7917319b56012e8e2bce2Daniel Dunbar                              const InputInfoList &Inputs,
15940f1265ebd42ece3e7f7917319b56012e8e2bce2Daniel Dunbar                              const ArgList &TCArgs,
16040f1265ebd42ece3e7f7917319b56012e8e2bce2Daniel Dunbar                              const char *LinkingOutput) const;
16140f1265ebd42ece3e7f7917319b56012e8e2bce2Daniel Dunbar  };
16240f1265ebd42ece3e7f7917319b56012e8e2bce2Daniel Dunbar
16340f1265ebd42ece3e7f7917319b56012e8e2bce2Daniel Dunbar  class VISIBILITY_HIDDEN Compile : public CC1  {
16440f1265ebd42ece3e7f7917319b56012e8e2bce2Daniel Dunbar  public:
16540f1265ebd42ece3e7f7917319b56012e8e2bce2Daniel Dunbar    Compile(const ToolChain &TC) : CC1("darwin::Compile", TC) {}
16640f1265ebd42ece3e7f7917319b56012e8e2bce2Daniel Dunbar
16740f1265ebd42ece3e7f7917319b56012e8e2bce2Daniel Dunbar    virtual void ConstructJob(Compilation &C, const JobAction &JA,
16840f1265ebd42ece3e7f7917319b56012e8e2bce2Daniel Dunbar                              Job &Dest,
16940f1265ebd42ece3e7f7917319b56012e8e2bce2Daniel Dunbar                              const InputInfo &Output,
17040f1265ebd42ece3e7f7917319b56012e8e2bce2Daniel Dunbar                              const InputInfoList &Inputs,
17140f1265ebd42ece3e7f7917319b56012e8e2bce2Daniel Dunbar                              const ArgList &TCArgs,
17240f1265ebd42ece3e7f7917319b56012e8e2bce2Daniel Dunbar                              const char *LinkingOutput) const;
17340f1265ebd42ece3e7f7917319b56012e8e2bce2Daniel Dunbar  };
17440f1265ebd42ece3e7f7917319b56012e8e2bce2Daniel Dunbar
1758cac5f7e1ce63dd77ee0fb4ef68f9fa804f41ea6Daniel Dunbar  class VISIBILITY_HIDDEN Assemble : public Tool  {
1768cac5f7e1ce63dd77ee0fb4ef68f9fa804f41ea6Daniel Dunbar  public:
1778cac5f7e1ce63dd77ee0fb4ef68f9fa804f41ea6Daniel Dunbar    Assemble(const ToolChain &TC) : Tool("darwin::Assemble", TC) {}
1788cac5f7e1ce63dd77ee0fb4ef68f9fa804f41ea6Daniel Dunbar
1798cac5f7e1ce63dd77ee0fb4ef68f9fa804f41ea6Daniel Dunbar    virtual bool acceptsPipedInput() const { return true; }
1808cac5f7e1ce63dd77ee0fb4ef68f9fa804f41ea6Daniel Dunbar    virtual bool canPipeOutput() const { return false; }
1818cac5f7e1ce63dd77ee0fb4ef68f9fa804f41ea6Daniel Dunbar    virtual bool hasIntegratedCPP() const { return false; }
1828cac5f7e1ce63dd77ee0fb4ef68f9fa804f41ea6Daniel Dunbar
1838cac5f7e1ce63dd77ee0fb4ef68f9fa804f41ea6Daniel Dunbar    virtual void ConstructJob(Compilation &C, const JobAction &JA,
18402633b541b04ad5ffc1c70f4c2feeeb13e607057Daniel Dunbar                              Job &Dest,
18502633b541b04ad5ffc1c70f4c2feeeb13e607057Daniel Dunbar                              const InputInfo &Output,
18602633b541b04ad5ffc1c70f4c2feeeb13e607057Daniel Dunbar                              const InputInfoList &Inputs,
18702633b541b04ad5ffc1c70f4c2feeeb13e607057Daniel Dunbar                              const ArgList &TCArgs,
18802633b541b04ad5ffc1c70f4c2feeeb13e607057Daniel Dunbar                              const char *LinkingOutput) const;
18902633b541b04ad5ffc1c70f4c2feeeb13e607057Daniel Dunbar  };
19002633b541b04ad5ffc1c70f4c2feeeb13e607057Daniel Dunbar
19102633b541b04ad5ffc1c70f4c2feeeb13e607057Daniel Dunbar  class VISIBILITY_HIDDEN Link : public Tool  {
19202633b541b04ad5ffc1c70f4c2feeeb13e607057Daniel Dunbar    void AddDarwinArch(const ArgList &Args, ArgStringList &CmdArgs) const;
19302633b541b04ad5ffc1c70f4c2feeeb13e607057Daniel Dunbar    void AddDarwinSubArch(const ArgList &Args, ArgStringList &CmdArgs) const;
19402633b541b04ad5ffc1c70f4c2feeeb13e607057Daniel Dunbar    void AddLinkArgs(const ArgList &Args, ArgStringList &CmdArgs) const;
19502633b541b04ad5ffc1c70f4c2feeeb13e607057Daniel Dunbar
19602633b541b04ad5ffc1c70f4c2feeeb13e607057Daniel Dunbar    /// The default macosx-version-min.
19702633b541b04ad5ffc1c70f4c2feeeb13e607057Daniel Dunbar    const char *MacosxVersionMin;
19802633b541b04ad5ffc1c70f4c2feeeb13e607057Daniel Dunbar
19902633b541b04ad5ffc1c70f4c2feeeb13e607057Daniel Dunbar    const toolchains::Darwin_X86 &getDarwinToolChain() const;
20002633b541b04ad5ffc1c70f4c2feeeb13e607057Daniel Dunbar
20102633b541b04ad5ffc1c70f4c2feeeb13e607057Daniel Dunbar  public:
20202633b541b04ad5ffc1c70f4c2feeeb13e607057Daniel Dunbar    Link(const ToolChain &TC,
20302633b541b04ad5ffc1c70f4c2feeeb13e607057Daniel Dunbar         const char *_MacosxVersionMin)
20402633b541b04ad5ffc1c70f4c2feeeb13e607057Daniel Dunbar      : Tool("darwin::Link", TC), MacosxVersionMin(_MacosxVersionMin) {
20502633b541b04ad5ffc1c70f4c2feeeb13e607057Daniel Dunbar    }
20602633b541b04ad5ffc1c70f4c2feeeb13e607057Daniel Dunbar
20702633b541b04ad5ffc1c70f4c2feeeb13e607057Daniel Dunbar    virtual bool acceptsPipedInput() const { return false; }
20802633b541b04ad5ffc1c70f4c2feeeb13e607057Daniel Dunbar    virtual bool canPipeOutput() const { return false; }
20902633b541b04ad5ffc1c70f4c2feeeb13e607057Daniel Dunbar    virtual bool hasIntegratedCPP() const { return false; }
21002633b541b04ad5ffc1c70f4c2feeeb13e607057Daniel Dunbar
21102633b541b04ad5ffc1c70f4c2feeeb13e607057Daniel Dunbar    virtual void ConstructJob(Compilation &C, const JobAction &JA,
2128cac5f7e1ce63dd77ee0fb4ef68f9fa804f41ea6Daniel Dunbar                              Job &Dest,
2138cac5f7e1ce63dd77ee0fb4ef68f9fa804f41ea6Daniel Dunbar                              const InputInfo &Output,
2148cac5f7e1ce63dd77ee0fb4ef68f9fa804f41ea6Daniel Dunbar                              const InputInfoList &Inputs,
2158cac5f7e1ce63dd77ee0fb4ef68f9fa804f41ea6Daniel Dunbar                              const ArgList &TCArgs,
2168cac5f7e1ce63dd77ee0fb4ef68f9fa804f41ea6Daniel Dunbar                              const char *LinkingOutput) const;
2178cac5f7e1ce63dd77ee0fb4ef68f9fa804f41ea6Daniel Dunbar  };
2188cac5f7e1ce63dd77ee0fb4ef68f9fa804f41ea6Daniel Dunbar
219ff7488dc9a766f94daf54d81b03ab9160d0bfd88Daniel Dunbar  class VISIBILITY_HIDDEN Lipo : public Tool  {
220ff7488dc9a766f94daf54d81b03ab9160d0bfd88Daniel Dunbar  public:
2218cac5f7e1ce63dd77ee0fb4ef68f9fa804f41ea6Daniel Dunbar    Lipo(const ToolChain &TC) : Tool("darwin::Lipo", TC) {}
222ff7488dc9a766f94daf54d81b03ab9160d0bfd88Daniel Dunbar
223ff7488dc9a766f94daf54d81b03ab9160d0bfd88Daniel Dunbar    virtual bool acceptsPipedInput() const { return false; }
224ff7488dc9a766f94daf54d81b03ab9160d0bfd88Daniel Dunbar    virtual bool canPipeOutput() const { return false; }
225ff7488dc9a766f94daf54d81b03ab9160d0bfd88Daniel Dunbar    virtual bool hasIntegratedCPP() const { return false; }
226ff7488dc9a766f94daf54d81b03ab9160d0bfd88Daniel Dunbar
227ff7488dc9a766f94daf54d81b03ab9160d0bfd88Daniel Dunbar    virtual void ConstructJob(Compilation &C, const JobAction &JA,
228ff7488dc9a766f94daf54d81b03ab9160d0bfd88Daniel Dunbar                              Job &Dest,
229ff7488dc9a766f94daf54d81b03ab9160d0bfd88Daniel Dunbar                              const InputInfo &Output,
230ff7488dc9a766f94daf54d81b03ab9160d0bfd88Daniel Dunbar                              const InputInfoList &Inputs,
231ff7488dc9a766f94daf54d81b03ab9160d0bfd88Daniel Dunbar                              const ArgList &TCArgs,
232ff7488dc9a766f94daf54d81b03ab9160d0bfd88Daniel Dunbar                              const char *LinkingOutput) const;
233ff7488dc9a766f94daf54d81b03ab9160d0bfd88Daniel Dunbar  };
234ff7488dc9a766f94daf54d81b03ab9160d0bfd88Daniel Dunbar}
235ff7488dc9a766f94daf54d81b03ab9160d0bfd88Daniel Dunbar
23668a31d406c6dc4382c700d1199b062de2aa7e1daDaniel Dunbar  /// freebsd -- Directly call GNU Binutils assembler and linker
23768a31d406c6dc4382c700d1199b062de2aa7e1daDaniel Dunbarnamespace freebsd {
23868a31d406c6dc4382c700d1199b062de2aa7e1daDaniel Dunbar  class VISIBILITY_HIDDEN Assemble : public Tool  {
23968a31d406c6dc4382c700d1199b062de2aa7e1daDaniel Dunbar  public:
24068a31d406c6dc4382c700d1199b062de2aa7e1daDaniel Dunbar    Assemble(const ToolChain &TC) : Tool("freebsd::Assemble", TC) {}
24168a31d406c6dc4382c700d1199b062de2aa7e1daDaniel Dunbar
24268a31d406c6dc4382c700d1199b062de2aa7e1daDaniel Dunbar    virtual bool acceptsPipedInput() const { return true; }
24368a31d406c6dc4382c700d1199b062de2aa7e1daDaniel Dunbar    virtual bool canPipeOutput() const { return true; }
24468a31d406c6dc4382c700d1199b062de2aa7e1daDaniel Dunbar    virtual bool hasIntegratedCPP() const { return false; }
24568a31d406c6dc4382c700d1199b062de2aa7e1daDaniel Dunbar
24668a31d406c6dc4382c700d1199b062de2aa7e1daDaniel Dunbar    virtual void ConstructJob(Compilation &C, const JobAction &JA,
24768a31d406c6dc4382c700d1199b062de2aa7e1daDaniel Dunbar                              Job &Dest,
24868a31d406c6dc4382c700d1199b062de2aa7e1daDaniel Dunbar                              const InputInfo &Output,
24968a31d406c6dc4382c700d1199b062de2aa7e1daDaniel Dunbar                              const InputInfoList &Inputs,
25068a31d406c6dc4382c700d1199b062de2aa7e1daDaniel Dunbar                              const ArgList &TCArgs,
25168a31d406c6dc4382c700d1199b062de2aa7e1daDaniel Dunbar                              const char *LinkingOutput) const;
25268a31d406c6dc4382c700d1199b062de2aa7e1daDaniel Dunbar  };
253008f54a54299eaafdaa940e2bdeaf55935ecd95aDaniel Dunbar  class VISIBILITY_HIDDEN Link : public Tool  {
254008f54a54299eaafdaa940e2bdeaf55935ecd95aDaniel Dunbar  public:
255008f54a54299eaafdaa940e2bdeaf55935ecd95aDaniel Dunbar    Link(const ToolChain &TC) : Tool("freebsd::Link", TC) {}
256008f54a54299eaafdaa940e2bdeaf55935ecd95aDaniel Dunbar
257008f54a54299eaafdaa940e2bdeaf55935ecd95aDaniel Dunbar    virtual bool acceptsPipedInput() const { return true; }
258008f54a54299eaafdaa940e2bdeaf55935ecd95aDaniel Dunbar    virtual bool canPipeOutput() const { return true; }
259008f54a54299eaafdaa940e2bdeaf55935ecd95aDaniel Dunbar    virtual bool hasIntegratedCPP() const { return false; }
260008f54a54299eaafdaa940e2bdeaf55935ecd95aDaniel Dunbar
261008f54a54299eaafdaa940e2bdeaf55935ecd95aDaniel Dunbar    virtual void ConstructJob(Compilation &C, const JobAction &JA,
262008f54a54299eaafdaa940e2bdeaf55935ecd95aDaniel Dunbar                              Job &Dest,
263008f54a54299eaafdaa940e2bdeaf55935ecd95aDaniel Dunbar                              const InputInfo &Output,
264008f54a54299eaafdaa940e2bdeaf55935ecd95aDaniel Dunbar                              const InputInfoList &Inputs,
265008f54a54299eaafdaa940e2bdeaf55935ecd95aDaniel Dunbar                              const ArgList &TCArgs,
266008f54a54299eaafdaa940e2bdeaf55935ecd95aDaniel Dunbar                              const char *LinkingOutput) const;
267008f54a54299eaafdaa940e2bdeaf55935ecd95aDaniel Dunbar  };
26868a31d406c6dc4382c700d1199b062de2aa7e1daDaniel Dunbar}
26968a31d406c6dc4382c700d1199b062de2aa7e1daDaniel Dunbar
2709c073ff462eb75ccbb1c4446e21c148f3fc618e1Daniel Dunbar} // end namespace toolchains
2719c073ff462eb75ccbb1c4446e21c148f3fc618e1Daniel Dunbar} // end namespace driver
2729c073ff462eb75ccbb1c4446e21c148f3fc618e1Daniel Dunbar} // end namespace clang
2739c073ff462eb75ccbb1c4446e21c148f3fc618e1Daniel Dunbar
2749c073ff462eb75ccbb1c4446e21c148f3fc618e1Daniel Dunbar#endif
275