1317019Sdim//===--- DragonFly.h - DragonFly ToolChain Implementations ------*- C++ -*-===// 2317019Sdim// 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 6317019Sdim// 7317019Sdim//===----------------------------------------------------------------------===// 8317019Sdim 9317019Sdim#ifndef LLVM_CLANG_LIB_DRIVER_TOOLCHAINS_DRAGONFLY_H 10317019Sdim#define LLVM_CLANG_LIB_DRIVER_TOOLCHAINS_DRAGONFLY_H 11317019Sdim 12317019Sdim#include "Gnu.h" 13317019Sdim#include "clang/Driver/Tool.h" 14317019Sdim#include "clang/Driver/ToolChain.h" 15317019Sdim 16317019Sdimnamespace clang { 17317019Sdimnamespace driver { 18317019Sdimnamespace tools { 19317019Sdim/// dragonfly -- Directly call GNU Binutils assembler and linker 20317019Sdimnamespace dragonfly { 21317019Sdimclass LLVM_LIBRARY_VISIBILITY Assembler : public GnuTool { 22317019Sdimpublic: 23317019Sdim Assembler(const ToolChain &TC) 24317019Sdim : GnuTool("dragonfly::Assembler", "assembler", TC) {} 25317019Sdim 26317019Sdim bool hasIntegratedCPP() const override { return false; } 27317019Sdim 28317019Sdim void ConstructJob(Compilation &C, const JobAction &JA, 29317019Sdim const InputInfo &Output, const InputInfoList &Inputs, 30317019Sdim const llvm::opt::ArgList &TCArgs, 31317019Sdim const char *LinkingOutput) const override; 32317019Sdim}; 33317019Sdim 34317019Sdimclass LLVM_LIBRARY_VISIBILITY Linker : public GnuTool { 35317019Sdimpublic: 36317019Sdim Linker(const ToolChain &TC) : GnuTool("dragonfly::Linker", "linker", TC) {} 37317019Sdim 38317019Sdim bool hasIntegratedCPP() const override { return false; } 39317019Sdim bool isLinkJob() const override { return true; } 40317019Sdim 41317019Sdim void ConstructJob(Compilation &C, const JobAction &JA, 42317019Sdim const InputInfo &Output, const InputInfoList &Inputs, 43317019Sdim const llvm::opt::ArgList &TCArgs, 44317019Sdim const char *LinkingOutput) const override; 45317019Sdim}; 46317019Sdim} // end namespace dragonfly 47317019Sdim} // end namespace tools 48317019Sdim 49317019Sdimnamespace toolchains { 50317019Sdim 51317019Sdimclass LLVM_LIBRARY_VISIBILITY DragonFly : public Generic_ELF { 52317019Sdimpublic: 53317019Sdim DragonFly(const Driver &D, const llvm::Triple &Triple, 54317019Sdim const llvm::opt::ArgList &Args); 55317019Sdim 56317019Sdim bool IsMathErrnoDefault() const override { return false; } 57317019Sdim 58317019Sdimprotected: 59317019Sdim Tool *buildAssembler() const override; 60317019Sdim Tool *buildLinker() const override; 61317019Sdim}; 62317019Sdim 63317019Sdim} // end namespace toolchains 64317019Sdim} // end namespace driver 65317019Sdim} // end namespace clang 66317019Sdim 67317019Sdim#endif // LLVM_CLANG_LIB_DRIVER_TOOLCHAINS_DRAGONFLY_H 68