From fe6d626abcc6ca994f0554bb78858ccd2b33dcfd Mon Sep 17 00:00:00 2001 From: Aleksi Juvani Date: Thu, 12 Sep 2019 15:23:59 +0300 Subject: [PATCH] Ignore linker env vars set for macOS on iOS targets --- src/librustc_target/spec/apple_ios_base.rs | 23 +++++++++++++++++++--- 1 file changed, 20 insertions(+), 3 deletions(-) diff --git a/src/librustc_target/spec/apple_ios_base.rs b/src/librustc_target/spec/apple_ios_base.rs index 6d3900c0b20..fdbb1bd5db3 100644 --- a/src/librustc_target/spec/apple_ios_base.rs +++ b/src/librustc_target/spec/apple_ios_base.rs @@ -38,9 +38,18 @@ pub fn get_sdk_root(sdk_name: &str) -> Result { // SDKROOT; for rustc, the user or build system can set it, or we // can fall back to checking for xcrun on PATH.) if let Some(sdkroot) = env::var("SDKROOT").ok() { - let sdkroot_path = Path::new(&sdkroot); - if sdkroot_path.is_absolute() && sdkroot_path != Path::new("/") && sdkroot_path.exists() { - return Ok(sdkroot); + let p = Path::new(&sdkroot); + match sdk_name { + // Ignore `SDKROOT` if it's clearly set for the wrong platform. + "iphoneos" if sdkroot.contains("iPhoneSimulator.platform") + || sdkroot.contains("MacOSX.platform") => (), + "iphonesimulator" if sdkroot.contains("iPhoneOS.platform") + || sdkroot.contains("MacOSX.platform") => (), + "macosx10.15" if sdkroot.contains("iPhoneOS.platform") + || sdkroot.contains("iPhoneSimulator.platform") => (), + // Ignore `SDKROOT` if it's not a valid path. + _ if !p.is_absolute() || p == Path::new("/") || !p.exists() => (), + _ => return Ok(sdkroot), } } let res = Command::new("xcrun") @@ -100,6 +109,13 @@ fn target_cpu(arch: Arch) -> String { }.to_string() } +fn link_env_remove(arch: Arch) -> Vec { + match arch { + Armv7 | Armv7s | Arm64 | I386 | X86_64 => vec!["MACOSX_DEPLOYMENT_TARGET".to_string()], + X86_64_macabi => vec!["IPHONEOS_DEPLOYMENT_TARGET".to_string()], + } +} + pub fn opts(arch: Arch) -> Result { let pre_link_args = build_pre_link_args(arch)?; Ok(TargetOptions { @@ -107,6 +123,7 @@ pub fn opts(arch: Arch) -> Result { dynamic_linking: false, executables: true, pre_link_args, + link_env_remove: link_env_remove(arch), has_elf_tls: false, eliminate_frame_pointer: false, .. super::apple_base::opts()