Add a make_run_crates
function and use it Rustc and Std
This fixes the panic from the previous commit.
This commit is contained in:
parent
564e3adfdf
commit
20372f1817
@ -2,7 +2,9 @@
|
|||||||
|
|
||||||
use crate::builder::{crate_description, Builder, Kind, RunConfig, ShouldRun, Step};
|
use crate::builder::{crate_description, Builder, Kind, RunConfig, ShouldRun, Step};
|
||||||
use crate::cache::Interned;
|
use crate::cache::Interned;
|
||||||
use crate::compile::{add_to_sysroot, run_cargo, rustc_cargo, rustc_cargo_env, std_cargo};
|
use crate::compile::{
|
||||||
|
add_to_sysroot, make_run_crates, run_cargo, rustc_cargo, rustc_cargo_env, std_cargo,
|
||||||
|
};
|
||||||
use crate::config::TargetSelection;
|
use crate::config::TargetSelection;
|
||||||
use crate::tool::{prepare_tool_cargo, SourceType};
|
use crate::tool::{prepare_tool_cargo, SourceType};
|
||||||
use crate::INTERNER;
|
use crate::INTERNER;
|
||||||
@ -88,7 +90,7 @@ impl Step for Std {
|
|||||||
}
|
}
|
||||||
|
|
||||||
fn make_run(run: RunConfig<'_>) {
|
fn make_run(run: RunConfig<'_>) {
|
||||||
let crates = run.cargo_crates_in_set();
|
let crates = make_run_crates(&run, "library");
|
||||||
run.builder.ensure(Std { target: run.target, crates });
|
run.builder.ensure(Std { target: run.target, crates });
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -218,7 +220,7 @@ impl Step for Rustc {
|
|||||||
}
|
}
|
||||||
|
|
||||||
fn make_run(run: RunConfig<'_>) {
|
fn make_run(run: RunConfig<'_>) {
|
||||||
let crates = run.cargo_crates_in_set();
|
let crates = make_run_crates(&run, "compiler");
|
||||||
run.builder.ensure(Rustc { target: run.target, crates });
|
run.builder.ensure(Rustc { target: run.target, crates });
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -48,6 +48,17 @@ impl Std {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// Given an `alias` selected by the `Step` and the paths passed on the command line,
|
||||||
|
/// return a list of the crates that should be built.
|
||||||
|
///
|
||||||
|
/// Normally, people will pass *just* `library` if they pass it.
|
||||||
|
/// But it's possible (although strange) to pass something like `library std core`.
|
||||||
|
/// Build all crates anyway, as if they hadn't passed the other args.
|
||||||
|
pub(crate) fn make_run_crates(run: &RunConfig<'_>, alias: &str) -> Interned<Vec<String>> {
|
||||||
|
let has_alias = run.paths.iter().any(|set| set.assert_single_path().path.ends_with(alias));
|
||||||
|
if has_alias { Default::default() } else { run.cargo_crates_in_set() }
|
||||||
|
}
|
||||||
|
|
||||||
impl Step for Std {
|
impl Step for Std {
|
||||||
type Output = ();
|
type Output = ();
|
||||||
const DEFAULT: bool = true;
|
const DEFAULT: bool = true;
|
||||||
@ -62,16 +73,10 @@ impl Step for Std {
|
|||||||
}
|
}
|
||||||
|
|
||||||
fn make_run(run: RunConfig<'_>) {
|
fn make_run(run: RunConfig<'_>) {
|
||||||
// Normally, people will pass *just* library if they pass it.
|
|
||||||
// But it's possible (although strange) to pass something like `library std core`.
|
|
||||||
// Build all crates anyway, as if they hadn't passed the other args.
|
|
||||||
let has_library =
|
|
||||||
run.paths.iter().any(|set| set.assert_single_path().path.ends_with("library"));
|
|
||||||
let crates = if has_library { Default::default() } else { run.cargo_crates_in_set() };
|
|
||||||
run.builder.ensure(Std {
|
run.builder.ensure(Std {
|
||||||
compiler: run.builder.compiler(run.builder.top_stage, run.build_triple()),
|
compiler: run.builder.compiler(run.builder.top_stage, run.build_triple()),
|
||||||
target: run.target,
|
target: run.target,
|
||||||
crates,
|
crates: make_run_crates(&run, "library"),
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user