搭建LVGL仿真环境
This commit is contained in:
@@ -0,0 +1,141 @@
|
||||
cmake_minimum_required(VERSION 3.15)
|
||||
project(lvgl_sim C)
|
||||
|
||||
#=============================================================================
|
||||
# 路径配置(相对于 simulator/ 目录)
|
||||
#=============================================================================
|
||||
set(PROJECT_ROOT "${CMAKE_CURRENT_SOURCE_DIR}/..")
|
||||
set(LVGL_DIR "${PROJECT_ROOT}/Lib/lvgl")
|
||||
set(UI_DIR "${PROJECT_ROOT}/Drivers/BSP/UI")
|
||||
set(SDL2_DIR "${CMAKE_CURRENT_SOURCE_DIR}/SDL2/SDL2-2.32.10")
|
||||
|
||||
#=============================================================================
|
||||
# 编译标准
|
||||
#=============================================================================
|
||||
set(CMAKE_C_STANDARD 99)
|
||||
set(CMAKE_C_STANDARD_REQUIRED ON)
|
||||
|
||||
# Windows 控制台输出(显示 printf)
|
||||
if(WIN32)
|
||||
add_compile_definitions(_CRT_SECURE_NO_WARNINGS)
|
||||
endif()
|
||||
|
||||
# MSVC:源码为 UTF-8 编码(含中文注释),强制按 UTF-8 解析消除 C4819 警告
|
||||
if(MSVC)
|
||||
add_compile_options(/utf-8)
|
||||
endif()
|
||||
|
||||
#=============================================================================
|
||||
# SDL2 头文件路径(需先于 add_subdirectory 定义,供 LVGL SDL 驱动使用)
|
||||
#=============================================================================
|
||||
# LVGL SDL 驱动内部 #include "SDL2/SDL.h",include 目录下已有 SDL2/ 子目录
|
||||
set(SDL2_INCLUDE_DIR "${SDL2_DIR}/include" CACHE PATH "SDL2 include directory for LVGL")
|
||||
|
||||
#=============================================================================
|
||||
# LVGL 子目录(引用项目自带的 LVGL v9.3.0 源码)
|
||||
#=============================================================================
|
||||
# LVGL 内部会自动检测 lv_conf.h(通过 LV_CONF_INCLUDE_SIMPLE 宏)
|
||||
# 需要将 simulator 目录加入 LVGL 的包含路径,使其能找到 lv_conf.h
|
||||
set(LV_CONF_DIR "${CMAKE_CURRENT_SOURCE_DIR}" CACHE PATH "Directory containing lv_conf.h for LVGL")
|
||||
add_subdirectory("${LVGL_DIR}" lvgl_build)
|
||||
|
||||
#=============================================================================
|
||||
# 包含路径
|
||||
#=============================================================================
|
||||
include_directories(
|
||||
${CMAKE_CURRENT_SOURCE_DIR} # sim_port.h, lvgl conf.h (LVGL 找 lv_conf.h), dbg_cfg.h
|
||||
${LVGL_DIR} # lvgl.h
|
||||
${LVGL_DIR}/src # lvgl 内部头文件
|
||||
${UI_DIR} # ui_menu.h, ui_font_cn_12.h
|
||||
${PROJECT_ROOT}/Drivers/BSP # dbg_log.h(使用 simulator 的 dbg_cfg.h 配置)
|
||||
${SDL2_DIR}/include # SDL2 头文件
|
||||
)
|
||||
|
||||
#=============================================================================
|
||||
# SDL2 库(使用本地预编译版本)
|
||||
#=============================================================================
|
||||
set(SDL2_INCLUDE_PARENT "${SDL2_DIR}/include")
|
||||
set(SDL2_LIB_X64 "${SDL2_DIR}/lib/x64")
|
||||
|
||||
#=============================================================================
|
||||
# 源文件
|
||||
#=============================================================================
|
||||
set(SIM_SOURCES
|
||||
main.c
|
||||
sim_port.c
|
||||
)
|
||||
|
||||
# UI 源文件(与 MCU 端共用,直接编译)
|
||||
set(UI_SOURCES
|
||||
${UI_DIR}/ui_menu.c
|
||||
${UI_DIR}/ui_font_cn_12.c
|
||||
)
|
||||
|
||||
#=============================================================================
|
||||
# 构建可执行文件
|
||||
#=============================================================================
|
||||
add_executable(lvgl_sim WIN32 ${SIM_SOURCES} ${UI_SOURCES})
|
||||
|
||||
target_compile_definitions(lvgl_sim PRIVATE
|
||||
LV_CONF_INCLUDE_SIMPLE # 让 lvgl.h 找到 lv_conf.h
|
||||
LV_LVGL_H_INCLUDE_SIMPLE # ui_font_cn_12.c 内部 include 简化
|
||||
)
|
||||
|
||||
target_include_directories(lvgl_sim PRIVATE
|
||||
${SDL2_INCLUDE_PARENT} # SDL2/SDL.h 路径
|
||||
)
|
||||
|
||||
target_link_directories(lvgl_sim PRIVATE
|
||||
${SDL2_LIB_X64}
|
||||
)
|
||||
|
||||
target_link_libraries(lvgl_sim
|
||||
lvgl
|
||||
SDL2
|
||||
SDL2main
|
||||
)
|
||||
|
||||
# 数学库(非 MSVC)
|
||||
if(NOT MSVC)
|
||||
target_link_libraries(lvgl_sim m pthread)
|
||||
endif()
|
||||
|
||||
# Windows 子系统:控制台(显示 printf 输出)
|
||||
if(WIN32)
|
||||
if(MSVC)
|
||||
target_link_options(lvgl_sim PRIVATE "/SUBSYSTEM:CONSOLE")
|
||||
else()
|
||||
target_link_options(lvgl_sim PRIVATE "-mconsole")
|
||||
endif()
|
||||
endif()
|
||||
|
||||
# 复制 SDL2.dll 到输出目录
|
||||
add_custom_command(TARGET lvgl_sim POST_BUILD
|
||||
COMMAND ${CMAKE_COMMAND} -E copy_if_different
|
||||
"${SDL2_LIB_X64}/SDL2.dll"
|
||||
"$<TARGET_FILE_DIR:lvgl_sim>/SDL2.dll"
|
||||
COMMENT "Copying SDL2.dll to output directory"
|
||||
)
|
||||
|
||||
#=============================================================================
|
||||
# 自定义目标:运行模拟器
|
||||
#=============================================================================
|
||||
add_custom_target(run COMMAND ${CMAKE_BINARY_DIR}/lvgl_sim DEPENDS lvgl_sim)
|
||||
|
||||
#=============================================================================
|
||||
# 调试模式额外警告
|
||||
#=============================================================================
|
||||
if(CMAKE_BUILD_TYPE STREQUAL "Debug")
|
||||
message(STATUS "Debug mode enabled for simulator")
|
||||
if(MSVC)
|
||||
target_compile_options(lvgl_sim PRIVATE /W4)
|
||||
else()
|
||||
target_compile_options(lvgl_sim PRIVATE -Wall -Wextra -Wpedantic)
|
||||
endif()
|
||||
endif()
|
||||
|
||||
message(STATUS "=== LVGL Simulator ===")
|
||||
message(STATUS "Screen: 160x160, 1bpp monochrome")
|
||||
message(STATUS "LVGL dir: ${LVGL_DIR}")
|
||||
message(STATUS "UI dir: ${UI_DIR}")
|
||||
message(STATUS "SDL2: ${SDL2_DIR}")
|
||||
Reference in New Issue
Block a user