Skip to content

Commit 65d913f

Browse files
committed
[clang][LoongArch] Add OHOS target
Add support for OHOS on loongarch64.
1 parent 09d1414 commit 65d913f

File tree

4 files changed

+31
-3
lines changed

4 files changed

+31
-3
lines changed

clang/lib/Basic/Targets.cpp

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -749,8 +749,14 @@ std::unique_ptr<TargetInfo> AllocateTarget(const llvm::Triple &Triple,
749749
case llvm::Triple::loongarch64:
750750
switch (os) {
751751
case llvm::Triple::Linux:
752-
return std::make_unique<LinuxTargetInfo<LoongArch64TargetInfo>>(Triple,
753-
Opts);
752+
switch (Triple.getEnvironment()) {
753+
default:
754+
return std::make_unique<LinuxTargetInfo<LoongArch64TargetInfo>>(Triple,
755+
Opts);
756+
case llvm::Triple::OpenHOS:
757+
return std::make_unique<OHOSTargetInfo<LoongArch64TargetInfo>>(Triple,
758+
Opts);
759+
}
754760
case llvm::Triple::FreeBSD:
755761
return std::make_unique<FreeBSDTargetInfo<LoongArch64TargetInfo>>(Triple,
756762
Opts);

clang/lib/Driver/ToolChains/OHOS.cpp

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -111,6 +111,8 @@ std::string OHOS::getMultiarchTriple(const llvm::Triple &T) const {
111111
return "x86_64-linux-ohos";
112112
case llvm::Triple::aarch64:
113113
return "aarch64-linux-ohos";
114+
case llvm::Triple::loongarch64:
115+
return "loongarch64-linux-ohos";
114116
}
115117
return T.str();
116118
}
@@ -368,7 +370,9 @@ void OHOS::addExtraOpts(llvm::opt::ArgStringList &CmdArgs) const {
368370
CmdArgs.push_back("-z");
369371
CmdArgs.push_back("relro");
370372
CmdArgs.push_back("-z");
371-
CmdArgs.push_back("max-page-size=4096");
373+
CmdArgs.push_back(getArch() == llvm::Triple::loongarch64
374+
? "max-page-size=16384"
375+
: "max-page-size=4096");
372376
// .gnu.hash section is not compatible with the MIPS target
373377
if (getArch() != llvm::Triple::mipsel)
374378
CmdArgs.push_back("--hash-style=both");

clang/test/Driver/ohos-pagesize.c

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
/// Check the max-page-size for OHOS aarch64/loongarch64/riscv64/x86_64.
2+
3+
// RUN: %clang -### --target=aarch64-linux-ohos %s 2>&1 | \
4+
// RUN: FileCheck --check-prefix=MAX-PAGE-SIZE-4K %s
5+
6+
// RUN: %clang -### --target=loongarch64-linux-ohos %s 2>&1 | \
7+
// RUN: FileCheck --check-prefix=MAX-PAGE-SIZE-16K %s
8+
9+
// RUN: %clang -### --target=riscv64-linux-ohos %s 2>&1 | \
10+
// RUN: FileCheck --check-prefix=MAX-PAGE-SIZE-4K %s
11+
12+
// RUN: %clang -### --target=x86_64-linux-ohos %s 2>&1 | \
13+
// RUN: FileCheck --check-prefix=MAX-PAGE-SIZE-4K %s
14+
15+
// MAX-PAGE-SIZE-4K: "max-page-size=4096"
16+
// MAX-PAGE-SIZE-16K: "max-page-size=16384"

clang/test/Preprocessor/ohos.c

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,13 +3,15 @@
33
// RUN: %clang_cc1 -x c++ -E -dM -ffreestanding -triple=riscv64-linux-ohos < /dev/null | FileCheck %s -match-full-lines -check-prefix=RISCV64-OHOS-CXX
44
// RUN: %clang_cc1 -x c++ -E -dM -ffreestanding -triple=mipsel-linux-ohos < /dev/null | FileCheck %s -match-full-lines -check-prefix=MIPSEL-OHOS-CXX
55
// 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
6+
// RUN: %clang_cc1 -x c++ -E -dM -ffreestanding -triple=loongarch64-linux-ohos < /dev/null | FileCheck %s -match-full-lines -check-prefix=LOONGARCH64-OHOS-CXX
67
// RUN: %clang_cc1 -E -dM -ffreestanding -triple=arm-linux-ohos < /dev/null | FileCheck %s -check-prefix=OHOS-DEFS
78

89
// ARM-OHOS-CXX: #define __STDCPP_DEFAULT_NEW_ALIGNMENT__ 8U
910
// ARM64-OHOS-CXX: #define __STDCPP_DEFAULT_NEW_ALIGNMENT__ 16UL
1011
// RISCV64-OHOS-CXX: #define __STDCPP_DEFAULT_NEW_ALIGNMENT__ 16UL
1112
// MIPSEL-OHOS-CXX: #define __STDCPP_DEFAULT_NEW_ALIGNMENT__ 8U
1213
// X86_64-OHOS-CXX: #define __STDCPP_DEFAULT_NEW_ALIGNMENT__ 16UL
14+
// LOONGARCH64-OHOS-CXX: #define __STDCPP_DEFAULT_NEW_ALIGNMENT__ 16UL
1315
// OHOS-DEFS: __OHOS_FAMILY__
1416
// OHOS-DEFS: __OHOS__
1517
// OHOS-DEFS-NOT: __OHOS__

0 commit comments

Comments
 (0)