@@ -17,89 +17,93 @@ pub enum Arch {
1717 Arm64e ,
1818 Arm64_32 ,
1919 I386 ,
20- I386_sim ,
2120 I686 ,
2221 X86_64 ,
2322 X86_64h ,
24- X86_64_sim ,
25- X86_64_macabi ,
26- Arm64_macabi ,
27- Arm64_sim ,
2823}
2924
3025impl Arch {
3126 pub fn target_name ( self ) -> & ' static str {
3227 match self {
3328 Armv7k => "armv7k" ,
3429 Armv7s => "armv7s" ,
35- Arm64 | Arm64_macabi | Arm64_sim => "arm64" ,
30+ Arm64 => "arm64" ,
3631 Arm64e => "arm64e" ,
3732 Arm64_32 => "arm64_32" ,
38- I386 | I386_sim => "i386" ,
33+ I386 => "i386" ,
3934 I686 => "i686" ,
40- X86_64 | X86_64_sim | X86_64_macabi => "x86_64" ,
35+ X86_64 => "x86_64" ,
4136 X86_64h => "x86_64h" ,
4237 }
4338 }
4439
4540 pub fn target_arch ( self ) -> Cow < ' static , str > {
4641 Cow :: Borrowed ( match self {
4742 Armv7k | Armv7s => "arm" ,
48- Arm64 | Arm64e | Arm64_32 | Arm64_macabi | Arm64_sim => "aarch64" ,
49- I386 | I386_sim | I686 => "x86" ,
50- X86_64 | X86_64_sim | X86_64_macabi | X86_64h => "x86_64" ,
43+ Arm64 | Arm64e | Arm64_32 => "aarch64" ,
44+ I386 | I686 => "x86" ,
45+ X86_64 | X86_64h => "x86_64" ,
5146 } )
5247 }
5348
54- fn target_abi ( self ) -> & ' static str {
55- match self {
56- Armv7k | Armv7s | Arm64 | Arm64e | Arm64_32 | I386 | I686 | X86_64 | X86_64h => "" ,
57- X86_64_macabi | Arm64_macabi => "macabi" ,
58- I386_sim | Arm64_sim | X86_64_sim => "sim" ,
59- }
60- }
61-
62- fn target_cpu ( self ) -> & ' static str {
49+ fn target_cpu ( self , abi : TargetAbi ) -> & ' static str {
6350 match self {
6451 Armv7k => "cortex-a8" ,
6552 Armv7s => "swift" , // iOS 10 is only supported on iPhone 5 or higher.
66- Arm64 => "apple-a7" ,
53+ Arm64 => match abi {
54+ TargetAbi :: Normal => "apple-a7" ,
55+ TargetAbi :: Simulator => "apple-a12" ,
56+ TargetAbi :: MacCatalyst => "apple-a12" ,
57+ } ,
6758 Arm64e => "apple-a12" ,
6859 Arm64_32 => "apple-s4" ,
6960 // Only macOS 10.12+ is supported, which means
7061 // all x86_64/x86 CPUs must be running at least penryn
7162 // https://github.com/llvm/llvm-project/blob/01f924d0e37a5deae51df0d77e10a15b63aa0c0f/clang/lib/Driver/ToolChains/Arch/X86.cpp#L79-L82
72- I386 | I386_sim | I686 => "penryn" ,
73- X86_64 | X86_64_sim => "penryn" ,
74- X86_64_macabi => "penryn" ,
63+ I386 | I686 => "penryn" ,
64+ X86_64 => "penryn" ,
7565 // Note: `core-avx2` is slightly more advanced than `x86_64h`, see
7666 // comments (and disabled features) in `x86_64h_apple_darwin` for
7767 // details. It is a higher baseline then `penryn` however.
7868 X86_64h => "core-avx2" ,
79- Arm64_macabi => "apple-a12" ,
80- Arm64_sim => "apple-a12" ,
8169 }
8270 }
8371
8472 fn stack_probes ( self ) -> StackProbeType {
8573 match self {
8674 Armv7k | Armv7s => StackProbeType :: None ,
87- Arm64 | Arm64e | Arm64_32 | I386 | I386_sim | I686 | X86_64 | X86_64h | X86_64_sim
88- | X86_64_macabi | Arm64_macabi | Arm64_sim => StackProbeType :: Inline ,
75+ Arm64 | Arm64e | Arm64_32 | I386 | I686 | X86_64 | X86_64h => StackProbeType :: Inline ,
8976 }
9077 }
9178}
9279
93- fn pre_link_args ( os : & ' static str , arch : Arch , abi : & ' static str ) -> LinkArgs {
80+ #[ derive( Copy , Clone , PartialEq ) ]
81+ pub enum TargetAbi {
82+ Normal ,
83+ Simulator ,
84+ MacCatalyst ,
85+ }
86+
87+ impl TargetAbi {
88+ fn target_abi ( self ) -> & ' static str {
89+ match self {
90+ Self :: Normal => "" ,
91+ Self :: MacCatalyst => "macabi" ,
92+ Self :: Simulator => "sim" ,
93+ }
94+ }
95+ }
96+
97+ fn pre_link_args ( os : & ' static str , arch : Arch , abi : TargetAbi ) -> LinkArgs {
9498 let platform_name: StaticCow < str > = match abi {
95- "sim" => format ! ( "{os}-simulator" ) . into ( ) ,
96- "macabi" => "mac-catalyst" . into ( ) ,
97- _ => os . into ( ) ,
99+ TargetAbi :: Normal => os . into ( ) ,
100+ TargetAbi :: Simulator => format ! ( "{os}-simulator" ) . into ( ) ,
101+ TargetAbi :: MacCatalyst => "mac-catalyst" . into ( ) ,
98102 } ;
99103
100104 let min_version: StaticCow < str > = {
101105 let ( major, minor) = match os {
102- "ios" => ios_deployment_target ( arch, abi) ,
106+ "ios" => ios_deployment_target ( arch, abi. target_abi ( ) ) ,
103107 "tvos" => tvos_deployment_target ( ) ,
104108 "watchos" => watchos_deployment_target ( ) ,
105109 "visionos" => visionos_deployment_target ( ) ,
@@ -119,7 +123,7 @@ fn pre_link_args(os: &'static str, arch: Arch, abi: &'static str) -> LinkArgs {
119123 LinkerFlavor :: Darwin ( Cc :: No , Lld :: No ) ,
120124 [ platform_name, min_version, sdk_version] . into_iter ( ) ,
121125 ) ;
122- if abi != "macabi" {
126+ if abi != TargetAbi :: MacCatalyst {
123127 add_link_args (
124128 & mut args,
125129 LinkerFlavor :: Darwin ( Cc :: Yes , Lld :: No ) ,
@@ -136,13 +140,11 @@ fn pre_link_args(os: &'static str, arch: Arch, abi: &'static str) -> LinkArgs {
136140 args
137141}
138142
139- pub fn opts ( os : & ' static str , arch : Arch ) -> TargetOptions {
140- let abi = arch. target_abi ( ) ;
141-
143+ pub fn opts ( os : & ' static str , arch : Arch , abi : TargetAbi ) -> TargetOptions {
142144 TargetOptions {
143- abi : abi. into ( ) ,
145+ abi : abi. target_abi ( ) . into ( ) ,
144146 os : os. into ( ) ,
145- cpu : arch. target_cpu ( ) . into ( ) ,
147+ cpu : arch. target_cpu ( abi ) . into ( ) ,
146148 link_env_remove : link_env_remove ( os) ,
147149 vendor : "apple" . into ( ) ,
148150 linker_flavor : LinkerFlavor :: Darwin ( Cc :: Yes , Lld :: No ) ,
@@ -263,8 +265,7 @@ fn from_set_deployment_target(var_name: &str) -> Option<(u32, u32)> {
263265
264266fn macos_default_deployment_target ( arch : Arch ) -> ( u32 , u32 ) {
265267 match arch {
266- // Note: Arm64_sim is not included since macOS has no simulator.
267- Arm64 | Arm64e | Arm64_macabi => ( 11 , 0 ) ,
268+ Arm64 | Arm64e => ( 11 , 0 ) ,
268269 _ => ( 10 , 12 ) ,
269270 }
270271}
0 commit comments