From feb00a9755ae8f96c8b761f288a6dad2eb41c5b1 Mon Sep 17 00:00:00 2001 From: datdenkikniet Date: Sat, 15 Apr 2023 14:28:24 +0200 Subject: Add support for "feature mixer" --- xtask/src/cargo_commands.rs | 96 ++++++++++++++++++++++++++++----------------- 1 file changed, 61 insertions(+), 35 deletions(-) (limited to 'xtask/src/cargo_commands.rs') diff --git a/xtask/src/cargo_commands.rs b/xtask/src/cargo_commands.rs index ec5fcfa..9cbdaef 100644 --- a/xtask/src/cargo_commands.rs +++ b/xtask/src/cargo_commands.rs @@ -86,29 +86,42 @@ pub fn cargo<'c>( package: &'c PackageOpt, backend: Backends, ) -> Vec> { - let runner = package.packages().map(move |package| { - let target = backend.to_target(); - let features = package.extract_features(target, backend); + let runner = package + .packages() + .flat_map(|package| { + let target = backend.to_target(); + let features = package.features(target, backend, globals.partial); - let command = match operation { - BuildOrCheck::Check => CargoCommand::Check { - cargoarg, - package: Some(package), - target, - features, - mode: BuildMode::Release, - }, - BuildOrCheck::Build => CargoCommand::Build { - cargoarg, - package: Some(package), - target, - features, - mode: BuildMode::Release, - }, - }; + #[cfg(feature = "rayon")] + { + features.into_par_iter().map(move |f| (package, target, f)) + } - (globals, command, false) - }); + #[cfg(not(feature = "rayon"))] + { + features.into_iter().map(move |f| (package, target, f)) + } + }) + .map(move |(package, target, features)| { + let command = match operation { + BuildOrCheck::Check => CargoCommand::Check { + cargoarg, + package: Some(package), + target, + features, + mode: BuildMode::Release, + }, + BuildOrCheck::Build => CargoCommand::Build { + cargoarg, + package: Some(package), + target, + features, + mode: BuildMode::Release, + }, + }; + + (globals, command, false) + }); runner.run_and_coalesce() } @@ -154,21 +167,34 @@ pub fn cargo_clippy<'c>( package: &'c PackageOpt, backend: Backends, ) -> Vec> { - let runner = package.packages().map(|p| { - let target = backend.to_target(); - let features = p.extract_features(target, backend); + let runner = package + .packages() + .flat_map(|package| { + let target = backend.to_target(); + let features = package.features(target, backend, globals.partial); - ( - globals, - CargoCommand::Clippy { - cargoarg, - package: Some(p), - target, - features, - }, - false, - ) - }); + #[cfg(feature = "rayon")] + { + features.into_par_iter().map(move |f| (package, target, f)) + } + + #[cfg(not(feature = "rayon"))] + { + features.into_iter().map(move |f| (package, target, f)) + } + }) + .map(move |(package, target, features)| { + ( + globals, + CargoCommand::Clippy { + cargoarg, + package: Some(package), + target, + features, + }, + false, + ) + }); runner.run_and_coalesce() } -- cgit v1.2.3