1320376Sdim//===--- Ananas.h - Ananas ToolChain Implementations --------*- C++ -*-===// 2320376Sdim// 3353358Sdim// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. 4353358Sdim// See https://llvm.org/LICENSE.txt for license information. 5353358Sdim// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception 6320376Sdim// 7320376Sdim//===----------------------------------------------------------------------===// 8320376Sdim 9320376Sdim#ifndef LLVM_CLANG_LIB_DRIVER_TOOLCHAINS_ANANAS_H 10320376Sdim#define LLVM_CLANG_LIB_DRIVER_TOOLCHAINS_ANANAS_H 11320376Sdim 12320376Sdim#include "Gnu.h" 13320376Sdim#include "clang/Driver/Tool.h" 14320376Sdim#include "clang/Driver/ToolChain.h" 15320376Sdim 16320376Sdimnamespace clang { 17320376Sdimnamespace driver { 18320376Sdimnamespace tools { 19320376Sdim 20320376Sdim/// ananas -- Directly call GNU Binutils assembler and linker 21320376Sdimnamespace ananas { 22320376Sdimclass LLVM_LIBRARY_VISIBILITY Assembler : public GnuTool { 23320376Sdimpublic: 24320376Sdim Assembler(const ToolChain &TC) 25320376Sdim : GnuTool("ananas::Assembler", "assembler", TC) {} 26320376Sdim 27320376Sdim bool hasIntegratedCPP() const override { return false; } 28320376Sdim 29320376Sdim void ConstructJob(Compilation &C, const JobAction &JA, 30320376Sdim const InputInfo &Output, const InputInfoList &Inputs, 31320376Sdim const llvm::opt::ArgList &TCArgs, 32320376Sdim const char *LinkingOutput) const override; 33320376Sdim}; 34320376Sdim 35320376Sdimclass LLVM_LIBRARY_VISIBILITY Linker : public GnuTool { 36320376Sdimpublic: 37320376Sdim Linker(const ToolChain &TC) : GnuTool("ananas::Linker", "linker", TC) {} 38320376Sdim 39320376Sdim bool hasIntegratedCPP() const override { return false; } 40320376Sdim bool isLinkJob() const override { return true; } 41320376Sdim 42320376Sdim void ConstructJob(Compilation &C, const JobAction &JA, 43320376Sdim const InputInfo &Output, const InputInfoList &Inputs, 44320376Sdim const llvm::opt::ArgList &TCArgs, 45320376Sdim const char *LinkingOutput) const override; 46320376Sdim}; 47320376Sdim} // end namespace ananas 48320376Sdim} // end namespace tools 49320376Sdim 50320376Sdimnamespace toolchains { 51320376Sdim 52320376Sdimclass LLVM_LIBRARY_VISIBILITY Ananas : public Generic_ELF { 53320376Sdimpublic: 54320376Sdim Ananas(const Driver &D, const llvm::Triple &Triple, 55320376Sdim const llvm::opt::ArgList &Args); 56320376Sdim 57320376Sdimprotected: 58320376Sdim Tool *buildAssembler() const override; 59320376Sdim Tool *buildLinker() const override; 60320376Sdim}; 61320376Sdim 62320376Sdim} // end namespace toolchains 63320376Sdim} // end namespace driver 64320376Sdim} // end namespace clang 65320376Sdim 66320376Sdim#endif // LLVM_CLANG_LIB_DRIVER_TOOLCHAINS_ANANAS_H 67