Cleanup Apple target specifications
This commit is contained in:
parent
de0ab1cee6
commit
ae948c6380
17 changed files with 108 additions and 109 deletions
|
@ -12,16 +12,14 @@ pub fn target() -> Target {
|
||||||
|
|
||||||
base.link_env_remove.to_mut().extend(macos_link_env_remove());
|
base.link_env_remove.to_mut().extend(macos_link_env_remove());
|
||||||
|
|
||||||
|
Target {
|
||||||
// Clang automatically chooses a more specific target based on
|
// Clang automatically chooses a more specific target based on
|
||||||
// MACOSX_DEPLOYMENT_TARGET. To enable cross-language LTO to work
|
// MACOSX_DEPLOYMENT_TARGET. To enable cross-language LTO to work
|
||||||
// correctly, we do too.
|
// correctly, we do too.
|
||||||
let llvm_target = macos_llvm_target(arch.target_name());
|
llvm_target: macos_llvm_target(arch).into(),
|
||||||
|
|
||||||
Target {
|
|
||||||
llvm_target: llvm_target.into(),
|
|
||||||
pointer_width: 64,
|
pointer_width: 64,
|
||||||
data_layout: "e-m:o-i64:64-i128:128-n32:64-S128".into(),
|
data_layout: "e-m:o-i64:64-i128:128-n32:64-S128".into(),
|
||||||
arch: "aarch64".into(),
|
arch: arch.target_arch(),
|
||||||
options: TargetOptions {
|
options: TargetOptions {
|
||||||
mcount: "\u{1}mcount".into(),
|
mcount: "\u{1}mcount".into(),
|
||||||
frame_pointer: FramePointer::NonLeaf,
|
frame_pointer: FramePointer::NonLeaf,
|
||||||
|
|
|
@ -2,18 +2,16 @@ use super::apple_base::{ios_llvm_target, opts, Arch};
|
||||||
use crate::spec::{FramePointer, Target, TargetOptions};
|
use crate::spec::{FramePointer, Target, TargetOptions};
|
||||||
|
|
||||||
pub fn target() -> Target {
|
pub fn target() -> Target {
|
||||||
|
let arch = Arch::Arm64;
|
||||||
|
Target {
|
||||||
// Clang automatically chooses a more specific target based on
|
// Clang automatically chooses a more specific target based on
|
||||||
// IPHONEOS_DEPLOYMENT_TARGET.
|
// IPHONEOS_DEPLOYMENT_TARGET.
|
||||||
// This is required for the target to pick the right
|
// This is required for the target to pick the right
|
||||||
// MACH-O commands, so we do too.
|
// MACH-O commands, so we do too.
|
||||||
let arch = Arch::Arm64;
|
llvm_target: ios_llvm_target(arch).into(),
|
||||||
let llvm_target = ios_llvm_target(arch);
|
|
||||||
|
|
||||||
Target {
|
|
||||||
llvm_target: llvm_target.into(),
|
|
||||||
pointer_width: 64,
|
pointer_width: 64,
|
||||||
data_layout: "e-m:o-i64:64-i128:128-n32:64-S128".into(),
|
data_layout: "e-m:o-i64:64-i128:128-n32:64-S128".into(),
|
||||||
arch: "aarch64".into(),
|
arch: arch.target_arch(),
|
||||||
options: TargetOptions {
|
options: TargetOptions {
|
||||||
features: "+neon,+fp-armv8,+apple-a7".into(),
|
features: "+neon,+fp-armv8,+apple-a7".into(),
|
||||||
max_atomic_width: Some(128),
|
max_atomic_width: Some(128),
|
||||||
|
|
|
@ -4,14 +4,15 @@ use crate::spec::{Cc, FramePointer, LinkerFlavor, Lld, Target, TargetOptions};
|
||||||
pub fn target() -> Target {
|
pub fn target() -> Target {
|
||||||
let llvm_target = "arm64-apple-ios14.0-macabi";
|
let llvm_target = "arm64-apple-ios14.0-macabi";
|
||||||
|
|
||||||
let mut base = opts("ios", Arch::Arm64_macabi);
|
let arch = Arch::Arm64_macabi;
|
||||||
|
let mut base = opts("ios", arch);
|
||||||
base.add_pre_link_args(LinkerFlavor::Darwin(Cc::Yes, Lld::No), &["-target", llvm_target]);
|
base.add_pre_link_args(LinkerFlavor::Darwin(Cc::Yes, Lld::No), &["-target", llvm_target]);
|
||||||
|
|
||||||
Target {
|
Target {
|
||||||
llvm_target: llvm_target.into(),
|
llvm_target: llvm_target.into(),
|
||||||
pointer_width: 64,
|
pointer_width: 64,
|
||||||
data_layout: "e-m:o-i64:64-i128:128-n32:64-S128".into(),
|
data_layout: "e-m:o-i64:64-i128:128-n32:64-S128".into(),
|
||||||
arch: "aarch64".into(),
|
arch: arch.target_arch(),
|
||||||
options: TargetOptions {
|
options: TargetOptions {
|
||||||
features: "+neon,+fp-armv8,+apple-a12".into(),
|
features: "+neon,+fp-armv8,+apple-a12".into(),
|
||||||
max_atomic_width: Some(128),
|
max_atomic_width: Some(128),
|
||||||
|
|
|
@ -3,19 +3,15 @@ use crate::spec::{FramePointer, Target, TargetOptions};
|
||||||
|
|
||||||
pub fn target() -> Target {
|
pub fn target() -> Target {
|
||||||
let arch = Arch::Arm64_sim;
|
let arch = Arch::Arm64_sim;
|
||||||
let base = opts("ios", arch);
|
Target {
|
||||||
|
|
||||||
// Clang automatically chooses a more specific target based on
|
// Clang automatically chooses a more specific target based on
|
||||||
// IPHONEOS_DEPLOYMENT_TARGET.
|
// IPHONEOS_DEPLOYMENT_TARGET.
|
||||||
// This is required for the simulator target to pick the right
|
// This is required for the simulator target to pick the right
|
||||||
// MACH-O commands, so we do too.
|
// MACH-O commands, so we do too.
|
||||||
let llvm_target = ios_sim_llvm_target(arch);
|
llvm_target: ios_sim_llvm_target(arch).into(),
|
||||||
|
|
||||||
Target {
|
|
||||||
llvm_target: llvm_target.into(),
|
|
||||||
pointer_width: 64,
|
pointer_width: 64,
|
||||||
data_layout: "e-m:o-i64:64-i128:128-n32:64-S128".into(),
|
data_layout: "e-m:o-i64:64-i128:128-n32:64-S128".into(),
|
||||||
arch: "aarch64".into(),
|
arch: arch.target_arch(),
|
||||||
options: TargetOptions {
|
options: TargetOptions {
|
||||||
features: "+neon,+fp-armv8,+apple-a7".into(),
|
features: "+neon,+fp-armv8,+apple-a7".into(),
|
||||||
max_atomic_width: Some(128),
|
max_atomic_width: Some(128),
|
||||||
|
@ -32,7 +28,7 @@ pub fn target() -> Target {
|
||||||
darwinpcs\0\
|
darwinpcs\0\
|
||||||
-Os\0"
|
-Os\0"
|
||||||
.into(),
|
.into(),
|
||||||
..base
|
..opts("ios", arch)
|
||||||
},
|
},
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -2,17 +2,18 @@ use super::apple_base::{opts, Arch};
|
||||||
use crate::spec::{FramePointer, Target, TargetOptions};
|
use crate::spec::{FramePointer, Target, TargetOptions};
|
||||||
|
|
||||||
pub fn target() -> Target {
|
pub fn target() -> Target {
|
||||||
|
let arch = Arch::Arm64;
|
||||||
Target {
|
Target {
|
||||||
llvm_target: "arm64-apple-tvos".into(),
|
llvm_target: "arm64-apple-tvos".into(),
|
||||||
pointer_width: 64,
|
pointer_width: 64,
|
||||||
data_layout: "e-m:o-i64:64-i128:128-n32:64-S128".into(),
|
data_layout: "e-m:o-i64:64-i128:128-n32:64-S128".into(),
|
||||||
arch: "aarch64".into(),
|
arch: arch.target_arch(),
|
||||||
options: TargetOptions {
|
options: TargetOptions {
|
||||||
features: "+neon,+fp-armv8,+apple-a7".into(),
|
features: "+neon,+fp-armv8,+apple-a7".into(),
|
||||||
max_atomic_width: Some(128),
|
max_atomic_width: Some(128),
|
||||||
forces_embed_bitcode: true,
|
forces_embed_bitcode: true,
|
||||||
frame_pointer: FramePointer::NonLeaf,
|
frame_pointer: FramePointer::NonLeaf,
|
||||||
..opts("tvos", Arch::Arm64)
|
..opts("tvos", arch)
|
||||||
},
|
},
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -3,19 +3,15 @@ use crate::spec::{FramePointer, Target, TargetOptions};
|
||||||
|
|
||||||
pub fn target() -> Target {
|
pub fn target() -> Target {
|
||||||
let arch = Arch::Arm64_sim;
|
let arch = Arch::Arm64_sim;
|
||||||
let base = opts("watchos", arch);
|
Target {
|
||||||
|
|
||||||
// Clang automatically chooses a more specific target based on
|
// Clang automatically chooses a more specific target based on
|
||||||
// WATCHOS_DEPLOYMENT_TARGET.
|
// WATCHOS_DEPLOYMENT_TARGET.
|
||||||
// This is required for the simulator target to pick the right
|
// This is required for the simulator target to pick the right
|
||||||
// MACH-O commands, so we do too.
|
// MACH-O commands, so we do too.
|
||||||
let llvm_target = watchos_sim_llvm_target(arch);
|
llvm_target: watchos_sim_llvm_target(arch).into(),
|
||||||
|
|
||||||
Target {
|
|
||||||
llvm_target: llvm_target.into(),
|
|
||||||
pointer_width: 64,
|
pointer_width: 64,
|
||||||
data_layout: "e-m:o-i64:64-i128:128-n32:64-S128".into(),
|
data_layout: "e-m:o-i64:64-i128:128-n32:64-S128".into(),
|
||||||
arch: "aarch64".into(),
|
arch: arch.target_arch(),
|
||||||
options: TargetOptions {
|
options: TargetOptions {
|
||||||
features: "+neon,+fp-armv8,+apple-a7".into(),
|
features: "+neon,+fp-armv8,+apple-a7".into(),
|
||||||
max_atomic_width: Some(128),
|
max_atomic_width: Some(128),
|
||||||
|
@ -32,7 +28,7 @@ pub fn target() -> Target {
|
||||||
darwinpcs\0\
|
darwinpcs\0\
|
||||||
-Os\0"
|
-Os\0"
|
||||||
.into(),
|
.into(),
|
||||||
..base
|
..opts("watchos", arch)
|
||||||
},
|
},
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -17,6 +17,7 @@ pub enum Arch {
|
||||||
Arm64,
|
Arm64,
|
||||||
Arm64_32,
|
Arm64_32,
|
||||||
I386,
|
I386,
|
||||||
|
I686,
|
||||||
X86_64,
|
X86_64,
|
||||||
X86_64_sim,
|
X86_64_sim,
|
||||||
X86_64_macabi,
|
X86_64_macabi,
|
||||||
|
@ -33,13 +34,23 @@ impl Arch {
|
||||||
Arm64 | Arm64_macabi | Arm64_sim => "arm64",
|
Arm64 | Arm64_macabi | Arm64_sim => "arm64",
|
||||||
Arm64_32 => "arm64_32",
|
Arm64_32 => "arm64_32",
|
||||||
I386 => "i386",
|
I386 => "i386",
|
||||||
|
I686 => "i686",
|
||||||
X86_64 | X86_64_sim | X86_64_macabi => "x86_64",
|
X86_64 | X86_64_sim | X86_64_macabi => "x86_64",
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
pub fn target_arch(self) -> Cow<'static, str> {
|
||||||
|
Cow::Borrowed(match self {
|
||||||
|
Armv7 | Armv7k | Armv7s => "arm",
|
||||||
|
Arm64 | Arm64_32 | Arm64_macabi | Arm64_sim => "aarch64",
|
||||||
|
I386 | I686 => "x86",
|
||||||
|
X86_64 | X86_64_sim | X86_64_macabi => "x86_64",
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
fn target_abi(self) -> &'static str {
|
fn target_abi(self) -> &'static str {
|
||||||
match self {
|
match self {
|
||||||
Armv7 | Armv7k | Armv7s | Arm64 | Arm64_32 | I386 | X86_64 => "",
|
Armv7 | Armv7k | Armv7s | Arm64 | Arm64_32 | I386 | I686 | X86_64 => "",
|
||||||
X86_64_macabi | Arm64_macabi => "macabi",
|
X86_64_macabi | Arm64_macabi => "macabi",
|
||||||
// x86_64-apple-ios is a simulator target, even though it isn't
|
// x86_64-apple-ios is a simulator target, even though it isn't
|
||||||
// declared that way in the target like the other ones...
|
// declared that way in the target like the other ones...
|
||||||
|
@ -54,7 +65,7 @@ impl Arch {
|
||||||
Armv7s => "cortex-a9",
|
Armv7s => "cortex-a9",
|
||||||
Arm64 => "apple-a7",
|
Arm64 => "apple-a7",
|
||||||
Arm64_32 => "apple-s4",
|
Arm64_32 => "apple-s4",
|
||||||
I386 => "yonah",
|
I386 | I686 => "yonah",
|
||||||
X86_64 | X86_64_sim => "core2",
|
X86_64 | X86_64_sim => "core2",
|
||||||
X86_64_macabi => "core2",
|
X86_64_macabi => "core2",
|
||||||
Arm64_macabi => "apple-a12",
|
Arm64_macabi => "apple-a12",
|
||||||
|
@ -64,7 +75,8 @@ impl Arch {
|
||||||
|
|
||||||
fn link_env_remove(self) -> StaticCow<[StaticCow<str>]> {
|
fn link_env_remove(self) -> StaticCow<[StaticCow<str>]> {
|
||||||
match self {
|
match self {
|
||||||
Armv7 | Armv7k | Armv7s | Arm64 | Arm64_32 | I386 | X86_64 | X86_64_sim | Arm64_sim => {
|
Armv7 | Armv7k | Armv7s | Arm64 | Arm64_32 | I386 | I686 | X86_64 | X86_64_sim
|
||||||
|
| Arm64_sim => {
|
||||||
cvs!["MACOSX_DEPLOYMENT_TARGET"]
|
cvs!["MACOSX_DEPLOYMENT_TARGET"]
|
||||||
}
|
}
|
||||||
X86_64_macabi | Arm64_macabi => cvs!["IPHONEOS_DEPLOYMENT_TARGET"],
|
X86_64_macabi | Arm64_macabi => cvs!["IPHONEOS_DEPLOYMENT_TARGET"],
|
||||||
|
@ -72,7 +84,7 @@ impl Arch {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
fn pre_link_args(os: &'static str, arch: &'static str, abi: &'static str) -> LinkArgs {
|
fn pre_link_args(os: &'static str, arch: Arch, abi: &'static str) -> LinkArgs {
|
||||||
let platform_name: StaticCow<str> = match abi {
|
let platform_name: StaticCow<str> = match abi {
|
||||||
"sim" => format!("{}-simulator", os).into(),
|
"sim" => format!("{}-simulator", os).into(),
|
||||||
"macabi" => "mac-catalyst".into(),
|
"macabi" => "mac-catalyst".into(),
|
||||||
|
@ -88,6 +100,8 @@ fn pre_link_args(os: &'static str, arch: &'static str, abi: &'static str) -> Lin
|
||||||
}
|
}
|
||||||
.into();
|
.into();
|
||||||
|
|
||||||
|
let arch = arch.target_name();
|
||||||
|
|
||||||
let mut args = TargetOptions::link_args(
|
let mut args = TargetOptions::link_args(
|
||||||
LinkerFlavor::Darwin(Cc::No, Lld::No),
|
LinkerFlavor::Darwin(Cc::No, Lld::No),
|
||||||
&["-arch", arch, "-platform_version"],
|
&["-arch", arch, "-platform_version"],
|
||||||
|
@ -118,7 +132,7 @@ pub fn opts(os: &'static str, arch: Arch) -> TargetOptions {
|
||||||
// TLS is flagged as enabled if it looks to be supported. The architecture
|
// TLS is flagged as enabled if it looks to be supported. The architecture
|
||||||
// only matters for default deployment target which is 11.0 for ARM64 and
|
// only matters for default deployment target which is 11.0 for ARM64 and
|
||||||
// 10.7 for everything else.
|
// 10.7 for everything else.
|
||||||
let has_thread_local = os == "macos" && macos_deployment_target("x86_64") >= (10, 7);
|
let has_thread_local = os == "macos" && macos_deployment_target(Arch::X86_64) >= (10, 7);
|
||||||
|
|
||||||
let abi = arch.target_abi();
|
let abi = arch.target_abi();
|
||||||
|
|
||||||
|
@ -132,7 +146,7 @@ pub fn opts(os: &'static str, arch: Arch) -> TargetOptions {
|
||||||
// macOS has -dead_strip, which doesn't rely on function_sections
|
// macOS has -dead_strip, which doesn't rely on function_sections
|
||||||
function_sections: false,
|
function_sections: false,
|
||||||
dynamic_linking: true,
|
dynamic_linking: true,
|
||||||
pre_link_args: pre_link_args(os, arch.target_name(), abi),
|
pre_link_args: pre_link_args(os, arch, abi),
|
||||||
families: cvs!["unix"],
|
families: cvs!["unix"],
|
||||||
is_like_osx: true,
|
is_like_osx: true,
|
||||||
default_dwarf_version: 2,
|
default_dwarf_version: 2,
|
||||||
|
@ -177,23 +191,24 @@ fn deployment_target(var_name: &str) -> Option<(u32, u32)> {
|
||||||
.and_then(|(a, b)| a.parse::<u32>().and_then(|a| b.parse::<u32>().map(|b| (a, b))).ok())
|
.and_then(|(a, b)| a.parse::<u32>().and_then(|a| b.parse::<u32>().map(|b| (a, b))).ok())
|
||||||
}
|
}
|
||||||
|
|
||||||
fn macos_default_deployment_target(arch: &str) -> (u32, u32) {
|
fn macos_default_deployment_target(arch: Arch) -> (u32, u32) {
|
||||||
if arch == "arm64" { (11, 0) } else { (10, 7) }
|
// Note: Arm64_sim is not included since macOS has no simulator.
|
||||||
|
if matches!(arch, Arm64 | Arm64_macabi) { (11, 0) } else { (10, 7) }
|
||||||
}
|
}
|
||||||
|
|
||||||
fn macos_deployment_target(arch: &str) -> (u32, u32) {
|
fn macos_deployment_target(arch: Arch) -> (u32, u32) {
|
||||||
deployment_target("MACOSX_DEPLOYMENT_TARGET")
|
deployment_target("MACOSX_DEPLOYMENT_TARGET")
|
||||||
.unwrap_or_else(|| macos_default_deployment_target(arch))
|
.unwrap_or_else(|| macos_default_deployment_target(arch))
|
||||||
}
|
}
|
||||||
|
|
||||||
fn macos_lld_platform_version(arch: &str) -> String {
|
fn macos_lld_platform_version(arch: Arch) -> String {
|
||||||
let (major, minor) = macos_deployment_target(arch);
|
let (major, minor) = macos_deployment_target(arch);
|
||||||
format!("{}.{}", major, minor)
|
format!("{}.{}", major, minor)
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn macos_llvm_target(arch: &str) -> String {
|
pub fn macos_llvm_target(arch: Arch) -> String {
|
||||||
let (major, minor) = macos_deployment_target(arch);
|
let (major, minor) = macos_deployment_target(arch);
|
||||||
format!("{}-apple-macosx{}.{}.0", arch, major, minor)
|
format!("{}-apple-macosx{}.{}.0", arch.target_name(), major, minor)
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn macos_link_env_remove() -> Vec<StaticCow<str>> {
|
pub fn macos_link_env_remove() -> Vec<StaticCow<str>> {
|
||||||
|
|
|
@ -1,15 +1,17 @@
|
||||||
use super::apple_base::{opts, Arch};
|
use super::apple_base::{ios_llvm_target, opts, Arch};
|
||||||
use crate::spec::{Target, TargetOptions};
|
use crate::spec::{Target, TargetOptions};
|
||||||
|
|
||||||
pub fn target() -> Target {
|
pub fn target() -> Target {
|
||||||
let arch = Arch::Armv7;
|
let arch = Arch::Armv7;
|
||||||
let llvm_target = super::apple_base::ios_llvm_target(arch);
|
|
||||||
|
|
||||||
Target {
|
Target {
|
||||||
llvm_target: llvm_target.into(),
|
// Clang automatically chooses a more specific target based on
|
||||||
|
// IPHONEOS_DEPLOYMENT_TARGET.
|
||||||
|
// This is required for the target to pick the right
|
||||||
|
// MACH-O commands, so we do too.
|
||||||
|
llvm_target: ios_llvm_target(arch).into(),
|
||||||
pointer_width: 32,
|
pointer_width: 32,
|
||||||
data_layout: "e-m:o-p:32:32-Fi8-f64:32:64-v64:32:64-v128:32:128-a:0:32-n32-S32".into(),
|
data_layout: "e-m:o-p:32:32-Fi8-f64:32:64-v64:32:64-v128:32:128-a:0:32-n32-S32".into(),
|
||||||
arch: "arm".into(),
|
arch: arch.target_arch(),
|
||||||
options: TargetOptions {
|
options: TargetOptions {
|
||||||
features: "+v7,+vfp3,+neon".into(),
|
features: "+v7,+vfp3,+neon".into(),
|
||||||
max_atomic_width: Some(64),
|
max_atomic_width: Some(64),
|
||||||
|
|
|
@ -2,12 +2,12 @@ use super::apple_base::{opts, Arch};
|
||||||
use crate::spec::{Target, TargetOptions};
|
use crate::spec::{Target, TargetOptions};
|
||||||
|
|
||||||
pub fn target() -> Target {
|
pub fn target() -> Target {
|
||||||
let base = opts("watchos", Arch::Armv7k);
|
let arch = Arch::Armv7k;
|
||||||
Target {
|
Target {
|
||||||
llvm_target: "armv7k-apple-watchos".into(),
|
llvm_target: "armv7k-apple-watchos".into(),
|
||||||
pointer_width: 32,
|
pointer_width: 32,
|
||||||
data_layout: "e-m:o-p:32:32-Fi8-i64:64-a:0:32-n32-S128".into(),
|
data_layout: "e-m:o-p:32:32-Fi8-i64:64-a:0:32-n32-S128".into(),
|
||||||
arch: "arm".into(),
|
arch: arch.target_arch(),
|
||||||
options: TargetOptions {
|
options: TargetOptions {
|
||||||
features: "+v7,+vfp4,+neon".into(),
|
features: "+v7,+vfp4,+neon".into(),
|
||||||
max_atomic_width: Some(64),
|
max_atomic_width: Some(64),
|
||||||
|
@ -22,7 +22,7 @@ pub fn target() -> Target {
|
||||||
darwinpcs\0\
|
darwinpcs\0\
|
||||||
-Os\0"
|
-Os\0"
|
||||||
.into(),
|
.into(),
|
||||||
..base
|
..opts("watchos", arch)
|
||||||
},
|
},
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -2,15 +2,16 @@ use super::apple_base::{opts, Arch};
|
||||||
use crate::spec::{Target, TargetOptions};
|
use crate::spec::{Target, TargetOptions};
|
||||||
|
|
||||||
pub fn target() -> Target {
|
pub fn target() -> Target {
|
||||||
|
let arch = Arch::Armv7s;
|
||||||
Target {
|
Target {
|
||||||
llvm_target: "armv7s-apple-ios".into(),
|
llvm_target: "armv7s-apple-ios".into(),
|
||||||
pointer_width: 32,
|
pointer_width: 32,
|
||||||
data_layout: "e-m:o-p:32:32-Fi8-f64:32:64-v64:32:64-v128:32:128-a:0:32-n32-S32".into(),
|
data_layout: "e-m:o-p:32:32-Fi8-f64:32:64-v64:32:64-v128:32:128-a:0:32-n32-S32".into(),
|
||||||
arch: "arm".into(),
|
arch: arch.target_arch(),
|
||||||
options: TargetOptions {
|
options: TargetOptions {
|
||||||
features: "+v7,+vfp4,+neon".into(),
|
features: "+v7,+vfp4,+neon".into(),
|
||||||
max_atomic_width: Some(64),
|
max_atomic_width: Some(64),
|
||||||
..opts("ios", Arch::Armv7s)
|
..opts("ios", arch)
|
||||||
},
|
},
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,22 +1,23 @@
|
||||||
use super::apple_base::{opts, Arch};
|
use super::apple_base::{ios_sim_llvm_target, opts, Arch};
|
||||||
use crate::spec::{StackProbeType, Target, TargetOptions};
|
use crate::spec::{StackProbeType, Target, TargetOptions};
|
||||||
|
|
||||||
pub fn target() -> Target {
|
pub fn target() -> Target {
|
||||||
let arch = Arch::I386;
|
let arch = Arch::I386;
|
||||||
let base = opts("ios", arch);
|
|
||||||
let llvm_target = super::apple_base::ios_sim_llvm_target(arch);
|
|
||||||
|
|
||||||
Target {
|
Target {
|
||||||
llvm_target: llvm_target.into(),
|
// Clang automatically chooses a more specific target based on
|
||||||
|
// IPHONEOS_DEPLOYMENT_TARGET.
|
||||||
|
// This is required for the target to pick the right
|
||||||
|
// MACH-O commands, so we do too.
|
||||||
|
llvm_target: ios_sim_llvm_target(arch).into(),
|
||||||
pointer_width: 32,
|
pointer_width: 32,
|
||||||
data_layout: "e-m:o-p:32:32-p270:32:32-p271:32:32-p272:64:64-\
|
data_layout: "e-m:o-p:32:32-p270:32:32-p271:32:32-p272:64:64-\
|
||||||
f64:32:64-f80:128-n8:16:32-S128"
|
f64:32:64-f80:128-n8:16:32-S128"
|
||||||
.into(),
|
.into(),
|
||||||
arch: "x86".into(),
|
arch: arch.target_arch(),
|
||||||
options: TargetOptions {
|
options: TargetOptions {
|
||||||
max_atomic_width: Some(64),
|
max_atomic_width: Some(64),
|
||||||
stack_probes: StackProbeType::X86,
|
stack_probes: StackProbeType::X86,
|
||||||
..base
|
..opts("ios", arch)
|
||||||
},
|
},
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -2,28 +2,27 @@ use super::apple_base::{macos_link_env_remove, macos_llvm_target, opts, Arch};
|
||||||
use crate::spec::{Cc, FramePointer, LinkerFlavor, Lld, StackProbeType, Target, TargetOptions};
|
use crate::spec::{Cc, FramePointer, LinkerFlavor, Lld, StackProbeType, Target, TargetOptions};
|
||||||
|
|
||||||
pub fn target() -> Target {
|
pub fn target() -> Target {
|
||||||
// ld64 only understand i386 and not i686
|
// ld64 only understands i386 and not i686
|
||||||
let mut base = opts("macos", Arch::I386);
|
let arch = Arch::I386;
|
||||||
base.cpu = "yonah".into();
|
let mut base = opts("macos", arch);
|
||||||
base.max_atomic_width = Some(64);
|
base.max_atomic_width = Some(64);
|
||||||
base.add_pre_link_args(LinkerFlavor::Darwin(Cc::Yes, Lld::No), &["-m32"]);
|
base.add_pre_link_args(LinkerFlavor::Darwin(Cc::Yes, Lld::No), &["-m32"]);
|
||||||
base.link_env_remove.to_mut().extend(macos_link_env_remove());
|
base.link_env_remove.to_mut().extend(macos_link_env_remove());
|
||||||
base.stack_probes = StackProbeType::X86;
|
base.stack_probes = StackProbeType::X86;
|
||||||
base.frame_pointer = FramePointer::Always;
|
base.frame_pointer = FramePointer::Always;
|
||||||
|
|
||||||
|
Target {
|
||||||
// Clang automatically chooses a more specific target based on
|
// Clang automatically chooses a more specific target based on
|
||||||
// MACOSX_DEPLOYMENT_TARGET. To enable cross-language LTO to work
|
// MACOSX_DEPLOYMENT_TARGET. To enable cross-language LTO to work
|
||||||
// correctly, we do too.
|
// correctly, we do too.
|
||||||
let arch = "i686";
|
//
|
||||||
let llvm_target = macos_llvm_target(arch);
|
// While ld64 doesn't understand i686, LLVM does.
|
||||||
|
llvm_target: macos_llvm_target(Arch::I686).into(),
|
||||||
Target {
|
|
||||||
llvm_target: llvm_target.into(),
|
|
||||||
pointer_width: 32,
|
pointer_width: 32,
|
||||||
data_layout: "e-m:o-p:32:32-p270:32:32-p271:32:32-p272:64:64-\
|
data_layout: "e-m:o-p:32:32-p270:32:32-p271:32:32-p272:64:64-\
|
||||||
f64:32:64-f80:128-n8:16:32-S128"
|
f64:32:64-f80:128-n8:16:32-S128"
|
||||||
.into(),
|
.into(),
|
||||||
arch: "x86".into(),
|
arch: arch.target_arch(),
|
||||||
options: TargetOptions { mcount: "\u{1}mcount".into(), ..base },
|
options: TargetOptions { mcount: "\u{1}mcount".into(), ..base },
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -5,8 +5,7 @@ use crate::spec::{StackProbeType, Target, TargetOptions};
|
||||||
pub fn target() -> Target {
|
pub fn target() -> Target {
|
||||||
let arch = Arch::X86_64;
|
let arch = Arch::X86_64;
|
||||||
let mut base = opts("macos", arch);
|
let mut base = opts("macos", arch);
|
||||||
base.cpu = "core2".into();
|
base.max_atomic_width = Some(128); // core2 supports cmpxchg16b
|
||||||
base.max_atomic_width = Some(128); // core2 support cmpxchg16b
|
|
||||||
base.frame_pointer = FramePointer::Always;
|
base.frame_pointer = FramePointer::Always;
|
||||||
base.add_pre_link_args(LinkerFlavor::Darwin(Cc::Yes, Lld::No), &["-m64"]);
|
base.add_pre_link_args(LinkerFlavor::Darwin(Cc::Yes, Lld::No), &["-m64"]);
|
||||||
base.link_env_remove.to_mut().extend(macos_link_env_remove());
|
base.link_env_remove.to_mut().extend(macos_link_env_remove());
|
||||||
|
@ -14,17 +13,15 @@ pub fn target() -> Target {
|
||||||
base.supported_sanitizers =
|
base.supported_sanitizers =
|
||||||
SanitizerSet::ADDRESS | SanitizerSet::CFI | SanitizerSet::LEAK | SanitizerSet::THREAD;
|
SanitizerSet::ADDRESS | SanitizerSet::CFI | SanitizerSet::LEAK | SanitizerSet::THREAD;
|
||||||
|
|
||||||
|
Target {
|
||||||
// Clang automatically chooses a more specific target based on
|
// Clang automatically chooses a more specific target based on
|
||||||
// MACOSX_DEPLOYMENT_TARGET. To enable cross-language LTO to work
|
// MACOSX_DEPLOYMENT_TARGET. To enable cross-language LTO to work
|
||||||
// correctly, we do too.
|
// correctly, we do too.
|
||||||
let llvm_target = macos_llvm_target(arch.target_name());
|
llvm_target: macos_llvm_target(arch).into(),
|
||||||
|
|
||||||
Target {
|
|
||||||
llvm_target: llvm_target.into(),
|
|
||||||
pointer_width: 64,
|
pointer_width: 64,
|
||||||
data_layout: "e-m:o-p270:32:32-p271:32:32-p272:64:64-i64:64-f80:128-n8:16:32:64-S128"
|
data_layout: "e-m:o-p270:32:32-p271:32:32-p272:64:64-i64:64-f80:128-n8:16:32:64-S128"
|
||||||
.into(),
|
.into(),
|
||||||
arch: "x86_84".into(),
|
arch: arch.target_arch(),
|
||||||
options: TargetOptions { mcount: "\u{1}mcount".into(), ..base },
|
options: TargetOptions { mcount: "\u{1}mcount".into(), ..base },
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -3,19 +3,16 @@ use crate::spec::{StackProbeType, Target, TargetOptions};
|
||||||
|
|
||||||
pub fn target() -> Target {
|
pub fn target() -> Target {
|
||||||
let arch = Arch::X86_64_sim;
|
let arch = Arch::X86_64_sim;
|
||||||
let base = opts("ios", arch);
|
|
||||||
let llvm_target = ios_sim_llvm_target(arch);
|
|
||||||
|
|
||||||
Target {
|
Target {
|
||||||
llvm_target: llvm_target.into(),
|
llvm_target: ios_sim_llvm_target(arch).into(),
|
||||||
pointer_width: 64,
|
pointer_width: 64,
|
||||||
data_layout: "e-m:o-p270:32:32-p271:32:32-p272:64:64-i64:64-f80:128-n8:16:32:64-S128"
|
data_layout: "e-m:o-p270:32:32-p271:32:32-p272:64:64-i64:64-f80:128-n8:16:32:64-S128"
|
||||||
.into(),
|
.into(),
|
||||||
arch: "x86_64".into(),
|
arch: arch.target_arch(),
|
||||||
options: TargetOptions {
|
options: TargetOptions {
|
||||||
max_atomic_width: Some(64),
|
max_atomic_width: Some(64),
|
||||||
stack_probes: StackProbeType::X86,
|
stack_probes: StackProbeType::X86,
|
||||||
..base
|
..opts("ios", arch)
|
||||||
},
|
},
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -4,7 +4,8 @@ use crate::spec::{Cc, LinkerFlavor, Lld, StackProbeType, Target, TargetOptions};
|
||||||
pub fn target() -> Target {
|
pub fn target() -> Target {
|
||||||
let llvm_target = "x86_64-apple-ios13.0-macabi";
|
let llvm_target = "x86_64-apple-ios13.0-macabi";
|
||||||
|
|
||||||
let mut base = opts("ios", Arch::X86_64_macabi);
|
let arch = Arch::X86_64_macabi;
|
||||||
|
let mut base = opts("ios", arch);
|
||||||
base.add_pre_link_args(LinkerFlavor::Darwin(Cc::Yes, Lld::No), &["-target", llvm_target]);
|
base.add_pre_link_args(LinkerFlavor::Darwin(Cc::Yes, Lld::No), &["-target", llvm_target]);
|
||||||
|
|
||||||
Target {
|
Target {
|
||||||
|
@ -12,7 +13,7 @@ pub fn target() -> Target {
|
||||||
pointer_width: 64,
|
pointer_width: 64,
|
||||||
data_layout: "e-m:o-p270:32:32-p271:32:32-p272:64:64-i64:64-f80:128-n8:16:32:64-S128"
|
data_layout: "e-m:o-p270:32:32-p271:32:32-p272:64:64-i64:64-f80:128-n8:16:32:64-S128"
|
||||||
.into(),
|
.into(),
|
||||||
arch: "x86_64".into(),
|
arch: arch.target_arch(),
|
||||||
options: TargetOptions {
|
options: TargetOptions {
|
||||||
max_atomic_width: Some(64),
|
max_atomic_width: Some(64),
|
||||||
stack_probes: StackProbeType::X86,
|
stack_probes: StackProbeType::X86,
|
||||||
|
|
|
@ -2,16 +2,16 @@ use super::apple_base::{opts, Arch};
|
||||||
use crate::spec::{StackProbeType, Target, TargetOptions};
|
use crate::spec::{StackProbeType, Target, TargetOptions};
|
||||||
|
|
||||||
pub fn target() -> Target {
|
pub fn target() -> Target {
|
||||||
let base = opts("tvos", Arch::X86_64_sim);
|
let arch = Arch::X86_64_sim;
|
||||||
Target {
|
Target {
|
||||||
llvm_target: "x86_64-apple-tvos".into(),
|
llvm_target: "x86_64-apple-tvos".into(),
|
||||||
pointer_width: 64,
|
pointer_width: 64,
|
||||||
data_layout: "e-m:o-i64:64-f80:128-n8:16:32:64-S128".into(),
|
data_layout: "e-m:o-i64:64-f80:128-n8:16:32:64-S128".into(),
|
||||||
arch: "x86_64".into(),
|
arch: arch.target_arch(),
|
||||||
options: TargetOptions {
|
options: TargetOptions {
|
||||||
max_atomic_width: Some(64),
|
max_atomic_width: Some(64),
|
||||||
stack_probes: StackProbeType::X86,
|
stack_probes: StackProbeType::X86,
|
||||||
..base
|
..opts("tvos", arch)
|
||||||
},
|
},
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,18 +1,14 @@
|
||||||
use super::apple_base::{opts, Arch};
|
use super::apple_base::{opts, watchos_sim_llvm_target, Arch};
|
||||||
use crate::spec::{StackProbeType, Target, TargetOptions};
|
use crate::spec::{StackProbeType, Target, TargetOptions};
|
||||||
|
|
||||||
pub fn target() -> Target {
|
pub fn target() -> Target {
|
||||||
let arch = Arch::X86_64_sim;
|
let arch = Arch::X86_64_sim;
|
||||||
let base = opts("watchos", Arch::X86_64_sim);
|
|
||||||
|
|
||||||
let llvm_target = super::apple_base::watchos_sim_llvm_target(arch);
|
|
||||||
|
|
||||||
Target {
|
Target {
|
||||||
llvm_target: llvm_target.into(),
|
llvm_target: watchos_sim_llvm_target(arch).into(),
|
||||||
pointer_width: 64,
|
pointer_width: 64,
|
||||||
data_layout: "e-m:o-p270:32:32-p271:32:32-p272:64:64-i64:64-f80:128-n8:16:32:64-S128"
|
data_layout: "e-m:o-p270:32:32-p271:32:32-p272:64:64-i64:64-f80:128-n8:16:32:64-S128"
|
||||||
.into(),
|
.into(),
|
||||||
arch: "x86_64".into(),
|
arch: arch.target_arch(),
|
||||||
options: TargetOptions {
|
options: TargetOptions {
|
||||||
max_atomic_width: Some(64),
|
max_atomic_width: Some(64),
|
||||||
stack_probes: StackProbeType::X86,
|
stack_probes: StackProbeType::X86,
|
||||||
|
@ -28,7 +24,7 @@ pub fn target() -> Target {
|
||||||
darwinpcs\0\
|
darwinpcs\0\
|
||||||
-Os\0"
|
-Os\0"
|
||||||
.into(),
|
.into(),
|
||||||
..base
|
..opts("watchos", arch)
|
||||||
},
|
},
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue