@@ -17,89 +17,93 @@ pub enum Arch {
17
17
Arm64e ,
18
18
Arm64_32 ,
19
19
I386 ,
20
- I386_sim ,
21
20
I686 ,
22
21
X86_64 ,
23
22
X86_64h ,
24
- X86_64_sim ,
25
- X86_64_macabi ,
26
- Arm64_macabi ,
27
- Arm64_sim ,
28
23
}
29
24
30
25
impl Arch {
31
26
pub fn target_name ( self ) -> & ' static str {
32
27
match self {
33
28
Armv7k => "armv7k" ,
34
29
Armv7s => "armv7s" ,
35
- Arm64 | Arm64_macabi | Arm64_sim => "arm64" ,
30
+ Arm64 => "arm64" ,
36
31
Arm64e => "arm64e" ,
37
32
Arm64_32 => "arm64_32" ,
38
- I386 | I386_sim => "i386" ,
33
+ I386 => "i386" ,
39
34
I686 => "i686" ,
40
- X86_64 | X86_64_sim | X86_64_macabi => "x86_64" ,
35
+ X86_64 => "x86_64" ,
41
36
X86_64h => "x86_64h" ,
42
37
}
43
38
}
44
39
45
40
pub fn target_arch ( self ) -> Cow < ' static , str > {
46
41
Cow :: Borrowed ( match self {
47
42
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" ,
51
46
} )
52
47
}
53
48
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 {
63
50
match self {
64
51
Armv7k => "cortex-a8" ,
65
52
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
+ } ,
67
58
Arm64e => "apple-a12" ,
68
59
Arm64_32 => "apple-s4" ,
69
60
// Only macOS 10.12+ is supported, which means
70
61
// all x86_64/x86 CPUs must be running at least penryn
71
62
// 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" ,
75
65
// Note: `core-avx2` is slightly more advanced than `x86_64h`, see
76
66
// comments (and disabled features) in `x86_64h_apple_darwin` for
77
67
// details. It is a higher baseline then `penryn` however.
78
68
X86_64h => "core-avx2" ,
79
- Arm64_macabi => "apple-a12" ,
80
- Arm64_sim => "apple-a12" ,
81
69
}
82
70
}
83
71
84
72
fn stack_probes ( self ) -> StackProbeType {
85
73
match self {
86
74
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 ,
89
76
}
90
77
}
91
78
}
92
79
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 {
94
98
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 ( ) ,
98
102
} ;
99
103
100
104
let min_version: StaticCow < str > = {
101
105
let ( major, minor) = match os {
102
- "ios" => ios_deployment_target ( arch, abi) ,
106
+ "ios" => ios_deployment_target ( arch, abi. target_abi ( ) ) ,
103
107
"tvos" => tvos_deployment_target ( ) ,
104
108
"watchos" => watchos_deployment_target ( ) ,
105
109
"visionos" => visionos_deployment_target ( ) ,
@@ -119,7 +123,7 @@ fn pre_link_args(os: &'static str, arch: Arch, abi: &'static str) -> LinkArgs {
119
123
LinkerFlavor :: Darwin ( Cc :: No , Lld :: No ) ,
120
124
[ platform_name, min_version, sdk_version] . into_iter ( ) ,
121
125
) ;
122
- if abi != "macabi" {
126
+ if abi != TargetAbi :: MacCatalyst {
123
127
add_link_args (
124
128
& mut args,
125
129
LinkerFlavor :: Darwin ( Cc :: Yes , Lld :: No ) ,
@@ -136,13 +140,11 @@ fn pre_link_args(os: &'static str, arch: Arch, abi: &'static str) -> LinkArgs {
136
140
args
137
141
}
138
142
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 {
142
144
TargetOptions {
143
- abi : abi. into ( ) ,
145
+ abi : abi. target_abi ( ) . into ( ) ,
144
146
os : os. into ( ) ,
145
- cpu : arch. target_cpu ( ) . into ( ) ,
147
+ cpu : arch. target_cpu ( abi ) . into ( ) ,
146
148
link_env_remove : link_env_remove ( os) ,
147
149
vendor : "apple" . into ( ) ,
148
150
linker_flavor : LinkerFlavor :: Darwin ( Cc :: Yes , Lld :: No ) ,
@@ -263,8 +265,7 @@ fn from_set_deployment_target(var_name: &str) -> Option<(u32, u32)> {
263
265
264
266
fn macos_default_deployment_target ( arch : Arch ) -> ( u32 , u32 ) {
265
267
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 ) ,
268
269
_ => ( 10 , 12 ) ,
269
270
}
270
271
}
0 commit comments