Skip to content

Commit ce088c5

Browse files
committed
Add visionOS support
1 parent f313ff5 commit ce088c5

File tree

1 file changed

+48
-1
lines changed

1 file changed

+48
-1
lines changed

src/lib.rs

Lines changed: 48 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1892,6 +1892,7 @@ impl Build {
18921892
if !target.contains("apple-ios")
18931893
&& !target.contains("apple-watchos")
18941894
&& !target.contains("apple-tvos")
1895+
&& !target.contains("apple-visionos")
18951896
{
18961897
cmd.push_cc_arg("-ffunction-sections".into());
18971898
cmd.push_cc_arg("-fdata-sections".into());
@@ -2033,6 +2034,42 @@ impl Build {
20332034
format!("--target={}-apple-tvos{}", arch, deployment_target).into(),
20342035
);
20352036
}
2037+
} else if target.contains("visionos-sim") {
2038+
if let Some(arch) =
2039+
map_darwin_target_from_rust_to_compiler_architecture(target)
2040+
{
2041+
let sdk_details = apple_os_sdk_parts(
2042+
AppleOs::VisionOS,
2043+
&AppleArchSpec::Simulator(""),
2044+
);
2045+
let deployment_target = self.apple_deployment_version(
2046+
AppleOs::VisionOS,
2047+
None,
2048+
&sdk_details.sdk,
2049+
);
2050+
cmd.args.push(
2051+
format!(
2052+
"--target={}-apple-xros{}-simulator",
2053+
arch, deployment_target
2054+
)
2055+
.into(),
2056+
);
2057+
}
2058+
} else if target.contains("visionos") {
2059+
if let Some(arch) =
2060+
map_darwin_target_from_rust_to_compiler_architecture(target)
2061+
{
2062+
let sdk_details =
2063+
apple_os_sdk_parts(AppleOs::VisionOS, &AppleArchSpec::Device(""));
2064+
let deployment_target = self.apple_deployment_version(
2065+
AppleOs::VisionOS,
2066+
None,
2067+
&sdk_details.sdk,
2068+
);
2069+
cmd.args.push(
2070+
format!("--target={}-apple-xros{}", arch, deployment_target).into(),
2071+
);
2072+
}
20362073
} else if let Ok(index) = target_info::RISCV_ARCH_MAPPING
20372074
.binary_search_by_key(&arch, |(arch, _)| &arch)
20382075
{
@@ -2536,6 +2573,8 @@ impl Build {
25362573
AppleOs::WatchOs
25372574
} else if target.contains("-tvos") {
25382575
AppleOs::TvOs
2576+
} else if target.contains("-visionos") {
2577+
AppleOs::VisionOS
25392578
} else {
25402579
AppleOs::Ios
25412580
};
@@ -2805,6 +2844,7 @@ impl Build {
28052844
} else if target.contains("apple-ios")
28062845
| target.contains("apple-watchos")
28072846
| target.contains("apple-tvos")
2847+
| target.contains("apple-visionos")
28082848
{
28092849
clang.to_string()
28102850
} else if target.contains("android") {
@@ -3720,7 +3760,7 @@ impl Build {
37203760
return None;
37213761
}
37223762
}
3723-
// watchOS, tvOS, and others are all new enough that libc++ is their baseline.
3763+
// watchOS, tvOS, visionOS, and others are all new enough that libc++ is their baseline.
37243764
_ => {}
37253765
}
37263766

@@ -3764,6 +3804,10 @@ impl Build {
37643804
AppleOs::TvOs => deployment_from_env("TVOS_DEPLOYMENT_TARGET")
37653805
.or_else(default_deployment_from_sdk)
37663806
.unwrap_or_else(|| "9.0".into()),
3807+
3808+
AppleOs::VisionOS => deployment_from_env("VISIONOS_DEPLOYMENT_TARGET")
3809+
.or_else(default_deployment_from_sdk)
3810+
.unwrap_or_else(|| "1.0".into()),
37673811
}
37683812
}
37693813

@@ -3792,6 +3836,7 @@ enum AppleOs {
37923836
Ios,
37933837
WatchOs,
37943838
TvOs,
3839+
VisionOS,
37953840
}
37963841

37973842
impl std::fmt::Debug for AppleOs {
@@ -3801,6 +3846,7 @@ impl std::fmt::Debug for AppleOs {
38013846
AppleOs::Ios => f.write_str("iOS"),
38023847
AppleOs::WatchOs => f.write_str("WatchOS"),
38033848
AppleOs::TvOs => f.write_str("AppleTVOS"),
3849+
AppleOs::VisionOS => f.write_str("visionOS"),
38043850
}
38053851
}
38063852
}
@@ -3817,6 +3863,7 @@ fn apple_os_sdk_parts(os: AppleOs, arch: &AppleArchSpec) -> AppleSdkTargetParts
38173863
AppleOs::Ios => ("iphone", "ios-"),
38183864
AppleOs::WatchOs => ("watch", "watch"),
38193865
AppleOs::TvOs => ("appletv", "appletv"),
3866+
AppleOs::VisionOS => ("xr", "xr"),
38203867
};
38213868
let sdk = match arch {
38223869
AppleArchSpec::Device(_) if os == AppleOs::MacOs => Cow::Borrowed("macosx"),

0 commit comments

Comments
 (0)