DragonFly.h revision 360660
1145683Sharti//===--- DragonFly.h - DragonFly ToolChain Implementations ------*- C++ -*-===//
2145683Sharti//
3145683Sharti// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
4177102Sobrien// See https://llvm.org/LICENSE.txt for license information.
5145683Sharti// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
6145683Sharti//
7145683Sharti//===----------------------------------------------------------------------===//
8145683Sharti
9145683Sharti#ifndef LLVM_CLANG_LIB_DRIVER_TOOLCHAINS_DRAGONFLY_H
10145683Sharti#define LLVM_CLANG_LIB_DRIVER_TOOLCHAINS_DRAGONFLY_H
11145683Sharti
12145683Sharti#include "Gnu.h"
13150595Sphk#include "clang/Driver/Tool.h"
14150595Sphk#include "clang/Driver/ToolChain.h"
15145683Sharti
16145683Shartinamespace clang {
17145683Shartinamespace driver {
18145683Shartinamespace tools {
19145683Sharti/// dragonfly -- Directly call GNU Binutils assembler and linker
20145683Shartinamespace dragonfly {
21145683Sharticlass LLVM_LIBRARY_VISIBILITY Assembler : public GnuTool {
22150595Sphkpublic:
23145683Sharti  Assembler(const ToolChain &TC)
24145683Sharti      : GnuTool("dragonfly::Assembler", "assembler", TC) {}
25145683Sharti
26145683Sharti  bool hasIntegratedCPP() const override { return false; }
27150595Sphk
28150595Sphk  void ConstructJob(Compilation &C, const JobAction &JA,
29150595Sphk                    const InputInfo &Output, const InputInfoList &Inputs,
30150595Sphk                    const llvm::opt::ArgList &TCArgs,
31145683Sharti                    const char *LinkingOutput) const override;
32145683Sharti};
33145683Sharti
34150595Sphkclass LLVM_LIBRARY_VISIBILITY Linker : public GnuTool {
35150595Sphkpublic:
36150595Sphk  Linker(const ToolChain &TC) : GnuTool("dragonfly::Linker", "linker", TC) {}
37145683Sharti
38145683Sharti  bool hasIntegratedCPP() const override { return false; }
39145683Sharti  bool isLinkJob() const override { return true; }
40150595Sphk
41150595Sphk  void ConstructJob(Compilation &C, const JobAction &JA,
42150595Sphk                    const InputInfo &Output, const InputInfoList &Inputs,
43145683Sharti                    const llvm::opt::ArgList &TCArgs,
44145683Sharti                    const char *LinkingOutput) const override;
45145683Sharti};
46145683Sharti} // end namespace dragonfly
47145683Sharti} // end namespace tools
48145683Sharti
49145683Shartinamespace toolchains {
50145683Sharti
51145683Sharticlass LLVM_LIBRARY_VISIBILITY DragonFly : public Generic_ELF {
52145683Shartipublic:
53145683Sharti  DragonFly(const Driver &D, const llvm::Triple &Triple,
54145683Sharti            const llvm::opt::ArgList &Args);
55145683Sharti
56145683Sharti  bool IsMathErrnoDefault() const override { return false; }
57145683Sharti
58145683Shartiprotected:
59145683Sharti  Tool *buildAssembler() const override;
60145683Sharti  Tool *buildLinker() const override;
61145683Sharti};
62150595Sphk
63150595Sphk} // end namespace toolchains
64145683Sharti} // end namespace driver
65150595Sphk} // end namespace clang
66145683Sharti
67145683Sharti#endif // LLVM_CLANG_LIB_DRIVER_TOOLCHAINS_DRAGONFLY_H
68145683Sharti