https://github.com/Ami-zhang updated https://github.com/llvm/llvm-project/pull/127555
>From 49312a2cd5d1b6ab59f92571a925cfaeb0cf9eb3 Mon Sep 17 00:00:00 2001 From: Ami-zhang <zhangli...@loongson.cn> Date: Tue, 25 Feb 2025 11:28:36 +0800 Subject: [PATCH] [clang][LoongArch] Add OHOS target Add support for OHOS on loongarch64. --- clang/lib/Basic/Targets.cpp | 10 +++++++-- clang/lib/Driver/ToolChains/OHOS.cpp | 6 +++++- .../x.y.z/lib/loongarch64-linux-ohos/.keep | 0 .../clang_rt.crtbegin.o | 0 .../loongarch64-linux-ohos/clang_rt.crtend.o | 0 .../libclang_rt.builtins.a | 0 .../usr/include/loongarch64-linux-ohos/.keep | 0 .../usr/lib/loongarch64-linux-ohos/.keep | 0 clang/test/Driver/ohos.c | 21 ++++++++++++++++++- clang/test/Preprocessor/ohos.c | 2 ++ 10 files changed, 35 insertions(+), 4 deletions(-) create mode 100644 clang/test/Driver/Inputs/ohos_native_tree/llvm/lib/clang/x.y.z/lib/loongarch64-linux-ohos/.keep create mode 100644 clang/test/Driver/Inputs/ohos_native_tree/llvm/lib/clang/x.y.z/lib/loongarch64-linux-ohos/clang_rt.crtbegin.o create mode 100644 clang/test/Driver/Inputs/ohos_native_tree/llvm/lib/clang/x.y.z/lib/loongarch64-linux-ohos/clang_rt.crtend.o create mode 100644 clang/test/Driver/Inputs/ohos_native_tree/llvm/lib/clang/x.y.z/lib/loongarch64-linux-ohos/libclang_rt.builtins.a create mode 100644 clang/test/Driver/Inputs/ohos_native_tree/sysroot/usr/include/loongarch64-linux-ohos/.keep create mode 100644 clang/test/Driver/Inputs/ohos_native_tree/sysroot/usr/lib/loongarch64-linux-ohos/.keep diff --git a/clang/lib/Basic/Targets.cpp b/clang/lib/Basic/Targets.cpp index 281aebdb1c35d..c6d228fe98100 100644 --- a/clang/lib/Basic/Targets.cpp +++ b/clang/lib/Basic/Targets.cpp @@ -749,8 +749,14 @@ std::unique_ptr<TargetInfo> AllocateTarget(const llvm::Triple &Triple, case llvm::Triple::loongarch64: switch (os) { case llvm::Triple::Linux: - return std::make_unique<LinuxTargetInfo<LoongArch64TargetInfo>>(Triple, - Opts); + switch (Triple.getEnvironment()) { + default: + return std::make_unique<LinuxTargetInfo<LoongArch64TargetInfo>>(Triple, + Opts); + case llvm::Triple::OpenHOS: + return std::make_unique<OHOSTargetInfo<LoongArch64TargetInfo>>(Triple, + Opts); + } case llvm::Triple::FreeBSD: return std::make_unique<FreeBSDTargetInfo<LoongArch64TargetInfo>>(Triple, Opts); diff --git a/clang/lib/Driver/ToolChains/OHOS.cpp b/clang/lib/Driver/ToolChains/OHOS.cpp index 6e1a09ae908b2..e213c695a9fef 100644 --- a/clang/lib/Driver/ToolChains/OHOS.cpp +++ b/clang/lib/Driver/ToolChains/OHOS.cpp @@ -111,6 +111,8 @@ std::string OHOS::getMultiarchTriple(const llvm::Triple &T) const { return "x86_64-linux-ohos"; case llvm::Triple::aarch64: return "aarch64-linux-ohos"; + case llvm::Triple::loongarch64: + return "loongarch64-linux-ohos"; } return T.str(); } @@ -368,7 +370,9 @@ 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"); + CmdArgs.push_back(getArch() == llvm::Triple::loongarch64 + ? "max-page-size=16384" + : "max-page-size=4096"); // .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/Driver/Inputs/ohos_native_tree/llvm/lib/clang/x.y.z/lib/loongarch64-linux-ohos/.keep b/clang/test/Driver/Inputs/ohos_native_tree/llvm/lib/clang/x.y.z/lib/loongarch64-linux-ohos/.keep new file mode 100644 index 0000000000000..e69de29bb2d1d diff --git a/clang/test/Driver/Inputs/ohos_native_tree/llvm/lib/clang/x.y.z/lib/loongarch64-linux-ohos/clang_rt.crtbegin.o b/clang/test/Driver/Inputs/ohos_native_tree/llvm/lib/clang/x.y.z/lib/loongarch64-linux-ohos/clang_rt.crtbegin.o new file mode 100644 index 0000000000000..e69de29bb2d1d diff --git a/clang/test/Driver/Inputs/ohos_native_tree/llvm/lib/clang/x.y.z/lib/loongarch64-linux-ohos/clang_rt.crtend.o b/clang/test/Driver/Inputs/ohos_native_tree/llvm/lib/clang/x.y.z/lib/loongarch64-linux-ohos/clang_rt.crtend.o new file mode 100644 index 0000000000000..e69de29bb2d1d diff --git a/clang/test/Driver/Inputs/ohos_native_tree/llvm/lib/clang/x.y.z/lib/loongarch64-linux-ohos/libclang_rt.builtins.a b/clang/test/Driver/Inputs/ohos_native_tree/llvm/lib/clang/x.y.z/lib/loongarch64-linux-ohos/libclang_rt.builtins.a new file mode 100644 index 0000000000000..e69de29bb2d1d diff --git a/clang/test/Driver/Inputs/ohos_native_tree/sysroot/usr/include/loongarch64-linux-ohos/.keep b/clang/test/Driver/Inputs/ohos_native_tree/sysroot/usr/include/loongarch64-linux-ohos/.keep new file mode 100644 index 0000000000000..e69de29bb2d1d diff --git a/clang/test/Driver/Inputs/ohos_native_tree/sysroot/usr/lib/loongarch64-linux-ohos/.keep b/clang/test/Driver/Inputs/ohos_native_tree/sysroot/usr/lib/loongarch64-linux-ohos/.keep new file mode 100644 index 0000000000000..e69de29bb2d1d diff --git a/clang/test/Driver/ohos.c b/clang/test/Driver/ohos.c index af8218fb232e6..21416622471c2 100644 --- a/clang/test/Driver/ohos.c +++ b/clang/test/Driver/ohos.c @@ -6,6 +6,10 @@ // RUN: -resource-dir=%S/Inputs/ohos_native_tree/llvm/lib/clang/x.y.z \ // RUN: --sysroot=%S/Inputs/ohos_native_tree/sysroot -fuse-ld=ld -march=armv7-a -mcpu=cortex-a7 -mfloat-abi=soft 2>&1 \ // RUN: | FileCheck -check-prefixes=CHECK,CHECK-ARM-A7-SOFT %s +// RUN: %clang %s -### -no-canonical-prefixes --target=loongarch64-linux-ohos \ +// RUN: -resource-dir=%S/Inputs/ohos_native_tree/llvm/lib/clang/x.y.z \ +// RUN: --sysroot=%S/Inputs/ohos_native_tree/sysroot 2>&1 \ +// RUN: | FileCheck -check-prefixes=CHECK,CHECK-LOONGARCH %s // CHECK: {{.*}}clang{{.*}}" "-cc1" // CHECK-NOT: "-munwind-tables" // CHECK: "-resource-dir" "[[RESOURCE_DIR:[^"]+]]" @@ -19,13 +23,17 @@ // CHECK-NOT: "--build-id" // CHECK: "--hash-style=both" // CHECK: "-pie" -// CHECK: "-dynamic-linker" "/lib/ld-musl-arm.so.1" +// CHECK-ARM: "-dynamic-linker" "/lib/ld-musl-arm.so.1" +// CHECK-ARM-A7-SOFT: "-dynamic-linker" "/lib/ld-musl-arm.so.1" +// CHECK-LOONGARCH: "-dynamic-linker" "/lib/ld-musl-loongarch64.so.1" // CHECK: Scrt1.o // CHECK: crti.o // CHECK: clang_rt.crtbegin.o // CHECK-ARM: "-L[[SYSROOT]]{{/|\\\\}}usr{{/|\\\\}}lib{{/|\\\\}}arm-liteos-ohos{{/|\\\\}}" +// CHECK-LOONGARCH: "-L[[SYSROOT]]{{/|\\\\}}usr{{/|\\\\}}lib{{/|\\\\}}loongarch64-linux-ohos{{/|\\\\}}" // CHECK-ARM-A7-SOFT: "-L[[SYSROOT]]{{/|\\\\}}usr{{/|\\\\}}lib{{/|\\\\}}arm-liteos-ohos{{/|\\\\}}a7_soft" // CHECK-ARM: "[[RESOURCE_DIR]]{{/|\\\\}}lib{{/|\\\\}}arm-liteos-ohos{{/|\\\\}}libclang_rt.builtins.a" +// CHECK-LOONGARCH: "[[RESOURCE_DIR]]{{/|\\\\}}lib{{/|\\\\}}loongarch64-linux-ohos{{/|\\\\}}libclang_rt.builtins.a" // CHECK-ARM-A7-SOFT: "[[RESOURCE_DIR]]{{/|\\\\}}lib{{/|\\\\}}arm-liteos-ohos/a7_soft{{/|\\\\}}libclang_rt.builtins.a" // CHECK: "-lc" // CHECK: clang_rt.crtend.o @@ -235,3 +243,14 @@ // CHECK-OHOS-PTHREAD-NOT: -lpthread +// RUN: %clang -### --target=aarch64-linux-ohos %s 2>&1 | \ +// RUN: FileCheck --check-prefix=CHECK-MAXPAGESIZE-4KB %s +// RUN: %clang -### --target=loongarch64-linux-ohos %s 2>&1 | \ +// RUN: FileCheck --check-prefix=CHECK-MAXPAGESIZE-16KB %s +// RUN: %clang -### --target=riscv64-linux-ohos %s 2>&1 | \ +// RUN: FileCheck --check-prefix=CHECK-MAXPAGESIZE-4KB %s +// RUN: %clang -### --target=x86_64-linux-ohos %s 2>&1 | \ +// RUN: FileCheck --check-prefix=CHECK-MAXPAGESIZE-4KB %s + +// CHECK-MAXPAGESIZE-4KB: "-z" "max-page-size=4096" +// CHECK-MAXPAGESIZE-16KB: "-z" "max-page-size=16384" 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__ _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits