mirror of
https://github.com/fpagliughi/sockpp.git
synced 2026-01-12 00:04:45 +08:00
Cleaned up CMake build. Added namespace targets for subdirectory builds.
This commit is contained in:
160
CMakeLists.txt
160
CMakeLists.txt
@@ -5,7 +5,7 @@
|
||||
# ---------------------------------------------------------------------------
|
||||
# This file is part of the "sockpp" C++ socket library.
|
||||
#
|
||||
# Copyright (c) 2017-2023 Frank Pagliughi
|
||||
# Copyright (c) 2017-2024 Frank Pagliughi
|
||||
# All rights reserved.
|
||||
#
|
||||
# Redistribution and use in source and binary forms, with or without
|
||||
@@ -67,19 +67,34 @@ endif()
|
||||
|
||||
# --- Setting naming variables ---
|
||||
|
||||
set(SOCKPP_SHARED_LIBRARY sockpp)
|
||||
set(SOCKPP_STATIC_LIBRARY sockpp-static)
|
||||
set(SOCKPP_OBJECT_LIBRARY sockpp-objs)
|
||||
|
||||
set(SOCKPP_INCLUDE_DIR ${PROJECT_SOURCE_DIR}/include)
|
||||
set(SOCKPP_GENERATED_DIR ${CMAKE_CURRENT_BINARY_DIR}/generated)
|
||||
|
||||
# --- Collect the targets names ---
|
||||
|
||||
if(${SOCKPP_BUILD_SHARED})
|
||||
list(APPEND SOCKPP_TARGETS sockpp-shared)
|
||||
endif()
|
||||
|
||||
if(${SOCKPP_BUILD_STATIC})
|
||||
list(APPEND SOCKPP_TARGETS sockpp-static)
|
||||
endif()
|
||||
|
||||
if(NOT SOCKPP_TARGETS)
|
||||
message(FATAL_ERROR "No targets are specified")
|
||||
endif()
|
||||
|
||||
# --- Project uses C++17 ---
|
||||
|
||||
set(CMAKE_CXX_STANDARD 17)
|
||||
set(CMAKE_CXX_STANDARD_REQUIRED ON)
|
||||
set(CMAKE_CXX_EXTENSIONS OFF)
|
||||
|
||||
if(WIN32)
|
||||
set(CMAKE_WINDOWS_EXPORT_ALL_SYMBOLS ON)
|
||||
set(LIBS_SYSTEM ws2_32)
|
||||
endif()
|
||||
|
||||
# --- Generate a version header ---
|
||||
|
||||
configure_file(
|
||||
@@ -92,125 +107,18 @@ configure_file(
|
||||
|
||||
add_subdirectory(src)
|
||||
|
||||
# --- System libraries ---
|
||||
|
||||
if(WIN32)
|
||||
set(CMAKE_WINDOWS_EXPORT_ALL_SYMBOLS ON)
|
||||
set(LIBS_SYSTEM ws2_32)
|
||||
endif()
|
||||
|
||||
# --- Collect the targets names ---
|
||||
|
||||
if(${SOCKPP_BUILD_SHARED})
|
||||
list(APPEND SOCKPP_TARGETS ${SOCKPP_SHARED_LIBRARY})
|
||||
endif()
|
||||
|
||||
if(${SOCKPP_BUILD_STATIC})
|
||||
list(APPEND SOCKPP_TARGETS ${SOCKPP_STATIC_LIBRARY})
|
||||
endif()
|
||||
|
||||
# --- Create the libraries and export them ---
|
||||
|
||||
if(NOT SOCKPP_TARGETS)
|
||||
message(FATAL_ERROR "No targets are specified")
|
||||
endif()
|
||||
|
||||
if(${SOCKPP_BUILD_SHARED})
|
||||
message(STATUS "Creating shared library: ${SOCKPP_SHARED_LIBRARY}")
|
||||
add_library(${SOCKPP_SHARED_LIBRARY} SHARED $<TARGET_OBJECTS:${SOCKPP_OBJECT_LIBRARY}>)
|
||||
|
||||
target_include_directories(${SOCKPP_SHARED_LIBRARY}
|
||||
PUBLIC
|
||||
$<BUILD_INTERFACE:${SOCKPP_INCLUDE_DIR}>
|
||||
$<INSTALL_INTERFACE:include>
|
||||
PRIVATE
|
||||
${SOCKPP_GENERATED_DIR}/include
|
||||
)
|
||||
|
||||
target_link_libraries(${SOCKPP_SHARED_LIBRARY} PUBLIC ${LIBS_SYSTEM})
|
||||
if(SOCKPP_WITH_OPENSSL)
|
||||
target_link_libraries(${SOCKPP_SHARED_LIBRARY} PUBLIC OpenSSL::SSL OpenSSL::Crypto)
|
||||
endif()
|
||||
|
||||
set_target_properties(${SOCKPP_SHARED_LIBRARY} PROPERTIES
|
||||
VERSION ${PROJECT_VERSION}
|
||||
SOVERSION ${PROJECT_VERSION_MAJOR}
|
||||
)
|
||||
|
||||
list(APPEND TARGET_FILES ${SOCKPP_SHARED_LIBRARY})
|
||||
|
||||
if(SOCKPP_WITH_OPENSSL)
|
||||
target_link_libraries(${SOCKPP_SHARED_LIBRARY}
|
||||
PUBLIC
|
||||
OpenSSL::SSL
|
||||
OpenSSL::Crypto
|
||||
)
|
||||
elseif(SOCKPP_WITH_MBEDTLS)
|
||||
target_link_libraries(${SOCKPP_SHARED_LIBRARY}
|
||||
PUBLIC
|
||||
MbedTLS::mbedtls
|
||||
MbedTLS::mbedcrypto
|
||||
MbedTLS::mbedx509
|
||||
)
|
||||
endif()
|
||||
endif()
|
||||
|
||||
if(${SOCKPP_BUILD_STATIC})
|
||||
message(STATUS "Creating static library: ${SOCKPP_STATIC_LIBRARY}")
|
||||
add_library(${SOCKPP_STATIC_LIBRARY} STATIC $<TARGET_OBJECTS:${SOCKPP_OBJECT_LIBRARY}>)
|
||||
|
||||
target_include_directories(${SOCKPP_STATIC_LIBRARY}
|
||||
PUBLIC
|
||||
$<BUILD_INTERFACE:${SOCKPP_INCLUDE_DIR}>
|
||||
$<INSTALL_INTERFACE:include>
|
||||
PRIVATE
|
||||
${SOCKPP_GENERATED_DIR}/include
|
||||
)
|
||||
|
||||
target_link_libraries(${SOCKPP_STATIC_LIBRARY} PUBLIC ${LIBS_SYSTEM})
|
||||
if(SOCKPP_WITH_OPENSSL)
|
||||
target_link_libraries(${SOCKPP_STATIC_LIBRARY} PUBLIC OpenSSL::SSL OpenSSL::Crypto)
|
||||
endif()
|
||||
|
||||
# On *nix systems, the static library can have the same base filename
|
||||
# as the shared library, thus 'libsockpp.a' for the static lib.
|
||||
# On Windows they need different names to tell the static lib from the
|
||||
# DLL import library.
|
||||
if(UNIX)
|
||||
set_target_properties(${SOCKPP_STATIC_LIBRARY} PROPERTIES
|
||||
OUTPUT_NAME ${SOCKPP_SHARED_LIBRARY}
|
||||
)
|
||||
endif()
|
||||
|
||||
list(APPEND TARGET_FILES ${SOCKPP_STATIC_LIBRARY})
|
||||
|
||||
if(SOCKPP_WITH_OPENSSL)
|
||||
target_link_libraries(${SOCKPP_STATIC_LIBRARY}
|
||||
PUBLIC
|
||||
OpenSSL::SSL
|
||||
OpenSSL::Crypto
|
||||
)
|
||||
elseif(SOCKPP_WITH_MBEDTLS)
|
||||
target_link_libraries(${SOCKPP_STATIC_LIBRARY} PUBLIC
|
||||
MbedTLS::mbedtls
|
||||
MbedTLS::mbedcrypto
|
||||
MbedTLS::mbedx509
|
||||
)
|
||||
endif()
|
||||
endif()
|
||||
|
||||
# --- Install Targets ---
|
||||
|
||||
include(GNUInstallDirs)
|
||||
|
||||
install(TARGETS ${TARGET_FILES}
|
||||
EXPORT sockpp-targets
|
||||
install(TARGETS ${SOCKPP_TARGETS}
|
||||
EXPORT Sockpp
|
||||
ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR}
|
||||
LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR}
|
||||
RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR}
|
||||
)
|
||||
|
||||
install(EXPORT sockpp-targets
|
||||
install(EXPORT Sockpp
|
||||
FILE
|
||||
sockppTargets.cmake
|
||||
NAMESPACE
|
||||
@@ -222,13 +130,17 @@ install(EXPORT sockpp-targets
|
||||
include(CMakePackageConfigHelpers)
|
||||
|
||||
write_basic_package_version_file(
|
||||
${SOCKPP_GENERATED_DIR}/cmake/sockppConfigVersion.cmake
|
||||
VERSION ${PROJECT_VERSION}
|
||||
COMPATIBILITY AnyNewerVersion
|
||||
${SOCKPP_GENERATED_DIR}/cmake/sockppConfigVersion.cmake
|
||||
VERSION ${PROJECT_VERSION}
|
||||
COMPATIBILITY AnyNewerVersion
|
||||
)
|
||||
|
||||
install(DIRECTORY include/ ${SOCKPP_GENERATED_DIR}/include/
|
||||
DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}
|
||||
install(
|
||||
DIRECTORY
|
||||
include/
|
||||
${SOCKPP_GENERATED_DIR}/include/
|
||||
DESTINATION
|
||||
${CMAKE_INSTALL_INCLUDEDIR}
|
||||
)
|
||||
|
||||
install(
|
||||
@@ -245,14 +157,6 @@ if(SOCKPP_BUILD_DOCUMENTATION)
|
||||
add_subdirectory(doc)
|
||||
endif()
|
||||
|
||||
# --- Default library for examples and unit tests ---
|
||||
|
||||
if(SOCKPP_BUILD_SHARED)
|
||||
set(SOCKPP_LIB ${SOCKPP_SHARED_LIBRARY})
|
||||
else()
|
||||
set(SOCKPP_LIB ${SOCKPP_STATIC_LIBRARY})
|
||||
endif()
|
||||
|
||||
# --- Example applications ---
|
||||
|
||||
if(SOCKPP_BUILD_EXAMPLES)
|
||||
|
||||
@@ -1,14 +1,29 @@
|
||||
# sockppConfig.cmake
|
||||
#
|
||||
# The following import targets may be created depending on configuration:
|
||||
# The following import target is always created:
|
||||
#
|
||||
# Sockpp::sockpp
|
||||
#
|
||||
# This is for whichever target is build (shared or static).
|
||||
# If both are built it is for the shared target.
|
||||
#
|
||||
# One or both of the following import targets will be created depending
|
||||
# on the configuration:
|
||||
#
|
||||
# Sockpp::sockpp-shared
|
||||
# Sockpp::sockpp-static
|
||||
#
|
||||
|
||||
include(CMakeFindDependencyMacro)
|
||||
|
||||
if(NOT TARGET Sockpp::sockpp AND NOT TARGET Sockpp::sockpp-static)
|
||||
if(NOT TARGET Sockpp::sockpp-shared AND NOT TARGET Sockpp::sockpp-static)
|
||||
include("${CMAKE_CURRENT_LIST_DIR}/sockppTargets.cmake")
|
||||
|
||||
if(TARGET Sockpp::sockpp-shared)
|
||||
add_library(Sockpp::sockpp ALIAS Sockpp::sockpp-shared)
|
||||
else()
|
||||
add_library(Sockpp::sockpp ALIAS Sockpp::sockpp-static)
|
||||
endif()
|
||||
|
||||
endif()
|
||||
|
||||
|
||||
@@ -45,16 +45,8 @@ set(EXECUTABLES
|
||||
)
|
||||
|
||||
foreach(EXECUTABLE ${EXECUTABLES})
|
||||
add_executable(${EXECUTABLE} ${EXECUTABLE}.cpp)
|
||||
|
||||
target_include_directories(${EXECUTABLE}
|
||||
PUBLIC
|
||||
${SOCKPP_INCLUDE_DIR}
|
||||
PRIVATE
|
||||
${SOCKPP_GENERATED_DIR}/include
|
||||
)
|
||||
|
||||
target_link_libraries(${EXECUTABLE} ${SOCKPP_LIB})
|
||||
add_executable(${EXECUTABLE} ${EXECUTABLE}.cpp)
|
||||
target_link_libraries(${EXECUTABLE} Sockpp::sockpp)
|
||||
endforeach()
|
||||
|
||||
# --- Install examples ---
|
||||
|
||||
@@ -45,29 +45,21 @@ find_package(Threads REQUIRED)
|
||||
# --- Executables ---
|
||||
|
||||
set(THREADED_EXECUTABLES
|
||||
tcpechosvr
|
||||
tcpechomt
|
||||
tcp6echosvr
|
||||
tcpechosvr
|
||||
tcpechomt
|
||||
tcp6echosvr
|
||||
)
|
||||
|
||||
set(EXECUTABLES
|
||||
tcpecho
|
||||
tcpechotest
|
||||
tcp6echo
|
||||
${THREADED_EXECUTABLES}
|
||||
tcpecho
|
||||
tcpechotest
|
||||
tcp6echo
|
||||
${THREADED_EXECUTABLES}
|
||||
)
|
||||
|
||||
foreach(EXECUTABLE ${EXECUTABLES})
|
||||
add_executable(${EXECUTABLE} ${EXECUTABLE}.cpp)
|
||||
|
||||
target_include_directories(${EXECUTABLE}
|
||||
PUBLIC
|
||||
${SOCKPP_INCLUDE_DIR}
|
||||
PRIVATE
|
||||
${SOCKPP_GENERATED_DIR}/include
|
||||
)
|
||||
|
||||
target_link_libraries(${EXECUTABLE} ${SOCKPP_LIB})
|
||||
add_executable(${EXECUTABLE} ${EXECUTABLE}.cpp)
|
||||
target_link_libraries(${EXECUTABLE} Sockpp::sockpp)
|
||||
endforeach()
|
||||
|
||||
# --- Additional linkage to Threads ---
|
||||
|
||||
@@ -48,28 +48,20 @@ set(THREADED_EXECUTABLES
|
||||
)
|
||||
|
||||
set(EXECUTABLES
|
||||
tlscli
|
||||
tlsconn
|
||||
${THREADED_EXECUTABLES}
|
||||
tlscli
|
||||
tlsconn
|
||||
${THREADED_EXECUTABLES}
|
||||
)
|
||||
|
||||
foreach(EXECUTABLE ${EXECUTABLES})
|
||||
add_executable(${EXECUTABLE} ${EXECUTABLE}.cpp)
|
||||
|
||||
target_include_directories(${EXECUTABLE}
|
||||
PUBLIC
|
||||
${SOCKPP_INCLUDE_DIR}
|
||||
PRIVATE
|
||||
${SOCKPP_GENERATED_DIR}/include
|
||||
)
|
||||
|
||||
target_link_libraries(${EXECUTABLE} ${SOCKPP_LIB})
|
||||
add_executable(${EXECUTABLE} ${EXECUTABLE}.cpp)
|
||||
target_link_libraries(${EXECUTABLE} Sockpp::sockpp)
|
||||
endforeach()
|
||||
|
||||
# --- Additional linkage to Threads ---
|
||||
|
||||
foreach(EXECUTABLE ${THREADED_EXECUTABLES})
|
||||
target_link_libraries(${EXECUTABLE} Threads::Threads)
|
||||
target_link_libraries(${EXECUTABLE} Threads::Threads)
|
||||
endforeach()
|
||||
|
||||
# --- Install examples ---
|
||||
|
||||
@@ -45,32 +45,24 @@ find_package(Threads REQUIRED)
|
||||
# --- Executables ---
|
||||
|
||||
set(THREADED_EXECUTABLES
|
||||
udpechosvr
|
||||
udpechosvr
|
||||
)
|
||||
|
||||
set(EXECUTABLES
|
||||
udpecho
|
||||
udp6echo
|
||||
${THREADED_EXECUTABLES}
|
||||
udpecho
|
||||
udp6echo
|
||||
${THREADED_EXECUTABLES}
|
||||
)
|
||||
|
||||
foreach(EXECUTABLE ${EXECUTABLES})
|
||||
add_executable(${EXECUTABLE} ${EXECUTABLE}.cpp)
|
||||
|
||||
target_include_directories(${EXECUTABLE}
|
||||
PUBLIC
|
||||
${SOCKPP_INCLUDE_DIR}
|
||||
PRIVATE
|
||||
${SOCKPP_GENERATED_DIR}/include
|
||||
)
|
||||
|
||||
target_link_libraries(${EXECUTABLE} ${SOCKPP_LIB})
|
||||
add_executable(${EXECUTABLE} ${EXECUTABLE}.cpp)
|
||||
target_link_libraries(${EXECUTABLE} Sockpp::sockpp)
|
||||
endforeach()
|
||||
|
||||
# --- Additional linkage to Threads ---
|
||||
|
||||
foreach(EXECUTABLE ${THREADED_EXECUTABLES})
|
||||
target_link_libraries(${EXECUTABLE} Threads::Threads)
|
||||
target_link_libraries(${EXECUTABLE} Threads::Threads)
|
||||
endforeach()
|
||||
|
||||
# --- Install examples ---
|
||||
|
||||
@@ -45,36 +45,28 @@ find_package(Threads REQUIRED)
|
||||
# --- Executables ---
|
||||
|
||||
set(THREADED_EXECUTABLES
|
||||
unechosvr
|
||||
undgramechosvr
|
||||
unechosvr
|
||||
undgramechosvr
|
||||
)
|
||||
|
||||
set(EXECUTABLES
|
||||
unecho
|
||||
unechotest
|
||||
undgramecho
|
||||
${THREADED_EXECUTABLES}
|
||||
unecho
|
||||
unechotest
|
||||
undgramecho
|
||||
${THREADED_EXECUTABLES}
|
||||
)
|
||||
|
||||
# --- Executables ---
|
||||
|
||||
foreach(EXECUTABLE ${EXECUTABLES})
|
||||
add_executable(${EXECUTABLE} ${EXECUTABLE}.cpp)
|
||||
|
||||
target_include_directories(${EXECUTABLE}
|
||||
PUBLIC
|
||||
${SOCKPP_INCLUDE_DIR}
|
||||
PRIVATE
|
||||
${SOCKPP_GENERATED_DIR}/include
|
||||
)
|
||||
|
||||
target_link_libraries(${EXECUTABLE} ${SOCKPP_LIB})
|
||||
add_executable(${EXECUTABLE} ${EXECUTABLE}.cpp)
|
||||
target_link_libraries(${EXECUTABLE} Sockpp::sockpp)
|
||||
endforeach()
|
||||
|
||||
# --- Additional linkage to Threads ---
|
||||
|
||||
foreach(EXECUTABLE ${THREADED_EXECUTABLES})
|
||||
target_link_libraries(${EXECUTABLE} Threads::Threads)
|
||||
target_link_libraries(${EXECUTABLE} Threads::Threads)
|
||||
endforeach()
|
||||
|
||||
# --- Install examples ---
|
||||
|
||||
@@ -5,7 +5,7 @@
|
||||
# ---------------------------------------------------------------------------
|
||||
# This file is part of the "sockpp" C++ socket library.
|
||||
#
|
||||
# Copyright (c) 2017-2023 Frank Pagliughi
|
||||
# Copyright (c) 2017-2024 Frank Pagliughi
|
||||
# All rights reserved.
|
||||
#
|
||||
# Redistribution and use in source and binary forms, with or without
|
||||
@@ -36,73 +36,130 @@
|
||||
# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
# ---------------------------------------------------------------------------
|
||||
|
||||
add_library(sockpp-objs OBJECT
|
||||
acceptor.cpp
|
||||
connector.cpp
|
||||
datagram_socket.cpp
|
||||
error.cpp
|
||||
inet_address.cpp
|
||||
inet6_address.cpp
|
||||
socket.cpp
|
||||
stream_socket.cpp
|
||||
include(GenerateExportHeader)
|
||||
|
||||
# The common sources.
|
||||
# Additional files are added below, as configured.
|
||||
set(SOURCES
|
||||
acceptor.cpp
|
||||
connector.cpp
|
||||
datagram_socket.cpp
|
||||
error.cpp
|
||||
inet_address.cpp
|
||||
inet6_address.cpp
|
||||
socket.cpp
|
||||
stream_socket.cpp
|
||||
)
|
||||
|
||||
# Additional sources (platform & config)
|
||||
|
||||
if(UNIX)
|
||||
target_sources(sockpp-objs PUBLIC
|
||||
${CMAKE_CURRENT_SOURCE_DIR}/unix/unix_address.cpp
|
||||
)
|
||||
if(SOCKPP_WITH_CAN)
|
||||
target_sources(sockpp-objs PUBLIC
|
||||
${CMAKE_CURRENT_SOURCE_DIR}/linux/can_address.cpp
|
||||
${CMAKE_CURRENT_SOURCE_DIR}/linux/can_socket.cpp
|
||||
)
|
||||
endif()
|
||||
list(APPEND SOURCES
|
||||
${CMAKE_CURRENT_SOURCE_DIR}/unix/unix_address.cpp
|
||||
)
|
||||
if(SOCKPP_WITH_CAN)
|
||||
list(APPEND SOURCES
|
||||
${CMAKE_CURRENT_SOURCE_DIR}/linux/can_address.cpp
|
||||
${CMAKE_CURRENT_SOURCE_DIR}/linux/can_socket.cpp
|
||||
)
|
||||
endif()
|
||||
endif()
|
||||
|
||||
# Secure TLS library, is one selected
|
||||
|
||||
if(SOCKPP_WITH_OPENSSL)
|
||||
target_sources(sockpp-objs PUBLIC
|
||||
${CMAKE_CURRENT_SOURCE_DIR}/tls/openssl_context.cpp
|
||||
${CMAKE_CURRENT_SOURCE_DIR}/tls/openssl_socket.cpp
|
||||
${CMAKE_CURRENT_SOURCE_DIR}/tls/openssl_error.cpp
|
||||
)
|
||||
target_link_libraries(sockpp-objs
|
||||
PUBLIC
|
||||
OpenSSL::SSL
|
||||
OpenSSL::Crypto
|
||||
)
|
||||
list(APPEND SOURCES
|
||||
${CMAKE_CURRENT_SOURCE_DIR}/tls/openssl_context.cpp
|
||||
${CMAKE_CURRENT_SOURCE_DIR}/tls/openssl_socket.cpp
|
||||
${CMAKE_CURRENT_SOURCE_DIR}/tls/openssl_error.cpp
|
||||
)
|
||||
elseif(SOCKPP_WITH_MBEDTLS)
|
||||
target_sources(sockpp-objs PUBLIC
|
||||
${CMAKE_CURRENT_SOURCE_DIR}/tls/mbedtls_context.cpp
|
||||
${CMAKE_CURRENT_SOURCE_DIR}/tls/mbedtls_socket.cpp
|
||||
${CMAKE_CURRENT_SOURCE_DIR}/tls/mbedtls_error.cpp
|
||||
)
|
||||
target_link_libraries(sockpp-objs
|
||||
PUBLIC
|
||||
MbedTLS::mbedtls
|
||||
MbedTLS::mbedcrypto
|
||||
MbedTLS::mbedx509
|
||||
)
|
||||
list(APPEND SOURCES
|
||||
${CMAKE_CURRENT_SOURCE_DIR}/tls/mbedtls_context.cpp
|
||||
${CMAKE_CURRENT_SOURCE_DIR}/tls/mbedtls_socket.cpp
|
||||
${CMAKE_CURRENT_SOURCE_DIR}/tls/mbedtls_error.cpp
|
||||
)
|
||||
endif()
|
||||
|
||||
# -- The shared library (if configured) ---
|
||||
|
||||
set_target_properties(sockpp-objs PROPERTIES POSITION_INDEPENDENT_CODE 1)
|
||||
if(${SOCKPP_BUILD_SHARED})
|
||||
message(STATUS "Creating shared library")
|
||||
|
||||
target_include_directories(sockpp-objs
|
||||
PUBLIC
|
||||
$<BUILD_INTERFACE:${SOCKPP_INCLUDE_DIR}>
|
||||
$<INSTALL_INTERFACE:include>
|
||||
PRIVATE
|
||||
${SOCKPP_GENERATED_DIR}/include
|
||||
${CMAKE_SOURCE_DIR}/src
|
||||
)
|
||||
add_library(sockpp-shared SHARED ${SOURCES})
|
||||
|
||||
# --- Warnings ---
|
||||
add_library(Sockpp::sockpp-shared ALIAS sockpp-shared)
|
||||
add_library(Sockpp::sockpp ALIAS sockpp-shared)
|
||||
|
||||
target_compile_options(sockpp-objs PRIVATE
|
||||
$<$<CXX_COMPILER_ID:MSVC>:/W3>
|
||||
$<$<CXX_COMPILER_ID:Clang>:-Wall -Wextra -Wpedantic -Wdocumentation>
|
||||
$<$<NOT:$<OR:$<CXX_COMPILER_ID:MSVC>,$<CXX_COMPILER_ID:Clang>>>:-Wall -Wextra -Wpedantic>
|
||||
)
|
||||
set_target_properties(sockpp-shared PROPERTIES
|
||||
OUTPUT_NAME sockpp
|
||||
VERSION ${PROJECT_VERSION}
|
||||
SOVERSION ${PROJECT_VERSION_MAJOR}
|
||||
)
|
||||
|
||||
generate_export_header(sockpp-shared
|
||||
BASE_NAME sockpp
|
||||
EXPORT_FILE_NAME ${SOCKPP_GENERATED_DIR}/include/sockpp/export.h
|
||||
)
|
||||
endif()
|
||||
|
||||
# -- The static library (if configured) ---
|
||||
|
||||
if(${SOCKPP_BUILD_STATIC})
|
||||
message(STATUS "Creating static library")
|
||||
|
||||
add_library(sockpp-static STATIC ${SOURCES})
|
||||
|
||||
add_library(Sockpp::sockpp-static ALIAS sockpp-static)
|
||||
|
||||
if(${SOCKPP_BUILD_SHARED})
|
||||
target_compile_definitions(sockpp-static PRIVATE SOCKPP_STATIC_DEFINE)
|
||||
else()
|
||||
add_library(Sockpp::sockpp ALIAS sockpp-static)
|
||||
|
||||
generate_export_header(sockpp-static
|
||||
BASE_NAME sockpp
|
||||
EXPORT_FILE_NAME ${SOCKPP_GENERATED_DIR}/include/sockpp/export.h
|
||||
)
|
||||
endif()
|
||||
|
||||
# On *nix systems, the static library can have the same base filename
|
||||
# as the shared library, thus 'libsockpp.a' for the static lib.
|
||||
# On Windows they need different names to tell the static lib from the
|
||||
# DLL import library.
|
||||
if(UNIX)
|
||||
set_target_properties(sockpp-static PROPERTIES OUTPUT_NAME sockpp)
|
||||
endif()
|
||||
endif()
|
||||
|
||||
foreach(TARGET ${SOCKPP_TARGETS})
|
||||
target_include_directories(${TARGET} PUBLIC
|
||||
$<BUILD_INTERFACE:${SOCKPP_INCLUDE_DIR}>
|
||||
$<BUILD_INTERFACE:${SOCKPP_GENERATED_DIR}/include>
|
||||
$<INSTALL_INTERFACE:include>
|
||||
)
|
||||
|
||||
target_link_libraries(${TARGET} PUBLIC ${LIBS_SYSTEM})
|
||||
|
||||
# Secure TLS library (if one is configured)
|
||||
|
||||
if(SOCKPP_WITH_OPENSSL)
|
||||
target_link_libraries(${TARGET} PUBLIC
|
||||
OpenSSL::SSL
|
||||
OpenSSL::Crypto
|
||||
)
|
||||
elseif(SOCKPP_WITH_MBEDTLS)
|
||||
target_link_libraries(${TARGET} PUBLIC
|
||||
MbedTLS::mbedtls
|
||||
MbedTLS::mbedcrypto
|
||||
MbedTLS::mbedx509
|
||||
)
|
||||
endif()
|
||||
|
||||
# --- Warnings ---
|
||||
|
||||
target_compile_options(${TARGET} PRIVATE
|
||||
$<$<CXX_COMPILER_ID:MSVC>:/W3>
|
||||
$<$<CXX_COMPILER_ID:Clang>:-Wall -Wextra -Wpedantic -Wdocumentation>
|
||||
$<$<NOT:$<OR:$<CXX_COMPILER_ID:MSVC>,$<CXX_COMPILER_ID:Clang>>>:-Wall -Wextra -Wpedantic>
|
||||
)
|
||||
endforeach()
|
||||
|
||||
|
||||
@@ -38,10 +38,6 @@
|
||||
|
||||
# ----- Mbed TLS -----
|
||||
|
||||
#target_sources(sockpp-objs PUBLIC
|
||||
# ${CMAKE_CURRENT_SOURCE_DIR}/mbedtls/mbedtls_context.cpp
|
||||
#)
|
||||
|
||||
# ----- OpenSSL -----
|
||||
|
||||
|
||||
|
||||
@@ -54,49 +54,39 @@ find_package(Threads REQUIRED)
|
||||
# --- Executables ---
|
||||
|
||||
add_executable(unit_tests
|
||||
unit_tests.cpp
|
||||
test_inet_address.cpp
|
||||
test_inet6_address.cpp
|
||||
test_socket.cpp
|
||||
test_sock_address.cpp
|
||||
test_stream_socket.cpp
|
||||
test_tcp_socket.cpp
|
||||
test_datagram_socket.cpp
|
||||
test_acceptor.cpp
|
||||
test_connector.cpp
|
||||
test_result.cpp
|
||||
unit_tests.cpp
|
||||
test_inet_address.cpp
|
||||
test_inet6_address.cpp
|
||||
test_socket.cpp
|
||||
test_sock_address.cpp
|
||||
test_stream_socket.cpp
|
||||
test_tcp_socket.cpp
|
||||
test_datagram_socket.cpp
|
||||
test_acceptor.cpp
|
||||
test_connector.cpp
|
||||
test_result.cpp
|
||||
)
|
||||
|
||||
if(UNIX)
|
||||
target_sources(unit_tests
|
||||
PUBLIC
|
||||
${CMAKE_CURRENT_SOURCE_DIR}/test_unix_address.cpp
|
||||
${CMAKE_CURRENT_SOURCE_DIR}/test_unix_stream_socket.cpp
|
||||
${CMAKE_CURRENT_SOURCE_DIR}/test_unix_dgram_socket.cpp
|
||||
)
|
||||
target_sources(unit_tests PUBLIC
|
||||
${CMAKE_CURRENT_SOURCE_DIR}/test_unix_address.cpp
|
||||
${CMAKE_CURRENT_SOURCE_DIR}/test_unix_stream_socket.cpp
|
||||
${CMAKE_CURRENT_SOURCE_DIR}/test_unix_dgram_socket.cpp
|
||||
)
|
||||
endif()
|
||||
|
||||
if(SOCKPP_WITH_CAN)
|
||||
target_sources(unit_tests
|
||||
PUBLIC
|
||||
${CMAKE_CURRENT_SOURCE_DIR}/test_can_address.cpp
|
||||
)
|
||||
target_sources(unit_tests PUBLIC
|
||||
${CMAKE_CURRENT_SOURCE_DIR}/test_can_address.cpp
|
||||
)
|
||||
endif()
|
||||
|
||||
target_include_directories(unit_tests
|
||||
PUBLIC
|
||||
${SOCKPP_INCLUDE_DIR}
|
||||
PRIVATE
|
||||
${SOCKPP_GENERATED_DIR}/include
|
||||
${CMAKE_CURRENT_SOURCE_DIR}
|
||||
)
|
||||
|
||||
# --- Link for executables ---
|
||||
|
||||
target_link_libraries(unit_tests
|
||||
${SOCKPP_LIB}
|
||||
Catch2::Catch2
|
||||
Threads::Threads
|
||||
Sockpp::sockpp
|
||||
Catch2::Catch2
|
||||
Threads::Threads
|
||||
)
|
||||
|
||||
include(CTest)
|
||||
|
||||
Reference in New Issue
Block a user