Skip to content

Commit b376f56

Browse files
committed
Set MACOSX_DEPLOYMENT_TARGET env var to default for linking if not set.
1 parent 8f4d88c commit b376f56

File tree

4 files changed

+15
-0
lines changed

4 files changed

+15
-0
lines changed

compiler/rustc_target/src/spec/aarch64_apple_darwin.rs

+1
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@ pub fn target() -> Target {
99
base.supported_sanitizers = SanitizerSet::ADDRESS | SanitizerSet::CFI | SanitizerSet::THREAD;
1010

1111
base.pre_link_args.insert(LinkerFlavor::Gcc, vec!["-arch".to_string(), "arm64".to_string()]);
12+
base.link_env.extend(super::apple_base::macos_link_env("arm64"));
1213
base.link_env_remove.extend(super::apple_base::macos_link_env_remove());
1314

1415
// Clang automatically chooses a more specific target based on

compiler/rustc_target/src/spec/apple_base.rs

+12
Original file line numberDiff line numberDiff line change
@@ -79,6 +79,18 @@ pub fn macos_llvm_target(arch: &str) -> String {
7979
format!("{}-apple-macosx{}.{}.0", arch, major, minor)
8080
}
8181

82+
pub fn macos_link_env(arch: &str) -> Vec<(String, String)> {
83+
// Use the default deployment target for linking just as with the LLVM target if not
84+
// specified via MACOSX_DEPLOYMENT_TARGET, otherwise the system linker would use its
85+
// default which varies with Xcode version.
86+
if env::var("MACOSX_DEPLOYMENT_TARGET").is_err() {
87+
let default = macos_default_deployment_target(arch);
88+
vec![("MACOSX_DEPLOYMENT_TARGET".to_string(), format!("{}.{}", default.0, default.1))]
89+
} else {
90+
vec![]
91+
}
92+
}
93+
8294
pub fn macos_link_env_remove() -> Vec<String> {
8395
let mut env_remove = Vec::with_capacity(2);
8496
// Remove the `SDKROOT` environment variable if it's clearly set for the wrong platform, which

compiler/rustc_target/src/spec/i686_apple_darwin.rs

+1
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@ pub fn target() -> Target {
55
base.cpu = "yonah".to_string();
66
base.max_atomic_width = Some(64);
77
base.pre_link_args.insert(LinkerFlavor::Gcc, vec!["-m32".to_string()]);
8+
base.link_env.extend(super::apple_base::macos_link_env("i686"));
89
base.link_env_remove.extend(super::apple_base::macos_link_env_remove());
910
// don't use probe-stack=inline-asm until rust#83139 and rust#84667 are resolved
1011
base.stack_probes = StackProbeType::Call;

compiler/rustc_target/src/spec/x86_64_apple_darwin.rs

+1
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@ pub fn target() -> Target {
1010
LinkerFlavor::Gcc,
1111
vec!["-m64".to_string(), "-arch".to_string(), "x86_64".to_string()],
1212
);
13+
base.link_env.extend(super::apple_base::macos_link_env("x86_64"));
1314
base.link_env_remove.extend(super::apple_base::macos_link_env_remove());
1415
// don't use probe-stack=inline-asm until rust#83139 and rust#84667 are resolved
1516
base.stack_probes = StackProbeType::Call;

0 commit comments

Comments
 (0)