use std::collections::{BTreeSet, HashMap};
use anyhow::Result;
use crate::cli::term_verbosity::Reporter;
pub(crate) struct BuildConfigInputs<'a> {
pub graph: &'a cabin_workspace::PackageGraph,
pub host_platform: &'a cabin_core::TargetPlatform,
pub toolchain: &'a cabin_core::ResolvedToolchain,
pub detection: Option<&'a cabin_core::ToolchainDetectionReport>,
pub cli_compiler_wrapper: Option<cabin_core::CompilerWrapperRequest>,
pub manifest_compiler_wrapper: Option<&'a cabin_core::CompilerWrapperRequest>,
pub effective_config: &'a cabin_config::EffectiveConfig,
pub profile: &'a cabin_core::ResolvedProfile,
pub dev_for: &'a BTreeSet<String>,
pub feature_resolution: &'a cabin_feature::FeatureResolution,
pub reporter: Reporter,
}
pub(crate) struct BuildPrep {
pub build_flags: HashMap<usize, cabin_core::ResolvedProfileFlags>,
pub standard_flag_conflicts: HashMap<usize, Vec<cabin_core::StandardFlagConflict>>,
pub compiler_wrapper: Option<cabin_core::ResolvedCompilerWrapper>,
pub toolchain_summary: cabin_core::ToolchainSummary,
}
#[allow(clippy::needless_pass_by_value)] pub(crate) fn resolve_build_prep(inputs: BuildConfigInputs) -> Result<BuildPrep> {
let (build_flags, standard_flag_conflicts) = crate::cli::resolve_per_package_build_flags(
inputs.graph,
inputs.profile,
inputs.host_platform,
inputs.feature_resolution,
inputs.detection,
);
let build_flags = crate::cli::augment_build_flags(
inputs.graph,
inputs.host_platform,
inputs.dev_for,
build_flags,
inputs.reporter,
)?;
let compiler_wrapper = crate::cli::resolve_compiler_wrapper_layered(
inputs.cli_compiler_wrapper,
inputs.manifest_compiler_wrapper,
inputs.effective_config,
)?;
let toolchain_summary = cabin_core::ToolchainSummary::from_resolved_parts(
inputs.toolchain,
compiler_wrapper.as_ref(),
);
Ok(BuildPrep {
build_flags,
standard_flag_conflicts,
compiler_wrapper,
toolchain_summary,
})
}