Files
lucky-cat/components/platform/CMakeLists.txt
T
chenjintao f6408be05b feat(lcd): add compressed GFX idle expression animation
Integrate esp_emote_gfx for idle rendering with symmetric mesh-based blinking and LCD DMA flush synchronization.

Store cropped face layers with lossless RLE, decode once into PSRAM, and retain the PNG backend for other expressions. Include source layers and asset generation tools.
2026-10-09 14:19:16 +08:00

243 lines
6.8 KiB
CMake

set(platform_srcs
"src/runtime/platform_core_runtime.c"
"src/runtime/platform_storage.c"
"src/runtime/platform_time.c"
"src/runtime/platform_https_client.c"
"src/runtime/platform_ota.c"
"src/runtime/platform_lan_http_server.c"
"src/runtime/platform_ble_gatt_server.c"
"src/platform_console_driver.c"
"src/runtime/platform_behavior_runtime.c"
"src/runtime/platform_multimodal_runtime.c"
"src/runtime/platform_lcd_runtime.c"
"src/platform_stepper_driver.c"
"src/platform_battery_driver.c"
"src/platform_digital_input_driver.c"
"src/platform_io_effects.c"
"src/lcd_direct.c"
"src/lcd_direct_assets.c"
"src/platform_asset_bundle.c"
"third_party/lodepng/lodepng.cpp"
"third_party/lodepng/lodepng_esp_alloc.cpp"
"third_party/lodepng/lodepng_esp_bridge.cpp"
"src/multimodal/audio_pipeline.c"
"src/multimodal/transport_ws.c"
"src/wifi_portal_bridge.cpp"
"src/platform_behavior_stubs.c"
)
if(CONFIG_TQ_LCD_EMOTE_GFX_TEST)
list(APPEND platform_srcs
"src/lcd_emote_assets.c"
"src/generated/emote_gfx/idle_base.c"
"src/generated/emote_gfx/idle_eyes_open.c"
)
endif()
set(platform_priv_requires
78__esp-wifi-connect
bt
cxx
driver
esp_audio_codec
esp_adc
esp_codec_dev
esp_driver_gpio
esp_driver_i2c
esp_driver_i2s
esp_driver_ledc
esp_driver_rmt
esp_driver_spi
esp_event
esp_app_format
app_update
esp_http_client
esp_http_server
esp_hw_support
esp_lcd
esp_netif
esp_psram
heap
esp_system
esp_timer
esp_wifi
esp_websocket_client
json
log
espressif__mdns
mbedtls
nvs_flash
)
if(CONFIG_TQ_NETWORK_DIAGNOSTICS_ENABLE)
list(APPEND platform_priv_requires lwip)
endif()
if(CONFIG_TQ_LCD_EMOTE_GFX_TEST)
list(APPEND platform_priv_requires espressif2022__esp_emote_gfx)
endif()
idf_component_register(
SRCS
${platform_srcs}
INCLUDE_DIRS
"include"
PRIV_INCLUDE_DIRS
"internal"
"third_party/lodepng"
PRIV_REQUIRES
${platform_priv_requires}
)
set_source_files_properties(
"third_party/lodepng/lodepng.cpp"
PROPERTIES
COMPILE_DEFINITIONS "LODEPNG_NO_COMPILE_ENCODER;LODEPNG_NO_COMPILE_DISK;LODEPNG_NO_COMPILE_CPP;LODEPNG_NO_COMPILE_ALLOCATORS"
)
set(platform_audio_prompt_src_dir "${CMAKE_CURRENT_SOURCE_DIR}/assets/audio_prompts")
set(platform_lcd_asset_source_dir "${CMAKE_CURRENT_SOURCE_DIR}/assets/lcd_source")
set(platform_lcd_asset_src_dir "${CMAKE_CURRENT_SOURCE_DIR}/assets/lcd_optimized")
set(platform_lcd_asset_manifest "${platform_lcd_asset_src_dir}/manifest.json")
set(platform_lcd_asset_optimizer "${CMAKE_CURRENT_SOURCE_DIR}/../../tools/optimize_lcd_assets.py")
set(platform_asset_image_dir "${CMAKE_CURRENT_BINARY_DIR}/asset_image")
set(platform_asset_stage_stamp "${CMAKE_CURRENT_BINARY_DIR}/asset_image.stamp")
set(platform_asset_pack "${CMAKE_CURRENT_BINARY_DIR}/platform_assets.pack")
set(platform_asset_packer "${CMAKE_CURRENT_SOURCE_DIR}/../../tools/pack_embedded_assets.py")
file(GLOB_RECURSE platform_audio_prompt_files CONFIGURE_DEPENDS
"${platform_audio_prompt_src_dir}/*.opus"
)
file(GLOB platform_lcd_source_png_files CONFIGURE_DEPENDS
"${platform_lcd_asset_source_dir}/*.png"
)
set(platform_lcd_png_assets
buyunqian1
jichubiaoqing0
jichubiaoqing1
jichubiaoqing2
listening0
listening1
listening2
ota1
ota2
ota3
muyu0
muyu1
muyu2
chouqian_qianzhi0
chouqian_qianzhi1
chouqian_qianzhi2
chouqian_buyun0
chouqian_buyun1
chouqian_buyun2
chouqian_heping0
chouqian_heping1
chouqian_heping2
chouqian_shangshang0
chouqian_shangshang1
chouqian_shangshang2
chouqian_xiaoji0
chouqian_xiaoji1
chouqian_xiaoji2
chouqian_zhongshang0
chouqian_zhongshang1
chouqian_zhongshang2
qianzhiwuxing0
shui0
shui1
mu0
mu1
huo0
huo1
tu0
tu1
jin0
jin1
spin0
south0
southwest0
west0
northwest0
north0
northeast0
east0
southeast0
icon_shui0
icon_mu0
icon_huo0
icon_tu0
icon_jin0
charging
lowbat
qrcode
lcdtest00
lcdtest01
lcdtest02
lcdtest03
lcdtest04
lcdtest05
lcdtest06
lcdtest07
lcdtest08
lcdtest09
lcdtest10
lcdtest11
lcdtest12
lcdtest13
lcdtest14
lcdtest15
)
set(platform_lcd_png_asset_files)
foreach(lcd_png_asset IN LISTS platform_lcd_png_assets)
list(APPEND platform_lcd_png_asset_files
"${platform_lcd_asset_src_dir}/${lcd_png_asset}.png"
)
endforeach()
set(platform_asset_stage_commands)
foreach(audio_file IN LISTS platform_audio_prompt_files)
file(RELATIVE_PATH audio_rel_path "${platform_audio_prompt_src_dir}" "${audio_file}")
list(APPEND platform_asset_stage_commands
COMMAND ${CMAKE_COMMAND} -E make_directory "${platform_asset_image_dir}/audio_prompts"
COMMAND ${CMAKE_COMMAND} -E copy_if_different
"${audio_file}"
"${platform_asset_image_dir}/audio_prompts/${audio_rel_path}"
)
endforeach()
foreach(lcd_png_asset IN LISTS platform_lcd_png_assets)
list(APPEND platform_asset_stage_commands
COMMAND ${CMAKE_COMMAND} -E make_directory "${platform_asset_image_dir}/lcd"
COMMAND ${CMAKE_COMMAND} -E copy_if_different
"${platform_lcd_asset_src_dir}/${lcd_png_asset}.png"
"${platform_asset_image_dir}/lcd/${lcd_png_asset}.png"
)
endforeach()
# 先校验并暂存实际引用的 PNG/Opus,再由打包脚本生成应用内只读资源包。
add_custom_command(
OUTPUT "${platform_asset_stage_stamp}"
COMMAND ${PYTHON} "${platform_lcd_asset_optimizer}" check-current
COMMAND ${CMAKE_COMMAND} -E rm -rf "${platform_asset_image_dir}"
COMMAND ${CMAKE_COMMAND} -E make_directory "${platform_asset_image_dir}"
${platform_asset_stage_commands}
COMMAND ${CMAKE_COMMAND} -E touch "${platform_asset_stage_stamp}"
DEPENDS
${platform_audio_prompt_files}
${platform_lcd_source_png_files}
${platform_lcd_png_asset_files}
"${platform_lcd_asset_manifest}"
"${platform_lcd_asset_optimizer}"
)
# 素材或打包脚本变化时重新生成包,并通过二进制链接目标纳入 OTA 应用镜像。
add_custom_command(
OUTPUT "${platform_asset_pack}"
COMMAND ${PYTHON} "${platform_asset_packer}"
"${platform_asset_image_dir}" "${platform_asset_pack}"
DEPENDS "${platform_asset_stage_stamp}" "${platform_asset_packer}"
VERBATIM
)
target_add_binary_data(${COMPONENT_LIB} "${platform_asset_pack}" BINARY
RENAME_TO platform_assets_pack)