From 4d7d063600fc6069d7dc06b3f2bcb9640923c476 Mon Sep 17 00:00:00 2001 From: Dirkjan Ochtman Date: Wed, 11 Apr 2018 22:25:05 +0200 Subject: [PATCH] Deliver units to compilation Context after initialization --- src/cargo/ops/cargo_clean.rs | 12 +----- src/cargo/ops/cargo_rustc/context/mod.rs | 47 +++++++++++++++--------- src/cargo/ops/cargo_rustc/mod.rs | 14 +------ 3 files changed, 34 insertions(+), 39 deletions(-) diff --git a/src/cargo/ops/cargo_clean.rs b/src/cargo/ops/cargo_clean.rs index cf1923ae7..74e317c3d 100644 --- a/src/cargo/ops/cargo_clean.rs +++ b/src/cargo/ops/cargo_clean.rs @@ -85,16 +85,8 @@ pub fn clean(ws: &Workspace, opts: &CleanOptions) -> CargoResult<()> { let mut build_config = BuildConfig::new(&opts.config.rustc()?.host, &opts.target)?; build_config.release = opts.release; - let mut cx = Context::new( - ws, - &resolve, - &packages, - opts.config, - build_config, - profiles, - None, - &units, - )?; + let mut cx = Context::new(ws, &resolve, &packages, opts.config, build_config, profiles)?; + cx.prepare_units(None, &units)?; for unit in units.iter() { rm_rf(&cx.files().fingerprint_dir(unit), config)?; diff --git a/src/cargo/ops/cargo_rustc/context/mod.rs b/src/cargo/ops/cargo_rustc/context/mod.rs index 389a0afd5..17238595f 100644 --- a/src/cargo/ops/cargo_rustc/context/mod.rs +++ b/src/cargo/ops/cargo_rustc/context/mod.rs @@ -105,20 +105,7 @@ impl<'a, 'cfg> Context<'a, 'cfg> { config: &'cfg Config, build_config: BuildConfig, profiles: &'a Profiles, - export_dir: Option, - units: &[Unit<'a>], ) -> CargoResult> { - let dest = if build_config.release { - "release" - } else { - "debug" - }; - let host_layout = Layout::new(ws, None, dest)?; - let target_layout = match build_config.requested_target.as_ref() { - Some(target) => Some(Layout::new(ws, Some(target), dest)?), - None => None, - }; - let incremental_env = match env::var("CARGO_INCREMENTAL") { Ok(v) => Some(v == "1"), Err(_) => None, @@ -163,13 +150,39 @@ impl<'a, 'cfg> Context<'a, 'cfg> { }; cx.probe_target_info()?; - let deps = build_unit_dependencies(units, &cx)?; - cx.unit_dependencies = deps; - let files = CompilationFiles::new(units, host_layout, target_layout, export_dir, ws, &cx); - cx.files = Some(files); Ok(cx) } + pub fn prepare_units( + &mut self, + export_dir: Option, + units: &[Unit<'a>], + ) -> CargoResult<()> { + let dest = if self.build_config.release { + "release" + } else { + "debug" + }; + let host_layout = Layout::new(self.ws, None, dest)?; + let target_layout = match self.build_config.requested_target.as_ref() { + Some(target) => Some(Layout::new(self.ws, Some(target), dest)?), + None => None, + }; + + let deps = build_unit_dependencies(units, &self)?; + self.unit_dependencies = deps; + let files = CompilationFiles::new( + units, + host_layout, + target_layout, + export_dir, + self.ws, + &self, + ); + self.files = Some(files); + Ok(()) + } + /// Prepare this context, ensuring that all filesystem directories are in /// place. pub fn prepare(&mut self) -> CargoResult<()> { diff --git a/src/cargo/ops/cargo_rustc/mod.rs b/src/cargo/ops/cargo_rustc/mod.rs index 02efdde70..fb865f565 100644 --- a/src/cargo/ops/cargo_rustc/mod.rs +++ b/src/cargo/ops/cargo_rustc/mod.rs @@ -181,19 +181,9 @@ pub fn compile_targets<'a, 'cfg: 'a>( }) .collect::>(); - let mut cx = Context::new( - ws, - resolve, - packages, - config, - build_config, - profiles, - export_dir, - &units, - )?; - + let mut cx = Context::new(ws, resolve, packages, config, build_config, profiles)?; let mut queue = JobQueue::new(&cx); - + cx.prepare_units(export_dir, &units)?; cx.prepare()?; cx.build_used_in_plugin_map(&units)?; custom_build::build_map(&mut cx, &units)?; -- 2.30.2