Skip to content

Commit f4b5954

Browse files
committedAug 27, 2022
rustc_target: Use Cow and link args helpers in apple_base
1 parent f0d0573 commit f4b5954

File tree

2 files changed

+20
-23
lines changed

2 files changed

+20
-23
lines changed
 

‎compiler/rustc_target/src/spec/apple_base.rs

+19-22
Original file line numberDiff line numberDiff line change
@@ -1,40 +1,37 @@
11
use std::{borrow::Cow, env};
22

3-
use crate::spec::{cvs, DebuginfoKind, FramePointer, SplitDebuginfo, TargetOptions};
3+
use crate::spec::{cvs, DebuginfoKind, FramePointer, SplitDebuginfo, StaticCow, TargetOptions};
44
use crate::spec::{LinkArgs, LinkerFlavor, LldFlavor};
55

66
fn pre_link_args(os: &'static str, arch: &'static str, abi: &'static str) -> LinkArgs {
7-
let mut args = LinkArgs::new();
8-
9-
let platform_name = match abi {
10-
"sim" => format!("{}-simulator", os),
11-
"macabi" => "mac-catalyst".to_string(),
12-
_ => os.to_string(),
7+
let platform_name: StaticCow<str> = match abi {
8+
"sim" => format!("{}-simulator", os).into(),
9+
"macabi" => "mac-catalyst".into(),
10+
_ => os.into(),
1311
};
1412

15-
let platform_version = match os.as_ref() {
13+
let platform_version: StaticCow<str> = match os.as_ref() {
1614
"ios" => ios_lld_platform_version(),
1715
"tvos" => tvos_lld_platform_version(),
1816
"watchos" => watchos_lld_platform_version(),
1917
"macos" => macos_lld_platform_version(arch),
2018
_ => unreachable!(),
21-
};
22-
23-
if abi != "macabi" {
24-
args.insert(LinkerFlavor::Gcc, vec!["-arch".into(), arch.into()]);
2519
}
20+
.into();
2621

27-
args.insert(
22+
let mut args = TargetOptions::link_args(
2823
LinkerFlavor::Lld(LldFlavor::Ld64),
29-
vec![
30-
"-arch".into(),
31-
arch.into(),
32-
"-platform_version".into(),
33-
platform_name.into(),
34-
platform_version.clone().into(),
35-
platform_version.into(),
36-
],
24+
&["-arch", arch, "-platform_version"],
3725
);
26+
// Manually add owned args unsupported by link arg building helpers.
27+
args.entry(LinkerFlavor::Lld(LldFlavor::Ld64)).or_default().extend([
28+
platform_name,
29+
platform_version.clone(),
30+
platform_version,
31+
]);
32+
if abi != "macabi" {
33+
super::add_link_args(&mut args, LinkerFlavor::Gcc, &["-arch", arch]);
34+
}
3835

3936
args
4037
}
@@ -127,7 +124,7 @@ pub fn macos_llvm_target(arch: &str) -> String {
127124
format!("{}-apple-macosx{}.{}.0", arch, major, minor)
128125
}
129126

130-
pub fn macos_link_env_remove() -> Vec<Cow<'static, str>> {
127+
pub fn macos_link_env_remove() -> Vec<StaticCow<str>> {
131128
let mut env_remove = Vec::with_capacity(2);
132129
// Remove the `SDKROOT` environment variable if it's clearly set for the wrong platform, which
133130
// may occur when we're linking a custom build script while targeting iOS for example.

‎compiler/rustc_target/src/spec/mod.rs

+1-1
Original file line numberDiff line numberDiff line change
@@ -1526,7 +1526,7 @@ fn add_link_args(link_args: &mut LinkArgs, flavor: LinkerFlavor, args: &[&'stati
15261526
match flavor {
15271527
LinkerFlavor::Ld => insert(LinkerFlavor::Lld(LldFlavor::Ld)),
15281528
LinkerFlavor::Msvc => insert(LinkerFlavor::Lld(LldFlavor::Link)),
1529-
LinkerFlavor::Lld(LldFlavor::Wasm) => {}
1529+
LinkerFlavor::Lld(LldFlavor::Ld64) | LinkerFlavor::Lld(LldFlavor::Wasm) => {}
15301530
LinkerFlavor::Lld(lld_flavor) => {
15311531
panic!("add_link_args: use non-LLD flavor for {:?}", lld_flavor)
15321532
}

0 commit comments

Comments
 (0)
Please sign in to comment.