﻿# Set the project name
project(bso_project VERSION ${BSP_VERSION} LANGUAGES ${BSP_LANGUAGE})

set(LIB_NAME pal)
############################################################
# 编译.ko
############################################################
#[[
编译.ko总开关
]]
set(COMPILE_KERNEL_LIB_SWITCH FALSE)
#[[
.ko文件名
]]
set(KERNEL_LIB_NAME ${LIB_NAME}_kernel)
#[[
.so/.a和.ko源文件列表
包含全部.c可以用正则表示，比如file(GLOB_RECURSE KERNEL_SOURCE_FILES source/*.c)。
自定义部分.c可以手动设置各.c文件,比如set(KERNEL_SOURCE_FILES source/xxx.c source/yyy.c)
]]
set(SOURCE_FILES)
file(GLOB_RECURSE SOURCE_FILES source/*.c)
set(KERNEL_SOURCE_FILES)
set(USER_SOURCE_FILES)
foreach(file_path ${SOURCE_FILES})
    string(REPLACE "/" ";" temp_str ${file_path})
    list(GET temp_str -1 temp_file)
    if(temp_file MATCHES "k_.*c")
        list(APPEND KERNEL_SOURCE_FILES ${file_path})
    else()
        list(APPEND USER_SOURCE_FILES ${file_path})
    endif()
endforeach()
#[[
.ko头文件路径
]]
set(KERNEL_HEADER_PATH ${CMAKE_CURRENT_SOURCE_DIR}/pubh)
#[[
.ko编译脚本调用
]]
if(COMPILE_KERNEL_LIB_SWITCH)
    BSP_COMPILE_KERNEL_MODULE(lib${KERNEL_LIB_NAME} ${CMAKE_CURRENT_SOURCE_DIR}/source)
    execute_process(
        COMMAND sh compile.sh
        WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}
    )
    execute_process(
        COMMAND rm compile.sh
        WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}
    )
endif()

############################################################
# 编译.so
############################################################
#[[s
编译.so总开关
]]
set(COMPILE_SHARED_LIB_SWITCH TRUE)
#[[
.so文件名
]]
set(SHARED_LIB_NAME ${LIB_NAME}_bsp)
#[[
.so源文件列表
包含全部.c可以用正则表示，比如file(GLOB_RECURSE USER_SOURCE_FILES source/*.c)。
自定义部分.c可以手动设置各.c文件,比如set(USER_SOURCE_FILES source/xxx.c source/yyy.c)
]]
#set(USER_SOURCE_FILES)
#[[
.so头文件列表
]]
set(HEADER_FILES)
file(GLOB HEADER_FILES pubh/*.h ../type/pubh/*.h ../type/pubh/userh/*.h)
#[[
.so编译脚本调用
]]
if(COMPILE_SHARED_LIB_SWITCH)
    add_library(${SHARED_LIB_NAME} SHARED ${USER_SOURCE_FILES} ${HEADER_FILES})
    target_include_directories(${SHARED_LIB_NAME}
        PUBLIC
            ${PROJECT_SOURCE_DIR}/pubh
            ${BSP_HOME_DIR}/code/type/pubh/userh
        PRIVATE
            ${PROJECT_SOURCE_DIR}/privh
            ${BSP_PUBH_DIR}
    )

    BSP_CONFIG_OUTPUT_PATHS(${SHARED_LIB_NAME})
endif()

############################################################
# 编译.a
############################################################
#[[s
编译.a总开关
]]
set(COMPILE_STATIC_LIB_SWITCH TRUE)
#[[
.a文件名
]]
set(STATIC_LIB_NAME ${LIB_NAME}s)
#[[
.a源文件列表
包含全部.c可以用正则表示，比如file(GLOB_RECURSE USER_SOURCE_FILES source/*.c)。
自定义部分.c可以手动设置各.c文件,比如set(USER_SOURCE_FILES source/xxx.c source/yyy.c)
]]
#set(USER_SOURCE_FILES)
#[[
.a头文件列表
]]
set(HEADER_FILES)
file(GLOB HEADER_FILES pubh/*.h ../type/pubh/*.h ../type/pubh/userh/*.h)
#[[
.a编译脚本调用
]]
if(COMPILE_STATIC_LIB_SWITCH)
    add_library(${STATIC_LIB_NAME} STATIC ${USER_SOURCE_FILES} ${HEADER_FILES})
    target_include_directories(${STATIC_LIB_NAME}
        PUBLIC
            ${PROJECT_SOURCE_DIR}/pubh
            ${BSP_HOME_DIR}/code/type/pubh/userh
        PRIVATE
            ${PROJECT_SOURCE_DIR}/privh
            ${BSP_PUBH_DIR}
    )

    BSP_CONFIG_OUTPUT_PATHS(${STATIC_LIB_NAME})
endif()

############################################################
# 编译maintain client bin
############################################################
#[[
编译bin总开关
]]
set(COMPILE_CLIENT_BIN_SWITCH FALSE)
#[[
bin文件名
]]
set(CLIENT_BIN_NAME ${LIB_NAME}_client)

#[[
.bin 编译脚本调用
]]
if(COMPILE_CLIENT_BIN_SWITCH)
    link_directories(
        ${BSP_HOME_DIR}/build/output/so
    )
    include_directories(
        ${PROJECT_SOURCE_DIR}/privh
    )
    add_executable(${CLIENT_BIN_NAME} source/adPoeTi.c source/adPoeMiscTi.c source/common_sys.c source/gpio.c source/i2c.c source/i2cbusses.c source/timer.c source/usp_pal_thread.c source/usp_pal_sync.c source/usp_pal_spl.c source/usp_pal_msgq.c source/usp_pal_alloc.c source/usp_pal_dynamic_lib.c source/usp_pal_time.c)

    target_link_libraries(${CLIENT_BIN_NAME} pthread rt)
endif()


