Skip to content

Commit 667eb18

Browse files
committed
rustc_target: Refactor internal linker flavors slightly
Remove one unstable user-facing linker flavor (l4-bender)
1 parent d8a32dd commit 667eb18

File tree

11 files changed

+93
-121
lines changed

11 files changed

+93
-121
lines changed

compiler/rustc_codegen_ssa/src/back/link.rs

+13-14
Original file line numberDiff line numberDiff line change
@@ -1173,13 +1173,6 @@ pub fn linker_and_flavor(sess: &Session) -> (PathBuf, LinkerFlavor) {
11731173
// only the linker flavor is known; use the default linker for the selected flavor
11741174
(None, Some(flavor)) => Some((
11751175
PathBuf::from(match flavor {
1176-
LinkerFlavor::Em => {
1177-
if cfg!(windows) {
1178-
"emcc.bat"
1179-
} else {
1180-
"emcc"
1181-
}
1182-
}
11831176
LinkerFlavor::Gcc => {
11841177
if cfg!(any(target_os = "solaris", target_os = "illumos")) {
11851178
// On historical Solaris systems, "cc" may have
@@ -1194,11 +1187,17 @@ pub fn linker_and_flavor(sess: &Session) -> (PathBuf, LinkerFlavor) {
11941187
}
11951188
}
11961189
LinkerFlavor::Ld => "ld",
1197-
LinkerFlavor::Msvc => "link.exe",
11981190
LinkerFlavor::Lld(_) => "lld",
1199-
LinkerFlavor::PtxLinker => "rust-ptx-linker",
1200-
LinkerFlavor::BpfLinker => "bpf-linker",
1201-
LinkerFlavor::L4Bender => "l4-bender",
1191+
LinkerFlavor::Msvc => "link.exe",
1192+
LinkerFlavor::EmCc => {
1193+
if cfg!(windows) {
1194+
"emcc.bat"
1195+
} else {
1196+
"emcc"
1197+
}
1198+
}
1199+
LinkerFlavor::Bpf => "bpf-linker",
1200+
LinkerFlavor::Ptx => "rust-ptx-linker",
12021201
}),
12031202
flavor,
12041203
)),
@@ -1208,7 +1207,7 @@ pub fn linker_and_flavor(sess: &Session) -> (PathBuf, LinkerFlavor) {
12081207
});
12091208

12101209
let flavor = if stem == "emcc" {
1211-
LinkerFlavor::Em
1210+
LinkerFlavor::EmCc
12121211
} else if stem == "gcc"
12131212
|| stem.ends_with("-gcc")
12141213
|| stem == "clang"
@@ -2114,11 +2113,11 @@ fn add_order_independent_options(
21142113
});
21152114
}
21162115

