50 lines
2.0 KiB
CMake
50 lines
2.0 KiB
CMake
# ESP-IDF component manifest for the ruv_temporal Rust staticlib (ADR-095).
|
|
#
|
|
# Build flow:
|
|
# - When CONFIG_CSI_TEMPORAL_HEAD_ENABLED is OFF (default): register an
|
|
# empty stub. main/temporal_task.c compiles the no-op shim path, no
|
|
# cargo, no Rust toolchain dependency. Default firmware build is
|
|
# unaffected.
|
|
# - When CONFIG_CSI_TEMPORAL_HEAD_ENABLED is ON: invoke
|
|
# `cargo +esp build --release --target xtensa-esp32s3-none-elf`,
|
|
# register the resulting libruv_temporal.a, and expose include/.
|
|
#
|
|
# add_custom_command is intentionally placed AFTER idf_component_register
|
|
# because ESP-IDF runs every component's CMakeLists.txt twice — once in
|
|
# script mode for dependency discovery (where add_custom_command is
|
|
# forbidden), and once for the actual build.
|
|
|
|
if(NOT CONFIG_CSI_TEMPORAL_HEAD_ENABLED)
|
|
# Feature disabled — register an empty component so the directory's
|
|
# mere existence doesn't break the build, but do NOT invoke cargo
|
|
# or pull include/ onto consumers' include paths (the C ABI header
|
|
# would advertise capabilities we cannot honour).
|
|
idf_component_register()
|
|
return()
|
|
endif()
|
|
|
|
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")
|
|
|
|
idf_component_register(
|
|
SRCS "shim.c"
|
|
INCLUDE_DIRS "include"
|
|
PRIV_REQUIRES "esp_common"
|
|
)
|
|
|
|
# Custom command + target run only at build time, not in script mode.
|
|
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}")
|
|
|
|
add_dependencies(${COMPONENT_LIB} ruv_temporal_rust_build)
|
|
target_link_libraries(${COMPONENT_LIB} INTERFACE "${RUV_TEMPORAL_LIB}")
|