cmake_minimum_required(VERSION 3.22)
project(ubs-engine VERSION 1.0 LANGUAGES C CXX)
set(EXECUTE_PROCESS_COMMAND_ECHO NONE)
message(STATUS "CMake version: ${CMAKE_VERSION}")
message(STATUS "Source dir: ${CMAKE_SOURCE_DIR}")
message(STATUS "Build dir: ${CMAKE_BINARY_DIR}")
message(STATUS "Build type: ${CMAKE_BUILD_TYPE}")
message(STATUS "Build generator: ${CMAKE_GENERATOR}")
message(STATUS "C compiler for the host machine: ${CMAKE_C_COMPILER} (${CMAKE_C_COMPILER_ID} ${CMAKE_C_COMPILER_VERSION})")
set(C_LINKER_PREFERENCE "gold")
set(CXX_LINKER_PREFERENCE "gold")
message(STATUS "CXX compiler for the host machine: ${CMAKE_CXX_COMPILER} (${CMAKE_CXX_COMPILER_ID} ${CMAKE_CXX_COMPILER_VERSION})")
execute_process(
COMMAND sh -c "${CMAKE_LINKER} --version | head -n 1"
OUTPUT_VARIABLE LINKER_VERSION
OUTPUT_STRIP_TRAILING_WHITESPACE
)
message(STATUS "C linker for the host machine: ${CMAKE_LINKER} (${LINKER_VERSION})")
message(STATUS "Host machine system: ${CMAKE_HOST_SYSTEM}")
message(STATUS "Host machine cpu family: ${CMAKE_HOST_SYSTEM_PROCESSOR}")
cmake_host_system_information(RESULT number_of_logical_cores QUERY NUMBER_OF_LOGICAL_CORES)
message(STATUS "Host machine logical cpu cores: ${number_of_logical_cores}")
cmake_host_system_information(RESULT number_of_physical_cores QUERY NUMBER_OF_PHYSICAL_CORES)
message(STATUS "Host machine physical cpu cores: ${number_of_physical_cores}")
cmake_host_system_information(RESULT total_physical_memory QUERY TOTAL_PHYSICAL_MEMORY)
message(STATUS "Host machine total physical memory: ${total_physical_memory} MB")
cmake_host_system_information(RESULT available_physical_memory QUERY AVAILABLE_PHYSICAL_MEMORY)
message(STATUS "Host machine available physical memory: ${available_physical_memory} MB")
set(CMAKE_EXPORT_COMPILE_COMMANDS ON)
set(CMAKE_C_STANDARD 11)
set(CMAKE_C_STANDARD_REQUIRED ON)
set(CMAKE_C_EXTENSIONS NO)
set(CMAKE_CXX_STANDARD 17)
set(CMAKE_CXX_STANDARD_REQUIRED ON)
set(CMAKE_CXX_EXTENSIONS OFF)
set(CMAKE_SKIP_RPATH TRUE)
message(STATUS "Build C standard: C${CMAKE_C_STANDARD}")
message(STATUS "Build C++ standard: C++${CMAKE_CXX_STANDARD}")
set(DEPS_DIR ${PROJECT_SOURCE_DIR}/deps)
set(SRC_DIR ${PROJECT_SOURCE_DIR}/src)
include(GNUInstallDirs)
set(INSTALL_LIBDIR lib)
message(DEBUG "CMAKE_INSTALL_PREFIX: ${CMAKE_INSTALL_PREFIX}")
message(DEBUG "CMAKE_INSTALL_BINDIR: ${CMAKE_INSTALL_BINDIR}")
message(DEBUG "INSTALL_LIBDIR: ${INSTALL_LIBDIR}")
message(DEBUG "CMAKE_INSTALL_INCLUDEDIR: ${CMAKE_INSTALL_INCLUDEDIR}")
set(CMAKE_MODULE_PATH "${PROJECT_SOURCE_DIR}/scripts/cmake" ${CMAKE_MODULE_PATH})
include(building)
include(ccache)
include(utils)
include(doxygen)
include(iwyu)
set(CMAKE_LIBRARY_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/lib)
set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/bin)
message(DEBUG "CMAKE_CXX_FLAGS: ${CMAKE_CXX_FLAGS}")
message(DEBUG "CXX_FLAGS_DEBUG: ${CXX_FLAGS_DEBUG}")
message(DEBUG "CXX_FLAGS_RELEASE: ${CXX_FLAGS_RELEASE}")
message(DEBUG "CMAKE_CXX_FLAGS_DEBUG: ${CMAKE_CXX_FLAGS_DEBUG}")
message(DEBUG "CMAKE_CXX_FLAGS_RELWITHDEBINFO: ${CMAKE_CXX_FLAGS_RELWITHDEBINFO}")
message(DEBUG "CMAKE_CXX_FLAGS_RELEASE: ${CMAKE_CXX_FLAGS_RELEASE}")
message(DEBUG "CMAKE_CXX_FLAGS_MINSIZEREL: ${CMAKE_CXX_FLAGS_MINSIZEREL}")
add_compile_definitions(VOS_WORDSIZE=64)
add_compile_definitions(CPPHTTPLIB_OPENSSL_SUPPORT)
option(FORCE_COLORED_OUTPUT "Always produce ANSI-colored output (GNU/Clang only)." OFF)
if (${FORCE_COLORED_OUTPUT})
if ("${CMAKE_CXX_COMPILER_ID}" STREQUAL "Clang")
add_compile_options(-fcolor-diagnostics)
elseif ("${CMAKE_CXX_COMPILER_ID}" STREQUAL "GNU")
add_compile_options(-fdiagnostics-color=always)
endif ()
else ()
if ("${CMAKE_CXX_COMPILER_ID}" STREQUAL "GNU")
add_compile_options(-fdiagnostics-color=auto)
endif ()
endif ()
option(ENABLE_COVERAGE "Use gcov" OFF)
message(DEBUG ENABLE_COVERAGE=${ENABLE_COVERAGE})
if (ENABLE_COVERAGE)
setup_coverage()
endif ()
include_directories(
${PROJECT_SOURCE_DIR}/include
${SRC_DIR}/include
${CMAKE_BINARY_DIR}/include
${PROJECT_SOURCE_DIR}
${SRC_DIR}/include/adapter_plugins/mmi
)
option(BUILD_TESTS "Build tests" OFF)
option(ENABLE_UB "Enable UB optimization" ON)
if (ENABLE_UB)
add_definitions(-DUB_ENVIRONMENT)
endif ()
add_subdirectory(3rdparty)
add_subdirectory(src)
set(ENABLE_UBSE_TESTING 0)
option(ENABLE_IT_TESTS "Build IT tests with election timer threads enabled (ENABLE_UBSE_TESTING=0)" OFF)
if (BUILD_TESTS)
set(CMAKE_SKIP_RPATH OFF)
if (NOT ENABLE_IT_TESTS)
set(ENABLE_UBSE_TESTING 1)
endif ()
add_subdirectory(test)
endif ()
configure_file(
${CMAKE_CURRENT_SOURCE_DIR}/config.h.in
${CMAKE_CURRENT_BINARY_DIR}/include/config.h
@ONLY
)
configure_file(
${CMAKE_CURRENT_SOURCE_DIR}/register_xalarm.h.in
${CMAKE_CURRENT_BINARY_DIR}/include/register_xalarm.h
@ONLY
)
file(COPY ${PROJECT_SOURCE_DIR}/scripts/command_completion/cli_commands.sh
DESTINATION ${CMAKE_BINARY_DIR}/scripts
FILE_PERMISSIONS OWNER_READ OWNER_EXECUTE
)
file(COPY ${PROJECT_SOURCE_DIR}/conf/
DESTINATION ${CMAKE_BINARY_DIR}/conf
FILE_PERMISSIONS OWNER_READ OWNER_WRITE
PATTERN "README.md" EXCLUDE
)
add_custom_target(install_all
COMMAND ${CMAKE_COMMAND} --build ${CMAKE_BINARY_DIR}
COMMAND ${CMAKE_COMMAND} --install ${CMAKE_BINARY_DIR} --component ubse_com_sdk_c
COMMENT "Install all files to ${CMAKE_INSTALL_PREFIX}"
)
add_custom_target(package_ubse_com
COMMAND mkdir -p ${PROJECT_SOURCE_DIR}/output
COMMAND tar -czvf ${PROJECT_SOURCE_DIR}/output/ubse_com_aarch64.tar.gz .
COMMENT "Package ubse_com to zip"
WORKING_DIRECTORY ${CMAKE_BINARY_DIR}/install_ubse_com
)
add_dependencies(package_ubse_com install_all)