llvmbot wrote:
<!--LLVM PR SUMMARY COMMENT--> @llvm/pr-subscribers-clang-driver @llvm/pr-subscribers-clang Author: None (Ami-zhang) <details> <summary>Changes</summary> Add support for OHOS on LoongArch. This patch is taken from part of the https://gitee.com/openharmony/third_party_llvm-project/pulls/554, the original author is @<!-- -->caiwei. --- Full diff: https://github.com/llvm/llvm-project/pull/127555.diff 4 Files Affected: - (modified) clang/lib/Basic/Targets.cpp (+20-4) - (modified) clang/lib/Driver/ToolChains/Gnu.cpp (+2-1) - (modified) clang/lib/Driver/ToolChains/OHOS.cpp (+12-1) - (modified) clang/test/Preprocessor/ohos.c (+2) ``````````diff diff --git a/clang/lib/Basic/Targets.cpp b/clang/lib/Basic/Targets.cpp index 281aebdb1c35d..f345e3596df39 100644 --- a/clang/lib/Basic/Targets.cpp +++ b/clang/lib/Basic/Targets.cpp @@ -741,16 +741,32 @@ std::unique_ptr<TargetInfo> AllocateTarget(const llvm::Triple &Triple, case llvm::Triple::loongarch32: switch (os) { case llvm::Triple::Linux: - return std::make_unique<LinuxTargetInfo<LoongArch32TargetInfo>>(Triple, - Opts); + // OHOS_LOCAL begin + switch (Triple.getEnvironment()) { + default: + return std::make_unique<LinuxTargetInfo<LoongArch32TargetInfo>>(Triple, + Opts); + case llvm::Triple::OpenHOS: + return std::make_unique<OHOSTargetInfo<LoongArch32TargetInfo>>(Triple, + Opts); + } + // OHOS_LOCAL end default: return std::make_unique<LoongArch32TargetInfo>(Triple, Opts); } case llvm::Triple::loongarch64: switch (os) { case llvm::Triple::Linux: - return std::make_unique<LinuxTargetInfo<LoongArch64TargetInfo>>(Triple, - Opts); + // OHOS_LOCAL begin + switch (Triple.getEnvironment()) { + default: + return std::make_unique<LinuxTargetInfo<LoongArch64TargetInfo>>(Triple, + Opts); + case llvm::Triple::OpenHOS: + return std::make_unique<OHOSTargetInfo<LoongArch64TargetInfo>>(Triple, + Opts); + } + // OHOS_LOCAL end case llvm::Triple::FreeBSD: return std::make_unique<FreeBSDTargetInfo<LoongArch64TargetInfo>>(Triple, Opts); diff --git a/clang/lib/Driver/ToolChains/Gnu.cpp b/clang/lib/Driver/ToolChains/Gnu.cpp index f56eeda3cb5f6..0b560be1d28e7 100644 --- a/clang/lib/Driver/ToolChains/Gnu.cpp +++ b/clang/lib/Driver/ToolChains/Gnu.cpp @@ -2458,7 +2458,8 @@ void Generic_GCC::GCCInstallationDetector::AddDefaultGCCPrefixes( static const char *const LoongArch64LibDirs[] = {"/lib64", "/lib"}; static const char *const LoongArch64Triples[] = { - "loongarch64-linux-gnu", "loongarch64-unknown-linux-gnu"}; + "loongarch64-linux-gnu", "loongarch64-unknown-linux-gnu", + "loongarch64-linux-ohos"}; // OHOS_LOCAL static const char *const M68kLibDirs[] = {"/lib"}; static const char *const M68kTriples[] = {"m68k-unknown-linux-gnu", diff --git a/clang/lib/Driver/ToolChains/OHOS.cpp b/clang/lib/Driver/ToolChains/OHOS.cpp index 6e1a09ae908b2..cd4351a2c614d 100644 --- a/clang/lib/Driver/ToolChains/OHOS.cpp +++ b/clang/lib/Driver/ToolChains/OHOS.cpp @@ -111,6 +111,10 @@ std::string OHOS::getMultiarchTriple(const llvm::Triple &T) const { return "x86_64-linux-ohos"; case llvm::Triple::aarch64: return "aarch64-linux-ohos"; + // OHOS_LOCAL begin + case llvm::Triple::loongarch64: + return "loongarch64-linux-ohos"; + // OHOS_LOCAL end } return T.str(); } @@ -368,7 +372,14 @@ void OHOS::addExtraOpts(llvm::opt::ArgStringList &CmdArgs) const { CmdArgs.push_back("-z"); CmdArgs.push_back("relro"); CmdArgs.push_back("-z"); - CmdArgs.push_back("max-page-size=4096"); + // OHOS_LOCAL begin + // LoongArch needs page size 16K + if (getArch() == llvm::Triple::loongarch64) { + CmdArgs.push_back("max-page-size=16384"); + } else { + CmdArgs.push_back("max-page-size=4096"); + } + // OHOS_LOCAL end // .gnu.hash section is not compatible with the MIPS target if (getArch() != llvm::Triple::mipsel) CmdArgs.push_back("--hash-style=both"); diff --git a/clang/test/Preprocessor/ohos.c b/clang/test/Preprocessor/ohos.c index 0c435c7ed5ab4..7017c9847ccae 100644 --- a/clang/test/Preprocessor/ohos.c +++ b/clang/test/Preprocessor/ohos.c @@ -3,6 +3,7 @@ // RUN: %clang_cc1 -x c++ -E -dM -ffreestanding -triple=riscv64-linux-ohos < /dev/null | FileCheck %s -match-full-lines -check-prefix=RISCV64-OHOS-CXX // RUN: %clang_cc1 -x c++ -E -dM -ffreestanding -triple=mipsel-linux-ohos < /dev/null | FileCheck %s -match-full-lines -check-prefix=MIPSEL-OHOS-CXX // RUN: %clang_cc1 -x c++ -E -dM -ffreestanding -triple=x86_64-linux-ohos < /dev/null | FileCheck %s -match-full-lines -check-prefix=X86_64-OHOS-CXX +// RUN: %clang_cc1 -x c++ -E -dM -ffreestanding -triple=loongarch64-linux-ohos < /dev/null | FileCheck %s -match-full-lines -check-prefix=LOONGARCH64-OHOS-CXX // RUN: %clang_cc1 -E -dM -ffreestanding -triple=arm-linux-ohos < /dev/null | FileCheck %s -check-prefix=OHOS-DEFS // ARM-OHOS-CXX: #define __STDCPP_DEFAULT_NEW_ALIGNMENT__ 8U @@ -10,6 +11,7 @@ // RISCV64-OHOS-CXX: #define __STDCPP_DEFAULT_NEW_ALIGNMENT__ 16UL // MIPSEL-OHOS-CXX: #define __STDCPP_DEFAULT_NEW_ALIGNMENT__ 8U // X86_64-OHOS-CXX: #define __STDCPP_DEFAULT_NEW_ALIGNMENT__ 16UL +// LOONGARCH64-OHOS-CXX: #define __STDCPP_DEFAULT_NEW_ALIGNMENT__ 16UL // OHOS-DEFS: __OHOS_FAMILY__ // OHOS-DEFS: __OHOS__ // OHOS-DEFS-NOT: __OHOS__ `````````` </details> https://github.com/llvm/llvm-project/pull/127555 _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits