mirror of
https://github.com/ruvnet/RuView
synced 2026-08-07 20:01:43 +00:00
22d47a71e3
Phase 4 of the #513 roadmap: ESP-IDF component skeleton at `firmware/esp32-csi-node/components/ruv_temporal/`. Source is complete and self-consistent; cross-compile to xtensa-esp32s3-none-elf is blocked by a known-broken esp-rs nightly snapshot (details in the component README). What's in the scaffold: - `Cargo.toml` — staticlib, no_std + alloc, deps on the path-vendored `ruvllm_sparse_attention` (matching ADR-096's host-side dep) and `esp-alloc`/`critical-section` for the no_std allocator and lock primitives. - `src/lib.rs` — public C ABI (init / push / classify / destroy / self_test) with `#[no_mangle]` exports, a `[#used]` keepalive table to defeat aggressive linker stripping, esp-alloc as the global allocator (heap region added at runtime by the firmware), and a loop-on-panic handler (Phase 5 will route through esp_system_abort). - `src/window.rs` — `FrameRing`, the rolling-window buffer that `ruv_temporal_push` writes to. Chronological iteration via `iter_chronological()` so the kernel sees oldest-first. - `include/ruv_temporal.h` — the public C header consumed by edge_processing.c. Threading contract documented inline (single dedicated FreeRTOS task, no internal locks). - `CMakeLists.txt` — runs `cargo +esp build` as an ESP-IDF pre-component-register step, then registers the static library through `idf_component_register` + `target_link_libraries(... INTERFACE ...)`. `shim.c` exists only because `idf_component_register` requires SRCS. - `.cargo/config.toml` + `rust-toolchain.toml` — pin the build to `xtensa-esp32s3-none-elf` and the `esp` toolchain channel so `cargo build` without flags Just Works once the toolchain is unblocked. - `README.md` — Phase status table, Phase 5 toolchain blocker explanation, and the espup install fix. ABI calls into edge_processing.c (Phase 6) and COM8 validation (Phase 7) follow once the cross-compile is unblocked. Closes nothing yet; advances #513. Co-Authored-By: claude-flow <ruv@ruv.net>
42 lines
1.8 KiB
CMake
42 lines
1.8 KiB
CMake
# ESP-IDF component manifest for the ruv_temporal Rust staticlib (ADR-095).
|
|
#
|
|
# Build flow:
|
|
# 1. Run `cargo +esp build --release --target xtensa-esp32s3-none-elf` in
|
|
# this directory. Output: target/xtensa-esp32s3-none-elf/release/libruv_temporal.a
|
|
# 2. Register the resulting static library and the public header dir
|
|
# with idf_component_register so it shows up on the firmware's
|
|
# include path and link line.
|
|
#
|
|
# Phase 4: scaffold only — registered but no kernel work runs yet.
|
|
# Phase 5: cross-compile validated, binary delta measured.
|
|
# Phase 6: enabled via CONFIG_CSI_TEMPORAL_HEAD_ENABLED Kconfig flag and
|
|
# fed from edge_processing.c.
|
|
|
|
set(RUV_TEMPORAL_DIR "${CMAKE_CURRENT_SOURCE_DIR}")
|
|
set(RUV_TEMPORAL_TARGET "xtensa-esp32s3-none-elf")
|
|
set(RUV_TEMPORAL_PROFILE "release")
|
|
set(RUV_TEMPORAL_LIB
|
|
"${RUV_TEMPORAL_DIR}/target/${RUV_TEMPORAL_TARGET}/${RUV_TEMPORAL_PROFILE}/libruv_temporal.a")
|
|
|
|
# Run the cargo build as a custom command. ESP-IDF's CMake runs at
|
|
# configure time; we want the staticlib to exist before idf_component_register
|
|
# runs so it can be added as INTERFACE_LINK_LIBRARIES.
|
|
add_custom_command(
|
|
OUTPUT "${RUV_TEMPORAL_LIB}"
|
|
WORKING_DIRECTORY "${RUV_TEMPORAL_DIR}"
|
|
COMMAND cargo +esp build --release --target ${RUV_TEMPORAL_TARGET}
|
|
COMMENT "Building ruv_temporal Rust staticlib for ${RUV_TEMPORAL_TARGET}"
|
|
VERBATIM
|
|
)
|
|
add_custom_target(ruv_temporal_rust_build ALL DEPENDS "${RUV_TEMPORAL_LIB}")
|
|
|
|
idf_component_register(
|
|
SRCS "shim.c" # tiny C shim so idf_component_register has a SRCS
|
|
INCLUDE_DIRS "include"
|
|
PRIV_REQUIRES "esp_common"
|
|
)
|
|
|
|
# Wire the staticlib in.
|
|
add_dependencies(${COMPONENT_LIB} ruv_temporal_rust_build)
|
|
target_link_libraries(${COMPONENT_LIB} INTERFACE "${RUV_TEMPORAL_LIB}")
|