151 lines
4.4 KiB
CMake
151 lines
4.4 KiB
CMake
# 获取当前选择的 demo 配置
|
||
if(CONFIG_SWEEKAR_DEMO_1)
|
||
set(ACTIVE_DEMO "sweekar_demo1")
|
||
elseif(CONFIG_SWEEKAR_DEMO_2)
|
||
set(ACTIVE_DEMO "sweekar_demo2")
|
||
elseif(CONFIG_SWEEKAR_DEMO_3)
|
||
set(ACTIVE_DEMO "sweekar_demo3")
|
||
elseif(CONFIG_SWEEKAR_DEMO_4)
|
||
set(ACTIVE_DEMO "sweekar_demo4")
|
||
elseif(CONFIG_SWEEKAR_DEMO_5)
|
||
set(ACTIVE_DEMO "sweekar_demo5")
|
||
elseif(CONFIG_SWEEKAR_DEMO_6)
|
||
set(ACTIVE_DEMO "sweekar_demo6")
|
||
elseif(CONFIG_SWEEKAR_DEMO_7)
|
||
set(ACTIVE_DEMO "sweekar_demo7")
|
||
endif()
|
||
|
||
# 初始化全局变量,用于收集各模块的信息
|
||
set(MODULE_SRCS)
|
||
set(MODULE_INCLUDE_DIRS)
|
||
set(MODULE_REQUIRES)
|
||
set(MODULE_PRIV_REQUIRES)
|
||
set(MODULE_EMBED_TXTFILES)
|
||
|
||
if(NOT DEFINED CONFIG_SWEEKAR_DEMO_SELECTION)
|
||
set(EARLY_EXPANSION TRUE)
|
||
message(STATUS "Early expansion pass: loading all module requirements")
|
||
else()
|
||
set(EARLY_EXPANSION FALSE)
|
||
endif()
|
||
|
||
# ===================================================================
|
||
# 执行 Kconfig 自动组装脚本 (在配置阶段自动生成 Kconfig.modules)
|
||
# ===================================================================
|
||
execute_process(
|
||
COMMAND python3 ${CMAKE_CURRENT_LIST_DIR}/generate_kconfig_modules.py
|
||
WORKING_DIRECTORY ${CMAKE_CURRENT_LIST_DIR}
|
||
RESULT_VARIABLE generate_kconfig_result
|
||
)
|
||
if(NOT generate_kconfig_result EQUAL 0)
|
||
message(FATAL_ERROR "Failed to generate Kconfig.modules")
|
||
endif()
|
||
|
||
# ==================== 模块注册区 ====================
|
||
# 定义需要扫描的架构层级目录
|
||
set(SUBSYSTEM_DIRS
|
||
"04_hal"
|
||
"05_executors"
|
||
"05_service"
|
||
"06_behaviors"
|
||
"tests"
|
||
)
|
||
|
||
# 扫描并加载所有启用的子模块(依赖各个模块中的 module.cmake)
|
||
foreach(dir ${SUBSYSTEM_DIRS})
|
||
file(GLOB MODULE_FILES "${CMAKE_CURRENT_LIST_DIR}/${dir}/*/module.cmake")
|
||
foreach(mod_file ${MODULE_FILES})
|
||
include(${mod_file})
|
||
endforeach()
|
||
endforeach()
|
||
|
||
# sweekar_demos 模块 (单独加载)
|
||
# include(${CMAKE_CURRENT_LIST_DIR}/sweekar_demos/module.cmake)
|
||
|
||
# ===================================================================
|
||
|
||
if(MODULE_REQUIRES)
|
||
list(REMOVE_DUPLICATES MODULE_REQUIRES)
|
||
endif()
|
||
if(MODULE_PRIV_REQUIRES)
|
||
list(REMOVE_DUPLICATES MODULE_PRIV_REQUIRES)
|
||
endif()
|
||
|
||
message(STATUS "==== DEBUG ====")
|
||
message(STATUS "MODULE_REQUIRES: ${MODULE_REQUIRES}")
|
||
message(STATUS "MODULE_SRCS: ${MODULE_SRCS}")
|
||
message(STATUS "===============")
|
||
|
||
idf_component_register(
|
||
SRCS
|
||
"main.cc"
|
||
# "tests/test.cc"
|
||
# "tests/korvo_port/korvo_port_runner.cc"
|
||
# "tests/korvo_port/ai_agent.c"
|
||
# "tests/korvo_port/audio_proc.c"
|
||
# "tests/korvo_port/rtc_proc.c"
|
||
# "../managed_components/espressif__zlib/zlib/contrib/minizip/unzip.c"
|
||
# "../managed_components/espressif__zlib/zlib/contrib/minizip/ioapi.c"
|
||
${MODULE_SRCS}
|
||
INCLUDE_DIRS
|
||
"."
|
||
# "../managed_components/espressif__zlib/zlib/contrib/minizip"
|
||
# "05_executors/touch_sensor"
|
||
# "05_executors/aw_touch_sensor"
|
||
${MODULE_INCLUDE_DIRS}
|
||
|
||
REQUIRES
|
||
# lvgl
|
||
# esp_timer
|
||
# driver
|
||
# esp_driver_i2c
|
||
# esp_driver_i2s
|
||
# esp_event
|
||
# nvs_flash
|
||
# spi_flash
|
||
# esp_driver_gpio
|
||
# spiffs
|
||
# vfs
|
||
# esp_http_server
|
||
# log
|
||
# fatfs
|
||
# bt
|
||
# mbedtls
|
||
# audio_pipeline
|
||
# audio_hal
|
||
# audio_board
|
||
# esp_peripherals
|
||
# audio_stream
|
||
# audio_sal
|
||
# esp-adf-libs
|
||
# espressif__zlib
|
||
${MODULE_REQUIRES}
|
||
PRIV_REQUIRES
|
||
# esp-qcloud
|
||
${MODULE_PRIV_REQUIRES}
|
||
EMBED_TXTFILES
|
||
${MODULE_EMBED_TXTFILES}
|
||
)
|
||
# 添加 C++ 标准库支持
|
||
set(CMAKE_CXX_STANDARD 17)
|
||
set(CMAKE_CXX_STANDARD_REQUIRED ON)
|
||
|
||
# 自动创建SPIFFS分区镜像
|
||
# 这会在构建时自动生成audio.bin并在烧录时一并烧录
|
||
# spiffs_create_partition_image(audio ../spiffs FLASH_IN_PROJECT)
|
||
|
||
# 添加编译选项来忽略字符串常量转换警告
|
||
target_compile_options(${COMPONENT_LIB} PRIVATE -Wno-write-strings)
|
||
target_compile_options(${COMPONENT_LIB} PRIVATE -DUSE_FILE32API)
|
||
|
||
|
||
set(LANG_HEADER "${CMAKE_CURRENT_SOURCE_DIR}/assets/lang_config.h")
|
||
|
||
# 根据 boards 目录内部模块自动匹配当前选择的板卡
|
||
include(${CMAKE_CURRENT_LIST_DIR}/02_physical/boards/module.cmake)
|
||
|
||
if (CONFIG_VOLC_RTC_MODE)
|
||
set(COMPONENT_SRCS ${COMPONENT_SRCS} RtcBotUtils.c)
|
||
endif()
|
||
target_compile_definitions(${COMPONENT_LIB} PRIVATE IOAPI_NO_64)
|