2117-
if flavor == LinkerFlavor::PtxLinker {
2116+
if flavor == LinkerFlavor::Ptx {
21182117
// Provide the linker with fallback to internal `target-cpu`.
21192118
cmd.arg("--fallback-arch");
21202119
cmd.arg(&codegen_results.crate_info.target_cpu);
2121-
} else if flavor == LinkerFlavor::BpfLinker {
2120+
} else if flavor == LinkerFlavor::Bpf {
21222121
cmd.arg("--cpu");
21232122
cmd.arg(&codegen_results.crate_info.target_cpu);
21242123
cmd.arg("--cpu-features");

compiler/rustc_codegen_ssa/src/back/linker.rs

+9-12
Original file line numberDiff line numberDiff line change
@@ -126,29 +126,26 @@ pub fn get_linker<'a>(
126126
// to the linker args construction.
127127
assert!(cmd.get_args().is_empty() || sess.target.vendor == "uwp");
128128
match flavor {
129-
LinkerFlavor::Lld(LldFlavor::Link) | LinkerFlavor::Msvc => {
130-
Box::new(MsvcLinker { cmd, sess }) as Box<dyn Linker>
131-
}
132-
LinkerFlavor::Em => Box::new(EmLinker { cmd, sess }) as Box<dyn Linker>,
133129
LinkerFlavor::Gcc => {
134130
Box::new(GccLinker { cmd, sess, target_cpu, hinted_static: false, is_ld: false })
135131
as Box<dyn Linker>
136132
}
137-
133+
LinkerFlavor::Ld if sess.target.os == "l4re" => {
134+
Box::new(L4Bender::new(cmd, sess)) as Box<dyn Linker>
135+
}
138136
LinkerFlavor::Lld(LldFlavor::Ld)
139137
| LinkerFlavor::Lld(LldFlavor::Ld64)
140138
| LinkerFlavor::Ld => {
141139
Box::new(GccLinker { cmd, sess, target_cpu, hinted_static: false, is_ld: true })
142140
as Box<dyn Linker>
143141
}
144-
142+
LinkerFlavor::Lld(LldFlavor::Link) | LinkerFlavor::Msvc => {
143+
Box::new(MsvcLinker { cmd, sess }) as Box<dyn Linker>
144+
}
145145
LinkerFlavor::Lld(LldFlavor::Wasm) => Box::new(WasmLd::new(cmd, sess)) as Box<dyn Linker>,
146-
147-
LinkerFlavor::PtxLinker => Box::new(PtxLinker { cmd, sess }) as Box<dyn Linker>,
148-
149-
LinkerFlavor::BpfLinker => Box::new(BpfLinker { cmd, sess }) as Box<dyn Linker>,
150-
151-
LinkerFlavor::L4Bender => Box::new(L4Bender::new(cmd, sess)) as Box<dyn Linker>,
146+
LinkerFlavor::EmCc => Box::new(EmLinker { cmd, sess }) as Box<dyn Linker>,
147+
LinkerFlavor::Bpf => Box::new(BpfLinker { cmd, sess }) as Box<dyn Linker>,
148+
LinkerFlavor::Ptx => Box::new(PtxLinker { cmd, sess }) as Box<dyn Linker>,
152149
}
153150
}
154151

compiler/rustc_interface/src/tests.rs

+3-5
Original file line numberDiff line numberDiff line change
@@ -21,10 +21,8 @@ use rustc_session::{build_session, getopts, DiagnosticOutput, Session};
2121
use rustc_span::edition::{Edition, DEFAULT_EDITION};
2222
use rustc_span::symbol::sym;
2323
use rustc_span::SourceFileHashAlgorithm;
24-
use rustc_target::spec::{CodeModel, LinkerFlavor, MergeFunctions, PanicStrategy};
25-
use rustc_target::spec::{
26-
RelocModel, RelroLevel, SanitizerSet, SplitDebuginfo, StackProtector, TlsModel,
27-
};
24+
use rustc_target::spec::{CodeModel, LinkerFlavorCli, MergeFunctions, PanicStrategy, RelocModel};
25+
use rustc_target::spec::{RelroLevel, SanitizerSet, SplitDebuginfo, StackProtector, TlsModel};
2826

2927
use std::collections::{BTreeMap, BTreeSet};
3028
use std::iter::FromIterator;
@@ -552,7 +550,7 @@ fn test_codegen_options_tracking_hash() {
552550
untracked!(link_args, vec![String::from("abc"), String::from("def")]);
553551
untracked!(link_self_contained, Some(true));
554552
untracked!(linker, Some(PathBuf::from("linker")));
555-
untracked!(linker_flavor, Some(LinkerFlavor::Gcc));
553+
untracked!(linker_flavor, Some(LinkerFlavorCli::Gcc));
556554
untracked!(no_stack_check, true);
557555
untracked!(remark, Passes::Some(vec![String::from("pass1"), String::from("pass2")]));
558556
untracked!(rpath, true);

compiler/rustc_session/src/config.rs

+2-12
Original file line numberDiff line numberDiff line change
@@ -12,8 +12,8 @@ use rustc_data_structures::fx::{FxHashMap, FxHashSet};
1212

1313
use rustc_data_structures::stable_hasher::ToStableHashKey;
1414
use rustc_target::abi::{Align, TargetDataLayout};
15-
use rustc_target::spec::{LinkerFlavorCli, SplitDebuginfo, Target, TargetTriple, TargetWarnings};
16-
use rustc_target::spec::{PanicStrategy, SanitizerSet, TARGETS};
15+
use rustc_target::spec::{PanicStrategy, SanitizerSet, SplitDebuginfo};
16+
use rustc_target::spec::{Target, TargetTriple, TargetWarnings, TARGETS};
1717

1818
use crate::parse::{CrateCheckConfig, CrateConfig};
1919
use rustc_feature::UnstableFeatures;
@@ -2379,16 +2379,6 @@ pub fn build_session_options(matches: &getopts::Matches) -> Options {
23792379
}
23802380
}
23812381

2382-
if cg.linker_flavor == Some(LinkerFlavorCli::L4Bender)
2383-
&& !nightly_options::is_unstable_enabled(matches)
2384-
{
2385-
early_error(
2386-
error_format,
2387-
"`l4-bender` linker flavor is unstable, `-Z unstable-options` \
2388-
flag must also be passed to explicitly use it",
2389-
);
2390-
}
2391-
23922382
let prints = collect_print_requests(&mut cg, &mut unstable_opts, matches, error_format);
23932383

23942384
let cg = cg;

compiler/rustc_target/src/spec/asmjs_unknown_emscripten.rs

+1-1
Original file line numberDiff line numberDiff line change
@@ -2,6 +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.add_post_link_args(LinkerFlavor::Em, &["-sWASM=0", "--memory-init-file", "0"]);
5+
target.add_post_link_args(LinkerFlavor::EmCc, &["-sWASM=0", "--memory-init-file", "0"]);
66
target
77
}

compiler/rustc_target/src/spec/bpf_base.rs

+1-1
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@ pub fn opts(endian: Endian) -> TargetOptions {
55
TargetOptions {
66
allow_asm: true,
77
endian,
8-
linker_flavor: LinkerFlavor::BpfLinker,
8+
linker_flavor: LinkerFlavor::Bpf,
99
atomic_cas: false,
1010
dynamic_linking: true,
1111
no_builtins: true,

compiler/rustc_target/src/spec/l4re_base.rs

+1-1
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@ pub fn opts() -> TargetOptions {
44
TargetOptions {
55
os: "l4re".into(),
66
env: "uclibc".into(),
7-
linker_flavor: LinkerFlavor::L4Bender,
7+
linker_flavor: LinkerFlavor::Ld,
88
panic_strategy: PanicStrategy::Abort,
99
linker: Some("l4-bender".into()),
1010
linker_is_gnu: false,

0 commit comments

Comments
 (0)