Skip to content

Commit 94c2056

Browse files
committed
[llvm] Introduce XROS platform (llvm#77707)
Accepts but otherwise ignores visionOS/XROS target triples as Darwin based platform. https://developer.apple.com/documentation/visionos (cherry picked from commit 7d3466b)
1 parent 64c3e8e commit 94c2056

File tree

5 files changed

+62
-2
lines changed

5 files changed

+62
-2
lines changed

llvm/include/llvm/BinaryFormat/MachO.def

Lines changed: 2 additions & 0 deletions
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

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -216,6 +216,7 @@ class Triple {
216216
TvOS, // Apple tvOS
217217
WatchOS, // Apple watchOS
218218
DriverKit, // Apple DriverKit
219+
XROS, // Apple XROS
219220
Mesa3D,
220221
Contiki,
221222
AMDPAL, // AMD PAL Runtime
@@ -508,14 +509,17 @@ class Triple {
508509
return getSubArch() == Triple::ARMSubArch_v7k;
509510
}
510511

512+
/// Is this an Apple XROS triple.
513+
bool isXROS() const { return getOS() == Triple::XROS; }
514+
511515
/// Is this an Apple DriverKit triple.
512516
bool isDriverKit() const { return getOS() == Triple::DriverKit; }
513517

514518
bool isOSzOS() const { return getOS() == Triple::ZOS; }
515519

516-
/// Is this a "Darwin" OS (macOS, iOS, tvOS, watchOS, or DriverKit).
520+
/// Is this a "Darwin" OS (macOS, iOS, tvOS, watchOS, XROS, or DriverKit).
517521
bool isOSDarwin() const {
518-
return isMacOSX() || isiOS() || isWatchOS() || isDriverKit();
522+
return isMacOSX() || isiOS() || isWatchOS() || isDriverKit() || isXROS();
519523
}
520524

521525
bool isSimulatorEnvironment() const {

llvm/lib/TargetParser/Triple.cpp

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -275,6 +275,7 @@ StringRef Triple::getOSTypeName(OSType Kind) {
275275
case ZOS: return "zos";
276276
case ShaderModel: return "shadermodel";
277277
case LiteOS: return "liteos";
278+
case XROS: return "xros";
278279
}
279280

280281
llvm_unreachable("Invalid OSType");
@@ -637,6 +638,8 @@ static Triple::OSType parseOS(StringRef OSName) {
637638
.StartsWith("tvos", Triple::TvOS)
638639
.StartsWith("watchos", Triple::WatchOS)
639640
.StartsWith("driverkit", Triple::DriverKit)
641+
.StartsWith("xros", Triple::XROS)
642+
.StartsWith("visionos", Triple::XROS)
640643
.StartsWith("mesa3d", Triple::Mesa3D)
641644
.StartsWith("contiki", Triple::Contiki)
642645
.StartsWith("amdpal", Triple::AMDPAL)
@@ -1220,6 +1223,8 @@ VersionTuple Triple::getOSVersion() const {
12201223
OSName = OSName.substr(OSTypeName.size());
12211224
else if (getOS() == MacOSX)
12221225
OSName.consume_front("macos");
1226+
else if (OSName.starts_with("visionos"))
1227+
OSName.consume_front("visionos");
12231228

12241229
return parseVersionFromName(OSName);
12251230
}
@@ -1261,6 +1266,8 @@ bool Triple::getMacOSXVersion(VersionTuple &Version) const {
12611266
// IOS.
12621267
Version = VersionTuple(10, 4);
12631268
break;
1269+
case XROS:
1270+
llvm_unreachable("OSX version isn't relevant for xrOS");
12641271
case DriverKit:
12651272
llvm_unreachable("OSX version isn't relevant for DriverKit");
12661273
}
@@ -1285,6 +1292,11 @@ VersionTuple Triple::getiOSVersion() const {
12851292
return (getArch() == aarch64) ? VersionTuple(7) : VersionTuple(5);
12861293
return Version;
12871294
}
1295+
case XROS: {
1296+
// xrOS 1 is aligned with iOS 17.
1297+
VersionTuple Version = getOSVersion();
1298+
return Version.withMajorReplaced(Version.getMajor() + 16);
1299+
}
12881300
case WatchOS:
12891301
llvm_unreachable("conflicting triple info");
12901302
case DriverKit:
@@ -1310,6 +1322,8 @@ VersionTuple Triple::getWatchOSVersion() const {
13101322
}
13111323
case IOS:
13121324
llvm_unreachable("conflicting triple info");
1325+
case XROS:
1326+
llvm_unreachable("watchOS version isn't relevant for xrOS");
13131327
case DriverKit:
13141328
llvm_unreachable("DriverKit doesn't have a WatchOS version");
13151329
}

llvm/lib/TextAPI/Platform.cpp

Lines changed: 4 additions & 0 deletions
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

Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1615,6 +1615,42 @@ TEST(TripleTest, EndianArchVariants) {
16151615
EXPECT_EQ(Triple::dxil, T.getLittleEndianArchVariant().getArch());
16161616
}
16171617

1618+
TEST(TripleTest, XROS) {
1619+
Triple T;
1620+
VersionTuple Version;
1621+
1622+
T = Triple("arm64-apple-xros");
1623+
EXPECT_TRUE(T.isXROS());
1624+
EXPECT_TRUE(T.isOSDarwin());
1625+
EXPECT_FALSE(T.isiOS());
1626+
EXPECT_FALSE(T.isMacOSX());
1627+
EXPECT_FALSE(T.isSimulatorEnvironment());
1628+
EXPECT_EQ(T.getOSName(), "xros");
1629+
Version = T.getOSVersion();
1630+
EXPECT_EQ(VersionTuple(0), Version);
1631+
1632+
T = Triple("arm64-apple-visionos1.2");
1633+
EXPECT_TRUE(T.isXROS());
1634+
EXPECT_TRUE(T.isOSDarwin());
1635+
EXPECT_FALSE(T.isiOS());
1636+
EXPECT_FALSE(T.isMacOSX());
1637+
EXPECT_FALSE(T.isSimulatorEnvironment());
1638+
EXPECT_EQ(T.getOSName(), "visionos1.2");
1639+
Version = T.getOSVersion();
1640+
EXPECT_EQ(VersionTuple(1, 2), Version);
1641+
1642+
T = Triple("arm64-apple-xros1-simulator");
1643+
EXPECT_TRUE(T.isXROS());
1644+
EXPECT_TRUE(T.isOSDarwin());
1645+
EXPECT_FALSE(T.isiOS());
1646+
EXPECT_FALSE(T.isMacOSX());
1647+
EXPECT_TRUE(T.isSimulatorEnvironment());
1648+
Version = T.getOSVersion();
1649+
EXPECT_EQ(VersionTuple(1), Version);
1650+
Version = T.getiOSVersion();
1651+
EXPECT_EQ(VersionTuple(17), Version);
1652+
}
1653+
16181654
TEST(TripleTest, getOSVersion) {
16191655
Triple T;
16201656
VersionTuple Version;

0 commit comments

Comments
 (0)