Support for visionOS
This commit is contained in:
parent
21d94a3d2c
commit
4f6f433745
45 changed files with 550 additions and 29 deletions
|
@ -102,6 +102,7 @@ fn pre_link_args(os: &'static str, arch: Arch, abi: &'static str) -> LinkArgs {
|
|||
"ios" => ios_deployment_target(arch, abi),
|
||||
"tvos" => tvos_deployment_target(),
|
||||
"watchos" => watchos_deployment_target(),
|
||||
"visionos" => visionos_deployment_target(),
|
||||
"macos" => macos_deployment_target(arch),
|
||||
_ => unreachable!(),
|
||||
};
|
||||
|
@ -202,6 +203,8 @@ pub fn sdk_version(platform: u32) -> Option<(u32, u32)> {
|
|||
| object::macho::PLATFORM_TVOSSIMULATOR
|
||||
| object::macho::PLATFORM_MACCATALYST => Some((16, 2)),
|
||||
object::macho::PLATFORM_WATCHOS | object::macho::PLATFORM_WATCHOSSIMULATOR => Some((9, 1)),
|
||||
// FIXME: Upgrade to yet unreleased `object-rs` implementation with visionos platform definition
|
||||
11 | 12 => Some((1, 0)),
|
||||
_ => None,
|
||||
}
|
||||
}
|
||||
|
@ -216,6 +219,9 @@ pub fn platform(target: &Target) -> Option<u32> {
|
|||
("watchos", _) => object::macho::PLATFORM_WATCHOS,
|
||||
("tvos", "sim") => object::macho::PLATFORM_TVOSSIMULATOR,
|
||||
("tvos", _) => object::macho::PLATFORM_TVOS,
|
||||
// FIXME: Upgrade to yet unreleased `object-rs` implementation with visionos platform definition
|
||||
("visionos", "sim") => 12,
|
||||
("visionos", _) => 11,
|
||||
_ => return None,
|
||||
})
|
||||
}
|
||||
|
@ -240,6 +246,7 @@ pub fn deployment_target(target: &Target) -> Option<(u32, u32)> {
|
|||
}
|
||||
"watchos" => watchos_deployment_target(),
|
||||
"tvos" => tvos_deployment_target(),
|
||||
"visionos" => visionos_deployment_target(),
|
||||
_ => return None,
|
||||
};
|
||||
|
||||
|
@ -290,6 +297,7 @@ fn link_env_remove(os: &'static str) -> StaticCow<[StaticCow<str>]> {
|
|||
|| sdkroot.contains("AppleTVSimulator.platform")
|
||||
|| sdkroot.contains("WatchOS.platform")
|
||||
|| sdkroot.contains("WatchSimulator.platform")
|
||||
|| sdkroot.contains("visionos.platform")
|
||||
{
|
||||
env_remove.push("SDKROOT".into())
|
||||
}
|
||||
|
@ -299,6 +307,7 @@ fn link_env_remove(os: &'static str) -> StaticCow<[StaticCow<str>]> {
|
|||
// although this is apparently ignored when using the linker at "/usr/bin/ld".
|
||||
env_remove.push("IPHONEOS_DEPLOYMENT_TARGET".into());
|
||||
env_remove.push("TVOS_DEPLOYMENT_TARGET".into());
|
||||
env_remove.push("visionos_DEPLOYMENT_TARGET".into());
|
||||
env_remove.into()
|
||||
} else {
|
||||
// Otherwise if cross-compiling for a different OS/SDK (including Mac Catalyst), remove any part
|
||||
|
@ -363,3 +372,18 @@ pub fn watchos_sim_llvm_target(arch: Arch) -> String {
|
|||
let (major, minor) = watchos_deployment_target();
|
||||
format!("{}-apple-watchos{}.{}.0-simulator", arch.target_name(), major, minor)
|
||||
}
|
||||
|
||||
fn visionos_deployment_target() -> (u32, u32) {
|
||||
// If you are looking for the default deployment target, prefer `rustc --print deployment-target`.
|
||||
from_set_deployment_target("XROS_DEPLOYMENT_TARGET").unwrap_or((1, 0))
|
||||
}
|
||||
|
||||
pub fn visionos_llvm_target(arch: Arch) -> String {
|
||||
let (major, minor) = visionos_deployment_target();
|
||||
format!("{}-apple-visionos{}.{}.0", arch.target_name(), major, minor)
|
||||
}
|
||||
|
||||
pub fn visionos_sim_llvm_target(arch: Arch) -> String {
|
||||
let (major, minor) = visionos_deployment_target();
|
||||
format!("{}-apple-visionos{}.{}.0-simulator", arch.target_name(), major, minor)
|
||||
}
|
||||
|
|
|
@ -1,6 +1,7 @@
|
|||
use crate::spec::targets::{
|
||||
aarch64_apple_darwin, aarch64_apple_ios_sim, aarch64_apple_watchos_sim, i686_apple_darwin,
|
||||
x86_64_apple_darwin, x86_64_apple_ios, x86_64_apple_tvos, x86_64_apple_watchos_sim,
|
||||
aarch64_apple_darwin, aarch64_apple_ios_sim, aarch64_apple_visionos_sim,
|
||||
aarch64_apple_watchos_sim, i686_apple_darwin, x86_64_apple_darwin, x86_64_apple_ios,
|
||||
x86_64_apple_tvos, x86_64_apple_watchos_sim,
|
||||
};
|
||||
|
||||
#[test]
|
||||
|
@ -12,6 +13,7 @@ fn simulator_targets_set_abi() {
|
|||
aarch64_apple_ios_sim::target(),
|
||||
// Note: There is currently no ARM64 tvOS simulator target
|
||||
aarch64_apple_watchos_sim::target(),
|
||||
aarch64_apple_visionos_sim::target(),
|
||||
];
|
||||
|
||||
for target in &all_sim_targets {
|
||||
|
|
|
@ -1557,6 +1557,9 @@ supported_targets! {
|
|||
("aarch64-apple-watchos", aarch64_apple_watchos),
|
||||
("aarch64-apple-watchos-sim", aarch64_apple_watchos_sim),
|
||||
|
||||
("aarch64-apple-visionos", aarch64_apple_visionos),
|
||||
("aarch64-apple-visionos-sim", aarch64_apple_visionos_sim),
|
||||
|
||||
("armebv7r-none-eabi", armebv7r_none_eabi),
|
||||
("armebv7r-none-eabihf", armebv7r_none_eabihf),
|
||||
("armv7r-none-eabi", armv7r_none_eabi),
|
||||
|
|
|
@ -0,0 +1,22 @@
|
|||
use crate::spec::base::apple::{opts, visionos_llvm_target, Arch};
|
||||
use crate::spec::{FramePointer, SanitizerSet, Target, TargetOptions};
|
||||
|
||||
pub fn target() -> Target {
|
||||
let arch = Arch::Arm64;
|
||||
let mut base = opts("visionos", arch);
|
||||
base.supported_sanitizers = SanitizerSet::ADDRESS | SanitizerSet::THREAD;
|
||||
|
||||
Target {
|
||||
llvm_target: visionos_llvm_target(arch).into(),
|
||||
description: None,
|
||||
pointer_width: 64,
|
||||
data_layout: "e-m:e-i8:8:32-i16:16:32-i64:64-i128:128-n32:64-S128".into(),
|
||||
arch: arch.target_arch(),
|
||||
options: TargetOptions {
|
||||
features: "+neon,+fp-armv8,+apple-a12".into(),
|
||||
max_atomic_width: Some(128),
|
||||
frame_pointer: FramePointer::NonLeaf,
|
||||
..base
|
||||
},
|
||||
}
|
||||
}
|
|
@ -0,0 +1,22 @@
|
|||
use crate::spec::base::apple::{opts, visionos_sim_llvm_target, Arch};
|
||||
use crate::spec::{FramePointer, SanitizerSet, Target, TargetOptions};
|
||||
|
||||
pub fn target() -> Target {
|
||||
let arch = Arch::Arm64_sim;
|
||||
let mut base = opts("visionos", arch);
|
||||
base.supported_sanitizers = SanitizerSet::ADDRESS | SanitizerSet::THREAD;
|
||||
|
||||
Target {
|
||||
llvm_target: visionos_sim_llvm_target(arch).into(),
|
||||
description: None,
|
||||
pointer_width: 64,
|
||||
data_layout: "e-m:e-i8:8:32-i16:16:32-i64:64-i128:128-n32:64-S128".into(),
|
||||
arch: arch.target_arch(),
|
||||
options: TargetOptions {
|
||||
features: "+neon,+fp-armv8,+apple-m1".into(),
|
||||
max_atomic_width: Some(128),
|
||||
frame_pointer: FramePointer::NonLeaf,
|
||||
..base
|
||||
},
|
||||
}
|
||||
}
|
Loading…
Add table
Add a link
Reference in a new issue