Skip to content

Commit 2ab641d

Browse files
committed
bootstrap: validate rust.codegen-backends & targer.<triple>.codegen-backends
1 parent b03b3a7 commit 2ab641d

File tree

2 files changed

+29
-36
lines changed

2 files changed

+29
-36
lines changed

src/bootstrap/src/core/config/toml/rust.rs

Lines changed: 25 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -393,6 +393,27 @@ pub fn check_incompatible_options_for_ci_rustc(
393393
Ok(())
394394
}
395395

396+
pub(crate) const VALID_CODEGEN_BACKENDS: &[&str] = &["llvm", "cranelift", "gcc"];
397+
398+
pub(crate) fn validate_codegen_backends(backends: Vec<String>, section: &str) -> Vec<String> {
399+
for backend in &backends {
400+
if let Some(stripped) = backend.strip_prefix(CODEGEN_BACKEND_PREFIX) {
401+
panic!(
402+
"Invalid value '{backend}' for '{section}.codegen-backends'. \
403+
Codegen backends are defined without the '{CODEGEN_BACKEND_PREFIX}' prefix. \
404+
Please, use '{stripped}' instead."
405+
)
406+
}
407+
if !VALID_CODEGEN_BACKENDS.contains(&backend.as_str()) {
408+
println!(
409+
"HELP: '{backend}' for '{section}.codegen-backends' might fail. \
410+
List of known good values: {VALID_CODEGEN_BACKENDS:?}"
411+
);
412+
}
413+
}
414+
backends
415+
}
416+
396417
impl Config {
397418
pub fn apply_rust_config(
398419
&mut self,
@@ -571,24 +592,10 @@ impl Config {
571592
set(&mut self.ehcont_guard, ehcont_guard);
572593
self.llvm_libunwind_default =
573594
llvm_libunwind.map(|v| v.parse().expect("failed to parse rust.llvm-libunwind"));
574-
575-
if let Some(ref backends) = codegen_backends {
576-
let available_backends = ["llvm", "cranelift", "gcc"];
577-
578-
self.rust_codegen_backends = backends.iter().map(|s| {
579-
if let Some(backend) = s.strip_prefix(CODEGEN_BACKEND_PREFIX) {
580-
if available_backends.contains(&backend) {
581-
panic!("Invalid value '{s}' for 'rust.codegen-backends'. Instead, please use '{backend}'.");
582-
} else {
583-
println!("HELP: '{s}' for 'rust.codegen-backends' might fail. \
584-
Codegen backends are mostly defined without the '{CODEGEN_BACKEND_PREFIX}' prefix. \
585-
In this case, it would be referred to as '{backend}'.");
586-
}
587-
}
588-
589-
s.clone()
590-
}).collect();
591-
}
595+
set(
596+
&mut self.rust_codegen_backends,
597+
codegen_backends.map(|backends| validate_codegen_backends(backends, "rust")),
598+
);
592599

593600
self.rust_codegen_units = codegen_units.map(threads_from_config);
594601
self.rust_codegen_units_std = codegen_units_std.map(threads_from_config);

src/bootstrap/src/core/config/toml/target.rs

Lines changed: 4 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@ use std::collections::HashMap;
1616

1717
use serde::{Deserialize, Deserializer};
1818

19-
use crate::core::build_steps::compile::CODEGEN_BACKEND_PREFIX;
19+
use crate::core::config::toml::rust::validate_codegen_backends;
2020
use crate::core::config::{LlvmLibunwind, Merge, ReplaceOpt, SplitDebuginfo, StringOrBool};
2121
use crate::{Config, HashSet, PathBuf, TargetSelection, define_config, exit};
2222

@@ -142,23 +142,9 @@ impl Config {
142142
target.rpath = cfg.rpath;
143143
target.optimized_compiler_builtins = cfg.optimized_compiler_builtins;
144144
target.jemalloc = cfg.jemalloc;
145-
146-
if let Some(ref backends) = cfg.codegen_backends {
147-
let available_backends = ["llvm", "cranelift", "gcc"];
148-
149-
target.codegen_backends = Some(backends.iter().map(|s| {
150-
if let Some(backend) = s.strip_prefix(CODEGEN_BACKEND_PREFIX) {
151-
if available_backends.contains(&backend) {
152-
panic!("Invalid value '{s}' for 'target.{triple}.codegen-backends'. Instead, please use '{backend}'.");
153-
} else {
154-
println!("HELP: '{s}' for 'target.{triple}.codegen-backends' might fail. \
155-
Codegen backends are mostly defined without the '{CODEGEN_BACKEND_PREFIX}' prefix. \
156-
In this case, it would be referred to as '{backend}'.");
157-
}
158-
}
159-
160-
s.clone()
161-
}).collect());
145+
if let Some(backends) = cfg.codegen_backends {
146+
target.codegen_backends =
147+
Some(validate_codegen_backends(backends, &format!("target.{triple}")))
162148
}
163149

164150
target.split_debuginfo = cfg.split_debuginfo.as_ref().map(|v| {

0 commit comments

Comments
 (0)