ADC/CMakeLists.txt
2024-09-15 01:25:58 +03:00

122 lines
3.2 KiB
CMake

cmake_minimum_required(VERSION 3.14)
project(ADC LANGUAGES CXX)
set(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} "${CMAKE_SOURCE_DIR}")
set(CMAKE_CXX_STANDARD 20)
set(CMAKE_CXX_STANDARD_REQUIRED ON)
# set(CMAKE_BUILD_TYPE Release)
set(ADC_COMMON_HEADERS
common/adc_traits.h
common/adc_utils.h
# common/adc_value_holder.h
# common/adc_value.h
# common/adc_valholder.h
)
set(ADC_DEVICE_HEADERS
device/adc_device_attribute.h
device/adc_device_command.h
device/adc_device.h
)
set(ADC_NETWORK_HEADERS
net/adc_netmsg.h
# net/adc_netmessage.h
net/adc_netproto.h
net/adc_netservice.h
net/adc_endpoint.h
net/adc_netserver.h
)
option(ASIO_LIBRARY "Use of ASIO library for networking implementation" ON)
if (ASIO_LIBRARY)
find_package(ASIO REQUIRED)
set(ADC_NETWORK_HEADERS ${ADC_NETWORK_HEADERS}
net/adc_netservice_asio.h
net/adc_netsession_asio.h
)
add_compile_definitions(PUBLIC USE_ASIO_LIBRARY)
option(OPENSSL_LIBRARY "Use openssl library for related ASIO-based implementation" ON)
if (OPENSSL_LIBRARY)
find_package(OpenSSL REQUIRED)
add_compile_definitions(PUBLIC USE_OPENSSL_WITH_ASIO)
endif()
endif()
option(SPDLOG_LIBRARY "Use of SPDLOG library for logging" ON)
if (SPDLOG_LIBRARY)
find_package(spdlog REQUIRED)
set(ADC_COMMON_HEADERS ${ADC_COMMON_HEADERS}
common/adc_spdlog.h
)
set(ADC_NETWORK_HEADERS ${ADC_NETWORK_HEADERS}
net/adc_netserver_spdlog.h
)
add_compile_definitions(PUBLIC USE_SPDLOG_LIBRARY)
endif()
option(BUILD_TESTS "Build tests" ON)
if (BUILD_TESTS)
find_package(doctest)
# set(VALUEHOLDER_TEST_APP adc_valueholder_test)
# add_executable(${VALUEHOLDER_TEST_APP} tests/adc_valueholder_test.cpp)
set(DEVATTR_TEST_APP adc_devattr_test)
add_executable(${DEVATTR_TEST_APP} tests/adc_devattr_test.cpp)
set(NETMSG_TEST_APP adc_netmsg_test)
add_executable(${NETMSG_TEST_APP} tests/adc_netmsg_test.cpp)
set(NETSERVICE_TEST_APP adc_netservice_test)
add_executable(${NETSERVICE_TEST_APP} tests/adc_netservice_test.cpp)
target_link_libraries(${NETSERVICE_TEST_APP} OpenSSL::SSL OpenSSL::Crypto)
if (NOT doctest_FOUND)
include(FetchContent)
FetchContent_Declare(
doctest
GIT_REPOSITORY https://github.com/doctest/doctest.git
GIT_TAG 2.4.11
)
FetchContent_MakeAvailable(doctest)
endif()
# target_link_libraries(${VALUEHOLDER_TEST_APP} PRIVATE doctest::doctest)
target_link_libraries(${DEVATTR_TEST_APP} PRIVATE doctest::doctest)
include(CTest)
# add_test(VALUE_HOLDER ${VALUEHOLDER_TEST_APP})
add_test(VALUE_HOLDER ${DEVATTR_TEST_APP})
add_test(NETMSG_TEST ${NETMSG_TEST_APP})
enable_testing()
endif(BUILD_TESTS)
include(GNUInstallDirs)
add_library(${PROJECT_NAME} INTERFACE ${ADC_COMMON_HEADERS} ${ADC_DEVICE_HEADERS} ${ADC_NETWORK_HEADERS})
target_compile_features(${PROJECT_NAME} INTERFACE cxx_std_20)
# target_link_libraries(${PROJECT_NAME} INTERFACE ASIO::ASIO)
target_include_directories(
${PROJECT_NAME}
INTERFACE
$<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/include>
$<INSTALL_INTERFACE:include>
)