mirror of
https://github.com/rust-lang/rust
synced 2024-10-02 23:04:50 +00:00
Auto merge of #123546 - Rajveer100:branch-for-issue-122128, r=onur-ozkan
Bootstrap: Check validity of `--target` and `--host` triples before starting a build
Resolves #122128
As described in the issue, validating the `target` and `host` triples would save a lot of time before actually starting a build. This would also check for custom targets by looking for a valid JSON spec if the specified target does not exist in the [supported](42825768b1/compiler/rustc_target/src/spec/mod.rs (L1401-L1689)
) list of targets.
This commit is contained in:
commit
6c90ac8d8f
|
@ -14,6 +14,7 @@
|
||||||
use std::fs;
|
use std::fs;
|
||||||
use std::path::PathBuf;
|
use std::path::PathBuf;
|
||||||
use std::process::Command;
|
use std::process::Command;
|
||||||
|
use walkdir::WalkDir;
|
||||||
|
|
||||||
use crate::builder::Kind;
|
use crate::builder::Kind;
|
||||||
use crate::core::config::Target;
|
use crate::core::config::Target;
|
||||||
|
@ -177,6 +178,34 @@ pub fn check(build: &mut Build) {
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Check if there exists a built-in target in the list of supported targets.
|
||||||
|
let mut has_target = false;
|
||||||
|
let target_str = target.to_string();
|
||||||
|
|
||||||
|
let supported_target_list =
|
||||||
|
output(Command::new(&build.config.initial_rustc).args(["--print", "target-list"]));
|
||||||
|
|
||||||
|
has_target |= supported_target_list.contains(&target_str);
|
||||||
|
|
||||||
|
// If not, check for a valid file location that may have been specified
|
||||||
|
// by the user for the custom target.
|
||||||
|
if let Some(custom_target_path) = env::var_os("RUST_TARGET_PATH") {
|
||||||
|
let mut target_os_str = OsString::from(&target_str);
|
||||||
|
target_os_str.push(".json");
|
||||||
|
// Recursively traverse through nested directories.
|
||||||
|
let walker = WalkDir::new(custom_target_path).into_iter();
|
||||||
|
for entry in walker.filter_map(|e| e.ok()) {
|
||||||
|
has_target |= entry.file_name() == target_os_str;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if !has_target && !["A", "B", "C"].contains(&target_str.as_str()) {
|
||||||
|
panic!(
|
||||||
|
"No such target exists in the target list,
|
||||||
|
specify a correct location of the JSON specification file for custom targets!"
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
if !build.config.dry_run() {
|
if !build.config.dry_run() {
|
||||||
cmd_finder.must_have(build.cc(*target));
|
cmd_finder.must_have(build.cc(*target));
|
||||||
if let Some(ar) = build.ar(*target) {
|
if let Some(ar) = build.ar(*target) {
|
||||||
|
|
Loading…
Reference in a new issue