diff options
| author | bit-aloo <sshourya17@gmail.com> | 2025-06-08 12:02:58 +0530 |
|---|---|---|
| committer | bit-aloo <sshourya17@gmail.com> | 2025-06-08 12:19:08 +0530 |
| commit | 81ee86b23b356aca3d131fa6271b19d55f9751c3 (patch) | |
| tree | 471c48c3b4f1774c01df383b7e58c0f519f56736 /src | |
| parent | 3ab5e60d18a7f6ed016974cced19e9f372517976 (diff) | |
| download | rust-81ee86b23b356aca3d131fa6271b19d55f9751c3.tar.gz rust-81ee86b23b356aca3d131fa6271b19d55f9751c3.zip | |
add execution context to bootstrap workflow
Diffstat (limited to 'src')
| -rw-r--r-- | src/bootstrap/src/bin/main.rs | 4 | ||||
| -rw-r--r-- | src/bootstrap/src/core/builder/mod.rs | 11 | ||||
| -rw-r--r-- | src/bootstrap/src/core/config/config.rs | 23 | ||||
| -rw-r--r-- | src/bootstrap/src/core/config/flags.rs | 15 | ||||
| -rw-r--r-- | src/bootstrap/src/utils/mod.rs | 1 |
5 files changed, 46 insertions, 8 deletions
diff --git a/src/bootstrap/src/bin/main.rs b/src/bootstrap/src/bin/main.rs index 833f8027951..9f1fde74359 100644 --- a/src/bootstrap/src/bin/main.rs +++ b/src/bootstrap/src/bin/main.rs @@ -29,9 +29,9 @@ fn main() { } debug!("parsing flags"); - let flags = Flags::parse(&args); + let (flags, exec_ctx) = Flags::parse(&args); debug!("parsing config based on flags"); - let config = Config::parse(flags); + let config = Config::parse(flags, exec_ctx); let mut build_lock; let _build_lock_guard; diff --git a/src/bootstrap/src/core/builder/mod.rs b/src/bootstrap/src/core/builder/mod.rs index 19b79bfe818..e8686c75e02 100644 --- a/src/bootstrap/src/core/builder/mod.rs +++ b/src/bootstrap/src/core/builder/mod.rs @@ -22,6 +22,7 @@ use crate::core::config::flags::Subcommand; use crate::core::config::{DryRun, TargetSelection}; use crate::utils::cache::Cache; use crate::utils::exec::{BootstrapCommand, command}; +use crate::utils::execution_context::ExecutionContext; use crate::utils::helpers::{self, LldThreads, add_dylib_path, exe, libdir, linker_args, t}; use crate::{Build, Crate, trace}; @@ -1633,4 +1634,14 @@ impl<'a> Builder<'a> { self.info(&format!("{err}\n")); } } + + pub fn exec_ctx(&self) -> &ExecutionContext { + &self.config.exec_ctx + } +} + +impl<'a> AsRef<ExecutionContext> for Builder<'a> { + fn as_ref(&self) -> &ExecutionContext { + self.exec_ctx() + } } diff --git a/src/bootstrap/src/core/config/config.rs b/src/bootstrap/src/core/config/config.rs index a92d58ef9e8..d7e6107defa 100644 --- a/src/bootstrap/src/core/config/config.rs +++ b/src/bootstrap/src/core/config/config.rs @@ -47,6 +47,7 @@ use crate::core::config::{ }; use crate::core::download::is_download_ci_available; use crate::utils::channel; +use crate::utils::execution_context::ExecutionContext; use crate::utils::helpers::exe; use crate::{Command, GitInfo, OnceLock, TargetSelection, check_ci_llvm, helpers, output, t}; @@ -304,6 +305,8 @@ pub struct Config { /// This is mostly for RA as building the stage1 compiler to check the library tree /// on each code change might be too much for some computers. pub skip_std_check_if_no_download_rustc: bool, + + pub exec_ctx: ExecutionContext, } impl Config { @@ -364,8 +367,8 @@ impl Config { feature = "tracing", instrument(target = "CONFIG_HANDLING", level = "trace", name = "Config::parse", skip_all) )] - pub fn parse(flags: Flags) -> Config { - Self::parse_inner(flags, Self::get_toml) + pub fn parse(flags: Flags, exec_ctx: ExecutionContext) -> Config { + Self::parse_inner(flags, Self::get_toml, exec_ctx) } #[cfg_attr( @@ -380,8 +383,10 @@ impl Config { pub(crate) fn parse_inner( mut flags: Flags, get_toml: impl Fn(&Path) -> Result<TomlConfig, toml::de::Error>, + exec_ctx: ExecutionContext, ) -> Config { let mut config = Config::default_opts(); + config.exec_ctx = exec_ctx; // Set flags. config.paths = std::mem::take(&mut flags.paths); @@ -1741,4 +1746,18 @@ impl Config { _ => !self.is_system_llvm(target), } } + + pub fn exec_ctx(&self) -> &ExecutionContext { + &self.exec_ctx + } + + pub fn git_info(&self, omit_git_hash: bool, dir: &Path) -> GitInfo { + GitInfo::new(omit_git_hash, dir, self) + } +} + +impl AsRef<ExecutionContext> for Config { + fn as_ref(&self) -> &ExecutionContext { + &self.exec_ctx + } } diff --git a/src/bootstrap/src/core/config/flags.rs b/src/bootstrap/src/core/config/flags.rs index 30617f58d43..a50ff4caaf4 100644 --- a/src/bootstrap/src/core/config/flags.rs +++ b/src/bootstrap/src/core/config/flags.rs @@ -14,7 +14,8 @@ use crate::core::build_steps::setup::Profile; use crate::core::builder::{Builder, Kind}; use crate::core::config::Config; use crate::core::config::target_selection::{TargetSelectionList, target_selection_list}; -use crate::{Build, DocTests}; +use crate::utils::execution_context::ExecutionContext; +use crate::{Build, DocTests, DryRun}; #[derive(Copy, Clone, Default, Debug, ValueEnum)] pub enum Color { @@ -209,7 +210,8 @@ impl Flags { HelpVerboseOnly::try_parse_from(normalize_args(args)) { println!("NOTE: updating submodules before printing available paths"); - let config = Config::parse(Self::parse(&[String::from("build")])); + let (flags, exec_ctx) = Self::parse(&[String::from("build")]); + let config = Config::parse(flags, exec_ctx); let build = Build::new(config); let paths = Builder::get_help(&build, subcommand); if let Some(s) = paths { @@ -227,8 +229,13 @@ impl Flags { feature = "tracing", instrument(level = "trace", name = "Flags::parse", skip_all, fields(args = ?args)) )] - pub fn parse(args: &[String]) -> Self { - Flags::parse_from(normalize_args(args)) + pub fn parse(args: &[String]) -> (Self, ExecutionContext) { + let mut exec_ctx = ExecutionContext::new(); + let flags = Flags::parse_from(normalize_args(args)); + exec_ctx.set_dry_run(if flags.dry_run { DryRun::UserSelected } else { DryRun::Disabled }); + exec_ctx.set_verbose(flags.verbose); + exec_ctx.set_fail_fast(flags.cmd.fail_fast()); + (flags, exec_ctx) } } diff --git a/src/bootstrap/src/utils/mod.rs b/src/bootstrap/src/utils/mod.rs index 169fcec303e..5a0b90801e7 100644 --- a/src/bootstrap/src/utils/mod.rs +++ b/src/bootstrap/src/utils/mod.rs @@ -8,6 +8,7 @@ pub(crate) mod cc_detect; pub(crate) mod change_tracker; pub(crate) mod channel; pub(crate) mod exec; +pub(crate) mod execution_context; pub(crate) mod helpers; pub(crate) mod job; pub(crate) mod render_tests; |
