From 19b854d86713adc36e9cbb35d321c2cbf8197788 Mon Sep 17 00:00:00 2001 From: Dirkjan Ochtman Date: Thu, 12 Apr 2018 00:37:30 +0200 Subject: [PATCH] Use Unit type as interface to compilation --- src/cargo/ops/cargo_compile.rs | 24 +++++++++++++++++++-- src/cargo/ops/cargo_rustc/context/mod.rs | 27 +++--------------------- src/cargo/ops/cargo_rustc/mod.rs | 4 +--- 3 files changed, 26 insertions(+), 29 deletions(-) diff --git a/src/cargo/ops/cargo_compile.rs b/src/cargo/ops/cargo_compile.rs index fc2c1c3d7..17d370eda 100644 --- a/src/cargo/ops/cargo_compile.rs +++ b/src/cargo/ops/cargo_compile.rs @@ -29,7 +29,7 @@ use std::sync::Arc; use core::{Package, Source, Target}; use core::{PackageId, PackageIdSpec, Profile, Profiles, TargetKind, Workspace}; use core::resolver::{Method, Resolve}; -use ops::{self, BuildOutput, Context, DefaultExecutor, Executor}; +use ops::{self, BuildOutput, Context, DefaultExecutor, Executor, Kind, Unit}; use util::config::Config; use util::{profile, CargoResult, CargoResultExt}; @@ -355,7 +355,27 @@ pub fn compile_ws<'a>( build_config, profiles, )?; - cx.compile(&package_targets, export_dir.clone(), &exec)? + let units = package_targets + .iter() + .flat_map(|&(pkg, ref targets)| { + let default_kind = if cx.build_config.requested_target.is_some() { + Kind::Target + } else { + Kind::Host + }; + targets.iter().map(move |&(target, profile)| Unit { + pkg, + target, + profile, + kind: if target.for_host() { + Kind::Host + } else { + default_kind + }, + }) + }) + .collect::>(); + cx.compile(&units, export_dir.clone(), &exec)? }; ret.to_doc_test = to_builds.into_iter().cloned().collect(); diff --git a/src/cargo/ops/cargo_rustc/context/mod.rs b/src/cargo/ops/cargo_rustc/context/mod.rs index 757c25587..2d317f8c1 100644 --- a/src/cargo/ops/cargo_rustc/context/mod.rs +++ b/src/cargo/ops/cargo_rustc/context/mod.rs @@ -19,7 +19,7 @@ use super::fingerprint::Fingerprint; use super::job_queue::JobQueue; use super::layout::Layout; use super::links::Links; -use super::{BuildConfig, Compilation, Executor, Kind, PackagesToBuild}; +use super::{BuildConfig, Compilation, Executor, Kind}; mod unit_dependencies; use self::unit_dependencies::build_unit_dependencies; @@ -158,33 +158,12 @@ impl<'a, 'cfg> Context<'a, 'cfg> { // where the compiled libraries are all located. pub fn compile( mut self, - pkg_targets: &'a PackagesToBuild<'a>, + units: &[Unit<'a>], export_dir: Option, exec: &Arc, ) -> CargoResult> { - let units = pkg_targets - .iter() - .flat_map(|&(pkg, ref targets)| { - let default_kind = if self.build_config.requested_target.is_some() { - Kind::Target - } else { - Kind::Host - }; - targets.iter().map(move |&(target, profile)| Unit { - pkg, - target, - profile, - kind: if target.for_host() { - Kind::Host - } else { - default_kind - }, - }) - }) - .collect::>(); - let mut queue = JobQueue::new(&self); - self.prepare_units(export_dir, &units)?; + self.prepare_units(export_dir, units)?; self.prepare()?; self.build_used_in_plugin_map(&units)?; custom_build::build_map(&mut self, &units)?; diff --git a/src/cargo/ops/cargo_rustc/mod.rs b/src/cargo/ops/cargo_rustc/mod.rs index 5380f70bd..47c1237a1 100644 --- a/src/cargo/ops/cargo_rustc/mod.rs +++ b/src/cargo/ops/cargo_rustc/mod.rs @@ -9,7 +9,7 @@ use std::sync::Arc; use same_file::is_same_file; use serde_json; -use core::{Feature, Package, PackageId, Profile, Target}; +use core::{Feature, PackageId, Profile, Target}; use core::manifest::Lto; use core::shell::ColorChoice; use util::{self, machine_message, ProcessBuilder}; @@ -102,8 +102,6 @@ pub struct TargetConfig { pub overrides: HashMap, } -pub type PackagesToBuild<'a> = [(&'a Package, Vec<(&'a Target, &'a Profile)>)]; - /// A glorified callback for executing calls to rustc. Rather than calling rustc /// directly, we'll use an Executor, giving clients an opportunity to intercept /// the build calls. -- 2.30.2