This commit is contained in:
2026-05-30 16:21:45 +03:00
parent 434521a435
commit 21d79a4cb5
6 changed files with 1073 additions and 46 deletions

View File

@@ -4,7 +4,7 @@ project(ADC LANGUAGES CXX)
set(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} "${CMAKE_SOURCE_DIR}")
set(CMAKE_CXX_STANDARD 20)
set(CMAKE_CXX_STANDARD 23)
set(CMAKE_CXX_STANDARD_REQUIRED ON)
# set(CMAKE_BUILD_TYPE Release)
@@ -28,11 +28,10 @@ set(CMAKE_CXX_STANDARD_REQUIRED ON)
# message(WARNING "You are using an unsupported compiler! Compilation has only been tested with Clang and GCC.")
# endif()
set(ADC_COMMON_HEADERS
common/adc_traits.h
common/adc_utils.h
common/adc_serialization.h
# common/adc_value_holder.h
# common/adc_value.h
# common/adc_valholder.h
@@ -40,12 +39,11 @@ set(ADC_COMMON_HEADERS
set(ADC_DEVICE_HEADERS
device/adc_device_attribute.h
device/adc_device_command.h
device/adc_device_command.h
device/adc_device.h
device/adc_device_concepts.h
)
set(ADC_NETWORK_HEADERS
# net/adc_netmsg.h
# net/adc_netmessage.h
@@ -60,76 +58,82 @@ set(ADC_NETWORK_HEADERS
net/adc_device_netclient.h
)
option(ASIO_LIBRARY "Use of ASIO library for networking implementation" ON)
if (ASIO_LIBRARY)
if(ASIO_LIBRARY)
find_package(ASIO REQUIRED)
set(ADC_NETWORK_HEADERS ${ADC_NETWORK_HEADERS}
set(ADC_NETWORK_HEADERS
${ADC_NETWORK_HEADERS}
net/asio/adc_netservice_asio.h
net/asio/adc_device_netserver_asio.h
)
add_compile_definitions(PUBLIC USE_ASIO_LIBRARY)
option(OPENSSL_LIBRARY "Use openssl library for related ASIO-based implementation" ON)
if (OPENSSL_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)
if(SPDLOG_LIBRARY)
find_package(spdlog REQUIRED)
find_package(fmt REQUIRED)
set(ADC_COMMON_HEADERS ${ADC_COMMON_HEADERS}
common/adc_spdlog.h
)
set(ADC_COMMON_HEADERS ${ADC_COMMON_HEADERS} common/adc_spdlog.h)
set(ADC_NETWORK_HEADERS ${ADC_NETWORK_HEADERS}
net/adc_netserver_spdlog.h
)
set(ADC_NETWORK_HEADERS ${ADC_NETWORK_HEADERS} net/adc_netserver_spdlog.h)
add_compile_definitions(PUBLIC USE_SPDLOG_LIBRARY)
endif()
option(
USE_UWEBSOCKET
"Use of uWebsocket library for websocket-related staff"
ON
)
option(USE_UWEBSOCKET "Use of uWebsocket library for websocket-related staff" ON)
if (USE_UWEBSOCKET)
if(USE_UWEBSOCKET)
include(FetchContent)
include(ExternalProject)
FetchContent_Declare(uwebsockets
SOURCE_DIR ${CMAKE_BINARY_DIR}/uWebsockets
BINARY_DIR ${CMAKE_BINARY_DIR}
FetchContent_Declare(
uwebsockets
SOURCE_DIR
${CMAKE_BINARY_DIR}/uWebsockets
BINARY_DIR
${CMAKE_BINARY_DIR}
GIT_REPOSITORY "https://github.com/uNetworking/uWebSockets.git"
GIT_TAG "v20.67.0"
GIT_SHALLOW TRUE
GIT_SUBMODULES ""
GIT_PROGRESS TRUE
)
)
FetchContent_MakeAvailable(uwebsockets)
FetchContent_GetProperties(uwebsockets SOURCE_DIR uwebsockets_SOURCE_DIR)
set(UWEBSOCKETS_INCLUDE_DIR ${uwebsockets_SOURCE_DIR}/src)
FetchContent_Declare(usockets
SOURCE_DIR ${uwebsockets_SOURCE_DIR}/uSockets
BINARY_DIR ${CMAKE_BINARY_DIR}
FetchContent_Declare(
usockets
SOURCE_DIR
${uwebsockets_SOURCE_DIR}/uSockets
BINARY_DIR
${CMAKE_BINARY_DIR}
GIT_REPOSITORY "https://github.com/uNetworking/uSockets.git"
GIT_TAG "v0.8.8"
GIT_SHALLOW TRUE
GIT_SUBMODULES ""
GIT_PROGRESS TRUE
)
)
FetchContent_MakeAvailable(usockets)
FetchContent_GetProperties(usockets SOURCE_DIR usockets_SOURCE_DIR)
@@ -137,7 +141,8 @@ if (USE_UWEBSOCKET)
include(ExternalProject)
ExternalProject_Add(LIBUS
ExternalProject_Add(
LIBUS
SOURCE_DIR ${usockets_SOURCE_DIR}
PREFIX ${CMAKE_BINARY_DIR}/_deps
BUILD_IN_SOURCE TRUE
@@ -148,17 +153,19 @@ if (USE_UWEBSOCKET)
)
add_library(LIBUS_LIB STATIC IMPORTED)
set_target_properties(LIBUS_LIB PROPERTIES IMPORTED_LOCATION ${usockets_SOURCE_DIR}/uSockets.a)
set_target_properties(
LIBUS_LIB
PROPERTIES IMPORTED_LOCATION ${usockets_SOURCE_DIR}/uSockets.a
)
get_target_property(LIBUS_LIB_PATH LIBUS_LIB IMPORTED_LOCATION)
include_directories(${USOCKETS_INCLUDE_DIR})
include_directories(${UWEBSOCKETS_INCLUDE_DIR})
endif(USE_UWEBSOCKET)
option(BUILD_TESTS "Build tests" ON)
if (BUILD_TESTS)
if(BUILD_TESTS)
find_package(doctest)
# set(VALUEHOLDER_TEST_APP adc_valueholder_test)
@@ -175,21 +182,34 @@ if (BUILD_TESTS)
set(NETSERVICE_TEST_APP adc_netservice_test)
add_executable(${NETSERVICE_TEST_APP} tests/adc_netservice_test.cpp)
if (OPENSSL_LIBRARY)
target_link_libraries(${NETSERVICE_TEST_APP} OpenSSL::SSL OpenSSL::Crypto)
if(OPENSSL_LIBRARY)
target_link_libraries(
${NETSERVICE_TEST_APP}
OpenSSL::SSL
OpenSSL::Crypto
)
endif()
if (ASIO_LIBRARY)
if(ASIO_LIBRARY)
find_package(cxxopts CONFIG)
set(ASIO_NETSERVER_TEST_APP adc_asio_netserver_test)
add_executable(${ASIO_NETSERVER_TEST_APP} tests/adc_asio_netserver_test.cpp)
target_link_libraries(${ASIO_NETSERVER_TEST_APP} PUBLIC Threads::Threads cxxopts::cxxopts)
if (OPENSSL_LIBRARY)
target_link_libraries(${ASIO_NETSERVER_TEST_APP} PUBLIC OpenSSL::SSL OpenSSL::Crypto)
add_executable(
${ASIO_NETSERVER_TEST_APP}
tests/adc_asio_netserver_test.cpp
)
target_link_libraries(
${ASIO_NETSERVER_TEST_APP}
PUBLIC Threads::Threads cxxopts::cxxopts
)
if(OPENSSL_LIBRARY)
target_link_libraries(
${ASIO_NETSERVER_TEST_APP}
PUBLIC OpenSSL::SSL OpenSSL::Crypto
)
endif()
endif()
if (NOT doctest_FOUND)
if(NOT doctest_FOUND)
include(FetchContent)
FetchContent_Declare(
doctest
@@ -207,7 +227,7 @@ if (BUILD_TESTS)
add_test(NETMSG_TEST ${NETMSG_TEST_APP})
add_test(ASIO_NETSRV_TEST ${ASIO_NETSERVER_TEST_APP})
if (SPDLOG_LIBRARY)
if(SPDLOG_LIBRARY)
target_link_libraries(${ASIO_NETSERVER_TEST_APP} PRIVATE fmt::fmt)
endif()
@@ -216,7 +236,13 @@ endif(BUILD_TESTS)
include(GNUInstallDirs)
add_library(${PROJECT_NAME} INTERFACE ${ADC_COMMON_HEADERS} ${ADC_DEVICE_HEADERS} ${ADC_NETWORK_HEADERS})
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(
@@ -225,4 +251,3 @@ target_include_directories(
$<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/include>
$<INSTALL_INTERFACE:include>
)