Skip to content

Commit c417b7a

Browse files
committed
[OHOS] Add support for OpenHarmony
Add support for OpenHarmony OS General OpenHarmony OS discussion on discourse thread "[RFC] Add support for OpenHarmony OS" https://discourse.llvm.org/t/rfc-add-support-for-openharmony-os/66656 Reviewed By: DavidSpickett Differential Revision: https://reviews.llvm.org/D138202
1 parent a9df627 commit c417b7a

File tree

9 files changed

+39
-8
lines changed

9 files changed

+39
-8
lines changed

llvm/include/llvm/BinaryFormat/MinidumpConstants.def

+1
Original file line numberDiff line numberDiff line change
@@ -115,6 +115,7 @@ HANDLE_MDMP_PLATFORM(0x8202, Solaris) // Solaris
115115
HANDLE_MDMP_PLATFORM(0x8203, Android) // Android
116116
HANDLE_MDMP_PLATFORM(0x8204, PS3) // PS3
117117
HANDLE_MDMP_PLATFORM(0x8205, NaCl) // Native Client (NaCl)
118+
HANDLE_MDMP_PLATFORM(0x8206, OpenHOS) // OpenHarmony OS
118119

119120
HANDLE_MDMP_PROTECT(0x01, NoAccess, PAGE_NO_ACCESS)
120121
HANDLE_MDMP_PROTECT(0x02, ReadOnly, PAGE_READ_ONLY)

llvm/include/llvm/TargetParser/Triple.h

