diff --git a/crates/fbuild-build/src/apollo3/orchestrator.rs b/crates/fbuild-build/src/apollo3/orchestrator.rs index 2cdddb90..7836ba23 100644 --- a/crates/fbuild-build/src/apollo3/orchestrator.rs +++ b/crates/fbuild-build/src/apollo3/orchestrator.rs @@ -55,7 +55,21 @@ impl BuildOrchestrator for Apollo3Orchestrator { .await; // 4. Ensure Apollo3 cores (SparkFun Arduino Apollo3 core) - let framework = fbuild_packages::library::Apollo3Cores::new(¶ms.project_dir); + // Honor `platform_packages` override from the env section + // (FastLED/fbuild#664, #681): if set, the override URL replaces the + // const-pinned default and gets its own cache subdir via + // `PackageBase::with_override`. + let __ovr = ctx + .config + .get_env_config(¶ms.env_name) + .ok() + .and_then(|env| { + crate::package_override::resolve_override(env, "framework-arduinoambiqapollo3") + }); + let framework = match __ovr { + Some(o) => fbuild_packages::library::Apollo3Cores::with_override(¶ms.project_dir, o), + None => fbuild_packages::library::Apollo3Cores::new(¶ms.project_dir), + }; let framework_dir = fbuild_packages::Package::ensure_installed(&framework).await?; tracing::info!("Apollo3 cores at {}", framework_dir.display()); diff --git a/crates/fbuild-build/src/ch32v/orchestrator.rs b/crates/fbuild-build/src/ch32v/orchestrator.rs index 0b159424..b33b0f39 100644 --- a/crates/fbuild-build/src/ch32v/orchestrator.rs +++ b/crates/fbuild-build/src/ch32v/orchestrator.rs @@ -53,7 +53,18 @@ impl BuildOrchestrator for Ch32vOrchestrator { .await; // 4. Ensure OpenWCH CH32V cores - let framework = fbuild_packages::library::Ch32vCores::new(¶ms.project_dir); + // Honor `platform_packages` override (FastLED/fbuild#664, #681). + let __ovr = ctx + .config + .get_env_config(¶ms.env_name) + .ok() + .and_then(|env| { + crate::package_override::resolve_override(env, "framework-arduino-ch32v") + }); + let framework = match __ovr { + Some(o) => fbuild_packages::library::Ch32vCores::with_override(¶ms.project_dir, o), + None => fbuild_packages::library::Ch32vCores::new(¶ms.project_dir), + }; let framework_dir = fbuild_packages::Package::ensure_installed(&framework).await?; tracing::info!("CH32V cores at {}", framework_dir.display()); diff --git a/crates/fbuild-build/src/esp8266/orchestrator.rs b/crates/fbuild-build/src/esp8266/orchestrator.rs index 719f9b57..686dbcaf 100644 --- a/crates/fbuild-build/src/esp8266/orchestrator.rs +++ b/crates/fbuild-build/src/esp8266/orchestrator.rs @@ -59,7 +59,20 @@ impl BuildOrchestrator for Esp8266Orchestrator { .await; // 4. Ensure framework - let framework = fbuild_packages::library::Esp8266Framework::new(¶ms.project_dir); + // Honor `platform_packages` override (FastLED/fbuild#664, #681). + let __ovr = ctx + .config + .get_env_config(¶ms.env_name) + .ok() + .and_then(|env| { + crate::package_override::resolve_override(env, "framework-arduinoespressif8266") + }); + let framework = match __ovr { + Some(o) => { + fbuild_packages::library::Esp8266Framework::with_override(¶ms.project_dir, o) + } + None => fbuild_packages::library::Esp8266Framework::new(¶ms.project_dir), + }; let _framework_dir = fbuild_packages::Package::ensure_installed(&framework).await?; tracing::info!("ESP8266 framework ready"); let board_id = ctx diff --git a/crates/fbuild-build/src/nrf52/orchestrator.rs b/crates/fbuild-build/src/nrf52/orchestrator.rs index de100ca8..ebe31945 100644 --- a/crates/fbuild-build/src/nrf52/orchestrator.rs +++ b/crates/fbuild-build/src/nrf52/orchestrator.rs @@ -84,7 +84,18 @@ impl BuildOrchestrator for Nrf52Orchestrator { .await; // 4. Ensure NRF52 cores (Adafruit nRF52 Arduino core) - let framework = fbuild_packages::library::Nrf52Cores::new(¶ms.project_dir); + // Honor `platform_packages` override (FastLED/fbuild#664, #681). + let __ovr = ctx + .config + .get_env_config(¶ms.env_name) + .ok() + .and_then(|env| { + crate::package_override::resolve_override(env, "framework-arduinoadafruitnrf52") + }); + let framework = match __ovr { + Some(o) => fbuild_packages::library::Nrf52Cores::with_override(¶ms.project_dir, o), + None => fbuild_packages::library::Nrf52Cores::new(¶ms.project_dir), + }; let framework_dir = fbuild_packages::Package::ensure_installed(&framework).await?; tracing::info!("NRF52 cores at {}", framework_dir.display()); diff --git a/crates/fbuild-build/src/renesas/orchestrator.rs b/crates/fbuild-build/src/renesas/orchestrator.rs index a5243ff1..30222b68 100644 --- a/crates/fbuild-build/src/renesas/orchestrator.rs +++ b/crates/fbuild-build/src/renesas/orchestrator.rs @@ -85,7 +85,20 @@ impl BuildOrchestrator for RenesasOrchestrator { .await; // 4. Ensure Renesas cores (ArduinoCore-renesas) - let framework = fbuild_packages::library::RenesasCores::new(¶ms.project_dir); + // Honor `platform_packages` override (FastLED/fbuild#664, #681). + let __ovr = ctx + .config + .get_env_config(¶ms.env_name) + .ok() + .and_then(|env| { + crate::package_override::resolve_override(env, "framework-arduinorenesas") + }); + let framework = match __ovr { + Some(o) => { + fbuild_packages::library::RenesasCores::with_override(¶ms.project_dir, o) + } + None => fbuild_packages::library::RenesasCores::new(¶ms.project_dir), + }; let framework_dir = fbuild_packages::Package::ensure_installed(&framework).await?; tracing::info!("Renesas cores at {}", framework_dir.display()); diff --git a/crates/fbuild-build/src/rp2040/orchestrator.rs b/crates/fbuild-build/src/rp2040/orchestrator.rs index e91b035c..27890a41 100644 --- a/crates/fbuild-build/src/rp2040/orchestrator.rs +++ b/crates/fbuild-build/src/rp2040/orchestrator.rs @@ -89,7 +89,18 @@ impl BuildOrchestrator for Rp2040Orchestrator { .await; // 4. Ensure RP2040 cores (arduino-pico by earlephilhower) - let framework = fbuild_packages::library::Rp2040Cores::new(¶ms.project_dir); + // Honor `platform_packages` override (FastLED/fbuild#664, #681). + let __ovr = ctx + .config + .get_env_config(¶ms.env_name) + .ok() + .and_then(|env| { + crate::package_override::resolve_override(env, "framework-arduinopico") + }); + let framework = match __ovr { + Some(o) => fbuild_packages::library::Rp2040Cores::with_override(¶ms.project_dir, o), + None => fbuild_packages::library::Rp2040Cores::new(¶ms.project_dir), + }; let framework_dir = fbuild_packages::Package::ensure_installed(&framework).await?; tracing::info!("RP2040 cores at {}", framework_dir.display()); let board_id = ctx diff --git a/crates/fbuild-build/src/sam/orchestrator.rs b/crates/fbuild-build/src/sam/orchestrator.rs index 45b4046a..959595fa 100644 --- a/crates/fbuild-build/src/sam/orchestrator.rs +++ b/crates/fbuild-build/src/sam/orchestrator.rs @@ -95,11 +95,21 @@ impl BuildOrchestrator for SamOrchestrator { .await; // 4. Ensure correct Arduino core based on MCU family + // Honor `platform_packages` override (FastLED/fbuild#664, #681). Only + // SAM (Due) is wired through this PR — SAMD's framework_name needs + // separate verification (see issue thread). + let __sam_ovr = ctx + .config + .get_env_config(¶ms.env_name) + .ok() + .and_then(|env| { + crate::package_override::resolve_override(env, "framework-arduino-sam") + }); let (framework_dir, core_dir, variant_dir, linker_script_path, system_includes) = if is_samd_mcu(&ctx.board.mcu) { install_samd_core(params, &ctx.board.core, &ctx.board.variant).await? } else { - install_sam_core(params, &ctx.board.core, &ctx.board.variant).await? + install_sam_core(params, &ctx.board.core, &ctx.board.variant, __sam_ovr).await? }; let build_dir = &ctx.build_dir; @@ -308,8 +318,12 @@ async fn install_sam_core( params: &BuildParams, core_name: &str, variant_name: &str, + ovr: Option, ) -> Result<(PathBuf, PathBuf, PathBuf, PathBuf, Vec)> { - let framework = fbuild_packages::library::SamCores::new(¶ms.project_dir); + let framework = match ovr { + Some(o) => fbuild_packages::library::SamCores::with_override(¶ms.project_dir, o), + None => fbuild_packages::library::SamCores::new(¶ms.project_dir), + }; let framework_dir = fbuild_packages::Package::ensure_installed(&framework).await?; tracing::info!("SAM cores at {}", framework_dir.display()); diff --git a/crates/fbuild-build/src/silabs/orchestrator.rs b/crates/fbuild-build/src/silabs/orchestrator.rs index d314c346..380ae841 100644 --- a/crates/fbuild-build/src/silabs/orchestrator.rs +++ b/crates/fbuild-build/src/silabs/orchestrator.rs @@ -37,7 +37,18 @@ impl BuildOrchestrator for SilabsOrchestrator { ) .await; - let framework = fbuild_packages::library::SilabsCores::new(¶ms.project_dir); + // Honor `platform_packages` override (FastLED/fbuild#664, #681). + let __ovr = ctx + .config + .get_env_config(¶ms.env_name) + .ok() + .and_then(|env| { + crate::package_override::resolve_override(env, "framework-arduinosilabs") + }); + let framework = match __ovr { + Some(o) => fbuild_packages::library::SilabsCores::with_override(¶ms.project_dir, o), + None => fbuild_packages::library::SilabsCores::new(¶ms.project_dir), + }; let framework_dir = fbuild_packages::Package::ensure_installed(&framework).await?; tracing::info!("Silicon Labs cores at {}", framework_dir.display()); diff --git a/crates/fbuild-build/src/stm32/orchestrator/arduino_mbed.rs b/crates/fbuild-build/src/stm32/orchestrator/arduino_mbed.rs index c224622c..d452cafe 100644 --- a/crates/fbuild-build/src/stm32/orchestrator/arduino_mbed.rs +++ b/crates/fbuild-build/src/stm32/orchestrator/arduino_mbed.rs @@ -38,7 +38,17 @@ pub(super) async fn build_arduino_mbed_stm32( let eh_frame_policy = crate::eh_frame_policy_compute::compute_eh_frame_policy(&ctx, params.profile, None); - let framework = fbuild_packages::library::ArduinoMbedCore::new(¶ms.project_dir); + // Honor `platform_packages` override from the env section + // (FastLED/fbuild#664, #681). + let __ovr = ctx + .config + .get_env_config(¶ms.env_name) + .ok() + .and_then(|env| crate::package_override::resolve_override(env, "framework-arduino-mbed")); + let framework = match __ovr { + Some(o) => fbuild_packages::library::ArduinoMbedCore::with_override(¶ms.project_dir, o), + None => fbuild_packages::library::ArduinoMbedCore::new(¶ms.project_dir), + }; let framework_dir = fbuild_packages::Package::ensure_installed(&framework).await?; tracing::info!("Arduino mbed core at {}", framework_dir.display()); diff --git a/crates/fbuild-build/src/stm32/orchestrator/mod.rs b/crates/fbuild-build/src/stm32/orchestrator/mod.rs index 7b43f8bd..00e4dd6c 100644 --- a/crates/fbuild-build/src/stm32/orchestrator/mod.rs +++ b/crates/fbuild-build/src/stm32/orchestrator/mod.rs @@ -81,7 +81,18 @@ impl BuildOrchestrator for Stm32Orchestrator { } // 4. Ensure STM32duino cores - let framework = fbuild_packages::library::Stm32Cores::new(¶ms.project_dir); + // Honor `platform_packages` override (FastLED/fbuild#664, #681). + let __ovr = ctx + .config + .get_env_config(¶ms.env_name) + .ok() + .and_then(|env| { + crate::package_override::resolve_override(env, "framework-arduinoststm32") + }); + let framework = match __ovr { + Some(o) => fbuild_packages::library::Stm32Cores::with_override(¶ms.project_dir, o), + None => fbuild_packages::library::Stm32Cores::new(¶ms.project_dir), + }; let framework_dir = fbuild_packages::Package::ensure_installed(&framework).await?; tracing::info!("STM32 cores at {}", framework_dir.display()); diff --git a/crates/fbuild-build/src/teensy/orchestrator.rs b/crates/fbuild-build/src/teensy/orchestrator.rs index e55345d1..88309067 100644 --- a/crates/fbuild-build/src/teensy/orchestrator.rs +++ b/crates/fbuild-build/src/teensy/orchestrator.rs @@ -100,7 +100,18 @@ impl BuildOrchestrator for TeensyOrchestrator { .await; // 4. Ensure Teensy cores - let framework = fbuild_packages::library::TeensyCores::new(¶ms.project_dir); + // Honor `platform_packages` override (FastLED/fbuild#664, #681). + let __ovr = ctx + .config + .get_env_config(¶ms.env_name) + .ok() + .and_then(|env| { + crate::package_override::resolve_override(env, "framework-arduinoteensy") + }); + let framework = match __ovr { + Some(o) => fbuild_packages::library::TeensyCores::with_override(¶ms.project_dir, o), + None => fbuild_packages::library::TeensyCores::new(¶ms.project_dir), + }; let framework_dir = fbuild_packages::Package::ensure_installed(&framework).await?; tracing::info!("Teensy cores at {}", framework_dir.display()); diff --git a/crates/fbuild-cli/tests/ci_command.rs b/crates/fbuild-cli/tests/ci_command.rs index 74549712..e7ac200b 100644 --- a/crates/fbuild-cli/tests/ci_command.rs +++ b/crates/fbuild-cli/tests/ci_command.rs @@ -5,7 +5,7 @@ //! produces usage errors. The inline parse tests in `main.rs::ci_tests` //! cover positive-parse + mutual-exclusion contracts at unit-test speed. -use std::process::{Command, Output}; +use std::process::{Command, Output, Stdio}; use std::time::{Duration, Instant}; /// Run a `Command` with a hard wall-clock budget (FastLED/fbuild#806). @@ -14,8 +14,14 @@ use std::time::{Duration, Instant}; /// (e.g. a regression in clap parsing → infinite loop). 10 s is overkill /// for `--help` / argument-validation paths, but keeps the test runner /// from sitting on its 6 h job budget if the CLI ever does wedge. +/// +/// stdout/stderr must be piped explicitly: `spawn()` inherits the parent +/// streams by default, so without this `wait_with_output()` reports an +/// empty stdout and the `--help`-content assertions panic spuriously. +/// `Command::output()` pipes for you; `spawn()` does not. fn run_cli_or_timeout(mut cmd: Command) -> Output { let budget = Duration::from_secs(10); + cmd.stdout(Stdio::piped()).stderr(Stdio::piped()); let mut child = cmd.spawn().expect("spawn fbuild"); let deadline = Instant::now() + budget; loop { diff --git a/crates/fbuild-cli/tests/lib_select.rs b/crates/fbuild-cli/tests/lib_select.rs index ef77bc08..87aebb37 100644 --- a/crates/fbuild-cli/tests/lib_select.rs +++ b/crates/fbuild-cli/tests/lib_select.rs @@ -6,7 +6,7 @@ //! that need a real framework install (Teensy, STM32, ...) are gated //! behind `#[ignore]` and run manually. -use std::process::{Command, Output}; +use std::process::{Command, Output, Stdio}; use std::time::{Duration, Instant}; /// Run a `Command` with a hard wall-clock budget (FastLED/fbuild#806). @@ -15,8 +15,14 @@ use std::time::{Duration, Instant}; /// (e.g. a regression in clap parsing → infinite loop). 10 s is overkill /// for `--help` / argument-validation paths, but keeps the test runner /// from sitting on its 6 h job budget if the CLI ever does wedge. +/// +/// stdout/stderr must be piped explicitly: `spawn()` inherits the parent +/// streams by default, so without this `wait_with_output()` reports an +/// empty stdout and the `--help`-content assertions panic spuriously. +/// `Command::output()` pipes for you; `spawn()` does not. fn run_cli_or_timeout(mut cmd: Command) -> Output { let budget = Duration::from_secs(10); + cmd.stdout(Stdio::piped()).stderr(Stdio::piped()); let mut child = cmd.spawn().expect("spawn fbuild"); let deadline = Instant::now() + budget; loop { diff --git a/crates/fbuild-packages/src/library/apollo3_core.rs b/crates/fbuild-packages/src/library/apollo3_core.rs index feae7c5c..597008f1 100644 --- a/crates/fbuild-packages/src/library/apollo3_core.rs +++ b/crates/fbuild-packages/src/library/apollo3_core.rs @@ -37,6 +37,26 @@ impl Apollo3Cores { } } + /// Construct with a consumer-supplied override (parsed from the env's + /// `platform_packages` line in `platformio.ini`). The default const-pinned + /// URL / version / checksum are replaced; `cache_subdir` and `name` are + /// preserved. See `PackageBase::with_override` and FastLED/fbuild#681. + pub fn with_override(project_dir: &Path, ovr: fbuild_config::PackageOverride) -> Self { + Self { + base: PackageBase::new( + "apollo3-core", + APOLLO3_CORE_VERSION, + APOLLO3_CORE_URL, + APOLLO3_CORE_URL, + None, + CacheSubdir::Platforms, + project_dir, + ) + .with_override(ovr), + install_dir: None, + } + } + #[cfg(test)] fn with_cache_root(project_dir: &Path, cache_root: &Path) -> Self { Self { diff --git a/crates/fbuild-packages/src/library/arduino_mbed_core.rs b/crates/fbuild-packages/src/library/arduino_mbed_core.rs index 6567712d..6e0c3e8c 100644 --- a/crates/fbuild-packages/src/library/arduino_mbed_core.rs +++ b/crates/fbuild-packages/src/library/arduino_mbed_core.rs @@ -35,6 +35,26 @@ impl ArduinoMbedCore { } } + /// Construct with a consumer-supplied override (parsed from the env's + /// `platform_packages` line in `platformio.ini`). The default const-pinned + /// URL / version / checksum are replaced; `cache_subdir` and `name` are + /// preserved. See `PackageBase::with_override` and FastLED/fbuild#681. + pub fn with_override(project_dir: &Path, ovr: fbuild_config::PackageOverride) -> Self { + Self { + base: PackageBase::new( + "arduino-mbed-core", + ARDUINO_MBED_CORE_VERSION, + ARDUINO_MBED_CORE_URL, + ARDUINO_MBED_CORE_URL, + None, + CacheSubdir::Platforms, + project_dir, + ) + .with_override(ovr), + install_dir: None, + } + } + #[cfg(test)] fn with_cache_root(project_dir: &Path, cache_root: &Path) -> Self { Self { diff --git a/crates/fbuild-packages/src/library/ch32v_core.rs b/crates/fbuild-packages/src/library/ch32v_core.rs index 08d5a856..73ff4ba7 100644 --- a/crates/fbuild-packages/src/library/ch32v_core.rs +++ b/crates/fbuild-packages/src/library/ch32v_core.rs @@ -33,6 +33,26 @@ impl Ch32vCores { } } + /// Construct with a consumer-supplied override (parsed from the env's + /// `platform_packages` line in `platformio.ini`). The default const-pinned + /// URL / version / checksum are replaced; `cache_subdir` and `name` are + /// preserved. See `PackageBase::with_override` and FastLED/fbuild#681. + pub fn with_override(project_dir: &Path, ovr: fbuild_config::PackageOverride) -> Self { + Self { + base: PackageBase::new( + "ch32v-core", + CH32V_CORE_VERSION, + CH32V_CORE_URL, + CH32V_CORE_URL, + None, + CacheSubdir::Platforms, + project_dir, + ) + .with_override(ovr), + install_dir: None, + } + } + #[cfg(test)] fn with_cache_root(project_dir: &Path, cache_root: &Path) -> Self { Self { diff --git a/crates/fbuild-packages/src/library/esp8266_framework.rs b/crates/fbuild-packages/src/library/esp8266_framework.rs index 701a0d38..829472cb 100644 --- a/crates/fbuild-packages/src/library/esp8266_framework.rs +++ b/crates/fbuild-packages/src/library/esp8266_framework.rs @@ -42,6 +42,25 @@ impl Esp8266Framework { } } + /// Construct with a consumer-supplied override (parsed from the env's + /// `platform_packages` line in `platformio.ini`). The default const-pinned + /// URL / version / checksum are replaced; `cache_subdir` and `name` are + /// preserved. See `PackageBase::with_override` and FastLED/fbuild#681. + pub fn with_override(project_dir: &Path, ovr: fbuild_config::PackageOverride) -> Self { + Self { + base: PackageBase::new( + "esp8266-arduino", + ESP8266_FRAMEWORK_VERSION, + ESP8266_FRAMEWORK_URL, + ESP8266_FRAMEWORK_URL, + None, + CacheSubdir::Platforms, + project_dir, + ) + .with_override(ovr), + } + } + #[cfg(test)] fn with_cache_root(project_dir: &Path, cache_root: &Path) -> Self { Self { diff --git a/crates/fbuild-packages/src/library/nrf52_core.rs b/crates/fbuild-packages/src/library/nrf52_core.rs index 80bcec5b..371ee398 100644 --- a/crates/fbuild-packages/src/library/nrf52_core.rs +++ b/crates/fbuild-packages/src/library/nrf52_core.rs @@ -33,6 +33,26 @@ impl Nrf52Cores { } } + /// Construct with a consumer-supplied override (parsed from the env's + /// `platform_packages` line in `platformio.ini`). The default const-pinned + /// URL / version / checksum are replaced; `cache_subdir` and `name` are + /// preserved. See `PackageBase::with_override` and FastLED/fbuild#681. + pub fn with_override(project_dir: &Path, ovr: fbuild_config::PackageOverride) -> Self { + Self { + base: PackageBase::new( + "nrf52-core", + NRF52_CORE_VERSION, + NRF52_CORE_URL, + NRF52_CORE_URL, + None, + CacheSubdir::Platforms, + project_dir, + ) + .with_override(ovr), + install_dir: None, + } + } + #[cfg(test)] fn with_cache_root(project_dir: &Path, cache_root: &Path) -> Self { Self { diff --git a/crates/fbuild-packages/src/library/renesas_core.rs b/crates/fbuild-packages/src/library/renesas_core.rs index 3dac918d..617cfe0b 100644 --- a/crates/fbuild-packages/src/library/renesas_core.rs +++ b/crates/fbuild-packages/src/library/renesas_core.rs @@ -37,6 +37,26 @@ impl RenesasCores { } } + /// Construct with a consumer-supplied override (parsed from the env's + /// `platform_packages` line in `platformio.ini`). The default const-pinned + /// URL / version / checksum are replaced; `cache_subdir` and `name` are + /// preserved. See `PackageBase::with_override` and FastLED/fbuild#681. + pub fn with_override(project_dir: &Path, ovr: fbuild_config::PackageOverride) -> Self { + Self { + base: PackageBase::new( + "renesas-core", + RENESAS_CORE_VERSION, + RENESAS_CORE_URL, + RENESAS_CORE_URL, + None, + CacheSubdir::Platforms, + project_dir, + ) + .with_override(ovr), + install_dir: None, + } + } + #[cfg(test)] fn with_cache_root(project_dir: &Path, cache_root: &Path) -> Self { Self { diff --git a/crates/fbuild-packages/src/library/rp2040_core.rs b/crates/fbuild-packages/src/library/rp2040_core.rs index 12013c60..efd7abee 100644 --- a/crates/fbuild-packages/src/library/rp2040_core.rs +++ b/crates/fbuild-packages/src/library/rp2040_core.rs @@ -34,6 +34,26 @@ impl Rp2040Cores { } } + /// Construct with a consumer-supplied override (parsed from the env's + /// `platform_packages` line in `platformio.ini`). The default const-pinned + /// URL / version / checksum are replaced; `cache_subdir` and `name` are + /// preserved. See `PackageBase::with_override` and FastLED/fbuild#681. + pub fn with_override(project_dir: &Path, ovr: fbuild_config::PackageOverride) -> Self { + Self { + base: PackageBase::new( + "rp2040-core", + RP2040_CORE_VERSION, + RP2040_CORE_URL, + RP2040_CORE_URL, + None, + CacheSubdir::Platforms, + project_dir, + ) + .with_override(ovr), + install_dir: None, + } + } + #[cfg(test)] fn with_cache_root(project_dir: &Path, cache_root: &Path) -> Self { Self { diff --git a/crates/fbuild-packages/src/library/sam_core.rs b/crates/fbuild-packages/src/library/sam_core.rs index 63c36121..1dccfc88 100644 --- a/crates/fbuild-packages/src/library/sam_core.rs +++ b/crates/fbuild-packages/src/library/sam_core.rs @@ -33,6 +33,26 @@ impl SamCores { } } + /// Construct with a consumer-supplied override (parsed from the env's + /// `platform_packages` line in `platformio.ini`). The default const-pinned + /// URL / version / checksum are replaced; `cache_subdir` and `name` are + /// preserved. See `PackageBase::with_override` and FastLED/fbuild#681. + pub fn with_override(project_dir: &Path, ovr: fbuild_config::PackageOverride) -> Self { + Self { + base: PackageBase::new( + "sam-core", + SAM_CORE_VERSION, + SAM_CORE_URL, + SAM_CORE_URL, + None, + CacheSubdir::Platforms, + project_dir, + ) + .with_override(ovr), + install_dir: None, + } + } + #[cfg(test)] fn with_cache_root(project_dir: &Path, cache_root: &Path) -> Self { Self { diff --git a/crates/fbuild-packages/src/library/samd_core.rs b/crates/fbuild-packages/src/library/samd_core.rs index 62ae0e89..189f4113 100644 --- a/crates/fbuild-packages/src/library/samd_core.rs +++ b/crates/fbuild-packages/src/library/samd_core.rs @@ -33,6 +33,26 @@ impl SamdCores { } } + /// Construct with a consumer-supplied override (parsed from the env's + /// `platform_packages` line in `platformio.ini`). The default const-pinned + /// URL / version / checksum are replaced; `cache_subdir` and `name` are + /// preserved. See `PackageBase::with_override` and FastLED/fbuild#681. + pub fn with_override(project_dir: &Path, ovr: fbuild_config::PackageOverride) -> Self { + Self { + base: PackageBase::new( + "samd-core", + SAMD_CORE_VERSION, + SAMD_CORE_URL, + SAMD_CORE_URL, + None, + CacheSubdir::Platforms, + project_dir, + ) + .with_override(ovr), + install_dir: None, + } + } + #[cfg(test)] fn with_cache_root(project_dir: &Path, cache_root: &Path) -> Self { Self { diff --git a/crates/fbuild-packages/src/library/silabs_core.rs b/crates/fbuild-packages/src/library/silabs_core.rs index 3a07ac10..10af6332 100644 --- a/crates/fbuild-packages/src/library/silabs_core.rs +++ b/crates/fbuild-packages/src/library/silabs_core.rs @@ -33,6 +33,26 @@ impl SilabsCores { } } + /// Construct with a consumer-supplied override (parsed from the env's + /// `platform_packages` line in `platformio.ini`). The default const-pinned + /// URL / version / checksum are replaced; `cache_subdir` and `name` are + /// preserved. See `PackageBase::with_override` and FastLED/fbuild#681. + pub fn with_override(project_dir: &Path, ovr: fbuild_config::PackageOverride) -> Self { + Self { + base: PackageBase::new( + "silabs-core", + SILABS_CORE_VERSION, + SILABS_CORE_URL, + SILABS_CORE_URL, + None, + CacheSubdir::Platforms, + project_dir, + ) + .with_override(ovr), + install_dir: None, + } + } + #[cfg(test)] fn with_cache_root(project_dir: &Path, cache_root: &Path) -> Self { Self { diff --git a/crates/fbuild-packages/src/library/stm32_core.rs b/crates/fbuild-packages/src/library/stm32_core.rs index 8354e7b3..86b250f9 100644 --- a/crates/fbuild-packages/src/library/stm32_core.rs +++ b/crates/fbuild-packages/src/library/stm32_core.rs @@ -34,6 +34,26 @@ impl Stm32Cores { } } + /// Construct with a consumer-supplied override (parsed from the env's + /// `platform_packages` line in `platformio.ini`). The default const-pinned + /// URL / version / checksum are replaced; `cache_subdir` and `name` are + /// preserved. See `PackageBase::with_override` and FastLED/fbuild#681. + pub fn with_override(project_dir: &Path, ovr: fbuild_config::PackageOverride) -> Self { + Self { + base: PackageBase::new( + "stm32-core", + STM32_CORE_VERSION, + STM32_CORE_URL, + STM32_CORE_URL, + None, + CacheSubdir::Platforms, + project_dir, + ) + .with_override(ovr), + install_dir: None, + } + } + #[cfg(test)] fn with_cache_root(project_dir: &Path, cache_root: &Path) -> Self { Self { diff --git a/crates/fbuild-packages/src/library/teensy_core.rs b/crates/fbuild-packages/src/library/teensy_core.rs index 0c785d74..42dd042b 100644 --- a/crates/fbuild-packages/src/library/teensy_core.rs +++ b/crates/fbuild-packages/src/library/teensy_core.rs @@ -35,6 +35,26 @@ impl TeensyCores { } } + /// Construct with a consumer-supplied override (parsed from the env's + /// `platform_packages` line in `platformio.ini`). The default const-pinned + /// URL / version / checksum are replaced; `cache_subdir` and `name` are + /// preserved. See `PackageBase::with_override` and FastLED/fbuild#681. + pub fn with_override(project_dir: &Path, ovr: fbuild_config::PackageOverride) -> Self { + Self { + base: PackageBase::new( + "framework-arduinoteensy", + TEENSY_CORE_VERSION, + TEENSY_CORE_URL, + TEENSY_CORE_URL, + None, + CacheSubdir::Platforms, + project_dir, + ) + .with_override(ovr), + install_dir: None, + } + } + #[cfg(test)] fn with_cache_root(project_dir: &Path, cache_root: &Path) -> Self { Self {