1 use crate::spec::{cvs, TargetOptions};
5 #[path = "apple/tests.rs"]
9 #[allow(non_camel_case_types)]
10 #[derive(Copy, Clone)]
18 #[allow(dead_code)] // Some targets don't use this enum...
26 fn target_arch_name(arch: Arch) -> &'static str {
31 Arm64 | Arm64_macabi | Arm64_sim => "arm64",
32 Arm64_32 => "arm64_32",
34 X86_64 | X86_64_sim | X86_64_macabi => "x86_64",
38 fn target_abi(arch: Arch) -> &'static str {
40 Armv7 | Armv7k | Armv7s | Arm64 | Arm64_32 | I386 | X86_64 => "",
41 X86_64_macabi | Arm64_macabi => "macabi",
42 // x86_64-apple-ios is a simulator target, even though it isn't
43 // declared that way in the target like the other ones...
44 Arm64_sim | X86_64_sim => "sim",
48 fn target_cpu(arch: Arch) -> &'static str {
50 Armv7 => "cortex-a8", // iOS7 is supported on iPhone 4 and higher
51 Armv7k => "cortex-a8",
52 Armv7s => "cortex-a9",
54 Arm64_32 => "apple-s4",
56 X86_64 | X86_64_sim => "core2",
57 X86_64_macabi => "core2",
58 Arm64_macabi => "apple-a12",
59 Arm64_sim => "apple-a12",
63 fn link_env_remove(arch: Arch) -> Cow<'static, [Cow<'static, str>]> {
65 Armv7 | Armv7k | Armv7s | Arm64 | Arm64_32 | I386 | X86_64 | X86_64_sim | Arm64_sim => {
66 cvs!["MACOSX_DEPLOYMENT_TARGET"]
68 X86_64_macabi | Arm64_macabi => cvs!["IPHONEOS_DEPLOYMENT_TARGET"],
72 pub fn opts(os: &'static str, arch: Arch) -> TargetOptions {
73 let abi = target_abi(arch);
76 cpu: target_cpu(arch).into(),
77 link_env_remove: link_env_remove(arch),
78 has_thread_local: false,
79 ..super::apple_base::opts(os, target_arch_name(arch), abi)