You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
This commit was created on GitHub.com and signed with GitHub’s verified signature.
Fixed
bin/refresh_toolchain_pins.py --check had been a silent no-op since [0087] landed —
it read a shared toolchain version straight out of arm_embedded.Dockerfile's own ARG TOOLCHAIN_URL= line, which [0087] deleted the moment the version became a per-row fact
instead; every check since then exited 0 regardless of what build-platforms.toml actually
held, confirmed live with a deliberately-broken row that passed clean. Rewritten to read the
row's own committed gcc field directly; deliberately re-broke the same row to confirm --check now catches it (v1.20.0 usermod.mimxrt: pinned 13.3.1 >= ceiling 13) before
restoring it. [0090].
mimxrt's eleven v1.20.0 rows carried a toolchain version (14.2.1-1.1) that violates
their own >= 13 ceiling (sdcard_cmd_set_bus_width(), fixed upstream in v1.21.0) — [0087]'s general per-row mechanism never special-cased this one disjoint window, exactly the
gap [0088] had scoped and left unimplemented. Now 12.3.1-1.2, the newest xpack release
genuinely below the ceiling, sha256-verified live against the publisher's own sidecar. [0088].
Every MicroPython tag before v1.20.0 — the nine ABI 5 and ABI 6 identifiers
(v1.12 through v1.19.1) — had never produced an artifact, on any arch, for
reasons that outlived the gcc 15 diagnostic [0082] bisected. Four separate
pre-v1.20.0 upstream facts this project had hardcoded the modern shape of: mpy-cross links to mpy-cross/mpy-cross, not mpy-cross/build/mpy-cross
(py/mkrules.mk moved it in v1.20.0, and py/dynruntime.mk's own MPY_CROSS = with it); py/persistentcode.h has no MPY_SUB_VERSION, so the
ABI is the bare "5"/"6"; py/stackctrl.c and mpy-cross/main.c need -Wno-error=dangling-pointer and -Wno-error=enum-int-mismatch on top of the -Wno-error=unterminated-string-initialization those tags already needed; and
the example natmod Makefile scoped its object cache by arch but not by tag, so
one --build 'mpy*-<arch>' linked every tag after the first against the first
tag's objects. Live-verified on arm_embedded: v1.12, v1.18 and v1.19.1
build end to end, v1.29.0 unchanged beside them. examples/wasm2mpy's own
Makefile carried the same arch-but-not-tag object scoping and is fixed with it,
and so did all three BUILD = .obj/$(ARCH) snippets in README.md — which also
claimed a header check catches this (it catches the arch axis; the tag axis
produces a correct arch header and no error) and that MicroPython v1.29.0's own BUILD ?= build-$(ARCH) default makes it impossible (that default is arch-scoped,
never tag-scoped). [0082], [0093].
mpy-cross (and, for every port but natmod, the port's own build) failed on every
MicroPython tag before v1.26.0, on rp2, stm32, samd, nrf, cc3200, renesas-ra, mimxrt, esp32, webassembly, windows, and natmod's own arm_embedded/riscv_embedded
cross arches — container_mpy_cross() always builds mpy-cross with the image's own native
compiler, and every one of these images' native compiler is ubuntu:26.04's own gcc 15, which
rejects py/emitinlinethumb.c's pre-v1.26.0 string initializers
(-Werror=unterminated-string-initialization, [0082]) the same way it already broke natmod_host/windows's own x64/x86 builds. [0091] threads the tag-keyed relaxation
already fixed for unix ([0082]) through every other port's own container_mpy_cross() call
and make invocation. Live-verified: natmod's armv7emsp/rv32imc/rv64imc (CI, run
33697330722) and, locally, rp2's own full firmware build on v1.20.0 (the one tag needing two
stacked relaxations at once).
windows's own win_arm64 build would have failed the moment [0091]'s fix reached it: win_arm64's cross compiler is Clang (llvm-mingw), not GCC, and it rejects -Wno-error=dangling-pointer as an unrecognized diagnostic name — a hard `error: unknown