Skip to content

Espressif: Add ESP-IDF component template for ExecuTorch - #24292

Merged
JakeStevens merged 1 commit into
pytorch:mainfrom
JakeStevens:espressif-idf-template
Nov 2, 2026
Merged

JakeStevens merged 1 commit into
pytorch:mainfrom
JakeStevens:espressif-idf-template

Conversation

@JakeStevens

@JakeStevens JakeStevens commented Oct 29, 2026 •

Copy link
Copy Markdown
Contributor

Summary

Add the "hand-written" template for a generated ExecuTorch ESP-IDF
component.

This contains only the component glue that is copied into generated
output: the component CMakeLists.txt, manifest template, README,
the small C inference API in et_model.h/et_model.cpp, and the
ESP-IDF MmapDataLoader stub (ESP-IDF has no mmap). It deliberately
does not carry a PAL copy; the generator in the next PR copies the
shared PAL from #24291.

Splitting the template out keeps the hand-written runtime glue
reviewable separately from the generator and its vendored output.
On its own this PR is inert: et_generated.cmake and Kconfig are

Test plan

  • With the generator PR applied, generated a component from this
    template and built a minimal ESP-IDF consumer that calls
    et_model_create for esp32s3 and esp32c5 with ESP-IDF v6.0.1;
    both builds complete.
  • Verified the template contains no PAL copy; the generated
    component's src/platform/esp_pal.cpp is byte-identical to the
    shared PAL from Espressif: Share one ESP-IDF PAL across examples #24291.
  • Tested fully end to end w/ Muse Gadget SDK on Box 3

@JakeStevens JakeStevens added the release notes: examples Changes to any of our example LLMs integrations, such as Llama3 and Llava label Oct 29, 2026
@pytorch-bot

pytorch-bot Bot commented Oct 29, 2026 •

Copy link
Copy Markdown

🔗 Helpful Links

🧪 See artifacts and rendered test results at hud.pytorch.org/pr/pytorch/executorch/24292

Note: Links to docs will display an error until the docs builds have been completed.

❌ 1 New Failure, 3 Pending, 2 Unclassified Failures

As of commit 000859e with merge base 822cb60 (image):

NEW FAILURE - The following job has failed:

UNCLASSIFIED FAILURES - DrCI could not classify the following jobs because the workflow did not run on the merge base. The failures may be pre-existing on trunk or introduced by this PR:

This comment was automatically generated by Dr. CI and updates every 15 minutes.

@meta-cla meta-cla Bot added the CLA Signed This label is managed by the Facebook bot. Authors need to sign the CLA before a PR can be reviewed. label Oct 29, 2026
@JakeStevens
JakeStevens force-pushed the espressif-idf-template branch 4 times, most recently from f824807 to b2a15ff Compare October 30, 2026 18:10
@JakeStevens
JakeStevens marked this pull request as ready for review October 30, 2026 20:41
@JakeStevens
JakeStevens requested a review from rascani October 30, 2026 20:41
@JakeStevens
JakeStevens force-pushed the espressif-idf-template branch from b2a15ff to 6eff9fb Compare November 2, 2026 18:16
Add the hand-written glue the component generator (next PR) stamps out:
a registry-shaped CMakeLists.txt gated by CONFIG_ET_ENABLE with
WHOLE_ARCHIVE kernel registration and size options (-Os, program
verification, debug asserts, kernel registry size), the
idf_component.yml and README templates, and et_model, a small C
inference API over Program/Method whose method, planned and optional
scratch arenas are caller-provided or placed with heap_caps. The
component carries only the core runtime and BufferDataLoader, and the
shared PAL is copied in by the generator rather than forked here.

Authored with AI assistance using Claude Code.
@JakeStevens
JakeStevens force-pushed the espressif-idf-template branch from 6eff9fb to 000859e Compare November 2, 2026 18:32
@JakeStevens
JakeStevens merged commit 893d815 into pytorch:main Nov 2, 2026
254 of 257 checks passed
JakeStevens added a commit that referenced this pull request Nov 3, 2026
…#24293)

### Summary
Add `examples/espressif/build_idf_component.sh`, which generates a
source-vendored, registry-shaped ESP-IDF component from this
repository, following the same approach as the Arduino library
packaging but with an ESP-IDF layout.

The generator produces the schema headers, vendors the runtime and
needed kernel sources (using the same `build_variables.bzl` lists as
the CMake build), copies the component template from #24292 and the
shared PAL from #24291, and writes `et_generated.cmake`, `Kconfig`,
`idf_component.yml`, licenses, and a `VERSION` file recording the
ExecuTorch commit and per-profile op-set hashes. Kernel
registration is generated per profile in `idf_profiles/<name>.ops`;
the component's Kconfig selects which profile compiles, so switching
profiles needs no regeneration. This PR ships one example profile,
`wakeword_int8`, which mixes portable ATen glue ops with Cadence
backend generic (portable) int8 kernels.

Consumers of the generated component need only ESP-IDF — no host
CMake build and no `flatc`. Application code and models are not
included; they stay with the application.

Stacked on #24292
### Test plan
- Generated the component:
`./examples/espressif/build_idf_component.sh --profiles wakeword_int8
--out /tmp/et-idf-out`
  (component version `1.6.0~3`, 80 sources / 292 headers; the
  known exporter/runtime version-skew warning is printed when the
  installed Python package was built from a different commit).
- Verified the generated `src/platform/esp_pal.cpp` is
  byte-identical to `examples/espressif/platform/esp_pal.cpp`
  (`cmp`).
- Built a minimal ESP-IDF consumer that vendors the generated
  component and calls `et_model_create`, for `esp32s3` and
  `esp32c5` with ESP-IDF v6.0.1 (`idf.py set-target <target> build`);
  both complete with `Project build complete`.
- Ran end to end on Muse Gadget SDK w/ Box 3
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

CLA Signed This label is managed by the Facebook bot. Authors need to sign the CLA before a PR can be reviewed. release notes: examples Changes to any of our example LLMs integrations, such as Llama3 and Llava

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants