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