#指定cmake最低版本
cmake_minimum_required(VERSION 3.14)

#x86平台
# set(CMAKE_C_COMPILER gcc)
# set(CMAKE_CXX_COMPILER g++)

#交叉编译
set(CMAKE_C_COMPILER aarch64-linux-gnu-gcc)
set(CMAKE_CXX_COMPILER aarch64-linux-gnu-g++)

set(CMAKE_BUILD_TYPE "Debug")
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -g")

# 设置一个字符串变量,用与编译文件名称生成
set(ProjectName "EMS_C_V_1.0.0")

project(${ProjectName} LANGUAGES C)

# 设置 C 标准
set(CMAKE_C_STANDARD 11)
set(CMAKE_C_STANDARD_REQUIRED ON)

# 设置编译类型(Debug 或 Release)
set(CMAKE_BUILD_TYPE Debug)

add_definitions(-DHARDWARE_TYPE=1)

# 添加头文件路径
include_directories(
   ${PROJECT_SOURCE_DIR}/alg
   ${PROJECT_SOURCE_DIR}/app
   ${PROJECT_SOURCE_DIR}/kit
   ${PROJECT_SOURCE_DIR}/bsp
   ${PROJECT_SOURCE_DIR}/drv
   ${PROJECT_SOURCE_DIR}/lib
   ${PROJECT_SOURCE_DIR}/model
   ${PROJECT_SOURCE_DIR}/test
)

# 添加驱动源文件
set(DRV_SOURCE
    # DI驱动源文件
    ${PROJECT_SOURCE_DIR}/drv/drv_di.c
    # DO驱动源文件
    ${PROJECT_SOURCE_DIR}/drv/drv_do.c
    # UART驱动源文件
    ${PROJECT_SOURCE_DIR}/drv/drv_uart.c
    # CAN驱动源文件
    ${PROJECT_SOURCE_DIR}/drv/drv_can.c
    # TCP驱动源文件
    ${PROJECT_SOURCE_DIR}/drv/drv_tcp.c
    # 4G驱动源文件
    ${PROJECT_SOURCE_DIR}/drv/drv_4g.c
    # CAN驱动源文件
    ${PROJECT_SOURCE_DIR}/drv/drv_can.c
)

# 添加KIT源文件
set(KIT_SOURCE
    # Logger kit源文件
    ${PROJECT_SOURCE_DIR}/kit/kit_logger.c
    ${PROJECT_SOURCE_DIR}/kit/kit_safe_memcpy.c
)

# 添加库头文件
include_directories(
    ${PROJECT_SOURCE_DIR}/lib/libsqlite3/include
    ${PROJECT_SOURCE_DIR}/lib/libxml2/include
    ${PROJECT_SOURCE_DIR}/lib/libssl/include
    ${PROJECT_SOURCE_DIR}/lib/libcjson/include
    ${PROJECT_SOURCE_DIR}/lib/libmodbus/include
    ${PROJECT_SOURCE_DIR}/lib/libpaho-mqtt/include
)

add_executable(${ProjectName} 
    main.c
    # 测试代码源文件
    ${PROJECT_SOURCE_DIR}/test/test.c
    # 驱动代码源文件
    ${DRV_SOURCE}
    # 插件代码源文件
    ${KIT_SOURCE}
)

# 添加编译选项
target_compile_options(${ProjectName}  PRIVATE -fno-stack-protector)

# 添加库路径
find_library(LIB_PTHREAD NAMES pthread PATHS /usr/aarch64-linux-gnu/lib)
find_library(LIB_SQLITE3 NAMES sqlite3 PATHS lib/libsqlite3/lib)
find_library(LIB_XML2    NAMES xml2    PATHS lib/libxml2/lib)
find_library(LIB_SSL     NAMES ssl     PATHS lib/libssl/lib)
find_library(LIB_CRYPTO  NAMES crypto  PATHS lib/libssl/lib)
find_library(LIB_CJSON   NAMES cjson   PATHS lib/libcjson/lib)
find_library(LIB_MODBUS  NAMES modbus  PATHS lib/libmodbus/lib)

# 添加链接库
target_link_libraries(${ProjectName} PRIVATE 
    ${LIB_PTHREAD}
    ${LIB_SQLITE3}
    ${LIB_XML2}
    ${LIB_SSL}
    ${LIB_CRYPTO}
    ${LIB_CJSON}
    ${LIB_MODBUS}
)

if(NOT LIB_PTHREAD)
    message("LIB_PTHREAD not found!")
endif()

if(NOT LIB_SQLITE3)
    message("LIB_SQLITE3 not found!")
endif()

if(NOT LIB_XML2)
    message("LIB_XML2 not found!")
endif()

if(NOT LIB_SSL)
    message("LIB_SSL not found!")
endif()

if(NOT LIB_CRYPTO)
    message("LIB_CRYPTO not found!")
endif()

if(NOT LIB_CJSON)
    message("LIB_CJSON not found!")
endif()

if(NOT LIB_MODBUS)
    message("LIB_MODBUS not found!")
endif()

# 拷贝文件
# file(GLOB SQL_SCHEMAS ${CMAKE_SOURCE_DIR}/config/*.sql)
# file(COPY ${SQL_SCHEMAS} DESTINATION ${CMAKE_BINARY_DIR}/config)

# 指定工作目录
# install(TARGETS ${ProjectName} RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR})