|
|
@ -4,6 +4,21 @@ project(interface_test VERSION 1.0.0 LANGUAGES C CXX) |
|
|
|
|
|
|
|
|
set(CMAKE_EXPORT_COMPILE_COMMANDS ON) |
|
|
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) |
|
|
if(NOT CMAKE_BUILD_TYPE AND NOT CMAKE_CONFIGURATION_TYPES) |
|
|
message(STATUS "Setting build type to 'Release' as none was specified.") |
|
|
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(CMAKE_BUILD_TYPE Release CACHE STRING "Choose the type of build." FORCE) |
|
|
@ -50,6 +65,51 @@ function(add_module MOD_NAME MOD_PATH DEFAULT_STATE HAS_TEST) |
|
|
endif() |
|
|
endif() |
|
|
endfunction() |
|
|
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(common library/common ON OFF) |
|
|
add_module(log library/log OFF OFF) |
|
|
add_module(log library/log OFF OFF) |
|
|
add_module(list library/list OFF OFF) |
|
|
add_module(list library/list OFF OFF) |
|
|
|