+15-4
Original file line numberDiff line numberDiff line change
@@ -223,7 +223,8 @@ class Triple {
223223
WASI, // Experimental WebAssembly OS
224224
Emscripten,
225225
ShaderModel, // DirectX ShaderModel
226-
LastOSType = ShaderModel
226+
LiteOS,
227+
LastOSType = LiteOS
227228
};
228229
enum EnvironmentType {
229230
UnknownEnvironment,
@@ -273,8 +274,8 @@ class Triple {
273274
Callable,
274275
Mesh,
275276
Amplification,
276-
277-
LastEnvironmentType = Amplification
277+
OpenHOS,
278+
LastEnvironmentType = OpenHOS
278279
};
279280
enum ObjectFormatType {
280281
UnknownObjectFormat,
@@ -740,9 +741,18 @@ class Triple {
740741
return getEnvironment() == Triple::Musl ||
741742
getEnvironment() == Triple::MuslEABI ||
742743
getEnvironment() == Triple::MuslEABIHF ||
743-
getEnvironment() == Triple::MuslX32;
744+
getEnvironment() == Triple::MuslX32 ||
745+
getEnvironment() == Triple::OpenHOS || isOSLiteOS();
744746
}
745747

748+
/// Tests whether the target is OHOS
749+
/// LiteOS default enviroment is also OHOS, but omited on triple.
750+
bool isOHOSFamily() const { return isOpenHOS() || isOSLiteOS(); }
751+
752+
bool isOpenHOS() const { return getEnvironment() == Triple::OpenHOS; }
753+
754+
bool isOSLiteOS() const { return getOS() == Triple::LiteOS; }
755+
746756
/// Tests whether the target is DXIL.
747757
bool isDXIL() const {
748758
return getArch() == Triple::dxil;
@@ -789,6 +799,7 @@ class Triple {
789799
getEnvironment() == Triple::MuslEABI ||
790800
getEnvironment() == Triple::EABIHF ||
791801
getEnvironment() == Triple::GNUEABIHF ||
802+
getEnvironment() == Triple::OpenHOS ||
792803
getEnvironment() == Triple::MuslEABIHF || isAndroid()) &&
793804
isOSBinFormatELF();
794805
}

llvm/lib/Target/ARM/ARMSubtarget.h

+2-1
Original file line numberDiff line numberDiff line change
@@ -391,7 +391,8 @@ class ARMSubtarget : public ARMGenSubtargetInfo {
391391
}
392392
bool isTargetMuslAEABI() const {
393393
return (TargetTriple.getEnvironment() == Triple::MuslEABI ||
394-
TargetTriple.getEnvironment() == Triple::MuslEABIHF) &&
394+
TargetTriple.getEnvironment() == Triple::MuslEABIHF ||
395+
TargetTriple.getEnvironment() == Triple::OpenHOS) &&
395396
!isTargetDarwin() && !isTargetWindows();
396397
}
397398

llvm/lib/Target/ARM/ARMTargetMachine.cpp

+2-1
Original file line numberDiff line numberDiff line change
@@ -242,7 +242,8 @@ ARMBaseTargetMachine::ARMBaseTargetMachine(const Target &T, const Triple &TT,
242242
if ((TargetTriple.getEnvironment() == Triple::GNUEABI ||
243243
TargetTriple.getEnvironment() == Triple::GNUEABIHF ||
244244
TargetTriple.getEnvironment() == Triple::MuslEABI ||
245-
TargetTriple.getEnvironment() == Triple::MuslEABIHF) &&
245+
TargetTriple.getEnvironment() == Triple::MuslEABIHF ||
246+
TargetTriple.getEnvironment() == Triple::OpenHOS) &&
246247
!(TargetTriple.isOSWindows() || TargetTriple.isOSDarwin()))
247248
this->Options.EABIVersion = EABI::GNU;
248249
else

llvm/lib/TargetParser/AArch64TargetParser.cpp

+1-1
Original file line numberDiff line numberDiff line change
@@ -97,7 +97,7 @@ void AArch64::fillValidCPUArchList(SmallVectorImpl<StringRef> &Values) {
9797

9898
bool AArch64::isX18ReservedByDefault(const Triple &TT) {
9999
return TT.isAndroid() || TT.isOSDarwin() || TT.isOSFuchsia() ||
100-
TT.isOSWindows();
100+
TT.isOSWindows() || TT.isOHOSFamily();
101101
}
102102

103103
// Allows partial match, ex. "v8a" matches "armv8a".

llvm/lib/TargetParser/ARMTargetParser.cpp

+1-1
Original file line numberDiff line numberDiff line change
@@ -523,7 +523,7 @@ StringRef ARM::computeDefaultTargetABI(const Triple &TT, StringRef CPU) {
523523
default:
524524
if (TT.isOSNetBSD())
525525
return "apcs-gnu";
526-
if (TT.isOSOpenBSD())
526+
if (TT.isOSOpenBSD() || TT.isOHOSFamily())
527527
return "aapcs-linux";
528528
return "aapcs";
529529
}

llvm/lib/TargetParser/Triple.cpp

+4
Original file line numberDiff line numberDiff line change
@@ -243,6 +243,7 @@ StringRef Triple::getOSTypeName(OSType Kind) {
243243
case Win32: return "windows";
244244
case ZOS: return "zos";
245245
case ShaderModel: return "shadermodel";
246+
case LiteOS: return "liteos";
246247
}
247248

248249
llvm_unreachable("Invalid OSType");
@@ -290,6 +291,7 @@ StringRef Triple::getEnvironmentTypeName(EnvironmentType Kind) {
290291
case Callable: return "callable";
291292
case Mesh: return "mesh";
292293
case Amplification: return "amplification";
294+
case OpenHOS: return "ohos";
293295
}
294296

295297
llvm_unreachable("Invalid EnvironmentType!");
@@ -596,6 +598,7 @@ static Triple::OSType parseOS(StringRef OSName) {
596598
.StartsWith("wasi", Triple::WASI)
597599
.StartsWith("emscripten", Triple::Emscripten)
598600
.StartsWith("shadermodel", Triple::ShaderModel)
601+
.StartsWith("liteos", Triple::LiteOS)
599602
.Default(Triple::UnknownOS);
600603
}
601604

@@ -640,6 +643,7 @@ static Triple::EnvironmentType parseEnvironment(StringRef EnvironmentName) {
640643
.StartsWith("callable", Triple::Callable)
641644
.StartsWith("mesh", Triple::Mesh)
642645
.StartsWith("amplification", Triple::Amplification)
646+
.StartsWith("ohos", Triple::OpenHOS)
643647
.Default(Triple::UnknownEnvironment);
644648
}
645649

llvm/test/CodeGen/AArch64/arm64-platform-reg.ll

+1
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22
; RUN: llc -mtriple=arm64-freebsd-gnu -mattr=+reserve-x18 -o - %s | FileCheck %s --check-prefix=CHECK-RESERVE --check-prefix=CHECK-RESERVE-X18
33
; RUN: llc -mtriple=arm64-linux-gnu -o - %s | FileCheck %s
44
; RUN: llc -mtriple=aarch64-linux-android -o - %s | FileCheck %s --check-prefix=CHECK-RESERVE --check-prefix=CHECK-RESERVE-X18
5+
; RUN: llc -mtriple=aarch64-linux-ohos -o - %s | FileCheck %s --check-prefix=CHECK-RESERVE --check-prefix=CHECK-RESERVE-X18
56
; RUN: llc -mtriple=aarch64-fuchsia -o - %s | FileCheck %s --check-prefix=CHECK-RESERVE --check-prefix=CHECK-RESERVE-X18
67
; RUN: llc -mtriple=aarch64-windows -o - %s | FileCheck %s --check-prefix=CHECK-RESERVE --check-prefix=CHECK-RESERVE-X18
78

llvm/unittests/TargetParser/TripleTest.cpp

+12
Original file line numberDiff line numberDiff line change
@@ -876,6 +876,18 @@ TEST(TripleTest, ParsedIDs) {
876876
EXPECT_EQ(Triple::UnknownOS, T.getOS());
877877
EXPECT_EQ(Triple::UnknownEnvironment, T.getEnvironment());
878878

879+
T = Triple("arm-unknown-linux-ohos");
880+
EXPECT_EQ(Triple::arm, T.getArch());
881+
EXPECT_EQ(Triple::UnknownVendor, T.getVendor());
882+
EXPECT_EQ(Triple::Linux, T.getOS());
883+
EXPECT_EQ(Triple::OpenHOS, T.getEnvironment());
884+
885+
T = Triple("arm-unknown-liteos");
886+
EXPECT_EQ(Triple::arm, T.getArch());
887+
EXPECT_EQ(Triple::UnknownVendor, T.getVendor());
888+
EXPECT_EQ(Triple::LiteOS, T.getOS());
889+
EXPECT_EQ(Triple::UnknownEnvironment, T.getEnvironment());
890+
879891
T = Triple("huh");
880892
EXPECT_EQ(Triple::UnknownArch, T.getArch());
881893
}

0 commit comments

Comments
 (0)