Skip to content

Commit

Permalink
Bootstrap: Check validity of --target and --host triples before s…
Browse files Browse the repository at this point in the history
…tarting a build

Resolves #122128
  • Loading branch information
Rajveer100 committed Apr 27, 2024
1 parent ca7d34e commit 09c0768
Showing 1 changed file with 29 additions and 0 deletions.
29 changes: 29 additions & 0 deletions src/bootstrap/src/core/sanity.rs
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,7 @@ use std::ffi::{OsStr, OsString};
use std::fs;
use std::path::PathBuf;
use std::process::Command;
use walkdir::WalkDir;

use crate::builder::Kind;
use crate::core::config::Target;
Expand Down Expand Up @@ -177,6 +178,34 @@ than building it.
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() {
cmd_finder.must_have(build.cc(*target));
if let Some(ar) = build.ar(*target) {
Expand Down

0 comments on commit 09c0768

Please sign in to comment.