From f4d0b2bcf636b401d775c56581faac10cb8e4556 Mon Sep 17 00:00:00 2001 From: zackees Date: Sat, 30 May 2026 08:45:40 -0700 Subject: [PATCH] fix(board-db): add build.extra_flags for nRF52840 boards (Arduino macros) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Three nRF52840 board JSONs in the bundled DB were missing `build.extra_flags`, so the Arduino board-detection macros that FastLED's `platforms/arm/nrf52/fastpin_arm_nrf52_variants.h` keys on were never defined. Every nRF52 build fell through to the "Unknown nRF52840 variant" fallback block (which marks many pins invalid), and `examples/Apa102/Apa102.ino` blew up at `fl/system/fastpin_base.h:146` with `static assertion failed: This pin has been marked as an invalid pin`. Restore `extra_flags` from the upstream PlatformIO board JSONs: nrf52840_dk -> -DARDUINO_NRF52_DK nrf52840_dk_adafruit -> -DARDUINO_NRF52840_PCA10056 -DNRF52840_XXAA adafruit_feather_nrf52840_sense -> -DARDUINO_NRF52840_FEATHER_SENSE -DNRF52840_XXAA This unblocks FastLED's `nrf52840_dk`, `nrf52840_supermini` (via `real_board_name="nrf52840_dk_adafruit"`), and `adafruit_feather_nrf52840_sense` workflows. Adds three regression tests (`test_nrf52840_dk_carries_arduino_macro`, `test_nrf52840_dk_adafruit_carries_arduino_macro`, `test_adafruit_feather_nrf52840_sense_carries_arduino_macro`) that assert each board's `get_defines()` includes the expected `ARDUINO_=1` keys. Full board suite passes 56/56. Tracking the broader gap (many other bundled boards also missing `extra_flags` — full nRF52 family, IAP*, LGT8F*, etc.) at #298 so this PR can stay minimal and focused on the immediate FastLED unblock. Refs #298 --- .../json/adafruit_feather_nrf52840_sense.json | 1 + .../assets/boards/json/nrf52840_dk.json | 1 + .../boards/json/nrf52840_dk_adafruit.json | 1 + crates/fbuild-config/src/board/tests.rs | 38 +++++++++++++++++++ 4 files changed, 41 insertions(+) diff --git a/crates/fbuild-config/assets/boards/json/adafruit_feather_nrf52840_sense.json b/crates/fbuild-config/assets/boards/json/adafruit_feather_nrf52840_sense.json index 1fcc3a0c..3c53ac39 100644 --- a/crates/fbuild-config/assets/boards/json/adafruit_feather_nrf52840_sense.json +++ b/crates/fbuild-config/assets/boards/json/adafruit_feather_nrf52840_sense.json @@ -1,6 +1,7 @@ { "build": { "core": "nRF5", + "extra_flags": "-DARDUINO_NRF52840_FEATHER_SENSE -DNRF52840_XXAA", "variant": "feather_nrf52840_sense", "arduino": { "ldscript": "nrf52840_s140_v6.ld" diff --git a/crates/fbuild-config/assets/boards/json/nrf52840_dk.json b/crates/fbuild-config/assets/boards/json/nrf52840_dk.json index 6c5f2ffb..370df18c 100644 --- a/crates/fbuild-config/assets/boards/json/nrf52840_dk.json +++ b/crates/fbuild-config/assets/boards/json/nrf52840_dk.json @@ -1,6 +1,7 @@ { "build": { "core": "nRF5", + "extra_flags": "-DARDUINO_NRF52_DK", "variant": "pca10056", "arduino": { "ldscript": "nrf52840_s140_v6.ld" diff --git a/crates/fbuild-config/assets/boards/json/nrf52840_dk_adafruit.json b/crates/fbuild-config/assets/boards/json/nrf52840_dk_adafruit.json index 4c3df84a..4da7d460 100644 --- a/crates/fbuild-config/assets/boards/json/nrf52840_dk_adafruit.json +++ b/crates/fbuild-config/assets/boards/json/nrf52840_dk_adafruit.json @@ -1,6 +1,7 @@ { "build": { "core": "nRF5", + "extra_flags": "-DARDUINO_NRF52840_PCA10056 -DNRF52840_XXAA", "variant": "pca10056", "arduino": { "ldscript": "nrf52840_s140_v6.ld" diff --git a/crates/fbuild-config/src/board/tests.rs b/crates/fbuild-config/src/board/tests.rs index 77790405..7ece08b4 100644 --- a/crates/fbuild-config/src/board/tests.rs +++ b/crates/fbuild-config/src/board/tests.rs @@ -315,6 +315,44 @@ fn test_esp32_flash_mode_env_override_honoured() { assert_eq!(config.flash_mode, Some("qio".to_string())); } +#[test] +fn test_nrf52840_dk_carries_arduino_macro() { + // Regression for FastLED CI fail: missing ARDUINO_NRF52_DK meant FastLED's + // nRF52 variants header fell through to the "Unknown variant" fallback + // (pin 1 invalid), blowing up Apa102.ino's static_assert. See fbuild#298. + let config = BoardConfig::from_board_id("nrf52840_dk", &HashMap::new()).unwrap(); + let defines = config.get_defines(); + assert_eq!(defines.get("ARDUINO_NRF52_DK"), Some(&"1".to_string())); +} + +#[test] +fn test_nrf52840_dk_adafruit_carries_arduino_macro() { + // Same fbuild#298 root cause — used by FastLED's `supermini_nrf52840` board. + let config = + BoardConfig::from_board_id("nrf52840_dk_adafruit", &HashMap::new()).unwrap(); + let defines = config.get_defines(); + assert_eq!( + defines.get("ARDUINO_NRF52840_PCA10056"), + Some(&"1".to_string()) + ); + assert_eq!(defines.get("NRF52840_XXAA"), Some(&"1".to_string())); +} + +#[test] +fn test_adafruit_feather_nrf52840_sense_carries_arduino_macro() { + let config = BoardConfig::from_board_id( + "adafruit_feather_nrf52840_sense", + &HashMap::new(), + ) + .unwrap(); + let defines = config.get_defines(); + assert_eq!( + defines.get("ARDUINO_NRF52840_FEATHER_SENSE"), + Some(&"1".to_string()) + ); + assert_eq!(defines.get("NRF52840_XXAA"), Some(&"1".to_string())); +} + #[test] fn test_pico_enriched_fields() { let config = BoardConfig::from_board_id("rpipico", &HashMap::new()).unwrap();