# 获取当前选择的 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)