# 指定 CMake 最低版本要求
cmake_minimum_required(VERSION 3.10)

# 定义工程名（用于生成解决方案/项目名称）
project(DTU_HMI)

# 统一使用 C99 标准编译 C 代码
set(CMAKE_C_STANDARD 99)

# 导出 compile_commands.json，供 Cursor/clangd/静态分析工具使用
set(CMAKE_EXPORT_COMPILE_COMMANDS ON)

# MSVC 编译器下强制使用 UTF-8 源文件编码，避免中文注释/字符串乱码
# 同时关闭 C4819（部分环境即使是 UTF-8 文件仍会误报代码页告警）
if(MSVC)
    add_compile_options(/utf-8 /wd4819)
endif()

# 可选开关：启用 DEBUG 宏，用于条件编译调试日志
# 用法：cmake -DENABLE_DEBUG=ON ..
option(ENABLE_DEBUG "Enable debug printf output" OFF)
if(ENABLE_DEBUG)
    add_compile_definitions(DEBUG)
endif()

# 主可执行程序 DTU-HMI 及其源码列表
add_executable(DTU-HMI
    src/main.c
    src/common/utf8.c
    src/thread_utils.c
    src/remoteDisplay.c
    src/Drv/menu/app/menu.c
    src/Drv/pages/page_manager.c
    src/Drv/pages/global/global_state.c
    src/Drv/pages/global/renderer_lcd.c
    src/Drv/pages/menu/page.c
    src/Drv/pages/menu/model.c
    src/Drv/pages/menu/presenter.c
    src/Drv/pages/menu/view.c
    src/Drv/pages/AppInfo/page.c
    src/Drv/pages/AppInfo/model.c
    src/Drv/pages/AppInfo/presenter.c
    src/Drv/pages/AppInfo/view.c
    src/Drv/pages/YC/page.c
    src/Drv/pages/YC/model.c
    src/Drv/pages/YC/presenter.c
    src/Drv/pages/YC/view.c
    src/Drv/lcd/lcd.c
    src/Drv/lcd/lcd_draw.c
    src/Drv/lcd/lcd_text.c
    src/Drv/key.c
    src/Drv/lcd/ascii.c
    src/TCP/tcp.c
)

# 可执行程序头文件搜索路径
target_include_directories(DTU-HMI PRIVATE include src src/TCP src/Drv/lcd src/common)

# 按平台链接系统库：
# - Windows 需要 Winsock2（ws2_32）
# - Linux/macOS 使用 pthread
if(WIN32)
    target_link_libraries(DTU-HMI PRIVATE ws2_32)
else()
    target_link_libraries(DTU-HMI PRIVATE pthread)
endif()

# 开启 CTest 测试支持，并加载 tests 子目录中的测试目标
enable_testing()
add_subdirectory(tests)

