]> git.lizzy.rs Git - rust.git/blob - compiler/rustc_target/src/spec/apple_sdk_base.rs
Auto merge of #97800 - pnkfelix:issue-97463-fix-aarch64-call-abi-does-not-zeroext...
[rust.git] / compiler / rustc_target / src / spec / apple_sdk_base.rs
1 use crate::spec::{cvs, TargetOptions};
2 use std::borrow::Cow;
3
4 use Arch::*;
5 #[allow(non_camel_case_types)]
6 #[derive(Copy, Clone)]
7 pub enum Arch {
8     Armv7,
9     Armv7k,
10     Armv7s,
11     Arm64,
12     Arm64_32,
13     I386,
14     X86_64,
15     X86_64_macabi,
16     Arm64_macabi,
17     Arm64_sim,
18 }
19
20 fn target_arch_name(arch: Arch) -> &'static str {
21     match arch {
22         Armv7 => "armv7",
23         Armv7k => "armv7k",
24         Armv7s => "armv7s",
25         Arm64 | Arm64_macabi | Arm64_sim => "arm64",
26         Arm64_32 => "arm64_32",
27         I386 => "i386",
28         X86_64 | X86_64_macabi => "x86_64",
29     }
30 }
31
32 fn target_abi(arch: Arch) -> &'static str {
33     match arch {
34         Armv7 | Armv7k | Armv7s | Arm64 | Arm64_32 | I386 | X86_64 => "",
35         X86_64_macabi | Arm64_macabi => "macabi",
36         Arm64_sim => "sim",
37     }
38 }
39
40 fn target_cpu(arch: Arch) -> &'static str {
41     match arch {
42         Armv7 => "cortex-a8", // iOS7 is supported on iPhone 4 and higher
43         Armv7k => "cortex-a8",
44         Armv7s => "cortex-a9",
45         Arm64 => "apple-a7",
46         Arm64_32 => "apple-s4",
47         I386 => "yonah",
48         X86_64 => "core2",
49         X86_64_macabi => "core2",
50         Arm64_macabi => "apple-a12",
51         Arm64_sim => "apple-a12",
52     }
53 }
54
55 fn link_env_remove(arch: Arch) -> Cow<'static, [Cow<'static, str>]> {
56     match arch {
57         Armv7 | Armv7k | Armv7s | Arm64 | Arm64_32 | I386 | X86_64 | Arm64_sim => {
58             cvs!["MACOSX_DEPLOYMENT_TARGET"]
59         }
60         X86_64_macabi | Arm64_macabi => cvs!["IPHONEOS_DEPLOYMENT_TARGET"],
61     }
62 }
63
64 pub fn opts(os: &'static str, arch: Arch) -> TargetOptions {
65     TargetOptions {
66         abi: target_abi(arch).into(),
67         cpu: target_cpu(arch).into(),
68         link_env_remove: link_env_remove(arch),
69         has_thread_local: false,
70         ..super::apple_base::opts(os, target_arch_name(arch), target_abi(arch))
71     }
72 }