Ignore linker env vars set for macOS on iOS targets

This commit is contained in:
Aleksi Juvani 2019-09-12 15:23:59 +03:00
parent e715d03275
commit fe6d626abc

View file

@ -38,9 +38,18 @@ pub fn get_sdk_root(sdk_name: &str) -> Result<String, String> {
// 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<String> {
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<TargetOptions, String> {
let pre_link_args = build_pre_link_args(arch)?;
Ok(TargetOptions {
@ -107,6 +123,7 @@ pub fn opts(arch: Arch) -> Result<TargetOptions, String> {
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()