CloudABI.h revision 317030
156896Sfenner//===--- CloudABI.h - CloudABI ToolChain Implementations --------*- C++ -*-===//
275119Sfenner//
356896Sfenner//                     The LLVM Compiler Infrastructure
4214559Sdim//
5127676Sbms// This file is distributed under the University of Illinois Open Source
656896Sfenner// License. See LICENSE.TXT for details.
756896Sfenner//
856896Sfenner//===----------------------------------------------------------------------===//
9146779Ssam
10172687Smlaier#ifndef LLVM_CLANG_LIB_DRIVER_TOOLCHAINS_CLOUDABI_H
11146779Ssam#define LLVM_CLANG_LIB_DRIVER_TOOLCHAINS_CLOUDABI_H
12146779Ssam
1356896Sfenner#include "Gnu.h"
1456896Sfenner#include "clang/Driver/Tool.h"
1556896Sfenner#include "clang/Driver/ToolChain.h"
1656896Sfenner
1756896Sfennernamespace clang {
1856896Sfennernamespace driver {
1956896Sfennernamespace tools {
2056896Sfenner
2156896Sfenner/// cloudabi -- Directly call GNU Binutils linker
2256896Sfennernamespace cloudabi {
2356896Sfennerclass LLVM_LIBRARY_VISIBILITY Linker : public GnuTool {
2456896Sfennerpublic:
2556896Sfenner  Linker(const ToolChain &TC) : GnuTool("cloudabi::Linker", "linker", TC) {}
2656896Sfenner
2756896Sfenner  bool hasIntegratedCPP() const override { return false; }
28127676Sbms  bool isLinkJob() const override { return true; }
29127676Sbms
30127676Sbms  void ConstructJob(Compilation &C, const JobAction &JA,
3198528Sfenner                    const InputInfo &Output, const InputInfoList &Inputs,
3298528Sfenner                    const llvm::opt::ArgList &TCArgs,
3375119Sfenner                    const char *LinkingOutput) const override;
34127676Sbms};
35127676Sbms} // end namespace cloudabi
36127676Sbms} // end namespace tools
37127676Sbms
38127676Sbmsnamespace toolchains {
39127676Sbms
40127676Sbmsclass LLVM_LIBRARY_VISIBILITY CloudABI : public Generic_ELF {
41127676Sbmspublic:
42127676Sbms  CloudABI(const Driver &D, const llvm::Triple &Triple,
43127676Sbms           const llvm::opt::ArgList &Args);
44127676Sbms  bool HasNativeLLVMSupport() const override { return true; }
45127676Sbms
46127676Sbms  bool IsMathErrnoDefault() const override { return false; }
47127676Sbms  bool IsObjCNonFragileABIDefault() const override { return true; }
48127676Sbms
49127676Sbms  CXXStdlibType
50127676Sbms  GetCXXStdlibType(const llvm::opt::ArgList &Args) const override {
51127676Sbms    return ToolChain::CST_Libcxx;
52127676Sbms  }
53127676Sbms  std::string findLibCxxIncludePath() const override;
54127676Sbms  void AddCXXStdlibLibArgs(const llvm::opt::ArgList &Args,
55147905Ssam                           llvm::opt::ArgStringList &CmdArgs) const override;
56147905Ssam
57147905Ssam  bool isPIEDefault() const override;
58146779Ssam  SanitizerMask getSupportedSanitizers() const override;
59146779Ssam  SanitizerMask getDefaultSanitizers() const override;
60146779Ssam
61146779Ssamprotected:
62146779Ssam  Tool *buildLinker() const override;
63146779Ssam};
64146779Ssam
65146779Ssam} // end namespace toolchains
66146779Ssam} // end namespace driver
6798528Sfenner} // end namespace clang
6898528Sfenner
6998528Sfenner#endif // LLVM_CLANG_LIB_DRIVER_TOOLCHAINS_CLOUDABI_H
70127676Sbms