1 //===--- CloudABI.h - CloudABI ToolChain Implementations --------*- C++ -*-===// 2 // 3 // The LLVM Compiler Infrastructure 4 // 5 // This file is distributed under the University of Illinois Open Source 6 // License. See LICENSE.TXT for details. 7 // 8 //===----------------------------------------------------------------------===// 9 10 #ifndef LLVM_CLANG_LIB_DRIVER_TOOLCHAINS_CLOUDABI_H 11 #define LLVM_CLANG_LIB_DRIVER_TOOLCHAINS_CLOUDABI_H 12 13 #include "Gnu.h" 14 #include "clang/Driver/Tool.h" 15 #include "clang/Driver/ToolChain.h" 16 17 namespace clang { 18 namespace driver { 19 namespace tools { 20 21 /// cloudabi -- Directly call GNU Binutils linker 22 namespace cloudabi { 23 class LLVM_LIBRARY_VISIBILITY Linker : public GnuTool { 24 public: Linker(const ToolChain & TC)25 Linker(const ToolChain &TC) : GnuTool("cloudabi::Linker", "linker", TC) {} 26 hasIntegratedCPP()27 bool hasIntegratedCPP() const override { return false; } isLinkJob()28 bool isLinkJob() const override { return true; } 29 30 void ConstructJob(Compilation &C, const JobAction &JA, 31 const InputInfo &Output, const InputInfoList &Inputs, 32 const llvm::opt::ArgList &TCArgs, 33 const char *LinkingOutput) const override; 34 }; 35 } // end namespace cloudabi 36 } // end namespace tools 37 38 namespace toolchains { 39 40 class LLVM_LIBRARY_VISIBILITY CloudABI : public Generic_ELF { 41 public: 42 CloudABI(const Driver &D, const llvm::Triple &Triple, 43 const llvm::opt::ArgList &Args); HasNativeLLVMSupport()44 bool HasNativeLLVMSupport() const override { return true; } 45 IsMathErrnoDefault()46 bool IsMathErrnoDefault() const override { return false; } IsObjCNonFragileABIDefault()47 bool IsObjCNonFragileABIDefault() const override { return true; } 48 49 CXXStdlibType GetCXXStdlibType(const llvm::opt::ArgList & Args)50 GetCXXStdlibType(const llvm::opt::ArgList &Args) const override { 51 return ToolChain::CST_Libcxx; 52 } 53 void addLibCxxIncludePaths( 54 const llvm::opt::ArgList &DriverArgs, 55 llvm::opt::ArgStringList &CC1Args) const override; 56 void AddCXXStdlibLibArgs(const llvm::opt::ArgList &Args, 57 llvm::opt::ArgStringList &CmdArgs) const override; 58 59 bool isPIEDefault() const override; 60 SanitizerMask getSupportedSanitizers() const override; 61 SanitizerMask getDefaultSanitizers() const override; 62 63 protected: 64 Tool *buildLinker() const override; 65 }; 66 67 } // end namespace toolchains 68 } // end namespace driver 69 } // end namespace clang 70 71 #endif // LLVM_CLANG_LIB_DRIVER_TOOLCHAINS_CLOUDABI_H 72