|
|
|
|
cmake_minimum_required(VERSION 3.10)
|
|
|
|
|
|
|
|
|
|
project(interface_test VERSION 1.0.0 LANGUAGES C CXX)
|
|
|
|
|
|
|
|
|
|
set(CMAKE_EXPORT_COMPILE_COMMANDS ON)
|
|
|
|
|
|
|
|
|
|
set(GENERATED_COMMON_DIR "${CMAKE_BINARY_DIR}/library/common")
|
|
|
|
|
file(MAKE_DIRECTORY "${GENERATED_COMMON_DIR}")
|
|
|
|
|
set(COMMON_CFG_IN "${CMAKE_CURRENT_SOURCE_DIR}/library/common/common_cfg.h.in")
|
|
|
|
|
if(EXISTS "${COMMON_CFG_IN}")
|
|
|
|
|
configure_file(
|
|
|
|
|
"${COMMON_CFG_IN}"
|
|
|
|
|
"${GENERATED_COMMON_DIR}/common_cfg.h"
|
|
|
|
|
@ONLY
|
|
|
|
|
)
|
|
|
|
|
include_directories("${GENERATED_COMMON_DIR}")
|
|
|
|
|
message(STATUS "[Root] Generated common_cfg.h to ${GENERATED_COMMON_DIR}")
|
|
|
|
|
else()
|
|
|
|
|
message(WARNING "[Root] common_cfg.h.in not found")
|
|
|
|
|
endif()
|
|
|
|
|
|
|
|
|
|
if(NOT CMAKE_BUILD_TYPE AND NOT CMAKE_CONFIGURATION_TYPES)
|
|
|
|
|
message(STATUS "Setting build type to 'Release' as none was specified.")
|
|
|
|
|
set(CMAKE_BUILD_TYPE Release CACHE STRING "Choose the type of build." FORCE)
|
|
|
|
|
set_property(CACHE CMAKE_BUILD_TYPE PROPERTY STRINGS "Debug" "Release" "MinSizeRel" "RelWithDebInfo")
|
|
|
|
|
endif()
|
|
|
|
|
|
|
|
|
|
option(A_BUILD_MAIN "Build the main executable" ON)
|
|
|
|
|
option(MY_BUILD_SHARED_LIBS "Build libraries as shared (.so/.dll) instead of static (.a)" OFF)
|
|
|
|
|
|
|
|
|
|
set(MY_BUILD_STATIC ON CACHE BOOL "Build libraries as static (.a)")
|
|
|
|
|
if(MY_BUILD_SHARED_LIBS)
|
|
|
|
|
set(MY_BUILD_STATIC OFF)
|
|
|
|
|
endif()
|
|
|
|
|
|
|
|
|
|
set(GLOBAL_ENABLED_MODULES "" CACHE INTERNAL "List of enabled module targets")
|
|
|
|
|
set(GLOBAL_ENABLED_MACROS "" CACHE INTERNAL "List of enabled macros for main")
|
|
|
|
|
set(GLOBAL_ENABLED_MACROS ${GLOBAL_ENABLED_MACROS} PARENT_SCOPE)
|
|
|
|
|
|
|
|
|
|
function(add_module MOD_NAME MOD_PATH DEFAULT_STATE HAS_TEST)
|
|
|
|
|
if(NOT DEFAULT_STATE STREQUAL "ON" AND NOT DEFAULT_STATE STREQUAL "OFF")
|
|
|
|
|
message(FATAL_ERROR "[add_module] Invalid DEFAULT_STATE for ${MOD_NAME}: ${DEFAULT_STATE}")
|
|
|
|
|
endif()
|
|
|
|
|
|
|
|
|
|
if(NOT HAS_TEST STREQUAL "ON" AND NOT HAS_TEST STREQUAL "OFF")
|
|
|
|
|
message(FATAL_ERROR "[add_module] Invalid HAS_TEST for ${MOD_NAME}: ${HAS_TEST}")
|
|
|
|
|
endif()
|
|
|
|
|
|
|
|
|
|
if(NOT EXISTS "${CMAKE_CURRENT_SOURCE_DIR}/${MOD_PATH}")
|
|
|
|
|
message(WARNING "[Root] Module '${MOD_NAME}' skipped: Path '${MOD_PATH}' does not exist!")
|
|
|
|
|
return()
|
|
|
|
|
endif()
|
|
|
|
|
|
|
|
|
|
string(TOUPPER ${MOD_NAME} MOD_UPPER)
|
|
|
|
|
option(BUILD_${MOD_UPPER} "Build ${MOD_NAME} module" ${DEFAULT_STATE})
|
|
|
|
|
|
|
|
|
|
if(${BUILD_${MOD_UPPER}})
|
|
|
|
|
set(BUILD_${MOD_UPPER}_HAS_TEST ${HAS_TEST} CACHE INTERNAL "Has test support")
|
|
|
|
|
list(APPEND GLOBAL_ENABLED_MODULES ${MOD_NAME})
|
|
|
|
|
list(APPEND GLOBAL_ENABLED_MACROS BUILD_${MOD_UPPER})
|
|
|
|
|
message(STATUS "[Root] Enabled module(TestSupport: ${HAS_TEST}): ${MOD_NAME} (Default: ${DEFAULT_STATE}) -> Macro: BUILD_${MOD_UPPER}")
|
|
|
|
|
set(GLOBAL_ENABLED_MODULES ${GLOBAL_ENABLED_MODULES} PARENT_SCOPE)
|
|
|
|
|
set(GLOBAL_ENABLED_MACROS ${GLOBAL_ENABLED_MACROS} PARENT_SCOPE)
|
|
|
|
|
add_subdirectory(${MOD_PATH})
|
|
|
|
|
endif()
|
|
|
|
|
endfunction()
|
|
|
|
|
|
|
|
|
|
function(add_prebuilt_module MOD_NAME MOD_PATH DEFAULT_STATE HAS_TEST)
|
|
|
|
|
if(NOT DEFAULT_STATE STREQUAL "ON" AND NOT DEFAULT_STATE STREQUAL "OFF")
|
|
|
|
|
message(FATAL_ERROR "[add_prebuilt_module] Invalid DEFAULT_STATE for ${MOD_NAME}: ${DEFAULT_STATE}")
|
|
|
|
|
endif()
|
|
|
|
|
|
|
|
|
|
string(TOUPPER ${MOD_NAME} MOD_UPPER)
|
|
|
|
|
option(BUILD_${MOD_UPPER} "Use prebuilt ${MOD_NAME} module" ${DEFAULT_STATE})
|
|
|
|
|
|
|
|
|
|
if(NOT BUILD_${MOD_UPPER})
|
|
|
|
|
return()
|
|
|
|
|
endif()
|
|
|
|
|
|
|
|
|
|
get_filename_component(ABS_MOD_PATH "${MOD_PATH}" ABSOLUTE BASE_DIR "${CMAKE_CURRENT_SOURCE_DIR}")
|
|
|
|
|
|
|
|
|
|
set(LIB_PATH "${ABS_MOD_PATH}/lib${MOD_NAME}.a")
|
|
|
|
|
if(NOT EXISTS "${LIB_PATH}")
|
|
|
|
|
message(FATAL_ERROR "[add_prebuilt_module] Library file not found: ${LIB_PATH}")
|
|
|
|
|
endif()
|
|
|
|
|
|
|
|
|
|
set(INCLUDE_DIR "${ABS_MOD_PATH}/include")
|
|
|
|
|
if(EXISTS "${INCLUDE_DIR}")
|
|
|
|
|
get_filename_component(ABS_INCLUDE_DIR "${INCLUDE_DIR}" ABSOLUTE)
|
|
|
|
|
message(STATUS "[Root] Prebuilt module include dir: ${ABS_INCLUDE_DIR}")
|
|
|
|
|
else()
|
|
|
|
|
set(ABS_INCLUDE_DIR "")
|
|
|
|
|
message(WARNING "[add_prebuilt_module] Include directory not found: ${INCLUDE_DIR}. Skipping INTERFACE_INCLUDE_DIRECTORIES.")
|
|
|
|
|
endif()
|
|
|
|
|
|
|
|
|
|
add_library(${MOD_NAME} STATIC IMPORTED GLOBAL)
|
|
|
|
|
set_target_properties(${MOD_NAME} PROPERTIES
|
|
|
|
|
IMPORTED_LOCATION "${LIB_PATH}"
|
|
|
|
|
INTERFACE_INCLUDE_DIRECTORIES "${ABS_INCLUDE_DIR}"
|
|
|
|
|
)
|
|
|
|
|
|
|
|
|
|
list(APPEND GLOBAL_ENABLED_MODULES ${MOD_NAME})
|
|
|
|
|
list(APPEND GLOBAL_ENABLED_MACROS BUILD_${MOD_UPPER})
|
|
|
|
|
|
|
|
|
|
message(STATUS "[Root] Prebuilt module: ${MOD_NAME} from ${LIB_PATH}")
|
|
|
|
|
message(STATUS "[Root] Include dir: ${ABS_INCLUDE_DIR}")
|
|
|
|
|
message(STATUS "[Root] Macro: BUILD_${MOD_UPPER}")
|
|
|
|
|
|
|
|
|
|
set(GLOBAL_ENABLED_MODULES ${GLOBAL_ENABLED_MODULES} PARENT_SCOPE)
|
|
|
|
|
set(GLOBAL_ENABLED_MACROS ${GLOBAL_ENABLED_MACROS} PARENT_SCOPE)
|
|
|
|
|
endfunction()
|
|
|
|
|
|
|
|
|
|
add_module(common library/common ON OFF)
|
|
|
|
|
add_module(log library/log OFF OFF)
|
|
|
|
|
add_module(list library/list OFF OFF)
|
|
|
|
|
add_module(ringbuffer library/ringbuffer OFF OFF)
|
|
|
|
|
add_module(peripheral peripheral OFF ON)
|
|
|
|
|
add_module(lua lua OFF ON)
|
|
|
|
|
add_module(bspMCU bspMCU OFF OFF)
|
|
|
|
|
add_module(RBcore RBcore OFF OFF)
|
|
|
|
|
add_module(optional optional OFF OFF)
|
|
|
|
|
add_module(Spoolend Spoolend OFF OFF)
|
|
|
|
|
|
|
|
|
|
if(A_BUILD_MAIN)
|
|
|
|
|
add_subdirectory(main)
|
|
|
|
|
endif()
|
|
|
|
|
|
|
|
|
|
message(STATUS "========================================")
|
|
|
|
|
message(STATUS "Enabled Modules: ${GLOBAL_ENABLED_MODULES}")
|
|
|
|
|
message(STATUS "Macros for Main: ${GLOBAL_ENABLED_MACROS}")
|
|
|
|
|
message(STATUS "Build Static Libs: ${MY_BUILD_STATIC}")
|
|
|
|
|
message(STATUS "Build Type: ${CMAKE_BUILD_TYPE}")
|
|
|
|
|
message(STATUS "========================================")
|