1*06c3fb27SDimitry Andric //===--- OHOS.h - OHOS ToolChain Implementations ----------*- C++ -*-===// 2*06c3fb27SDimitry Andric // 3*06c3fb27SDimitry Andric // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. 4*06c3fb27SDimitry Andric // See https://llvm.org/LICENSE.txt for license information. 5*06c3fb27SDimitry Andric // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception 6*06c3fb27SDimitry Andric // 7*06c3fb27SDimitry Andric //===----------------------------------------------------------------------===// 8*06c3fb27SDimitry Andric 9*06c3fb27SDimitry Andric #ifndef LLVM_CLANG_LIB_DRIVER_TOOLCHAINS_OHOS_H 10*06c3fb27SDimitry Andric #define LLVM_CLANG_LIB_DRIVER_TOOLCHAINS_OHOS_H 11*06c3fb27SDimitry Andric 12*06c3fb27SDimitry Andric #include "Linux.h" 13*06c3fb27SDimitry Andric #include "clang/Driver/Tool.h" 14*06c3fb27SDimitry Andric #include "clang/Driver/ToolChain.h" 15*06c3fb27SDimitry Andric 16*06c3fb27SDimitry Andric namespace clang { 17*06c3fb27SDimitry Andric namespace driver { 18*06c3fb27SDimitry Andric namespace toolchains { 19*06c3fb27SDimitry Andric 20*06c3fb27SDimitry Andric class LLVM_LIBRARY_VISIBILITY OHOS : public Generic_ELF { 21*06c3fb27SDimitry Andric public: 22*06c3fb27SDimitry Andric OHOS(const Driver &D, const llvm::Triple &Triple, 23*06c3fb27SDimitry Andric const llvm::opt::ArgList &Args); 24*06c3fb27SDimitry Andric HasNativeLLVMSupport()25*06c3fb27SDimitry Andric bool HasNativeLLVMSupport() const override { return true; } 26*06c3fb27SDimitry Andric IsMathErrnoDefault()27*06c3fb27SDimitry Andric bool IsMathErrnoDefault() const override { return false; } 28*06c3fb27SDimitry Andric GetDefaultRuntimeLibType()29*06c3fb27SDimitry Andric RuntimeLibType GetDefaultRuntimeLibType() const override { 30*06c3fb27SDimitry Andric return ToolChain::RLT_CompilerRT; 31*06c3fb27SDimitry Andric } GetDefaultCXXStdlibType()32*06c3fb27SDimitry Andric CXXStdlibType GetDefaultCXXStdlibType() const override { 33*06c3fb27SDimitry Andric return ToolChain::CST_Libcxx; 34*06c3fb27SDimitry Andric } 35*06c3fb27SDimitry Andric // Not add -funwind-tables by default isPICDefault()36*06c3fb27SDimitry Andric bool isPICDefault() const override { return false; } isPIEDefault(const llvm::opt::ArgList & Args)37*06c3fb27SDimitry Andric bool isPIEDefault(const llvm::opt::ArgList &Args) const override { return true; } isPICDefaultForced()38*06c3fb27SDimitry Andric bool isPICDefaultForced() const override { return false; } 39*06c3fb27SDimitry Andric UnwindLibType GetUnwindLibType(const llvm::opt::ArgList &Args) const override; GetDefaultUnwindLibType()40*06c3fb27SDimitry Andric UnwindLibType GetDefaultUnwindLibType() const override { return UNW_CompilerRT; } 41*06c3fb27SDimitry Andric 42*06c3fb27SDimitry Andric RuntimeLibType 43*06c3fb27SDimitry Andric GetRuntimeLibType(const llvm::opt::ArgList &Args) const override; 44*06c3fb27SDimitry Andric CXXStdlibType 45*06c3fb27SDimitry Andric GetCXXStdlibType(const llvm::opt::ArgList &Args) const override; 46*06c3fb27SDimitry Andric 47*06c3fb27SDimitry Andric void 48*06c3fb27SDimitry Andric AddClangSystemIncludeArgs(const llvm::opt::ArgList &DriverArgs, 49*06c3fb27SDimitry Andric llvm::opt::ArgStringList &CC1Args) const override; 50*06c3fb27SDimitry Andric void 51*06c3fb27SDimitry Andric AddClangCXXStdlibIncludeArgs(const llvm::opt::ArgList &DriverArgs, 52*06c3fb27SDimitry Andric llvm::opt::ArgStringList &CC1Args) const override; 53*06c3fb27SDimitry Andric void AddCXXStdlibLibArgs(const llvm::opt::ArgList &Args, 54*06c3fb27SDimitry Andric llvm::opt::ArgStringList &CmdArgs) const override; 55*06c3fb27SDimitry Andric 56*06c3fb27SDimitry Andric std::string computeSysRoot() const override; 57*06c3fb27SDimitry Andric std::string getDynamicLinker(const llvm::opt::ArgList &Args) const override; 58*06c3fb27SDimitry Andric 59*06c3fb27SDimitry Andric std::string 60*06c3fb27SDimitry Andric getCompilerRT(const llvm::opt::ArgList &Args, StringRef Component, 61*06c3fb27SDimitry Andric FileType Type = ToolChain::FT_Static) const override; 62*06c3fb27SDimitry Andric getDefaultLinker()63*06c3fb27SDimitry Andric const char *getDefaultLinker() const override { 64*06c3fb27SDimitry Andric return "ld.lld"; 65*06c3fb27SDimitry Andric } 66*06c3fb27SDimitry Andric buildLinker()67*06c3fb27SDimitry Andric Tool *buildLinker() const override { 68*06c3fb27SDimitry Andric return new tools::gnutools::Linker(*this); 69*06c3fb27SDimitry Andric } buildAssembler()70*06c3fb27SDimitry Andric Tool *buildAssembler() const override { 71*06c3fb27SDimitry Andric return new tools::gnutools::Assembler(*this); 72*06c3fb27SDimitry Andric } 73*06c3fb27SDimitry Andric 74*06c3fb27SDimitry Andric path_list getRuntimePaths() const; 75*06c3fb27SDimitry Andric 76*06c3fb27SDimitry Andric protected: 77*06c3fb27SDimitry Andric std::string getMultiarchTriple(const llvm::Triple &T) const; 78*06c3fb27SDimitry Andric std::string getMultiarchTriple(const Driver &D, 79*06c3fb27SDimitry Andric const llvm::Triple &TargetTriple, 80*06c3fb27SDimitry Andric StringRef SysRoot) const override; 81*06c3fb27SDimitry Andric void addExtraOpts(llvm::opt::ArgStringList &CmdArgs) const override; 82*06c3fb27SDimitry Andric SanitizerMask getSupportedSanitizers() const override; 83*06c3fb27SDimitry Andric void addProfileRTLibs(const llvm::opt::ArgList &Args, 84*06c3fb27SDimitry Andric llvm::opt::ArgStringList &CmdArgs) const override; 85*06c3fb27SDimitry Andric path_list getArchSpecificLibPaths() const override; 86*06c3fb27SDimitry Andric 87*06c3fb27SDimitry Andric private: 88*06c3fb27SDimitry Andric Multilib SelectedMultilib; 89*06c3fb27SDimitry Andric }; 90*06c3fb27SDimitry Andric 91*06c3fb27SDimitry Andric } // end namespace toolchains 92*06c3fb27SDimitry Andric } // end namespace driver 93*06c3fb27SDimitry Andric } // end namespace clang 94*06c3fb27SDimitry Andric 95*06c3fb27SDimitry Andric #endif // LLVM_CLANG_LIB_DRIVER_TOOLCHAINS_OHOS_H 96