Compatibility table
Purpose
Section titled “Purpose”Answer “does this engine and toolchain run on this board” from records rather than from memory. Every cell names one of four states and every non-empty state points at its source.
Prerequisites
Section titled “Prerequisites”None. To reproduce a hardware-validated cell you need the board named in the row and the Batch runs from YAML recipe, which is the nightly workflow.
Status vocabulary
Section titled “Status vocabulary”| Cell | Meaning | Source that can set it |
|---|---|---|
| hardware-validated | a case with this board, engine and toolchain passed in a recorded run of .github/workflows/hardware-validation.yml |
the run’s validation_manifest.json |
| compile-only | firmware for this combination built in CI without a board | a recorded compile result; the historical matrices below do not use this status |
| experimental | the sources label the target best-effort and outside the compatibility guarantees | guide/boards.mdx, the board’s config comments, platform/board.py (is_fpga) |
| unknown | no record either way | the absence of a source |
The board list is hpx boards, in registry order (platform/registry.py,
list_boards()); channel is the registry’s stable or preview field.
The toolchains are the Toolchain enum in vocab.py: arm-none-eabi-gcc
and its alias gcc are one column, since both resolve to the GNU Arm
Embedded toolchain; armclang is Arm Compiler 6; atfe is the Arm
Toolchain for Embedded. The engines are the EngineType enum.
The matrices summarize a dated run, not a guarantee for every later version. An engine cell and a toolchain cell do not establish every possible pairing. Use the run record and compatibility baseline to check the exact revisions and combinations you need.
1. Boards against engines
Section titled “1. Boards against engines”| Board | Channel | Core | heliaRT | heliaAOT | TFLM | ExecuTorch |
|---|---|---|---|---|---|---|
apollo3p_evb |
stable | Cortex-M4 | hardware-validated | hardware-validated | hardware-validated | unknown |
apollo3p_evb_cygnus |
preview | Cortex-M4 | unknown | unknown | unknown | unknown |
apollo4p_evb |
preview | Cortex-M4 | unknown | unknown | unknown | unknown |
apollo4l_evb |
preview | Cortex-M4 | unknown | unknown | unknown | unknown |
apollo4l_blue_evb |
preview | Cortex-M4 | hardware-validated | hardware-validated | hardware-validated | unknown |
apollo4p_blue_kbr_evb |
preview | Cortex-M4 | unknown | unknown | unknown | unknown |
apollo4p_blue_kxr_evb |
preview | Cortex-M4 | unknown | unknown | unknown | unknown |
apollo510_evb |
stable | Cortex-M55 | hardware-validated | hardware-validated | hardware-validated | hardware-validated |
apollo510b_evb |
preview | Cortex-M55 | unknown | unknown | unknown | unknown |
apollo5b_evb |
preview | Cortex-M55 | unknown | unknown | unknown | unknown |
apollo330mP_evb |
preview | Cortex-M55 | hardware-validated | hardware-validated | hardware-validated | hardware-validated |
apollo510dL_evb |
preview | Cortex-M55 | unknown | unknown | unknown | unknown |
atomiq110_fpga_turbo |
preview | Cortex-M55 (FPGA) | experimental | experimental | experimental | experimental |
2. Boards against toolchains
Section titled “2. Boards against toolchains”| Board | GNU Arm (arm-none-eabi-gcc, gcc) |
Arm Compiler 6 (armclang) |
ATfE (atfe) |
|---|---|---|---|
apollo3p_evb |
hardware-validated | unknown | hardware-validated |
apollo3p_evb_cygnus |
unknown | unknown | unknown |
apollo4p_evb |
unknown | unknown | unknown |
apollo4l_evb |
unknown | unknown | unknown |
apollo4l_blue_evb |
hardware-validated | unknown | unknown; the nightly run skipped every ATfE case with “NSX board module nsx-board-apollo4l-blue-evb does not declare the atfe toolchain” |
apollo4p_blue_kbr_evb |
unknown | unknown | unknown |
apollo4p_blue_kxr_evb |
unknown | unknown | unknown |
apollo510_evb |
hardware-validated | unknown | hardware-validated |
apollo510b_evb |
unknown | unknown | unknown |
apollo5b_evb |
unknown | unknown | unknown |
apollo330mP_evb |
hardware-validated | unknown | hardware-validated |
apollo510dL_evb |
unknown | unknown | unknown |
atomiq110_fpga_turbo |
experimental | experimental | experimental |
3. The record behind every hardware-validated cell
Section titled “3. The record behind every hardware-validated cell”Nightly hardware validation run 35078330526
of 2026-09-16, suite complete, hpx 0.1.6 at source commit 0714893 (the
runner’s tree was not clean, per the manifests’ repo.dirty), over the
MLPerf Tiny models kws, vww, ic and ad:
| Board | Cases | Passed | Engines run | Toolchains run |
|---|---|---|---|---|
apollo510_evb |
32 | 32 | heliaRT, heliaAOT, TFLM, ExecuTorch | GNU Arm, ATfE |
apollo330mP_evb |
32 | 32 | heliaRT, heliaAOT, TFLM, ExecuTorch | GNU Arm, ATfE |
apollo3p_evb |
24 | 24 | heliaRT, heliaAOT, TFLM | GNU Arm, ATfE |
apollo4l_blue_evb |
24 | 12 passed, 12 skipped | heliaRT, heliaAOT, TFLM | GNU Arm (ATfE skipped) |
Nine of the run’s bundles ship in the repository under
examples/results/hardware-validation-2026-09-16/, described on
Batch runs from YAML; each nsx.lock records
the module revisions the cell was validated with.
An armclang case does not exist in the nightly suite, so no cell in that
column is hardware-validated. ExecuTorch cases exist only for Cortex-M55
boards and only for models carrying an ExecuTorch variant
(validation/matrix.py), so the Cortex-M4 rows record unknown for it: no
case was enumerated, and no other source states support either way.
Expected output
Section titled “Expected output”A cell you can act on: hardware-validated means the cited run passed at its recorded revisions; Batch runs from YAML explains how to test your setup; experimental means the wording on Boards and targets applies; unknown means the records cited on this page do not establish the combination. It is not evidence of either support or failure.
What next
Section titled “What next”Compatibility baseline for the module and engine revisions hpx qualifies; Boards and targets and Engines for what each row and column means.