Skip to content

Commit 7d3466b

Browse files
authored
[llvm] Introduce XROS platform (llvm#77707)
Accepts but otherwise ignores visionOS/XROS target triples as Darwin based platform. https://developer.apple.com/documentation/visionos
1 parent a43a4a5 commit 7d3466b

File tree

5 files changed

+62
-2
lines changed

5 files changed

+62
-2
lines changed

llvm/include/llvm/BinaryFormat/MachO.def

+2
Original file line numberDiff line numberDiff line change
@@ -133,6 +133,8 @@ PLATFORM(IOSSIMULATOR, 7, iossimulator, iossimulator, ios-simulator, ios-simulat
133133
PLATFORM(TVOSSIMULATOR, 8, tvossimulator, tvossimulator, tvos-simulator, tvos-simulator, tvOS Simulator)
134134
PLATFORM(WATCHOSSIMULATOR, 9, watchossimulator, watchossimulator, watchos-simulator, watchos-simulator, watchOS Simulator)
135135
PLATFORM(DRIVERKIT, 10, driverkit, driverkit, driverkit, driverkit, DriverKit)
136+
PLATFORM(XROS, 11, xros, xros, xros, xros, xrOS)
137+
PLATFORM(XROS_SIMULATOR, 12, xrsimulator, xrsimulator, xrsimulator, xros-simulator, xrOS Simulator)
136138
#endif
137139

138140
#undef HANDLE_LOAD_COMMAND

llvm/include/llvm/TargetParser/Triple.h

+6-2
Original file line numberDiff line numberDiff line change
@@ -214,6 +214,7 @@ class Triple {
214214
TvOS, // Apple tvOS
215215
WatchOS, // Apple watchOS
216216
DriverKit, // Apple DriverKit
217+
XROS, // Apple XROS
217218
Mesa3D,
218219
AMDPAL, // AMD PAL Runtime
219220
HermitCore, // HermitCore Unikernel/Multikernel
@@ -514,14 +515,17 @@ class Triple {
514515
return getSubArch() == Triple::ARMSubArch_v7k;
515516
}
516517

518+
/// Is this an Apple XROS triple.
519+
bool isXROS() const { return getOS() == Triple::XROS; }
520+
517521
/// Is this an Apple DriverKit triple.
518522
bool isDriverKit() const { return getOS() == Triple::DriverKit; }
519523

520524
bool isOSzOS() const { return getOS() == Triple::ZOS; }
521525

522-
/// Is this a "Darwin" OS (macOS, iOS, tvOS, watchOS, or DriverKit).
526+
/// Is this a "Darwin" OS (macOS, iOS, tvOS, watchOS, XROS, or DriverKit).
523527
bool isOSDarwin() const {
524-
return isMacOSX() || isiOS() || isWatchOS() || isDriverKit();
528+
return isMacOSX() || isiOS() || isWatchOS() || isDriverKit() || isXROS();
525529
}
526530

527531
bool isSimulatorEnvironment() const {

llvm/lib/TargetParser/Triple.cpp

+14
Original file line numberDiff line numberDiff line change
@@ -273,6 +273,7 @@ StringRef Triple::getOSTypeName(OSType Kind) {
273273
case ZOS: return "zos";
274274
case ShaderModel: return "shadermodel";
275275
case LiteOS: return "liteos";
276+
case XROS: return "xros";
276277
}
277278

278279
llvm_unreachable("Invalid OSType");
@@ -634,6 +635,8 @@ static Triple::OSType parseOS(StringRef OSName) {
634635
.StartsWith("tvos", Triple::TvOS)
635636
.StartsWith("watchos", Triple::WatchOS)
636637
.StartsWith("driverkit", Triple::DriverKit)
638+
.StartsWith("xros", Triple::XROS)
639+
.StartsWith("visionos", Triple::XROS)
637640
.StartsWith("mesa3d", Triple::Mesa3D)
638641
.StartsWith("amdpal", Triple::AMDPAL)
639642
.StartsWith("hermit", Triple::HermitCore)
@@ -1224,6 +1227,8 @@ VersionTuple Triple::getOSVersion() const {
12241227
OSName = OSName.substr(OSTypeName.size());
12251228
else if (getOS() == MacOSX)
12261229
OSName.consume_front("macos");
1230+
else if (OSName.starts_with("visionos"))
1231+
OSName.consume_front("visionos");
12271232

12281233
return parseVersionFromName(OSName);
12291234
}
@@ -1265,6 +1270,8 @@ bool Triple::getMacOSXVersion(VersionTuple &Version) const {
12651270
// IOS.
12661271
Version = VersionTuple(10, 4);
12671272
break;
1273+
case XROS:
1274+
llvm_unreachable("OSX version isn't relevant for xrOS");
12681275
case DriverKit:
12691276
llvm_unreachable("OSX version isn't relevant for DriverKit");
12701277
}
@@ -1289,6 +1296,11 @@ VersionTuple Triple::getiOSVersion() const {
12891296
return (getArch() == aarch64) ? VersionTuple(7) : VersionTuple(5);
12901297
return Version;
12911298
}
1299+
case XROS: {
1300+
// xrOS 1 is aligned with iOS 17.
1301+
VersionTuple Version = getOSVersion();
1302+
return Version.withMajorReplaced(Version.getMajor() + 16);
1303+
}
12921304
case WatchOS:
12931305
llvm_unreachable("conflicting triple info");
12941306
case DriverKit:
@@ -1314,6 +1326,8 @@ VersionTuple Triple::getWatchOSVersion() const {
13141326
}
13151327
case IOS:
13161328
llvm_unreachable("conflicting triple info");
1329+
case XROS:
1330+
llvm_unreachable("watchOS version isn't relevant for xrOS");
13171331
case DriverKit:
13181332
llvm_unreachable("DriverKit doesn't have a WatchOS version");
13191333
}

llvm/lib/TextAPI/Platform.cpp

+4
Original file line numberDiff line numberDiff line change
@@ -106,6 +106,10 @@ std::string getOSAndEnvironmentName(PlatformType Platform,
106106
return "watchos" + Version + "-simulator";
107107
case PLATFORM_DRIVERKIT:
108108
return "driverkit" + Version;
109+
case PLATFORM_XROS:
110+
return "xros" + Version;
111+
case PLATFORM_XROS_SIMULATOR:
112+
return "xros" + Version + "-simulator";
109113
}
110114
llvm_unreachable("Unknown llvm::MachO::PlatformType enum");
111115
}

llvm/unittests/TargetParser/TripleTest.cpp

+36
Original file line numberDiff line numberDiff line change
@@ -1746,6 +1746,42 @@ TEST(TripleTest, EndianArchVariants) {
17461746
EXPECT_EQ(Triple::dxil, T.getLittleEndianArchVariant().getArch());
17471747
}
17481748

1749+
TEST(TripleTest, XROS) {
1750+
Triple T;
1751+
VersionTuple Version;
1752+
1753+
T = Triple("arm64-apple-xros");
1754+
EXPECT_TRUE(T.isXROS());
1755+
EXPECT_TRUE(T.isOSDarwin());
1756+
EXPECT_FALSE(T.isiOS());
1757+
EXPECT_FALSE(T.isMacOSX());
1758+
EXPECT_FALSE(T.isSimulatorEnvironment());
1759+
EXPECT_EQ(T.getOSName(), "xros");
1760+
Version = T.getOSVersion();
1761+
EXPECT_EQ(VersionTuple(0), Version);
1762+
1763+
T = Triple("arm64-apple-visionos1.2");
1764+
EXPECT_TRUE(T.isXROS());
1765+
EXPECT_TRUE(T.isOSDarwin());
1766+
EXPECT_FALSE(T.isiOS());
1767+
EXPECT_FALSE(T.isMacOSX());
1768+
EXPECT_FALSE(T.isSimulatorEnvironment());
1769+
EXPECT_EQ(T.getOSName(), "visionos1.2");
1770+
Version = T.getOSVersion();
1771+
EXPECT_EQ(VersionTuple(1, 2), Version);
1772+
1773+
T = Triple("arm64-apple-xros1-simulator");
1774+
EXPECT_TRUE(T.isXROS());
1775+
EXPECT_TRUE(T.isOSDarwin());
1776+
EXPECT_FALSE(T.isiOS());
1777+
EXPECT_FALSE(T.isMacOSX());
1778+
EXPECT_TRUE(T.isSimulatorEnvironment());
1779+
Version = T.getOSVersion();
1780+
EXPECT_EQ(VersionTuple(1), Version);
1781+
Version = T.getiOSVersion();
1782+
EXPECT_EQ(VersionTuple(17), Version);
1783+
}
1784+
17491785
TEST(TripleTest, getOSVersion) {
17501786
Triple T;
17511787
VersionTuple Version;

0 commit comments

Comments
 (0)