diff --git a/osdk/src/cli.rs b/osdk/src/cli.rs index ecedf0999..54b2857bc 100644 --- a/osdk/src/cli.rs +++ b/osdk/src/cli.rs @@ -190,6 +190,12 @@ pub struct CargoArgs { pub release: bool, #[arg(long, value_name = "FEATURES", help = "List of features to activate")] pub features: Vec, + #[arg( + long = "config", + help = "Override a configuration value", + value_name = "KEY=VALUE" + )] + pub override_configs: Vec, } #[derive(Debug, Args)] diff --git a/osdk/src/commands/build/mod.rs b/osdk/src/commands/build/mod.rs index 5623bbaea..dd1e128c8 100644 --- a/osdk/src/commands/build/mod.rs +++ b/osdk/src/commands/build/mod.rs @@ -148,6 +148,10 @@ fn build_kernel_elf( .arg(cargo_target_directory.as_ref()); command.args(COMMON_CARGO_ARGS); command.arg("--profile=".to_string() + &args.profile); + for override_config in &args.override_configs { + command.arg("--config").arg(override_config); + } + let status = command.status().unwrap(); if !status.success() { error_msg!("Cargo build failed"); diff --git a/osdk/src/config_manager/mod.rs b/osdk/src/config_manager/mod.rs index 05e252ad6..34bc4badc 100644 --- a/osdk/src/config_manager/mod.rs +++ b/osdk/src/config_manager/mod.rs @@ -147,15 +147,13 @@ fn load_osdk_manifest>(cargo_args: &CargoArgs, selection: Option CargoArgs { - let mut features = Vec::new(); - - for feature in cargo_args.features.iter() { - for feature in feature.split(',') { - if !feature.is_empty() { - features.push(feature.to_string()); - } - } - } + let features = cargo_args + .features + .iter() + .flat_map(|feature| feature.split(',')) + .filter(|feature| !feature.is_empty()) + .map(|feature| feature.to_string()) + .collect(); let profile = if cargo_args.release { "release".to_string() @@ -167,6 +165,7 @@ fn parse_cargo_args(cargo_args: &CargoArgs) -> CargoArgs { profile, release: cargo_args.release, features, + override_configs: cargo_args.override_configs.clone(), } }