Skip to content

Commit 46aba88

Browse files
committed
rustc_target: Add convenience functions for adding linker arguments
They ensure that lld and non-lld linker flavors get the same set of arguments
1 parent 8aab472 commit 46aba88

File tree

74 files changed

+348
-420
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

74 files changed

+348
-420
lines changed

compiler/rustc_target/src/spec/aarch64_apple_darwin.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@ pub fn target() -> Target {
88
// FIXME: The leak sanitizer currently fails the tests, see #88132.
99
base.supported_sanitizers = SanitizerSet::ADDRESS | SanitizerSet::CFI | SanitizerSet::THREAD;
1010

11-
base.pre_link_args.insert(LinkerFlavor::Gcc, vec!["-arch".into(), "arm64".into()]);
11+
base.add_pre_link_args(LinkerFlavor::Gcc, &["-arch", "arm64"]);
1212
base.link_env_remove.to_mut().extend(super::apple_base::macos_link_env_remove());
1313

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

compiler/rustc_target/src/spec/aarch64_unknown_uefi.rs

Lines changed: 2 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -2,20 +2,13 @@
22
// uefi-base module for generic UEFI options.
33

44
use super::uefi_msvc_base;
5-
use crate::spec::{LinkerFlavor, LldFlavor, Target};
5+
use crate::spec::{LinkerFlavor, Target};
66

77
pub fn target() -> Target {
88
let mut base = uefi_msvc_base::opts();
99

1010
base.max_atomic_width = Some(64);
11-
12-
let pre_link_args_msvc = vec!["/machine:arm64".into()];
13-
14-
base.pre_link_args.get_mut(&LinkerFlavor::Msvc).unwrap().extend(pre_link_args_msvc.clone());
15-
base.pre_link_args
16-
.get_mut(&LinkerFlavor::Lld(LldFlavor::Link))
17-
.unwrap()
18-
.extend(pre_link_args_msvc);
11+
base.add_pre_link_args(LinkerFlavor::Msvc, &["/machine:arm64"]);
1912

2013
Target {
2114
llvm_target: "aarch64-unknown-windows".into(),

compiler/rustc_target/src/spec/armv6k_nintendo_3ds.rs

Lines changed: 3 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1,19 +1,13 @@
1-
use crate::spec::{cvs, LinkArgs, LinkerFlavor, RelocModel, Target, TargetOptions};
1+
use crate::spec::{cvs, LinkerFlavor, RelocModel, Target, TargetOptions};
22

33
/// A base target for Nintendo 3DS devices using the devkitARM toolchain.
44
///
55
/// Requires the devkitARM toolchain for 3DS targets on the host system.
66
77
pub fn target() -> Target {
8-
let mut pre_link_args = LinkArgs::new();
9-
pre_link_args.insert(
8+
let pre_link_args = TargetOptions::link_args(
109
LinkerFlavor::Gcc,
11-
vec![
12-
"-specs=3dsx.specs".into(),
13-
"-mtune=mpcore".into(),
14-
"-mfloat-abi=hard".into(),
15-
"-mtp=soft".into(),
16-
],
10+
&["-specs=3dsx.specs", "-mtune=mpcore", "-mfloat-abi=hard", "-mtp=soft"],
1711
);
1812

1913
Target {

compiler/rustc_target/src/spec/armv7_linux_androideabi.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@ use crate::spec::{LinkerFlavor, SanitizerSet, Target, TargetOptions};
1010

1111
pub fn target() -> Target {
1212
let mut base = super::android_base::opts();
13-
base.pre_link_args.entry(LinkerFlavor::Gcc).or_default().push("-march=armv7-a".into());
13+
base.add_pre_link_args(LinkerFlavor::Gcc, &["-march=armv7-a"]);
1414
Target {
1515
llvm_target: "armv7-none-linux-android".into(),
1616
pointer_width: 32,

compiler/rustc_target/src/spec/asmjs_unknown_emscripten.rs

Lines changed: 1 addition & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -2,10 +2,6 @@ use super::{wasm32_unknown_emscripten, LinkerFlavor, Target};
22

33
pub fn target() -> Target {
44
let mut target = wasm32_unknown_emscripten::target();
5-
target.post_link_args.entry(LinkerFlavor::Em).or_default().extend(vec![
6-
"-sWASM=0".into(),
7-
"--memory-init-file".into(),
8-
"0".into(),
9-
]);
5+
target.add_post_link_args(LinkerFlavor::Em, &["-sWASM=0", "--memory-init-file", "0"]);
106
target
117
}

compiler/rustc_target/src/spec/avr_gnu_base.rs

Lines changed: 4 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,8 @@ use crate::spec::{LinkerFlavor, Target, TargetOptions};
33
/// A base target for AVR devices using the GNU toolchain.
44
///
55
/// Requires GNU avr-gcc and avr-binutils on the host system.
6-
pub fn target(target_cpu: &'static str) -> Target {
6+
/// FIXME: Remove the second parameter when const string concatenation is possible.
7+
pub fn target(target_cpu: &'static str, mmcu: &'static str) -> Target {
78
Target {
89
arch: "avr".into(),
910
data_layout: "e-P1-p:16:8-i8:8-i16:8-i32:8-i64:8-f32:8-f64:8-n8-a:8".into(),
@@ -17,10 +18,8 @@ pub fn target(target_cpu: &'static str) -> Target {
1718
linker: Some("avr-gcc".into()),
1819
executables: true,
1920
eh_frame_header: false,
20-
pre_link_args: [(LinkerFlavor::Gcc, vec![format!("-mmcu={}", target_cpu).into()])]
21-
.into_iter()
22-
.collect(),
23-
late_link_args: [(LinkerFlavor::Gcc, vec!["-lgcc".into()])].into_iter().collect(),
21+
pre_link_args: TargetOptions::link_args(LinkerFlavor::Gcc, &[mmcu]),
22+
late_link_args: TargetOptions::link_args(LinkerFlavor::Gcc, &["-lgcc"]),
2423
max_atomic_width: Some(0),
2524
atomic_cas: false,
2625
..TargetOptions::default()
Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
use crate::spec::Target;
22

33
pub fn target() -> Target {
4-
super::avr_gnu_base::target("atmega328")
4+
super::avr_gnu_base::target("atmega328", "-mmcu=atmega328")
55
}

compiler/rustc_target/src/spec/fuchsia_base.rs

Lines changed: 15 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -1,23 +1,20 @@
1-
use crate::spec::{
2-
crt_objects, cvs, LinkArgs, LinkOutputKind, LinkerFlavor, LldFlavor, TargetOptions,
3-
};
1+
use crate::spec::{crt_objects, cvs, LinkOutputKind, LinkerFlavor, LldFlavor, TargetOptions};
42

53
pub fn opts() -> TargetOptions {
6-
let mut pre_link_args = LinkArgs::new();
7-
pre_link_args.insert(
8-
LinkerFlavor::Lld(LldFlavor::Ld),
9-
vec![
10-
"--build-id".into(),
11-
"--hash-style=gnu".into(),
12-
"-z".into(),
13-
"max-page-size=4096".into(),
14-
"-z".into(),
15-
"now".into(),
16-
"-z".into(),
17-
"rodynamic".into(),
18-
"-z".into(),
19-
"separate-loadable-segments".into(),
20-
"--pack-dyn-relocs=relr".into(),
4+
let pre_link_args = TargetOptions::link_args(
5+
LinkerFlavor::Ld,
6+
&[
7+
"--build-id",
8+
"--hash-style=gnu",
9+
"-z",
10+
"max-page-size=4096",
11+
"-z",
12+
"now",
13+
"-z",
14+
"rodynamic",
15+
"-z",
16+
"separate-loadable-segments",
17+
"--pack-dyn-relocs=relr",
2118
],
2219
);
2320

compiler/rustc_target/src/spec/hermit_base.rs

Lines changed: 4 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,9 @@
1-
use crate::spec::{LinkArgs, LinkerFlavor, LldFlavor, PanicStrategy, TargetOptions, TlsModel};
1+
use crate::spec::{LinkerFlavor, LldFlavor, PanicStrategy, TargetOptions, TlsModel};
22

33
pub fn opts() -> TargetOptions {
4-
let mut pre_link_args = LinkArgs::new();
5-
pre_link_args.insert(
6-
LinkerFlavor::Lld(LldFlavor::Ld),
7-
vec!["--build-id".into(), "--hash-style=gnu".into(), "--Bstatic".into()],
4+
let pre_link_args = TargetOptions::link_args(
5+
LinkerFlavor::Ld,
6+
&["--build-id", "--hash-style=gnu", "--Bstatic"],
87
);
98

109
TargetOptions {

compiler/rustc_target/src/spec/i686_apple_darwin.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@ pub fn target() -> Target {
44
let mut base = super::apple_base::opts("macos");
55
base.cpu = "yonah".into();
66
base.max_atomic_width = Some(64);
7-
base.pre_link_args.insert(LinkerFlavor::Gcc, vec!["-m32".into()]);
7+
base.add_pre_link_args(LinkerFlavor::Gcc, &["-m32"]);
88
base.link_env_remove.to_mut().extend(super::apple_base::macos_link_env_remove());
99
// don't use probe-stack=inline-asm until rust#83139 and rust#84667 are resolved
1010
base.stack_probes = StackProbeType::Call;

0 commit comments

Comments
 (0)