[llvm] 7d3466b - [llvm] Introduce XROS platform (#77707)
via llvm-commits
llvm-commits at lists.llvm.org
Tue Jan 16 16:32:14 PST 2024
Author: Cyndy Ishida
Date: 2024-01-16T16:32:10-08:00
New Revision: 7d3466b5c30878c5e014949ebf1dc44bb2160995
URL: https://github.com/llvm/llvm-project/commit/7d3466b5c30878c5e014949ebf1dc44bb2160995
DIFF: https://github.com/llvm/llvm-project/commit/7d3466b5c30878c5e014949ebf1dc44bb2160995.diff
LOG: [llvm] Introduce XROS platform (#77707)
Accepts but otherwise ignores visionOS/XROS target triples as Darwin
based platform.
https://developer.apple.com/documentation/visionos
Added:
Modified:
llvm/include/llvm/BinaryFormat/MachO.def
llvm/include/llvm/TargetParser/Triple.h
llvm/lib/TargetParser/Triple.cpp
llvm/lib/TextAPI/Platform.cpp
llvm/unittests/TargetParser/TripleTest.cpp
Removed:
################################################################################
diff --git a/llvm/include/llvm/BinaryFormat/MachO.def b/llvm/include/llvm/BinaryFormat/MachO.def
index df527b4a8ab7c3c..4124c723ec021f3 100644
--- a/llvm/include/llvm/BinaryFormat/MachO.def
+++ b/llvm/include/llvm/BinaryFormat/MachO.def
@@ -133,6 +133,8 @@ PLATFORM(IOSSIMULATOR, 7, iossimulator, iossimulator, ios-simulator, ios-simulat
PLATFORM(TVOSSIMULATOR, 8, tvossimulator, tvossimulator, tvos-simulator, tvos-simulator, tvOS Simulator)
PLATFORM(WATCHOSSIMULATOR, 9, watchossimulator, watchossimulator, watchos-simulator, watchos-simulator, watchOS Simulator)
PLATFORM(DRIVERKIT, 10, driverkit, driverkit, driverkit, driverkit, DriverKit)
+PLATFORM(XROS, 11, xros, xros, xros, xros, xrOS)
+PLATFORM(XROS_SIMULATOR, 12, xrsimulator, xrsimulator, xrsimulator, xros-simulator, xrOS Simulator)
#endif
#undef HANDLE_LOAD_COMMAND
diff --git a/llvm/include/llvm/TargetParser/Triple.h b/llvm/include/llvm/TargetParser/Triple.h
index 95014a546f72453..052336c8a305c21 100644
--- a/llvm/include/llvm/TargetParser/Triple.h
+++ b/llvm/include/llvm/TargetParser/Triple.h
@@ -214,6 +214,7 @@ class Triple {
TvOS, // Apple tvOS
WatchOS, // Apple watchOS
DriverKit, // Apple DriverKit
+ XROS, // Apple XROS
Mesa3D,
AMDPAL, // AMD PAL Runtime
HermitCore, // HermitCore Unikernel/Multikernel
@@ -514,14 +515,17 @@ class Triple {
return getSubArch() == Triple::ARMSubArch_v7k;
}
+ /// Is this an Apple XROS triple.
+ bool isXROS() const { return getOS() == Triple::XROS; }
+
/// Is this an Apple DriverKit triple.
bool isDriverKit() const { return getOS() == Triple::DriverKit; }
bool isOSzOS() const { return getOS() == Triple::ZOS; }
- /// Is this a "Darwin" OS (macOS, iOS, tvOS, watchOS, or DriverKit).
+ /// Is this a "Darwin" OS (macOS, iOS, tvOS, watchOS, XROS, or DriverKit).
bool isOSDarwin() const {
- return isMacOSX() || isiOS() || isWatchOS() || isDriverKit();
+ return isMacOSX() || isiOS() || isWatchOS() || isDriverKit() || isXROS();
}
bool isSimulatorEnvironment() const {
diff --git a/llvm/lib/TargetParser/Triple.cpp b/llvm/lib/TargetParser/Triple.cpp
index b9971c25af71f39..40079c1dcd3e7dc 100644
--- a/llvm/lib/TargetParser/Triple.cpp
+++ b/llvm/lib/TargetParser/Triple.cpp
@@ -273,6 +273,7 @@ StringRef Triple::getOSTypeName(OSType Kind) {
case ZOS: return "zos";
case ShaderModel: return "shadermodel";
case LiteOS: return "liteos";
+ case XROS: return "xros";
}
llvm_unreachable("Invalid OSType");
@@ -634,6 +635,8 @@ static Triple::OSType parseOS(StringRef OSName) {
.StartsWith("tvos", Triple::TvOS)
.StartsWith("watchos", Triple::WatchOS)
.StartsWith("driverkit", Triple::DriverKit)
+ .StartsWith("xros", Triple::XROS)
+ .StartsWith("visionos", Triple::XROS)
.StartsWith("mesa3d", Triple::Mesa3D)
.StartsWith("amdpal", Triple::AMDPAL)
.StartsWith("hermit", Triple::HermitCore)
@@ -1224,6 +1227,8 @@ VersionTuple Triple::getOSVersion() const {
OSName = OSName.substr(OSTypeName.size());
else if (getOS() == MacOSX)
OSName.consume_front("macos");
+ else if (OSName.starts_with("visionos"))
+ OSName.consume_front("visionos");
return parseVersionFromName(OSName);
}
@@ -1265,6 +1270,8 @@ bool Triple::getMacOSXVersion(VersionTuple &Version) const {
// IOS.
Version = VersionTuple(10, 4);
break;
+ case XROS:
+ llvm_unreachable("OSX version isn't relevant for xrOS");
case DriverKit:
llvm_unreachable("OSX version isn't relevant for DriverKit");
}
@@ -1289,6 +1296,11 @@ VersionTuple Triple::getiOSVersion() const {
return (getArch() == aarch64) ? VersionTuple(7) : VersionTuple(5);
return Version;
}
+ case XROS: {
+ // xrOS 1 is aligned with iOS 17.
+ VersionTuple Version = getOSVersion();
+ return Version.withMajorReplaced(Version.getMajor() + 16);
+ }
case WatchOS:
llvm_unreachable("conflicting triple info");
case DriverKit:
@@ -1314,6 +1326,8 @@ VersionTuple Triple::getWatchOSVersion() const {
}
case IOS:
llvm_unreachable("conflicting triple info");
+ case XROS:
+ llvm_unreachable("watchOS version isn't relevant for xrOS");
case DriverKit:
llvm_unreachable("DriverKit doesn't have a WatchOS version");
}
diff --git a/llvm/lib/TextAPI/Platform.cpp b/llvm/lib/TextAPI/Platform.cpp
index ed041af40aa5b7a..e891594300c2e4e 100644
--- a/llvm/lib/TextAPI/Platform.cpp
+++ b/llvm/lib/TextAPI/Platform.cpp
@@ -106,6 +106,10 @@ std::string getOSAndEnvironmentName(PlatformType Platform,
return "watchos" + Version + "-simulator";
case PLATFORM_DRIVERKIT:
return "driverkit" + Version;
+ case PLATFORM_XROS:
+ return "xros" + Version;
+ case PLATFORM_XROS_SIMULATOR:
+ return "xros" + Version + "-simulator";
}
llvm_unreachable("Unknown llvm::MachO::PlatformType enum");
}
diff --git a/llvm/unittests/TargetParser/TripleTest.cpp b/llvm/unittests/TargetParser/TripleTest.cpp
index d3bde2986ea2cd1..1b0e6c456c046e5 100644
--- a/llvm/unittests/TargetParser/TripleTest.cpp
+++ b/llvm/unittests/TargetParser/TripleTest.cpp
@@ -1746,6 +1746,42 @@ TEST(TripleTest, EndianArchVariants) {
EXPECT_EQ(Triple::dxil, T.getLittleEndianArchVariant().getArch());
}
+TEST(TripleTest, XROS) {
+ Triple T;
+ VersionTuple Version;
+
+ T = Triple("arm64-apple-xros");
+ EXPECT_TRUE(T.isXROS());
+ EXPECT_TRUE(T.isOSDarwin());
+ EXPECT_FALSE(T.isiOS());
+ EXPECT_FALSE(T.isMacOSX());
+ EXPECT_FALSE(T.isSimulatorEnvironment());
+ EXPECT_EQ(T.getOSName(), "xros");
+ Version = T.getOSVersion();
+ EXPECT_EQ(VersionTuple(0), Version);
+
+ T = Triple("arm64-apple-visionos1.2");
+ EXPECT_TRUE(T.isXROS());
+ EXPECT_TRUE(T.isOSDarwin());
+ EXPECT_FALSE(T.isiOS());
+ EXPECT_FALSE(T.isMacOSX());
+ EXPECT_FALSE(T.isSimulatorEnvironment());
+ EXPECT_EQ(T.getOSName(), "visionos1.2");
+ Version = T.getOSVersion();
+ EXPECT_EQ(VersionTuple(1, 2), Version);
+
+ T = Triple("arm64-apple-xros1-simulator");
+ EXPECT_TRUE(T.isXROS());
+ EXPECT_TRUE(T.isOSDarwin());
+ EXPECT_FALSE(T.isiOS());
+ EXPECT_FALSE(T.isMacOSX());
+ EXPECT_TRUE(T.isSimulatorEnvironment());
+ Version = T.getOSVersion();
+ EXPECT_EQ(VersionTuple(1), Version);
+ Version = T.getiOSVersion();
+ EXPECT_EQ(VersionTuple(17), Version);
+}
+
TEST(TripleTest, getOSVersion) {
Triple T;
VersionTuple Version;
More information about the llvm-commits
mailing list