Skip to content

v0.3.0: QEMU emulator backend

Choose a tag to compare

@rvben rvben released this 02 Jul 17:55
v0.3.0
8ebc25a

Highlights

QEMU emulator backend (new, tier 1)

esprite can now run a real compiled flash image under Espressif's QEMU fork, alongside the host-native backend, behind the same CLI:

  • New target qemu_esp32c3: serial, logs, and headless serve against any ESP32-C3 image (ESPRITE_QEMU_IMAGE). Boots real ESP-IDF and Arduino binaries.
  • Deterministic on ESP32-C3: icount mode gives byte-for-byte identical serial output across runs. Xtensa (ESP32/S3) runs wall-clock only (icount hangs in the current fork release).
  • make qemu-fetch (pinned prebuilt emulators, no source build), make qemu-fixtures (scripted test images), make qemu-test (self-skipping; default build and tests never require QEMU).
  • list-targets reports a backend field; missing prerequisites yield the new backend_unavailable error kind; everything not yet emulator-capable degrades explicitly to unsupported.
  • Signal-safe child lifecycle: the emulator process never outlives the CLI, including Ctrl-C mid-boot.

More

  • agentgauge firmware target onboarded (Wi-Fi Claude usage-limit desk gauge).
  • wifi up/wifi down to control the simulated link state.
  • swipe command for gesture validation.
  • expect assertions in scenarios and the run session.
  • Live BLE bridge: serve --ble-port N exposes the virtual link to real host processes.

Fixes

  • LVGL screen ownership for ui snapshots; display and buffer reuse.
  • strlcpy shim only defined where libc lacks it.
  • peripherals library declares its real link dependency on core (fixes GNU ld builds).

Binaries below carry the generic targets (sample_gfx, cyd, cyd_tft); the agentgauge target needs a source build against a firmware checkout (see README). esprite is alpha software; interfaces may change.