mirror of
https://github.com/fpagliughi/sockpp.git
synced 2026-01-12 00:04:45 +08:00
181 lines
4.9 KiB
CMake
181 lines
4.9 KiB
CMake
# CMakeLists.txt
|
|
#
|
|
# Top-level CMake build file for the 'sockpp' library.
|
|
#
|
|
# ---------------------------------------------------------------------------
|
|
# This file is part of the "sockpp" C++ socket library.
|
|
#
|
|
# Copyright (c) 2017-2024 Frank Pagliughi
|
|
# All rights reserved.
|
|
#
|
|
# Redistribution and use in source and binary forms, with or without
|
|
# modification, are permitted provided that the following conditions are
|
|
# met:
|
|
#
|
|
# 1. Redistributions of source code must retain the above copyright notice,
|
|
# this list of conditions and the following disclaimer.
|
|
#
|
|
# 2. Redistributions in binary form must reproduce the above copyright
|
|
# notice, this list of conditions and the following disclaimer in the
|
|
# documentation and/or other materials provided with the distribution.
|
|
#
|
|
# 3. Neither the name of the copyright holder nor the names of its
|
|
# contributors may be used to endorse or promote products derived from this
|
|
# software without specific prior written permission.
|
|
#
|
|
# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS
|
|
# IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
|
|
# THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
|
|
# PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
|
|
# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
|
|
# EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
|
|
# PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
|
|
# PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
|
|
# LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
|
|
# NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
|
|
# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
|
# ---------------------------------------------------------------------------
|
|
|
|
# --- CMake required version ---
|
|
|
|
cmake_minimum_required(VERSION 3.12)
|
|
|
|
# --- Project setup ---
|
|
|
|
project(sockpp VERSION "2.0.0")
|
|
|
|
# --- Build Options ---
|
|
|
|
option(SOCKPP_BUILD_SHARED "Build shared library" ON)
|
|
option(SOCKPP_BUILD_STATIC "Build static library" OFF)
|
|
option(SOCKPP_BUILD_EXAMPLES "Build example applications" OFF)
|
|
option(SOCKPP_BUILD_TESTS "Build unit tests" OFF)
|
|
option(SOCKPP_BUILD_DOCUMENTATION "Create Doxygen reference documentation" OFF)
|
|
option(SOCKPP_WITH_OPENSSL "TLS Secure Sockets with OpenSSL" OFF)
|
|
option(SOCKPP_WITH_MBEDTLS "TLS Secure Sockets with Mbed TLS" OFF)
|
|
|
|
if(NOT WIN32)
|
|
if(CMAKE_SYSTEM_NAME MATCHES "Linux")
|
|
option(SOCKPP_WITH_CAN "Include support for Linux SocketCAN components" OFF)
|
|
endif()
|
|
option(SOCKPP_WITH_UNIX_SOCKETS "Include support for UNIX-domain sockets" ON)
|
|
else()
|
|
option(SOCKPP_WITH_UNIX_SOCKETS "Include support for UNIX-domain sockets" OFF)
|
|
endif()
|
|
|
|
# ----- Find any dependencies -----
|
|
|
|
if(SOCKPP_WITH_OPENSSL)
|
|
set(SOCKPP_WITH_TLS ON)
|
|
find_package(OpenSSL REQUIRED)
|
|
elseif(SOCKPP_WITH_MBEDTLS)
|
|
set(SOCKPP_WITH_TLS ON)
|
|
find_package(MbedTLS REQUIRED)
|
|
endif()
|
|
|
|
# --- Setting naming variables ---
|
|
|
|
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(
|
|
${PROJECT_SOURCE_DIR}/cmake/version.h.in
|
|
${SOCKPP_GENERATED_DIR}/include/sockpp/version.h
|
|
@ONLY
|
|
)
|
|
|
|
# --- Common library sources, etc ---
|
|
|
|
add_subdirectory(src)
|
|
|
|
# --- Install Targets ---
|
|
|
|
include(GNUInstallDirs)
|
|
|
|
install(TARGETS ${SOCKPP_TARGETS}
|
|
EXPORT Sockpp
|
|
ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR}
|
|
LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR}
|
|
RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR}
|
|
)
|
|
|
|
install(EXPORT Sockpp
|
|
FILE
|
|
sockppTargets.cmake
|
|
NAMESPACE
|
|
Sockpp::
|
|
DESTINATION
|
|
${CMAKE_INSTALL_LIBDIR}/cmake/sockpp
|
|
)
|
|
|
|
include(CMakePackageConfigHelpers)
|
|
|
|
write_basic_package_version_file(
|
|
${SOCKPP_GENERATED_DIR}/cmake/sockppConfigVersion.cmake
|
|
VERSION ${PROJECT_VERSION}
|
|
COMPATIBILITY AnyNewerVersion
|
|
)
|
|
|
|
install(
|
|
DIRECTORY
|
|
include/
|
|
${SOCKPP_GENERATED_DIR}/include/
|
|
DESTINATION
|
|
${CMAKE_INSTALL_INCLUDEDIR}
|
|
)
|
|
|
|
install(
|
|
FILES
|
|
${PROJECT_SOURCE_DIR}/cmake/sockppConfig.cmake
|
|
${SOCKPP_GENERATED_DIR}/cmake/sockppConfigVersion.cmake
|
|
DESTINATION
|
|
${CMAKE_INSTALL_LIBDIR}/cmake/sockpp
|
|
)
|
|
|
|
# --- Documentation ---
|
|
|
|
if(SOCKPP_BUILD_DOCUMENTATION)
|
|
add_subdirectory(doc)
|
|
endif()
|
|
|
|
# --- Example applications ---
|
|
|
|
if(SOCKPP_BUILD_EXAMPLES)
|
|
add_subdirectory(examples)
|
|
endif()
|
|
|
|
# --- Unit Tests ---
|
|
|
|
if(SOCKPP_BUILD_TESTS)
|
|
enable_testing()
|
|
add_subdirectory(tests/unit)
|
|
endif()
|
|
|