cmake_minimum_required(VERSION 3.0.0)
project(bmser_trans VERSION 2.4.3.0 LANGUAGES C)

include(CTest)
enable_testing()

# set(CMAKE_BUILD_TYPE Debug)
# set(CMAKE_C_CLANG_TIDY clang-tidy)

include(cmake/components.cmake)
include(cmake/lib.cmake)
include(cmake/port.cmake)

set(COMMON_LIB_PATH ${CMAKE_PREFIX_PATH}/lib)
find_library(db_ctrl NAMES db_control PATHS ${COMMON_LIB_PATH})
find_library(mosquitto NAMES mosquitto PATHS ${COMMON_LIB_PATH})
find_library(bmser_utils NAMES bmser_utils PATHS ${COMMON_LIB_PATH})
find_library(bmser_hardware NAMES bmser_hardware PATHS ${COMMON_LIB_PATH})

set(MODBUS_LIB_PATH ${CMAKE_PREFIX_PATH}/lib/modbus_xn/lib)
find_library(modbus NAMES modbus PATHS ${MODBUS_LIB_PATH})

set(LIBMODBUS_INC  ${CMAKE_PREFIX_PATH}/include/modbus_xn/include/modbus)

set(LIBDBCONTROL_INC
    ${CMAKE_PREFIX_PATH}/include
    ${CMAKE_PREFIX_PATH}/include/libdb_control/can
    ${CMAKE_PREFIX_PATH}/include/libdb_control/canrbus
    ${CMAKE_PREFIX_PATH}/include/libdb_control/cjson
    ${CMAKE_PREFIX_PATH}/include/libdb_control/db_control
    ${CMAKE_PREFIX_PATH}/include/libdb_control/dev
    ${CMAKE_PREFIX_PATH}/include/libdb_control/mqtt
    ${CMAKE_PREFIX_PATH}/include/libdb_control/utility
    ${CMAKE_PREFIX_PATH}/include/libdb_control/utils
    ${CMAKE_PREFIX_PATH}/include/libdb_control/sqlite_api
    ${CMAKE_PREFIX_PATH}/include/libdb_control/toolks
)

# SET(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -save-temps=obj")

option(BMSER_TRANS_TEST_MODE "test mode" OFF)
option(BMSER_TEMPORARILY_BUILD "build some dependecies that not exists temporarily" ON)

if (BMSER_TRANS_TEST_MODE)
    message("enable test mode")
    set(TEST_ENABLE 1)
    set(CMAKE_BUILD_TYPE Debug)
else()
    message("disenable test mode")
    set(TEST_ENABLE 0)
endif()

string(TIMESTAMP COMPILE_TIME %y%m%d%H%M)        # 生成编译时间
configure_file(
    "${PROJECT_SOURCE_DIR}/src/app/version.h.in"
    "${PROJECT_SOURCE_DIR}/src/app/version.h"
)

message("${BMSER_TEMPORARILY_BUILD} build temp dir")
if(BMSER_TEMPORARILY_BUILD)
    message("build temp dir")
    add_subdirectory(temp/bmser_ring)
endif()

add_executable(bmser_trans
                src/app/bmser_trans.c
                ${COMPONENTS_SRCS}
                ${LIB_SRCS}
                ${PORT_SRCS}
)

target_include_directories(bmser_trans PRIVATE
                            src/app/
                            ${COMPONENTS_INCS}
                            ${LIB_INCS}
                            ${PORT_INCS}
                            ${LIBDBCONTROL_INC}
                            ${LIBMODBUS_INC}
)

if(BMSER_TEMPORARILY_BUILD)
    target_include_directories(bmser_msg_ring PRIVATE
                                src/app/
                                ${PORT_INCS}
                                ${COMPONENTS_INCS}
                                ${LIBDBCONTROL_INC}
                                )

    add_dependencies(bmser_trans bmser_msg_ring)
endif()

target_link_libraries(bmser_trans
                        PRIVATE
                        ${db_ctrl} ${mosquitto} ${bmser_utils}
                        ${modbus} ${bmser_hardware} pthread rt)

if(BMSER_TEMPORARILY_BUILD)
    target_link_libraries(bmser_trans ${bmser_msg_ring})
endif()

if(CMAKE_BUILD_TYPE STREQUAL "Debug")
  target_compile_options(bmser_trans PRIVATE -g -O0 -Wall)
else()
  target_compile_options(bmser_trans PRIVATE -g0 -Os -Wall)
endif()

set(CPACK_PROJECT_NAME ${PROJECT_NAME})
set(CPACK_PROJECT_VERSION ${PROJECT_VERSION})
include(CPack)
