cmake_minimum_required(VERSION 3.10)
project(UniversalCan VERSION 1.0.0)

# 设置C标准（纯C工程）
set(CMAKE_C_STANDARD 11)
set(CMAKE_C_STANDARD_REQUIRED ON)

# 公共部分（所有平台共享）
set(COMMON_INCLUDES
    ${CMAKE_CURRENT_SOURCE_DIR}/Inc
    ${CMAKE_CURRENT_SOURCE_DIR}/OsSample
)

set(COMMON_SOURCES
    ${CMAKE_CURRENT_SOURCE_DIR}/Src/*.c
    ${CMAKE_CURRENT_SOURCE_DIR}/OsSample/*.c
)

# Windows平台（包括MinGW）
if(WIN32 OR MINGW)
    message(STATUS "Configuring for Windows/MinGW")
    
    # Windows平台特定包含目录
    set(PLATFORM_INCLUDES
        ${CMAKE_CURRENT_SOURCE_DIR}/Device/ScHHS
        ${CMAKE_CURRENT_SOURCE_DIR}/Device/ScHHS/Port
        ${CMAKE_CURRENT_SOURCE_DIR}/Device/Zlg/Port
    )
    
    # Windows平台特定源文件
    set(PLATFORM_SOURCES
        ${CMAKE_CURRENT_SOURCE_DIR}/Device/ScHHS/Port/*.c
        ${CMAKE_CURRENT_SOURCE_DIR}/Device/Zlg/Port/*.c
    )
    
    # Windows平台链接库
    set(PLATFORM_LIBS
        HCanbus      # 四川何华盛的库
        ws2_32       # winsock库
    )
    
    # Windows平台链接目录
    set(PLATFORM_LINK_DIRS
        ${CMAKE_CURRENT_SOURCE_DIR}/Device/ScHHS
    )
    
    # Windows平台定义
    add_definitions(-D_WIN32_WINNT=0x0601)
    
# Linux平台
elseif(UNIX)
    message(STATUS "Configuring for Linux")
    
    # Linux平台特定包含目录（假设有Linux设备目录）
    set(PLATFORM_INCLUDES
        ${CMAKE_CURRENT_SOURCE_DIR}/Device/Linux
    )
    
    # Linux平台特定源文件
    set(PLATFORM_SOURCES
        ${CMAKE_CURRENT_SOURCE_DIR}/Device/Linux/*.c
    )
    
    # Linux平台链接库
    set(PLATFORM_LIBS
        pthread
        rt
    )
    
    # Linux平台链接目录
    set(PLATFORM_LINK_DIRS "")
endif()

# 收集所有源文件
file(GLOB COMMON_SRC ${COMMON_SOURCES})
file(GLOB PLATFORM_SRC ${PLATFORM_SOURCES})

# 创建可执行文件
add_executable(${PROJECT_NAME} ${COMMON_SRC} ${PLATFORM_SRC})

# 设置包含目录
target_include_directories(${PROJECT_NAME} PRIVATE
    ${COMMON_INCLUDES}
    ${PLATFORM_INCLUDES}
)

# 设置链接目录
target_link_directories(${PROJECT_NAME} PRIVATE ${PLATFORM_LINK_DIRS})

# 链接库
target_link_libraries(${PROJECT_NAME} ${PLATFORM_LIBS})
