fix(nrf54l15): restore the nrf54l15dk build (#11410)

* fix(nrf54l15): restore the nrf54l15dk build

Three unrelated faults stacked up, so the env has not built from a clean
cache for some time. All three were diagnosed in July but never committed.

Pin framework-zephyr to 3.40201.251021 (Zephyr 4.2.1). Seeed's platform
script only maps their own seeed-xiao-* board ids to a package; any other
board -- ours included -- falls back to whatever platform.json declares as
the default, which is now Zephyr 4.4.0. Its west manifest pulls a CMSIS_6
whose cmsis_gcc.h calls the ACLE builtins __sxtb16/__sxtab16, and none of
the GCC ARM toolchains PlatformIO ships (8.2.1/9.2.1/9.3.1) declare them in
arm_acle.h. In C that is only an implicit-declaration warning; in C++ it is
a hard error. So a fresh cache silently breaks the build even though
nothing in the tree changed.

Guard the MMC5983MA case in MagnetometerThread with __has_include. The
switch arm constructs MMC5983MASensor unconditionally, so any env whose
libdeps lack SparkFun_MMC5983MA_Arduino_Library fails with "expected
type-specifier before 'MMC5983MASensor'".

Add Print::availableForWrite() to the nrf54l15 Arduino shim. The shim
declares flush() but not availableForWrite(), which StreamFrameWriter
calls -- so it went unnoticed until that code landed.

Verified: clean build of nrf54l15dk from an empty package cache, SUCCESS in
16:01, FLASH 39.04% (570804 B of 1428 KB), RAM 65.65%. The three had never
been exercised together -- a previous run with only the pin applied got
17:30 in before hitting the other two.

* review: collapse the pin rationale to one repo-local comment

The block was pasted twice, and both copies pointed at a note that does not
exist in this repository. Kept one, and only the part a reader here can act
on: why the fallback happens, and why it is a C++ error rather than the
warning the pure-C Zephyr core gets away with.

---------

Co-authored-by: Jonathan Bennett <jbennett@incomsystems.biz>
This commit is contained in:
Carlos Valdes
2026-08-11 20:15:05 +00:00
committed by GitHub
co-authored by Jonathan Bennett
parent af56a11f00
commit 204f88ddfe
3 files changed
+16

No files matched your search

+2
View File
@@ -67,9 +67,11 @@ class MagnetometerThread : public concurrency::OSThread
}
switch (device.type) {
#if __has_include(<SparkFun_MMC5983MA_Arduino_Library.h>)
case ScanI2C::DeviceType::MMC5983MA:
sensor = new MMC5983MASensor(device);
break;
#endif
default:
disable();
return;
+1
View File
@@ -297,6 +297,7 @@ class Print
}
virtual void flush() {}
virtual int availableForWrite() { return 0; }
};
// ── Stream base class ────────────────────────────────────────────────────────
+13
View File
@@ -1,5 +1,18 @@
[nrf54l15_base]
platform = https://github.com/Seeed-Studio/platform-seeedboards.git
; Pin the Zephyr package explicitly. Seeed's platform script only maps their
; own "seeed-xiao-*" board ids to a framework-zephyr package; any other board
; -- nrf54l15dk included -- falls back to whatever platform.json declares as
; the default, which is now framework-zephyr-nrf54lm20 (Zephyr 4.4.0). Its
; west manifest pulls a CMSIS_6 whose cmsis_gcc.h calls the ACLE builtins
; __sxtb16/__sxtab16, and none of the GCC ARM toolchains PlatformIO ships
; (8.2.1/9.2.1/9.3.1) declare them in arm_acle.h. In C that is only an
; implicit-declaration warning, so the pure-C Zephyr core never notices; in
; C++ it is a hard error, and any .cpp pulling in zephyr/kernel.h hits it.
; Without the pin a fresh package cache breaks this build with nothing in the
; tree having changed.
platform_packages =
platformio/framework-zephyr-nrf54lm20@https://dl.registry.platformio.org/download/platformio/tool/framework-zephyr/3.40201.251021/framework-zephyr-3.40201.251021.tar.gz
framework = zephyr
extends = arduino_base