mirror of
https://github.com/ruvnet/RuView
synced 2026-07-28 18:21:42 +00:00
feat: complete vendor repos, add edge intelligence and WASM modules
- Add 154 missing vendor files (gitignore was filtering them) - vendor/midstream: 564 files (was 561) - vendor/sublinear-time-solver: 1190 files (was 1039) - Add ESP32 edge processing (ADR-039): presence, vitals, fall detection - Add WASM programmable sensing (ADR-040/041) with wasm3 runtime - Add firmware CI workflow (.github/workflows/firmware-ci.yml) - Add wifi-densepose-wasm-edge crate for edge WASM modules - Update sensing server, provision.py, UI components Co-Authored-By: claude-flow <ruv@ruv.net>
This commit is contained in:
@@ -0,0 +1,76 @@
|
||||
# WASM3 — WebAssembly interpreter for ESP-IDF
|
||||
#
|
||||
# ADR-040: Tier 3 WASM programmable sensing layer.
|
||||
# WASM3 is an MIT-licensed, lightweight interpreter (~100 KB flash, ~10 KB RAM)
|
||||
# optimized for embedded targets including Xtensa ESP32-S3.
|
||||
#
|
||||
# Pre-download WASM3 source before building:
|
||||
# cd firmware/esp32-csi-node/components/wasm3
|
||||
# git clone --depth 1 https://github.com/wasm3/wasm3.git wasm3-src
|
||||
#
|
||||
# Or run: scripts/fetch-wasm3.sh
|
||||
|
||||
cmake_minimum_required(VERSION 3.16)
|
||||
|
||||
set(WASM3_DIR "${CMAKE_CURRENT_SOURCE_DIR}/wasm3-src")
|
||||
|
||||
if(NOT EXISTS "${WASM3_DIR}/source/wasm3.h")
|
||||
message(STATUS "WASM3 source not found at ${WASM3_DIR}")
|
||||
message(STATUS "Attempting to download WASM3...")
|
||||
|
||||
# Try downloading inside build environment.
|
||||
set(WASM3_URL "https://github.com/nicholasgasior/wasm3/archive/refs/heads/main.tar.gz")
|
||||
set(WASM3_ARCHIVE "${CMAKE_CURRENT_BINARY_DIR}/wasm3.tar.gz")
|
||||
|
||||
file(DOWNLOAD "${WASM3_URL}" "${WASM3_ARCHIVE}"
|
||||
STATUS DOWNLOAD_STATUS TIMEOUT 30)
|
||||
list(GET DOWNLOAD_STATUS 0 DL_CODE)
|
||||
|
||||
if(DL_CODE EQUAL 0)
|
||||
execute_process(
|
||||
COMMAND ${CMAKE_COMMAND} -E tar xzf "${WASM3_ARCHIVE}"
|
||||
WORKING_DIRECTORY "${CMAKE_CURRENT_BINARY_DIR}")
|
||||
file(GLOB WASM3_EXTRACTED "${CMAKE_CURRENT_BINARY_DIR}/wasm3-*")
|
||||
if(WASM3_EXTRACTED)
|
||||
list(GET WASM3_EXTRACTED 0 WASM3_EXTRACTED_DIR)
|
||||
file(RENAME "${WASM3_EXTRACTED_DIR}" "${WASM3_DIR}")
|
||||
endif()
|
||||
file(REMOVE "${WASM3_ARCHIVE}")
|
||||
endif()
|
||||
|
||||
if(NOT EXISTS "${WASM3_DIR}/source/wasm3.h")
|
||||
message(WARNING "WASM3 source not available. Building WITHOUT WASM Tier 3 support.\n"
|
||||
"To enable: git clone --depth 1 https://github.com/wasm3/wasm3.git "
|
||||
"${WASM3_DIR}")
|
||||
# Register empty component so ESP-IDF doesn't error.
|
||||
idf_component_register()
|
||||
return()
|
||||
endif()
|
||||
endif()
|
||||
|
||||
# Collect all WASM3 source files.
|
||||
file(GLOB WASM3_SOURCES "${WASM3_DIR}/source/*.c")
|
||||
|
||||
idf_component_register(
|
||||
SRCS ${WASM3_SOURCES}
|
||||
INCLUDE_DIRS "${WASM3_DIR}/source"
|
||||
)
|
||||
|
||||
# WASM3 configuration for ESP32-S3 Xtensa target.
|
||||
target_compile_definitions(${COMPONENT_LIB} PUBLIC
|
||||
d_m3HasFloat=1 # Enable float support (needed for DSP)
|
||||
d_m3Use32BitSlots=1 # 32-bit value slots (saves RAM on ESP32)
|
||||
d_m3MaxFunctionStackHeight=128 # Conservative stack depth
|
||||
d_m3CodePageAlignSize=4096 # Page alignment for Xtensa
|
||||
d_m3LogOutput=0 # Disable WASM3 stdout logging (use ESP_LOG)
|
||||
d_m3FixedHeap=0 # Use dynamic allocation (PSRAM-friendly)
|
||||
WASM3_AVAILABLE=1 # Flag for conditional compilation
|
||||
)
|
||||
|
||||
# Suppress warnings from third-party code.
|
||||
target_compile_options(${COMPONENT_LIB} PRIVATE
|
||||
-Wno-unused-function
|
||||
-Wno-unused-variable
|
||||
-Wno-maybe-uninitialized
|
||||
-Wno-sign-compare
|
||||
)
|
||||
Reference in New Issue
Block a user