@@ -1892,6 +1892,7 @@ impl Build {
1892
1892
if !target. contains ( "apple-ios" )
1893
1893
&& !target. contains ( "apple-watchos" )
1894
1894
&& !target. contains ( "apple-tvos" )
1895
+ && !target. contains ( "apple-visionos" )
1895
1896
{
1896
1897
cmd. push_cc_arg ( "-ffunction-sections" . into ( ) ) ;
1897
1898
cmd. push_cc_arg ( "-fdata-sections" . into ( ) ) ;
@@ -2033,6 +2034,42 @@ impl Build {
2033
2034
format ! ( "--target={}-apple-tvos{}" , arch, deployment_target) . into ( ) ,
2034
2035
) ;
2035
2036
}
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
+ }
2036
2073
} else if let Ok ( index) = target_info:: RISCV_ARCH_MAPPING
2037
2074
. binary_search_by_key ( & arch, |( arch, _) | & arch)
2038
2075
{
@@ -2536,6 +2573,8 @@ impl Build {
2536
2573
AppleOs :: WatchOs
2537
2574
} else if target. contains ( "-tvos" ) {
2538
2575
AppleOs :: TvOs
2576
+ } else if target. contains ( "-visionos" ) {
2577
+ AppleOs :: VisionOS
2539
2578
} else {
2540
2579
AppleOs :: Ios
2541
2580
} ;
@@ -2625,9 +2664,14 @@ impl Build {
2625
2664
AppleArchSpec :: Device ( arch) => {
2626
2665
cmd. args . push ( "-arch" . into ( ) ) ;
2627
2666
cmd. args . push ( arch. into ( ) ) ;
2628
- cmd. args . push (
2629
- format ! ( "-m{}os-version-min={}" , sdk_details. sdk_prefix, min_version) . into ( ) ,
2630
- ) ;
2667
+ // `-mxros-version-min` does not exist
2668
+ // https://github.com/llvm/llvm-project/issues/88271
2669
+ if os != AppleOs :: VisionOS {
2670
+ cmd. args . push (
2671
+ format ! ( "-m{}os-version-min={}" , sdk_details. sdk_prefix, min_version)
2672
+ . into ( ) ,
2673
+ ) ;
2674
+ }
2631
2675
}
2632
2676
AppleArchSpec :: Simulator ( arch) => {
2633
2677
if arch. starts_with ( '-' ) {
@@ -2637,13 +2681,15 @@ impl Build {
2637
2681
cmd. args . push ( "-arch" . into ( ) ) ;
2638
2682
cmd. args . push ( arch. into ( ) ) ;
2639
2683
}
2640
- cmd. args . push (
2641
- format ! (
2642
- "-m{}simulator-version-min={}" ,
2643
- sdk_details. sim_prefix, min_version
2644
- )
2645
- . into ( ) ,
2646
- ) ;
2684
+ if os != AppleOs :: VisionOS {
2685
+ cmd. args . push (
2686
+ format ! (
2687
+ "-m{}simulator-version-min={}" ,
2688
+ sdk_details. sim_prefix, min_version
2689
+ )
2690
+ . into ( ) ,
2691
+ ) ;
2692
+ }
2647
2693
}
2648
2694
AppleArchSpec :: Catalyst ( _) => { }
2649
2695
} ;
@@ -2805,6 +2851,7 @@ impl Build {
2805
2851
} else if target. contains ( "apple-ios" )
2806
2852
| target. contains ( "apple-watchos" )
2807
2853
| target. contains ( "apple-tvos" )
2854
+ | target. contains ( "apple-visionos" )
2808
2855
{
2809
2856
clang. to_string ( )
2810
2857
} else if target. contains ( "android" ) {
@@ -3720,7 +3767,7 @@ impl Build {
3720
3767
return None ;
3721
3768
}
3722
3769
}
3723
- // watchOS, tvOS, and others are all new enough that libc++ is their baseline.
3770
+ // watchOS, tvOS, visionOS, and others are all new enough that libc++ is their baseline.
3724
3771
_ => { }
3725
3772
}
3726
3773
@@ -3764,6 +3811,10 @@ impl Build {
3764
3811
AppleOs :: TvOs => deployment_from_env ( "TVOS_DEPLOYMENT_TARGET" )
3765
3812
. or_else ( default_deployment_from_sdk)
3766
3813
. unwrap_or_else ( || "9.0" . into ( ) ) ,
3814
+
3815
+ AppleOs :: VisionOS => deployment_from_env ( "XROS_DEPLOYMENT_TARGET" )
3816
+ . or_else ( default_deployment_from_sdk)
3817
+ . unwrap_or_else ( || "1.0" . into ( ) ) ,
3767
3818
}
3768
3819
}
3769
3820
@@ -3792,6 +3843,7 @@ enum AppleOs {
3792
3843
Ios ,
3793
3844
WatchOs ,
3794
3845
TvOs ,
3846
+ VisionOS ,
3795
3847
}
3796
3848
3797
3849
impl std:: fmt:: Debug for AppleOs {
@@ -3801,6 +3853,7 @@ impl std::fmt::Debug for AppleOs {
3801
3853
AppleOs :: Ios => f. write_str ( "iOS" ) ,
3802
3854
AppleOs :: WatchOs => f. write_str ( "WatchOS" ) ,
3803
3855
AppleOs :: TvOs => f. write_str ( "AppleTVOS" ) ,
3856
+ AppleOs :: VisionOS => f. write_str ( "visionOS" ) ,
3804
3857
}
3805
3858
}
3806
3859
}
@@ -3817,6 +3870,7 @@ fn apple_os_sdk_parts(os: AppleOs, arch: &AppleArchSpec) -> AppleSdkTargetParts
3817
3870
AppleOs :: Ios => ( "iphone" , "ios-" ) ,
3818
3871
AppleOs :: WatchOs => ( "watch" , "watch" ) ,
3819
3872
AppleOs :: TvOs => ( "appletv" , "appletv" ) ,
3873
+ AppleOs :: VisionOS => ( "xr" , "xr" ) ,
3820
3874
} ;
3821
3875
let sdk = match arch {
3822
3876
AppleArchSpec :: Device ( _) if os == AppleOs :: MacOs => Cow :: Borrowed ( "macosx" ) ,
0 commit comments