Skip to content

refactor(build): extract esp/arm/mcu platform crates for parallel compiles (#1008 A2)#1017

Merged
zackees merged 1 commit into
mainfrom
feat/1008-a2-platform-crates
Jul 9, 2026
Merged

refactor(build): extract esp/arm/mcu platform crates for parallel compiles (#1008 A2)#1017
zackees merged 1 commit into
mainfrom
feat/1008-a2-platform-crates

Conversation

@zackees

@zackees zackees commented Jul 9, 2026

Copy link
Copy Markdown
Member

Part of #1008 — Phase A2. Move the 14 platform orchestrators out of the fbuild-build facade into three per-family crates that depend only on fbuild-build-engine and compile in parallel:

  • fbuild-build-esp — esp32, esp8266
  • fbuild-build-arm — generic_arm, stm32, rp2040, apollo3, nxplpc, sam, nrf52, silabs, teensy, renesas
  • fbuild-build-mcu — avr, ch32v

Each platform crate does pub use fbuild_build_engine::* so its modules' crate::<engine_mod> / crate::BuildParams / crate::PlatformSupport paths resolve unchanged. Migrated the 8 crate::esp32::mcu_config::DefineEntry imports in arm/mcu platforms to the engine path so the groups are self-contained. The facade re-exports all three (pub use fbuild_build_esp::{…} etc.) — every fbuild_build::esp32::… / fbuild_build::teensy::… path and get_platform_support() keep resolving; consumers unchanged.

Net effect: an edit to one platform (e.g. teensy) now recompiles only fbuild-build-arm + the ~90-LOC facade, not the whole 37.7K-LOC crate; the three platform crates rebuild concurrently.

Verified — local + Linux Docker

  • cargo check --workspace green (cli/daemon unchanged) on Windows + Linux Docker (1m43s incremental).
  • esp 16 + arm 195 + mcu 92 + facade 53 = 356 tests pass (matching pre-split), Linux Docker.
  • crate-gate OK (18 members); clippy -D warnings + fmt clean.

🤖 Generated with Claude Code

…compiles (#1008 A2)

Phase A2 of the compile-parallelism split. Move the 14 platform orchestrators out
of the fbuild-build facade into three per-family crates that depend only on
fbuild-build-engine and compile IN PARALLEL:

  fbuild-build-esp  — esp32, esp8266
  fbuild-build-arm  — generic_arm, stm32, rp2040, apollo3, nxplpc, sam, nrf52,
                      silabs, teensy, renesas
  fbuild-build-mcu  — avr, ch32v

Each platform crate does `pub use fbuild_build_engine::*` so its modules'
`crate::<engine_mod>` / `crate::BuildParams` / `crate::PlatformSupport` paths
resolve unchanged. Migrated the 8 `crate::esp32::mcu_config::DefineEntry` imports
(in arm/mcu platforms) to the engine path `crate::mcu_config::DefineEntry` so the
groups are self-contained (ENGINE→PLATFORM = 0, PLATFORM→PLATFORM only within a
group). The facade re-exports all three crates (`pub use fbuild_build_esp::{…}`
etc.) so every `fbuild_build::esp32::…` / `fbuild_build::teensy::…` path and the
`get_platform_support()` factory keep resolving — consumers unchanged.

Net effect: an edit to one platform (e.g. teensy) now recompiles only
fbuild-build-arm + the ~90-LOC facade, not the whole 37.7K-LOC crate; the three
platform crates rebuild concurrently.

crate-gate: added the three crates to root members + both allowlists.

Verified: `cargo check --workspace` green (cli/daemon unchanged); esp 16 + arm 195
+ mcu 92 + facade 53 tests pass (356 total, matching pre-split); crate-gate OK
(18 members); clippy -D warnings + fmt clean.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
@coderabbitai

coderabbitai Bot commented Jul 9, 2026

Copy link
Copy Markdown

Important

Review skipped

Too many files!

This PR contains 166 files, which is 16 over the limit of 150.

To get a review, narrow the scope:
• coderabbit review --type committed # exclude uncommitted changes
• coderabbit review --dir # limit to a subdirectory
• coderabbit review --base # compare against a closer base

Upgrade to a paid plan to raise the limit.

⚙️ Run configuration

Configuration used: Path: .coderabbit.yaml

Review profile: CHILL

Plan: Pro

Run ID: a9c6e59f-6570-4823-a34d-7230e9e3c399

📥 Commits

Reviewing files that changed from the base of the PR and between cd483b3 and 3856176.

⛔ Files ignored due to path filters (1)
  • Cargo.lock is excluded by !**/*.lock
📒 Files selected for processing (166)
  • Cargo.toml
  • ci/check_workspace_crates.py
  • ci/hooks/crate_guard.py
  • crates/fbuild-build-arm/Cargo.toml
  • crates/fbuild-build-arm/README.md
  • crates/fbuild-build-arm/src/apollo3/README.md
  • crates/fbuild-build-arm/src/apollo3/configs/README.md
  • crates/fbuild-build-arm/src/apollo3/configs/apollo3.json
  • crates/fbuild-build-arm/src/apollo3/mcu_config.rs
  • crates/fbuild-build-arm/src/apollo3/mod.rs
  • crates/fbuild-build-arm/src/apollo3/orchestrator.rs
  • crates/fbuild-build-arm/src/generic_arm/README.md
  • crates/fbuild-build-arm/src/generic_arm/arm_compiler.rs
  • crates/fbuild-build-arm/src/generic_arm/arm_linker.rs
  • crates/fbuild-build-arm/src/generic_arm/mcu_config.rs
  • crates/fbuild-build-arm/src/generic_arm/mod.rs
  • crates/fbuild-build-arm/src/lib.rs
  • crates/fbuild-build-arm/src/nrf52/README.md
  • crates/fbuild-build-arm/src/nrf52/configs/README.md
  • crates/fbuild-build-arm/src/nrf52/configs/nrf52840.json
  • crates/fbuild-build-arm/src/nrf52/mcu_config.rs
  • crates/fbuild-build-arm/src/nrf52/mod.rs
  • crates/fbuild-build-arm/src/nrf52/nrf52_compiler.rs
  • crates/fbuild-build-arm/src/nrf52/nrf52_linker.rs
  • crates/fbuild-build-arm/src/nrf52/orchestrator.rs
  • crates/fbuild-build-arm/src/nxplpc/README.md
  • crates/fbuild-build-arm/src/nxplpc/configs/README.md
  • crates/fbuild-build-arm/src/nxplpc/configs/nxplpc.json
  • crates/fbuild-build-arm/src/nxplpc/mcu_config.rs
  • crates/fbuild-build-arm/src/nxplpc/mod.rs
  • crates/fbuild-build-arm/src/nxplpc/orchestrator.rs
  • crates/fbuild-build-arm/src/renesas/README.md
  • crates/fbuild-build-arm/src/renesas/configs/README.md
  • crates/fbuild-build-arm/src/renesas/configs/ra4m1.json
  • crates/fbuild-build-arm/src/renesas/mcu_config.rs
  • crates/fbuild-build-arm/src/renesas/mod.rs
  • crates/fbuild-build-arm/src/renesas/orchestrator.rs
  • crates/fbuild-build-arm/src/renesas/renesas_compiler.rs
  • crates/fbuild-build-arm/src/renesas/renesas_linker.rs
  • crates/fbuild-build-arm/src/rp2040/README.md
  • crates/fbuild-build-arm/src/rp2040/configs/README.md
  • crates/fbuild-build-arm/src/rp2040/configs/rp2040.json
  • crates/fbuild-build-arm/src/rp2040/configs/rp2350.json
  • crates/fbuild-build-arm/src/rp2040/mcu_config.rs
  • crates/fbuild-build-arm/src/rp2040/mod.rs
  • crates/fbuild-build-arm/src/rp2040/orchestrator.rs
  • crates/fbuild-build-arm/src/sam/README.md
  • crates/fbuild-build-arm/src/sam/configs/README.md
  • crates/fbuild-build-arm/src/sam/configs/sam3x.json
  • crates/fbuild-build-arm/src/sam/configs/samd21.json
  • crates/fbuild-build-arm/src/sam/configs/samd51.json
  • crates/fbuild-build-arm/src/sam/mcu_config.rs
  • crates/fbuild-build-arm/src/sam/mod.rs
  • crates/fbuild-build-arm/src/sam/orchestrator.rs
  • crates/fbuild-build-arm/src/sam/sam_compiler.rs
  • crates/fbuild-build-arm/src/sam/sam_linker.rs
  • crates/fbuild-build-arm/src/silabs/README.md
  • crates/fbuild-build-arm/src/silabs/configs/README.md
  • crates/fbuild-build-arm/src/silabs/configs/efr32mg24.json
  • crates/fbuild-build-arm/src/silabs/mcu_config.rs
  • crates/fbuild-build-arm/src/silabs/mod.rs
  • crates/fbuild-build-arm/src/silabs/orchestrator.rs
  • crates/fbuild-build-arm/src/silabs/silabs_compiler.rs
  • crates/fbuild-build-arm/src/silabs/silabs_linker.rs
  • crates/fbuild-build-arm/src/stm32/README.md
  • crates/fbuild-build-arm/src/stm32/configs/README.md
  • crates/fbuild-build-arm/src/stm32/configs/stm32f1.json
  • crates/fbuild-build-arm/src/stm32/configs/stm32f4.json
  • crates/fbuild-build-arm/src/stm32/configs/stm32h7.json
  • crates/fbuild-build-arm/src/stm32/configs/stm32u5.json
  • crates/fbuild-build-arm/src/stm32/mcu_config.rs
  • crates/fbuild-build-arm/src/stm32/mod.rs
  • crates/fbuild-build-arm/src/stm32/orchestrator/README.md
  • crates/fbuild-build-arm/src/stm32/orchestrator/arduino_mbed.rs
  • crates/fbuild-build-arm/src/stm32/orchestrator/framework_props.rs
  • crates/fbuild-build-arm/src/stm32/orchestrator/includes.rs
  • crates/fbuild-build-arm/src/stm32/orchestrator/mod.rs
  • crates/fbuild-build-arm/src/stm32/orchestrator/variant_files.rs
  • crates/fbuild-build-arm/src/teensy/README.md
  • crates/fbuild-build-arm/src/teensy/configs/README.md
  • crates/fbuild-build-arm/src/teensy/configs/reference/README.md
  • crates/fbuild-build-arm/src/teensy/configs/reference/teensy36.json
  • crates/fbuild-build-arm/src/teensy/configs/reference/teensy40.json
  • crates/fbuild-build-arm/src/teensy/configs/reference/teensy41.json
  • crates/fbuild-build-arm/src/teensy/configs/reference/teensylc.json
  • crates/fbuild-build-arm/src/teensy/configs/teensy30.json
  • crates/fbuild-build-arm/src/teensy/configs/teensy31.json
  • crates/fbuild-build-arm/src/teensy/configs/teensy3x.json
  • crates/fbuild-build-arm/src/teensy/configs/teensy4x.json
  • crates/fbuild-build-arm/src/teensy/configs/teensylc.json
  • crates/fbuild-build-arm/src/teensy/mcu_config.rs
  • crates/fbuild-build-arm/src/teensy/mod.rs
  • crates/fbuild-build-arm/src/teensy/orchestrator.rs
  • crates/fbuild-build-arm/src/teensy/teensy_compiler.rs
  • crates/fbuild-build-arm/src/teensy/teensy_linker.rs
  • crates/fbuild-build-esp/Cargo.toml
  • crates/fbuild-build-esp/README.md
  • crates/fbuild-build-esp/src/esp32/README.md
  • crates/fbuild-build-esp/src/esp32/configs/README.md
  • crates/fbuild-build-esp/src/esp32/configs/esp32.json
  • crates/fbuild-build-esp/src/esp32/configs/esp32c2.json
  • crates/fbuild-build-esp/src/esp32/configs/esp32c3.json
  • crates/fbuild-build-esp/src/esp32/configs/esp32c5.json
  • crates/fbuild-build-esp/src/esp32/configs/esp32c6.json
  • crates/fbuild-build-esp/src/esp32/configs/esp32h2.json
  • crates/fbuild-build-esp/src/esp32/configs/esp32p4.json
  • crates/fbuild-build-esp/src/esp32/configs/esp32s2.json
  • crates/fbuild-build-esp/src/esp32/configs/esp32s3.json
  • crates/fbuild-build-esp/src/esp32/configs/reference/README.md
  • crates/fbuild-build-esp/src/esp32/configs/reference/esp32.json
  • crates/fbuild-build-esp/src/esp32/configs/reference/esp32c2.json
  • crates/fbuild-build-esp/src/esp32/configs/reference/esp32c3.json
  • crates/fbuild-build-esp/src/esp32/configs/reference/esp32c5.json
  • crates/fbuild-build-esp/src/esp32/configs/reference/esp32c6.json
  • crates/fbuild-build-esp/src/esp32/configs/reference/esp32p4.json
  • crates/fbuild-build-esp/src/esp32/configs/reference/esp32s3.json
  • crates/fbuild-build-esp/src/esp32/configs/reference/esp8266.json
  • crates/fbuild-build-esp/src/esp32/esp32_compiler.rs
  • crates/fbuild-build-esp/src/esp32/esp32_linker.rs
  • crates/fbuild-build-esp/src/esp32/mcu_config.rs
  • crates/fbuild-build-esp/src/esp32/mod.rs
  • crates/fbuild-build-esp/src/esp32/orchestrator/README.md
  • crates/fbuild-build-esp/src/esp32/orchestrator/boot_artifacts.rs
  • crates/fbuild-build-esp/src/esp32/orchestrator/build.rs
  • crates/fbuild-build-esp/src/esp32/orchestrator/cdc.rs
  • crates/fbuild-build-esp/src/esp32/orchestrator/embed.rs
  • crates/fbuild-build-esp/src/esp32/orchestrator/embed_stage.rs
  • crates/fbuild-build-esp/src/esp32/orchestrator/fingerprint.rs
  • crates/fbuild-build-esp/src/esp32/orchestrator/framework_libs.rs
  • crates/fbuild-build-esp/src/esp32/orchestrator/helpers.rs
  • crates/fbuild-build-esp/src/esp32/orchestrator/local_libs.rs
  • crates/fbuild-build-esp/src/esp32/orchestrator/mod.rs
  • crates/fbuild-build-esp/src/esp32/orchestrator/packages.rs
  • crates/fbuild-build-esp/src/esp32/orchestrator/tests.rs
  • crates/fbuild-build-esp/src/esp8266/README.md
  • crates/fbuild-build-esp/src/esp8266/configs/README.md
  • crates/fbuild-build-esp/src/esp8266/configs/esp8266.json
  • crates/fbuild-build-esp/src/esp8266/esp8266_compiler.rs
  • crates/fbuild-build-esp/src/esp8266/esp8266_linker.rs
  • crates/fbuild-build-esp/src/esp8266/mcu_config.rs
  • crates/fbuild-build-esp/src/esp8266/mod.rs
  • crates/fbuild-build-esp/src/esp8266/orchestrator.rs
  • crates/fbuild-build-esp/src/lib.rs
  • crates/fbuild-build-mcu/Cargo.toml
  • crates/fbuild-build-mcu/README.md
  • crates/fbuild-build-mcu/src/avr/README.md
  • crates/fbuild-build-mcu/src/avr/avr_compiler.rs
  • crates/fbuild-build-mcu/src/avr/avr_linker.rs
  • crates/fbuild-build-mcu/src/avr/configs/README.md
  • crates/fbuild-build-mcu/src/avr/configs/avr.json
  • crates/fbuild-build-mcu/src/avr/configs/reference/README.md
  • crates/fbuild-build-mcu/src/avr/configs/reference/avr.json
  • crates/fbuild-build-mcu/src/avr/mcu_config.rs
  • crates/fbuild-build-mcu/src/avr/mod.rs
  • crates/fbuild-build-mcu/src/avr/orchestrator.rs
  • crates/fbuild-build-mcu/src/ch32v/README.md
  • crates/fbuild-build-mcu/src/ch32v/ch32v_compiler.rs
  • crates/fbuild-build-mcu/src/ch32v/ch32v_linker.rs
  • crates/fbuild-build-mcu/src/ch32v/configs/README.md
  • crates/fbuild-build-mcu/src/ch32v/configs/ch32v003.json
  • crates/fbuild-build-mcu/src/ch32v/mcu_config.rs
  • crates/fbuild-build-mcu/src/ch32v/mod.rs
  • crates/fbuild-build-mcu/src/ch32v/orchestrator.rs
  • crates/fbuild-build-mcu/src/lib.rs
  • crates/fbuild-build/Cargo.toml
  • crates/fbuild-build/src/lib.rs

You can disable this status message by setting the reviews.review_status to false in the CodeRabbit configuration file.

Use the checkbox below for a quick retry:

  • 🔍 Trigger review
✨ Finishing Touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch feat/1008-a2-platform-crates

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands.

@zackees zackees merged commit 23d9da2 into main Jul 9, 2026
94 of 97 checks passed
@zackees zackees deleted the feat/1008-a2-platform-crates branch July 9, 2026 21:44
@fastled-project-sync fastled-project-sync Bot moved this to Triage in FastLED Tracker Jul 10, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

Status: Triage

Development

Successfully merging this pull request may close these issues.

1 participant