Repository navigation
Description
Goal
Drive the NXP LPC8xx family (initial targets: LPC845, LPC804) from "the CI workflow is stubbed to pass" to "FastLED sketches build, link, flash, and blink." This is the umbrella tracking the multi-stage work; individual stages have their own issues + PRs.
Why a META
Three pieces are required and they're independently sized (one is in this repo, one is in a separate repo, one is a board-bring-up matrix). Filing as a meta so the work doesn't drift between issues, and so anyone looking at the LPC8xx status can see the whole staircase at once.
Current state (as of filing)
-
Stage 0 — scaffolding: ✅ DONE
Platform::NxpLpcenum + string parsing (fbuild-core)- Board JSON:
lpc845.json,lpc804.json(fbuild-config) - Linker scripts + startup
.Sfor both MCUs (fbuild-build/src/nxplpc/assets/) - Shared MCU config (
nxplpc.json) - ARM toolchain pre-install hook
- Dispatch wiring:
NxpLpcPlatformSupport→NxpLpcStubOrchestrator - CI workflows stubbed to pass (PR ci(lpc8xx): stub Build LPC804 / LPC845 workflows so they pass #476)
-
Stage 1 — Arduino framework repo: ✅ DONE (skeleton)
zackees/ArduinoCore-LPC8xxcreated, BSD-3-Clause- Directory layout:
cores/lpc8xx/(Arduino.h, wiring_*, HardwareSerial, SPI, main.cpp) +variants/{lpc845,lpc804}/+examples/Blink/ - All bodies are TODO no-op stubs; substrate = NXP MCUXpresso SDK
Open sub-issues
-
Stage 2: implement NXP LPC8xx build orchestrator (replace stub, unstub LPC804/LPC845 CI) #477 — Stage 2: build orchestrator
ReplaceNxpLpcStubOrchestratorwith a realbuild()that producesfirmware.elf+firmware.binfor the empty.inofixtures. Pattern: copyfbuild-build/src/teensy/. Independent of Arduino-compatible framework for NXP LPC8xx (search existing, fork, or polyfill) #479 — works against the stubmain.cppshim that's already innxplpc/. Unblocks unstubbing the CI workflows. -
Arduino-compatible framework for NXP LPC8xx (search existing, fork, or polyfill) #479 — Stage 3: Arduino framework implementation
Fill in the no-op stubs inArduinoCore-LPC8xxagainst the MCUXpresso SDK. Estimated ~500–800 LOC C/C++. Decision recorded on Arduino-compatible framework for NXP LPC8xx (search existing, fork, or polyfill) #479. Verification needs hardware (LPC845-BRK / LPCXpresso804). -
Stage 4: vendor the framework into fbuild
Once the polyfill has working code, addcrates/fbuild-packages/src/library/lpc8xx_core.rsmirroringteensy_core.rs. Switchlpc845.json/lpc804.jsontoframeworks: ["arduino"]. Delete Stage 2: implement NXP LPC8xx build orchestrator (replace stub, unstub LPC804/LPC845 CI) #477's hand-rolledmain.cppshim in favor ofArduinoCore-LPC8xx's framework-ownedmain(). -
Stage 5: real test fixtures
Replace the emptytests/platform/lpc845/lpc845.inoandtests/platform/lpc804/lpc804.inostubs with real Blink sketches callingpinMode+digitalWrite+delay. -
Stage 6: FastLED canary
Blink,DemoReel100,FxEnginecompile clean for both LPC845 and LPC804 viafbuild build. This is the issue-Arduino-compatible framework for NXP LPC8xx (search existing, fork, or polyfill) #479 acceptance criterion. -
Stage 7: deploy support
lpc21isp / pyocd / cmsis-dap / jlink wiring. Tracked separately when the rest is done. -
Stage 8: unstub CI workflows
Revert.github/workflows/build-lpc845.ymlandbuild-lpc804.ymlto thetemplate_build.ymlcaller form (restore viagit show ac6b72d5^:...). The PR ci(lpc8xx): stub Build LPC804 / LPC845 workflows so they pass #476 stubs were always a temporary patch.
Ordering
Stages 2 and 3 can land in parallel — #477 produces an ELF using the hand-rolled main.cpp; #479 produces a framework that, once done, replaces that shim. Stage 4 is the integration point; Stages 5–8 follow.
Related
- Stage 2: implement NXP LPC8xx build orchestrator (replace stub, unstub LPC804/LPC845 CI) #477, Arduino-compatible framework for NXP LPC8xx (search existing, fork, or polyfill) #479 (sub-issues)
- Agent tool with isolation: "worktree" stacks worktrees inside existing worktree sandbox #485 (unrelated, but referenced because it's the harness-side issue that kept biting LPC8xx sub-agents during research)
- PR ci(lpc8xx): stub Build LPC804 / LPC845 workflows so they pass #476 (the CI stubs being replaced)
- PR refactor(symbol_analyzer): split into mod/markdown/tests submodule #475, refactor(symbol_analysis): split graph.rs + fix rustdoc broken link #474 (LOC-gate split work that unblocked CI for docs(bloat): pin map-file tombstone trap with regression test + doc note #471 — also unrelated to LPC8xx itself but landed during the same window)
zackees/ArduinoCore-LPC8xx(the external framework repo)- meta: port FastLED to NXP LPC8xx (LPC804 + LPC845) — two-stage plan FastLED#2836 (the FastLED-side umbrella)
Metadata
Metadata
Assignees
Labels
Type
Projects
- StatusShow more project fieldsTriage
Activity
zackees commentedon Jun 7, 2026
Status check-in:
zackees/ArduinoCore-LPC8xxcreated and seeded with BSD-3-Clause skeleton (cores + variants for LPC845/LPC804 + Blink example). All bodies are TODO stubs pointing at MCUXpresso SDK call sites. No implementation yet — that's Stage 3 / Arduino-compatible framework for NXP LPC8xx (search existing, fork, or polyfill) #479 follow-up.NxpLpcStubOrchestratorreplaced with a realNxpLpcOrchestratorfollowing the Apollo3 pattern; embeddedmain.cppshim materialised at compile time so the empty.inotest fixtures link. 18/18 nxplpc tests green. Awaiting CI.Once #488 merges:
feat(nxplpc): real Stage-2 build orchestrator (#477, part of #487) (#488
ci(boards): add LPC845-BRK + LPCXpresso804 stub workflows and README …
zackees commentedon Jun 13, 2026
Status check-in — 2026-06-13
Big movement since the last update (2026-06-07). The orchestrator and the Arduino framework both landed, a dedicated PlatformIO platform repo was spun up, and
fbuild buildis green across all five variants in upstream CI. Stage-by-stage:✅ Stage 2 — build orchestrator — DONE (closed #477)
NxpLpcStubOrchestratorwith the realNxpLpcOrchestrator(Apollo3 pattern). Stage 2: implement NXP LPC8xx build orchestrator (replace stub, unstub LPC804/LPC845 CI) #477 is closed.variants/<variant>/pins_arduino.h.✅ Stage 3 — Arduino framework implementation — substantially DONE (still tracked open as #479)
The
zackees/ArduinoCore-LPC8xxrepo is no longer a stub skeleton — it has a real core now:platformio.ini.lpc804,lpc845,lpc845brk,lpcxpresso804,lpcxpresso845max.arduino-cli×platformio×fbuild) is wired with build badges (Warn on debug build flags (-g1/-g2/-g3) in all profiles, not just quick #10–Add velxio integration TODO to README #12, ci: cross-build PyO3 extension for linux-aarch64 and macos-x86_64 #16, ci: pin PyO3 extension glibc to 2.17 on linux-x86_64 #17).🔄 Stage 4 — framework integration — approach changed: external platform, not in-tree vendoring
The original plan was to vendor the core into
crates/fbuild-packages/src/library/lpc8xx_core.rsand flip the board JSONs toframeworks: ["arduino"]. That changed:zackees/platform-nxplpc-arduino(fork ofplatformio/platform-nxplpc+ Arduino framework binding; hasbuilder/,platform.json,platform.py,boards/), is now the PlatformIO platform bothplatformioandfbuildconsume — selected viaplatform = https://github.com/zackees/platform-nxplpc-arduino.gitinplatformio.ini(ArduinoCore-LPC8xx feat(apollo3): add build orchestrator, toolchain, and board definitions #14).platformio.iniand tracks the same code path — no fbuild-side vendoring required. The Stage-4 line item should be re-scoped from "vendor into fbuild-packages" to "track the external platform repo."boards/json/{lpc845brk,lpcxpresso804,lpcxpresso845max}.jsonnow exist alongsidelpc804/lpc845.🔄 Stage 5 — real test fixtures — partial
tests/platform/{lpc804, lpc845, lpcxpresso845max}/.tests/platform/{lpc845brk, lpcxpresso804}/(their board JSONs exist; only the fixtures are absent — this is the gap blocking their CI un-stub).🔄 Stage 6 — FastLED canary — driver side landed; smoke examples gated
On the FastLED/FastLED side (driver work under meta #2845, now closed via #2881):
FastLEDClocklessSmoke,FastLEDSpiSmoke) exist gated behindLPC8XX_ENABLE_FASTLED_EXAMPLE.⏳ Stage 7 — deploy support — not started
Upload path is CMSIS-DAP via OpenOCD (manual ISP fallback); vector-checksum tool lives in the platform repo's
tools/. No hardware-verified deploy yet.🔄 Stage 8 — unstub CI workflows — tracked in #528, partly done
lpcxpresso845maxis already real (template_build.ymlcaller + fixture + board JSON, green on main for 10+ runs via [codex] add ArduinoCore LPC8xx board metadata #514) — do not re-stub it.lpc845brk+lpcxpresso804(plus README badges). They stay stubs only because their in-tree fixtures don't exist yet (see Stage 5 gap).fbuild build . -e <variant>is green for all five variants inArduinoCore-LPC8xxupstream CI. The two remaining stubs convert to real callers as soon as the Stage-5 fixtures land.Net staircase
Stage 0 ✅ · 1 ✅ · 2 ✅ · 3 ✅(alpha) · 4 🔄(re-scoped to external platform) · 5 🔄 · 6 🔄 · 7 ⏳ · 8 🔄The critical-path remaining item for "FastLED sketches build, link, flash, and blink" is now hardware verification (Stages 3-tail + 7), not build plumbing — the build path works end-to-end in CI today.
ci(lpc8xx): un-stub lpc845brk + lpcxpresso804 builds (Stage 8 of #487) (
feat(lpc8xx): real Arduino Blink fixtures for lpc804/lpc845 (Stage 3 of
zackees commentedon Jun 13, 2026
Closing the META — build + framework + CI staircase is complete
All numbered sub-issues are merged & closed and the orchestrator → framework → CI path now produces real firmware for the LPC8xx family. Stage-by-stage:
zackees/ArduinoCore-LPC8xx)build()emitsfirmware.elf+firmware.binarduino_stubcore (Arduino.h,wiring_digital, real-SysTickwiring_time, HardwareSerial, SPI,main.cpp) compiles + links the Arduino surfacearduino_stubcore is bundled infbuild-build/src/nxplpc/assets/, andlpc804.json/lpc845.jsonnow advertiseframeworks: ["arduino", "cmsis"].main.cppis retained as the bundled core's framework-ownedmain(), mirroringArduinoCore-LPC8xx.tests/platform/lpc804andtests/platform/lpc845are real Blink sketches (pinMode/digitalWrite/delay); lpc845brk + lpcxpresso804 fixtures added in lpc8xx: convert 5 stub workflows to real builds (Stage 8 of #487) — orchestrator + upstream proof are in #528/PR ci(lpc8xx): un-stub lpc845brk + lpcxpresso804 builds (Stage 8 of #487) #548template_build.ymland link realfirmware.binMoved to their own tracking issues
The two remaining stages require the external core's real register-level GPIO/SPI plus physical boards, so they can't be completed or verified locally and shouldn't block this umbrella:
ArduinoCore-LPC8xx, whose bodies are still TODO stubs, + a FastLED LPC8xx platform shim)Closing this META: the in-repo build/framework/CI staircase is fully landed. Hardware-dependent bring-up continues in #550 and #551.
feat(nxplpc): vendor ArduinoCore-LPC8xx, retire embedded arduino_stub (…
feat(nxplpc): vendor ArduinoCore-LPC8xx, retire embedded arduino_stub (…