diff options
author | Owen Anderson <resistor@mac.com> | 2025-09-02 10:54:34 +0800 |
---|---|---|
committer | GitHub <noreply@github.com> | 2025-09-02 10:54:34 +0800 |
commit | 3b2796cc43b6b9dda7e75aa050a7ca2bf14e8bf9 (patch) | |
tree | 0c1a80f1950d06e3afcc7fe0123d97745227a672 | |
parent | b582670f6b33cde4e786bd98c1e0e712fe6236df (diff) | |
download | llvm-3b2796cc43b6b9dda7e75aa050a7ca2bf14e8bf9.zip llvm-3b2796cc43b6b9dda7e75aa050a7ca2bf14e8bf9.tar.gz llvm-3b2796cc43b6b9dda7e75aa050a7ca2bf14e8bf9.tar.bz2 |
[Triple] Add target triple support for CheriotRTOS. (#155374)
For context, CheriotRTOS is a custom RTOS co-designed for the CHERIoT
CHERI-enabled RISCV32E platform. It uses a custom ABI and linkage model,
necesitating representing it in the target triple.
-rw-r--r-- | llvm/include/llvm/TargetParser/Triple.h | 3 | ||||
-rw-r--r-- | llvm/lib/TargetParser/Triple.cpp | 89 | ||||
-rw-r--r-- | llvm/unittests/TargetParser/TripleTest.cpp | 5 |
3 files changed, 53 insertions, 44 deletions
diff --git a/llvm/include/llvm/TargetParser/Triple.h b/llvm/include/llvm/TargetParser/Triple.h index ede9797..f85984e 100644 --- a/llvm/include/llvm/TargetParser/Triple.h +++ b/llvm/include/llvm/TargetParser/Triple.h @@ -245,7 +245,8 @@ public: LiteOS, Serenity, Vulkan, // Vulkan SPIR-V - LastOSType = Vulkan + CheriotRTOS, + LastOSType = CheriotRTOS }; enum EnvironmentType { UnknownEnvironment, diff --git a/llvm/lib/TargetParser/Triple.cpp b/llvm/lib/TargetParser/Triple.cpp index 6acb0bc..ec15f23 100644 --- a/llvm/lib/TargetParser/Triple.cpp +++ b/llvm/lib/TargetParser/Triple.cpp @@ -329,6 +329,8 @@ StringRef Triple::getOSTypeName(OSType Kind) { case LiteOS: return "liteos"; case XROS: return "xros"; case Vulkan: return "vulkan"; + case CheriotRTOS: + return "cheriotrtos"; } llvm_unreachable("Invalid OSType"); @@ -687,49 +689,50 @@ static Triple::VendorType parseVendor(StringRef VendorName) { static Triple::OSType parseOS(StringRef OSName) { return StringSwitch<Triple::OSType>(OSName) - .StartsWith("darwin", Triple::Darwin) - .StartsWith("dragonfly", Triple::DragonFly) - .StartsWith("freebsd", Triple::FreeBSD) - .StartsWith("fuchsia", Triple::Fuchsia) - .StartsWith("ios", Triple::IOS) - .StartsWith("kfreebsd", Triple::KFreeBSD) - .StartsWith("linux", Triple::Linux) - .StartsWith("lv2", Triple::Lv2) - .StartsWith("macos", Triple::MacOSX) - .StartsWith("managarm", Triple::Managarm) - .StartsWith("netbsd", Triple::NetBSD) - .StartsWith("openbsd", Triple::OpenBSD) - .StartsWith("solaris", Triple::Solaris) - .StartsWith("uefi", Triple::UEFI) - .StartsWith("win32", Triple::Win32) - .StartsWith("windows", Triple::Win32) - .StartsWith("zos", Triple::ZOS) - .StartsWith("haiku", Triple::Haiku) - .StartsWith("rtems", Triple::RTEMS) - .StartsWith("aix", Triple::AIX) - .StartsWith("cuda", Triple::CUDA) - .StartsWith("nvcl", Triple::NVCL) - .StartsWith("amdhsa", Triple::AMDHSA) - .StartsWith("ps4", Triple::PS4) - .StartsWith("ps5", Triple::PS5) - .StartsWith("elfiamcu", Triple::ELFIAMCU) - .StartsWith("tvos", Triple::TvOS) - .StartsWith("watchos", Triple::WatchOS) - .StartsWith("bridgeos", Triple::BridgeOS) - .StartsWith("driverkit", Triple::DriverKit) - .StartsWith("xros", Triple::XROS) - .StartsWith("visionos", Triple::XROS) - .StartsWith("mesa3d", Triple::Mesa3D) - .StartsWith("amdpal", Triple::AMDPAL) - .StartsWith("hermit", Triple::HermitCore) - .StartsWith("hurd", Triple::Hurd) - .StartsWith("wasi", Triple::WASI) - .StartsWith("emscripten", Triple::Emscripten) - .StartsWith("shadermodel", Triple::ShaderModel) - .StartsWith("liteos", Triple::LiteOS) - .StartsWith("serenity", Triple::Serenity) - .StartsWith("vulkan", Triple::Vulkan) - .Default(Triple::UnknownOS); + .StartsWith("darwin", Triple::Darwin) + .StartsWith("dragonfly", Triple::DragonFly) + .StartsWith("freebsd", Triple::FreeBSD) + .StartsWith("fuchsia", Triple::Fuchsia) + .StartsWith("ios", Triple::IOS) + .StartsWith("kfreebsd", Triple::KFreeBSD) + .StartsWith("linux", Triple::Linux) + .StartsWith("lv2", Triple::Lv2) + .StartsWith("macos", Triple::MacOSX) + .StartsWith("managarm", Triple::Managarm) + .StartsWith("netbsd", Triple::NetBSD) + .StartsWith("openbsd", Triple::OpenBSD) + .StartsWith("solaris", Triple::Solaris) + .StartsWith("uefi", Triple::UEFI) + .StartsWith("win32", Triple::Win32) + .StartsWith("windows", Triple::Win32) + .StartsWith("zos", Triple::ZOS) + .StartsWith("haiku", Triple::Haiku) + .StartsWith("rtems", Triple::RTEMS) + .StartsWith("aix", Triple::AIX) + .StartsWith("cuda", Triple::CUDA) + .StartsWith("nvcl", Triple::NVCL) + .StartsWith("amdhsa", Triple::AMDHSA) + .StartsWith("ps4", Triple::PS4) + .StartsWith("ps5", Triple::PS5) + .StartsWith("elfiamcu", Triple::ELFIAMCU) + .StartsWith("tvos", Triple::TvOS) + .StartsWith("watchos", Triple::WatchOS) + .StartsWith("bridgeos", Triple::BridgeOS) + .StartsWith("driverkit", Triple::DriverKit) + .StartsWith("xros", Triple::XROS) + .StartsWith("visionos", Triple::XROS) + .StartsWith("mesa3d", Triple::Mesa3D) + .StartsWith("amdpal", Triple::AMDPAL) + .StartsWith("hermit", Triple::HermitCore) + .StartsWith("hurd", Triple::Hurd) + .StartsWith("wasi", Triple::WASI) + .StartsWith("emscripten", Triple::Emscripten) + .StartsWith("shadermodel", Triple::ShaderModel) + .StartsWith("liteos", Triple::LiteOS) + .StartsWith("serenity", Triple::Serenity) + .StartsWith("vulkan", Triple::Vulkan) + .StartsWith("cheriotrtos", Triple::CheriotRTOS) + .Default(Triple::UnknownOS); } static Triple::EnvironmentType parseEnvironment(StringRef EnvironmentName) { diff --git a/llvm/unittests/TargetParser/TripleTest.cpp b/llvm/unittests/TargetParser/TripleTest.cpp index 35927e3..7d07615 100644 --- a/llvm/unittests/TargetParser/TripleTest.cpp +++ b/llvm/unittests/TargetParser/TripleTest.cpp @@ -1381,6 +1381,11 @@ TEST(TripleTest, ParsedIDs) { T = Triple("huh"); EXPECT_EQ(Triple::UnknownArch, T.getArch()); + + T = Triple("riscv32-unknown-cheriotrtos"); + EXPECT_EQ(Triple::riscv32, T.getArch()); + EXPECT_EQ(Triple::UnknownVendor, T.getVendor()); + EXPECT_EQ(Triple::CheriotRTOS, T.getOS()); } static std::string Join(StringRef A, StringRef B, StringRef C) { |