Ananas.h revision 320376
1320376Sdim//===--- Ananas.h - Ananas ToolChain Implementations --------*- C++ -*-===//
2320376Sdim//
3320376Sdim//                     The LLVM Compiler Infrastructure
4320376Sdim//
5320376Sdim// This file is distributed under the University of Illinois Open Source
6320376Sdim// License. See LICENSE.TXT for details.
7320376Sdim//
8320376Sdim//===----------------------------------------------------------------------===//
9320376Sdim
10320376Sdim#ifndef LLVM_CLANG_LIB_DRIVER_TOOLCHAINS_ANANAS_H
11320376Sdim#define LLVM_CLANG_LIB_DRIVER_TOOLCHAINS_ANANAS_H
12320376Sdim
13320376Sdim#include "Gnu.h"
14320376Sdim#include "clang/Driver/Tool.h"
15320376Sdim#include "clang/Driver/ToolChain.h"
16320376Sdim
17320376Sdimnamespace clang {
18320376Sdimnamespace driver {
19320376Sdimnamespace tools {
20320376Sdim
21320376Sdim/// ananas -- Directly call GNU Binutils assembler and linker
22320376Sdimnamespace ananas {
23320376Sdimclass LLVM_LIBRARY_VISIBILITY Assembler : public GnuTool {
24320376Sdimpublic:
25320376Sdim  Assembler(const ToolChain &TC)
26320376Sdim      : GnuTool("ananas::Assembler", "assembler", TC) {}
27320376Sdim
28320376Sdim  bool hasIntegratedCPP() const override { return false; }
29320376Sdim
30320376Sdim  void ConstructJob(Compilation &C, const JobAction &JA,
31320376Sdim                    const InputInfo &Output, const InputInfoList &Inputs,
32320376Sdim                    const llvm::opt::ArgList &TCArgs,
33320376Sdim                    const char *LinkingOutput) const override;
34320376Sdim};
35320376Sdim
36320376Sdimclass LLVM_LIBRARY_VISIBILITY Linker : public GnuTool {
37320376Sdimpublic:
38320376Sdim  Linker(const ToolChain &TC) : GnuTool("ananas::Linker", "linker", TC) {}
39320376Sdim
40320376Sdim  bool hasIntegratedCPP() const override { return false; }
41320376Sdim  bool isLinkJob() const override { return true; }
42320376Sdim
43320376Sdim  void ConstructJob(Compilation &C, const JobAction &JA,
44320376Sdim                    const InputInfo &Output, const InputInfoList &Inputs,
45320376Sdim                    const llvm::opt::ArgList &TCArgs,
46320376Sdim                    const char *LinkingOutput) const override;
47320376Sdim};
48320376Sdim} // end namespace ananas
49320376Sdim} // end namespace tools
50320376Sdim
51320376Sdimnamespace toolchains {
52320376Sdim
53320376Sdimclass LLVM_LIBRARY_VISIBILITY Ananas : public Generic_ELF {
54320376Sdimpublic:
55320376Sdim  Ananas(const Driver &D, const llvm::Triple &Triple,
56320376Sdim         const llvm::opt::ArgList &Args);
57320376Sdim
58320376Sdimprotected:
59320376Sdim  Tool *buildAssembler() const override;
60320376Sdim  Tool *buildLinker() const override;
61320376Sdim};
62320376Sdim
63320376Sdim} // end namespace toolchains
64320376Sdim} // end namespace driver
65320376Sdim} // end namespace clang
66320376Sdim
67320376Sdim#endif // LLVM_CLANG_LIB_DRIVER_TOOLCHAINS_ANANAS_H
68