diff options
| author | Jan-Erik Rediger <janerik@fnordig.de> | 2021-02-14 16:33:03 +0100 |
|---|---|---|
| committer | Ricky (deg4uss3r) <ricky@hosfelt.io> | 2021-02-20 16:45:00 -0500 |
| commit | 8d6ad11ab2490e95e6cf6daa18c2684e7382bb22 (patch) | |
| tree | 86236b5eb45504eabf771577d6c5602528a13ba8 | |
| parent | f10fbbbd534e459f98a3337d1f0bf2b23d607906 (diff) | |
| download | rust-8d6ad11ab2490e95e6cf6daa18c2684e7382bb22.tar.gz rust-8d6ad11ab2490e95e6cf6daa18c2684e7382bb22.zip | |
iOS simulator: pick the target based on the environment variable
LLVM picks the right things to put into the compiled object file based on the target deployment version. We need to communicate it through the target triple. Only with that LLVM will use the right commands in the file to make it look and behave like code compiled for the arm64 iOS simulator target.
| -rw-r--r-- | compiler/rustc_target/src/spec/aarch64_apple_ios_sim.rs | 10 | ||||
| -rw-r--r-- | compiler/rustc_target/src/spec/apple_base.rs | 21 | ||||
| -rw-r--r-- | src/doc/rustc/src/platform-support.md | 2 |
3 files changed, 26 insertions, 7 deletions
diff --git a/compiler/rustc_target/src/spec/aarch64_apple_ios_sim.rs b/compiler/rustc_target/src/spec/aarch64_apple_ios_sim.rs index de4c6b44368..e594ceec1b7 100644 --- a/compiler/rustc_target/src/spec/aarch64_apple_ios_sim.rs +++ b/compiler/rustc_target/src/spec/aarch64_apple_ios_sim.rs @@ -3,8 +3,16 @@ use crate::spec::{Target, TargetOptions}; pub fn target() -> Target { let base = opts("ios", Arch::Arm64_sim); + + // Clang automatically chooses a more specific target based on + // IPHONEOS_DEPLOYMENT_TARGET. + // This is required for the simulator target to pick the right + // MACH-O commands, so we do too. + let arch = "arm64"; + let llvm_target = super::apple_base::ios_sim_llvm_target(arch); + Target { - llvm_target: "arm64-apple-ios-simulator".to_string(), + llvm_target: llvm_target, pointer_width: 64, data_layout: "e-m:o-i64:64-i128:128-n32:64-S128".to_string(), arch: "aarch64".to_string(), diff --git a/compiler/rustc_target/src/spec/apple_base.rs b/compiler/rustc_target/src/spec/apple_base.rs index 3b458962b3d..23f1357af16 100644 --- a/compiler/rustc_target/src/spec/apple_base.rs +++ b/compiler/rustc_target/src/spec/apple_base.rs @@ -54,14 +54,16 @@ pub fn opts(os: &str) -> TargetOptions { } } -fn macos_deployment_target() -> (u32, u32) { - let deployment_target = env::var("MACOSX_DEPLOYMENT_TARGET").ok(); - let version = deployment_target +fn deployment_target(var_name: &str) -> Option<(u32, u32)> { + let deployment_target = env::var(var_name).ok(); + deployment_target .as_ref() .and_then(|s| s.split_once('.')) - .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()) +} - version.unwrap_or((10, 7)) +fn macos_deployment_target() -> (u32, u32) { + deployment_target("MACOSX_DEPLOYMENT_TARGET").unwrap_or((10, 7)) } pub fn macos_llvm_target(arch: &str) -> String { @@ -84,3 +86,12 @@ pub fn macos_link_env_remove() -> Vec<String> { env_remove.push("IPHONEOS_DEPLOYMENT_TARGET".to_string()); env_remove } + +fn ios_deployment_target() -> (u32, u32) { + deployment_target("IPHONEOS_DEPLOYMENT_TARGET").unwrap_or((7, 0)) +} + +pub fn ios_sim_llvm_target(arch: &str) -> String { + let (major, minor) = ios_deployment_target(); + format!("{}-apple-ios{}.{}.0-simulator", arch, major, minor) +} diff --git a/src/doc/rustc/src/platform-support.md b/src/doc/rustc/src/platform-support.md index 641650b5b09..ef8fe480fc4 100644 --- a/src/doc/rustc/src/platform-support.md +++ b/src/doc/rustc/src/platform-support.md @@ -153,7 +153,7 @@ not available. target | std | host | notes -------|-----|------|------- `aarch64-apple-ios-macabi` | ? | | Apple Catalyst on ARM64 -`aarch64-apple-ios-sim` | ? | | Apple iOS Simulator on ARM64 +`aarch64-apple-ios-sim` | ? | | Apple iOS Simulator on ARM64 `aarch64-apple-tvos` | * | | ARM64 tvOS `aarch64-unknown-freebsd` | ✓ | ✓ | ARM64 FreeBSD `aarch64-unknown-hermit` | ? | | |
