Commit 21628e3e authored by Dominik Charousset's avatar Dominik Charousset

Merge branch 'topic/cmake'

parents eaea2944 1a54b9d7
......@@ -66,31 +66,71 @@ if(NOT CAF_LOG_LEVEL IN_LIST CAF_VALID_LOG_LEVELS)
message(FATAL_ERROR "Invalid log level: \"${CAF_LOG_LEVEL}\"")
endif()
if(MSVC AND CAF_SANITIZERS)
message(FATAL_ERROR "Sanitizer builds are currently not supported on MSVC")
endif()
# -- compiler setup ------------------------------------------------------------
if(MSVC)
# Disable 4275 and 4251 (warnings regarding C++ classes at ABI boundaries).
add_compile_options(/wd4275 /wd4251)
if(CAF_SANITIZERS)
message(FATAL_ERROR "Sanitizer builds are currently not supported on MSVC")
# Calls target_link_libraries for non-object library targets.
function(caf_target_link_libraries target access)
get_target_property(targetType ${target} TYPE)
if (NOT targetType STREQUAL OBJECT_LIBRARY)
target_link_libraries(${target} ${access} ${ARGN})
else()
# If we can't link against it, at least make sure to pull in INTERFACE
# includes and compiler options.
foreach(arg ${ARGN})
if (TARGET ${arg})
target_include_directories(
${target} PRIVATE
$<TARGET_PROPERTY:${arg},INTERFACE_INCLUDE_DIRECTORIES>)
target_compile_options(
${target} PRIVATE
$<TARGET_PROPERTY:${arg},INTERFACE_COMPILE_OPTIONS>)
endif()
endforeach()
endif()
elseif(CMAKE_CXX_COMPILER_ID MATCHES "Clang"
endfunction()
function(caf_set_default_properties)
foreach(target ${ARGN})
if(MSVC)
# Disable 4275 and 4251 (warnings regarding C++ classes at ABI boundaries).
target_compile_options(${target} PRIVATE /wd4275 /wd4251)
elseif(CMAKE_CXX_COMPILER_ID MATCHES "Clang"
OR CMAKE_CXX_COMPILER_ID MATCHES "GNU")
# Flags for both compilers.
add_compile_options(-ftemplate-depth=512 -ftemplate-backtrace-limit=0
-Wall -Wextra -pedantic)
target_compile_options(${target} PRIVATE -Wall -Wextra -pedantic
-ftemplate-depth=512 -ftemplate-backtrace-limit=0)
if(CMAKE_CXX_COMPILER_ID MATCHES "Clang")
# Flags for Clang only.
add_compile_options(-Wdocumentation)
target_compile_options(${target} PRIVATE -Wdocumentation)
else()
# Flags for GCC only.
add_compile_options(-Wno-missing-field-initializers)
target_compile_options(${target} PRIVATE
-Wno-missing-field-initializers)
endif()
endif()
if(CAF_SANITIZERS)
add_compile_options(-fsanitize=${CAF_SANITIZERS} -fno-omit-frame-pointer)
endif()
endif()
if(CAF_SANITIZERS)
target_compile_options(${target} PRIVATE
-fsanitize=${CAF_SANITIZERS}
-fno-omit-frame-pointer)
caf_target_link_libraries(${target} PRIVATE
-fsanitize=${CAF_SANITIZERS}
-fno-omit-frame-pointer)
endif()
# All of our object libraries can end up in shared libs => PIC.
get_target_property(targetType ${target} TYPE)
if (targetType STREQUAL OBJECT_LIBRARY)
set_property(TARGET ${target} PROPERTY POSITION_INDEPENDENT_CODE ON)
endif()
# We always place headers in the same directories and need to find generated
# headers from the bin dir.
target_include_directories(${target} PRIVATE "${CMAKE_BINARY_DIR}"
"${CMAKE_CURRENT_SOURCE_DIR}")
endforeach()
endfunction()
# -- unit testing setup / caf_add_test_suites function ------------------------
......@@ -145,9 +185,7 @@ endif()
if(BUILD_SHARED_LIBS)
set(CMAKE_CXX_VISIBILITY_PRESET hidden)
set(CMAKE_VISIBILITY_INLINES_HIDDEN yes)
if(POLICY CMP0063)
cmake_policy(SET CMP0063 NEW)
endif()
endif()
# -- utility targets -----------------------------------------------------------
......@@ -160,7 +198,7 @@ if(CAF_ENABLE_UTILITY_TARGETS)
add_custom_target(update-enum-strings)
# adds a consistency check that verifies that `cpp_file` is still valid by
# re-generating the file and comparing it to the existing file
function(add_enum_consistency_check hpp_file cpp_file)
function(caf_add_enum_consistency_check hpp_file cpp_file)
set(input "${CMAKE_CURRENT_SOURCE_DIR}/${hpp_file}")
set(file_under_test "${CMAKE_CURRENT_SOURCE_DIR}/${cpp_file}")
set(output "${CMAKE_CURRENT_BINARY_DIR}/check/${cpp_file}")
......@@ -187,7 +225,7 @@ if(CAF_ENABLE_UTILITY_TARGETS)
add_dependencies(update-enum-strings "${target_name}-update")
endfunction()
else()
function(add_enum_consistency_check hpp_file cpp_file)
function(caf_add_enum_consistency_check hpp_file cpp_file)
# nop
endfunction()
endif()
......@@ -250,6 +288,37 @@ add_custom_command(TARGET uninstall
COMMAND "${CMAKE_COMMAND}" -P
"${CMAKE_CURRENT_BINARY_DIR}/cmake_uninstall.cmake")
# -- utility function for installing library targets ---------------------------
function(caf_export_and_install_lib component)
add_library(CAF::${component} ALIAS libcaf_${component})
string(TOUPPER "CAF_${component}_EXPORT" exportMacroName)
target_include_directories(libcaf_${component} INTERFACE
$<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}>
$<BUILD_INTERFACE:${CMAKE_BINARY_DIR}>
$<INSTALL_INTERFACE:include>)
generate_export_header(
libcaf_${component}
EXPORT_MACRO_NAME ${exportMacroName}
EXPORT_FILE_NAME "${CMAKE_BINARY_DIR}/caf/detail/${component}_export.hpp")
set_target_properties(libcaf_${component} PROPERTIES
EXPORT_NAME ${component}
SOVERSION ${CAF_VERSION}
VERSION ${CAF_LIB_VERSION}
OUTPUT_NAME caf_${component})
install(FILES "${CMAKE_BINARY_DIR}/caf/detail/${component}_export.hpp"
DESTINATION "${CMAKE_INSTALL_INCLUDEDIR}/caf/detail")
install(TARGETS libcaf_${component}
EXPORT CAFTargets
ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR} COMPONENT ${component}
RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR} COMPONENT ${component}
LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR} COMPONENT ${component})
install(DIRECTORY "${CMAKE_CURRENT_SOURCE_DIR}/caf"
DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}
COMPONENT ${component}
FILES_MATCHING PATTERN "*.hpp")
endfunction()
# -- build all components the user asked for -----------------------------------
add_subdirectory(libcaf_core)
......
......@@ -5,13 +5,12 @@
// Default CMake flags for release builds.
defaultReleaseBuildFlags = [
'CAF_ENABLE_RUNTIME_CHECKS:BOOL=ON',
'CAF_ENABLE_ACTOR_PROFILER:BOOL=ON',
]
// Default CMake flags for debug builds.
defaultDebugBuildFlags = defaultReleaseBuildFlags + [
'CAF_SANITIZERS:STRING=address,undefined',
'CAF_LOG_LEVEL:STRING=TRACE',
'CAF_ENABLE_ACTOR_PROFILER:BOOL=ON',
]
// Configures the behavior of our stages.
......@@ -23,7 +22,7 @@ config = [
'build',
'style',
'tests',
'coverage',
// 'coverage', TODO: fix kcov setup
],
// Our build matrix. Keys are the operating system labels and values are build configurations.
buildMatrix: [
......@@ -31,10 +30,12 @@ config = [
['centos-6', [
builds: ['debug', 'release'],
tools: ['gcc-7'],
extraDebugFlags: ['CAF_SANITIZERS:STRING=address,undefined'],
]],
['centos-7', [
builds: ['debug', 'release'],
tools: ['gcc-7'],
extraDebugFlags: ['CAF_SANITIZERS:STRING=address,undefined'],
]],
['ubuntu-16.04', [
builds: ['debug', 'release'],
......@@ -48,7 +49,7 @@ config = [
['fedora-28', [
builds: ['debug'],
tools: ['gcc-8'],
extraSteps: ['coverageReport'],
// extraSteps: ['coverageReport'], TODO: fix kcov setup
extraFlags: ['BUILD_SHARED_LIBS:BOOL=OFF'],
]],
['fedora-28', [
......@@ -59,10 +60,16 @@ config = [
['macOS', [
builds: ['debug', 'release'],
tools: ['clang'],
extraFlags: [
'OPENSSL_ROOT_DIR=/usr/local/opt/openssl',
'OPENSSL_INCLUDE_DIR=/usr/local/opt/openssl/include',
],
extraDebugFlags: ['CAF_SANITIZERS:STRING=address,undefined'],
]],
['FreeBSD', [
builds: ['debug', 'release'],
tools: ['clang'],
extraDebugFlags: ['CAF_SANITIZERS:STRING=address,undefined'],
]],
// Non-UNIX systems.
['Windows', [
......@@ -70,6 +77,7 @@ config = [
//builds: ['debug', 'release'],
builds: ['release'],
tools: ['msvc'],
extraFlags: ['CAF_ENABLE_OPENSSL_MODULE:BOOL=OFF'],
]],
],
// Platform-specific environment settings.
......@@ -83,24 +91,12 @@ config = [
],
// CMake flags by OS and build type to override defaults for individual builds.
buildFlags: [
macOS: [
debug: defaultDebugBuildFlags + [
'OPENSSL_ROOT_DIR=/usr/local/opt/openssl',
'OPENSSL_INCLUDE_DIR=/usr/local/opt/openssl/include',
],
release: defaultReleaseBuildFlags + [
'OPENSSL_ROOT_DIR=/usr/local/opt/openssl',
'OPENSSL_INCLUDE_DIR=/usr/local/opt/openssl/include',
],
],
Windows: [
debug: defaultDebugBuildFlags + [
'CAF_ENABLE_OPENSSL_MODULE:BOOL=OFF',
],
release: defaultReleaseBuildFlags + [
'CAF_ENABLE_OPENSSL_MODULE:BOOL=OFF',
],
nop: [],
],
// Default CMake flags by build type.
defaultBuildFlags: [
debug: defaultDebugBuildFlags,
release: defaultReleaseBuildFlags,
],
// Configures what binary the coverage report uses and what paths to exclude.
coverage: [
......
......@@ -4,21 +4,42 @@ file(GLOB_RECURSE CAF_CORE_HEADERS "caf/*.hpp")
# -- add consistency checks for enum to_string implementations -----------------
add_enum_consistency_check("caf/sec.hpp" "src/sec_strings.cpp")
add_enum_consistency_check("caf/pec.hpp" "src/pec_strings.cpp")
add_enum_consistency_check("caf/stream_priority.hpp"
caf_add_enum_consistency_check("caf/sec.hpp" "src/sec_strings.cpp")
caf_add_enum_consistency_check("caf/pec.hpp" "src/pec_strings.cpp")
caf_add_enum_consistency_check("caf/stream_priority.hpp"
"src/stream_priority_strings.cpp")
add_enum_consistency_check("caf/exit_reason.hpp"
caf_add_enum_consistency_check("caf/exit_reason.hpp"
"src/exit_reason_strings.cpp")
add_enum_consistency_check("caf/invoke_message_result.hpp"
caf_add_enum_consistency_check("caf/invoke_message_result.hpp"
"src/invoke_msg_result_strings.cpp")
add_enum_consistency_check("caf/message_priority.hpp"
caf_add_enum_consistency_check("caf/message_priority.hpp"
"src/message_priority_strings.cpp")
add_enum_consistency_check("caf/intrusive/inbox_result.hpp"
caf_add_enum_consistency_check("caf/intrusive/inbox_result.hpp"
"src/intrusive/inbox_result_strings.cpp")
add_enum_consistency_check("caf/intrusive/task_result.hpp"
caf_add_enum_consistency_check("caf/intrusive/task_result.hpp"
"src/intrusive/task_result_strings.cpp")
# -- dependencies --------------------------------------------------------------
if(NOT TARGET Threads::Threads)
find_package(Threads REQUIRED)
endif()
# -- utility function for setting default properties ---------------------------
function(caf_core_set_default_properties)
foreach(target ${ARGN})
# Set global defaults and set EXPORTS flag.
caf_set_default_properties(${target})
target_compile_definitions(${target} PRIVATE libcaf_core_EXPORTS)
# Pull in public dependencies.
caf_target_link_libraries(${target} PUBLIC Threads::Threads)
if(MSVC)
caf_target_link_libraries(${target} PUBLIC iphlpapi)
endif()
endforeach()
endfunction()
# -- add library target --------------------------------------------------------
add_library(libcaf_core_obj OBJECT ${CAF_CORE_HEADERS}
......@@ -154,72 +175,12 @@ add_library(libcaf_core_obj OBJECT ${CAF_CORE_HEADERS}
src/uuid.cpp
)
target_include_directories(libcaf_core_obj PRIVATE
"${CMAKE_BINARY_DIR}" "${CMAKE_CURRENT_SOURCE_DIR}")
add_library(libcaf_core "${PROJECT_SOURCE_DIR}/cmake/dummy.cpp"
$<TARGET_OBJECTS:libcaf_core_obj>)
target_include_directories(libcaf_core INTERFACE
$<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}>)
target_include_directories(libcaf_core INTERFACE
$<BUILD_INTERFACE:${CMAKE_BINARY_DIR}>)
add_library(CAF::core ALIAS libcaf_core)
caf_core_set_default_properties(libcaf_core_obj libcaf_core)
# -- dependencies and compiler flags -------------------------------------------
if(BUILD_SHARED_LIBS AND NOT WIN32)
target_compile_options(libcaf_core PRIVATE -fPIC)
target_compile_options(libcaf_core_obj PRIVATE -fPIC)
endif()
if(NOT TARGET Threads::Threads)
find_package(Threads REQUIRED)
endif()
target_link_libraries(libcaf_core PUBLIC Threads::Threads)
if(MSVC)
target_link_libraries(libcaf_core PUBLIC iphlpapi)
endif()
if(CAF_SANITIZERS)
target_link_libraries(libcaf_core PUBLIC -fsanitize=${CAF_SANITIZERS})
endif()
# -- API exports ---------------------------------------------------------------
generate_export_header(libcaf_core
EXPORT_MACRO_NAME CAF_CORE_EXPORT
EXPORT_FILE_NAME "${CMAKE_BINARY_DIR}/caf/detail/core_export.hpp"
STATIC_DEFINE CAF_STATIC_BUILD)
target_compile_definitions(libcaf_core_obj PRIVATE libcaf_core_EXPORTS)
set_target_properties(libcaf_core PROPERTIES
EXPORT_NAME core
SOVERSION ${CAF_VERSION}
VERSION ${CAF_LIB_VERSION}
OUTPUT_NAME caf_core)
# -- install library and header files ------------------------------------------
install(FILES "${CMAKE_BINARY_DIR}/caf/detail/build_config.hpp"
"${CMAKE_BINARY_DIR}/caf/detail/core_export.hpp"
DESTINATION "${CMAKE_INSTALL_INCLUDEDIR}/caf/detail")
install(TARGETS libcaf_core
EXPORT CAFTargets
ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR} COMPONENT core
RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR} COMPONENT core
LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR} COMPONENT core)
install(DIRECTORY "${CMAKE_CURRENT_SOURCE_DIR}/caf"
DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}
COMPONENT core
FILES_MATCHING PATTERN "*.hpp")
caf_export_and_install_lib(core)
# -- build unit tests ----------------------------------------------------------
......@@ -231,19 +192,13 @@ add_executable(caf-core-test
test/core-test.cpp
$<TARGET_OBJECTS:libcaf_core_obj>)
caf_core_set_default_properties(caf-core-test)
target_include_directories(caf-core-test PRIVATE
"${CMAKE_CURRENT_SOURCE_DIR}/test")
target_compile_definitions(caf-core-test PRIVATE libcaf_core_EXPORTS)
target_link_libraries(caf-core-test PUBLIC CAF::test)
target_link_libraries(caf-core-test PRIVATE
$<TARGET_PROPERTY:libcaf_core,INTERFACE_LINK_LIBRARIES>)
target_include_directories(caf-core-test PRIVATE
"${CMAKE_BINARY_DIR}" "${CMAKE_CURRENT_SOURCE_DIR}")
caf_add_test_suites(caf-core-test
actor_clock
actor_factory
......
......@@ -4,12 +4,27 @@ file(GLOB_RECURSE CAF_IO_HEADERS "caf/*.hpp")
# -- add consistency checks for enum to_string implementations -----------------
add_enum_consistency_check("caf/io/basp/message_type.hpp"
caf_add_enum_consistency_check("caf/io/basp/message_type.hpp"
"src/io/basp/message_type_strings.cpp")
add_enum_consistency_check("caf/io/network/operation.hpp"
caf_add_enum_consistency_check("caf/io/network/operation.hpp"
"src/io/network/operation_strings.cpp")
# -- utility function for setting default properties ---------------------------
function(caf_io_set_default_properties)
foreach(target ${ARGN})
# Set global defaults and set EXPORTS flag.
caf_set_default_properties(${target})
target_compile_definitions(${target} PRIVATE libcaf_io_EXPORTS)
# Pull in public dependencies.
caf_target_link_libraries(${target} PUBLIC CAF::core)
if(MSVC)
caf_target_link_libraries(${target} PUBLIC ws2_32 iphlpapi)
endif()
endforeach()
endfunction()
# -- add library target --------------------------------------------------------
add_library(libcaf_io_obj OBJECT ${CAF_IO_HEADERS}
......@@ -55,60 +70,13 @@ add_library(libcaf_io_obj OBJECT ${CAF_IO_HEADERS}
src/policy/udp.cpp
)
target_include_directories(libcaf_io_obj PRIVATE
"${CMAKE_CURRENT_SOURCE_DIR}")
add_library(libcaf_io
"${PROJECT_SOURCE_DIR}/cmake/dummy.cpp"
$<TARGET_OBJECTS:libcaf_io_obj>)
target_include_directories(libcaf_io INTERFACE
$<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}>)
add_library(CAF::io ALIAS libcaf_io)
if(BUILD_SHARED_LIBS AND NOT WIN32)
target_compile_options(libcaf_io PRIVATE -fPIC)
target_compile_options(libcaf_io_obj PRIVATE -fPIC)
endif()
target_include_directories(libcaf_io_obj PRIVATE
$<TARGET_PROPERTY:libcaf_core,INTERFACE_INCLUDE_DIRECTORIES>)
target_link_libraries(libcaf_io PUBLIC CAF::core)
if(MSVC)
target_link_libraries(libcaf_io PUBLIC ws2_32 iphlpapi)
endif()
generate_export_header(libcaf_io
EXPORT_MACRO_NAME CAF_IO_EXPORT
EXPORT_FILE_NAME "${CMAKE_BINARY_DIR}/caf/detail/io_export.hpp"
STATIC_DEFINE CAF_STATIC_BUILD)
caf_io_set_default_properties(libcaf_io_obj libcaf_io)
target_compile_definitions(libcaf_io_obj PRIVATE libcaf_io_EXPORTS)
set_target_properties(libcaf_io PROPERTIES
EXPORT_NAME io
SOVERSION ${CAF_VERSION}
VERSION ${CAF_LIB_VERSION}
OUTPUT_NAME caf_io)
# -- install library and header files ------------------------------------------
install(FILES "${CMAKE_BINARY_DIR}/caf/detail/io_export.hpp"
DESTINATION "${CMAKE_INSTALL_INCLUDEDIR}/caf/detail")
install(TARGETS libcaf_io
EXPORT CAFTargets
ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR} COMPONENT io
LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR} COMPONENT io
RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR} COMPONENT io)
install(DIRECTORY "${CMAKE_CURRENT_SOURCE_DIR}/caf"
DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}
COMPONENT io
FILES_MATCHING PATTERN "*.hpp")
caf_export_and_install_lib(io)
# -- build unit tests ----------------------------------------------------------
......@@ -120,16 +88,11 @@ add_executable(caf-io-test
test/io-test.cpp
$<TARGET_OBJECTS:libcaf_io_obj>)
target_include_directories(caf-io-test PRIVATE "${CMAKE_CURRENT_SOURCE_DIR}/test")
target_compile_definitions(caf-io-test PRIVATE libcaf_io_EXPORTS)
caf_io_set_default_properties(caf-io-test)
target_link_libraries(caf-io-test PRIVATE CAF::core CAF::test)
target_link_libraries(caf-io-test PRIVATE
$<TARGET_PROPERTY:libcaf_io,INTERFACE_LINK_LIBRARIES>)
target_include_directories(caf-io-test PRIVATE "${CMAKE_CURRENT_SOURCE_DIR}/test")
target_include_directories(caf-io-test PRIVATE "${CMAKE_CURRENT_SOURCE_DIR}")
target_link_libraries(caf-io-test PRIVATE CAF::test)
caf_add_test_suites(caf-io-test
io.basp.message_queue
......
......@@ -2,6 +2,25 @@
file(GLOB_RECURSE CAF_OPENSSL_HEADERS "caf/*.hpp")
# -- dependencies --------------------------------------------------------------
if(NOT TARGET OpenSSL::SSL OR NOT TARGET OpenSSL::Crypto)
find_package(OpenSSL REQUIRED)
endif()
# -- utility function for setting default properties ---------------------------
function(caf_openssl_set_default_properties)
foreach(target ${ARGN})
# Set global defaults and set EXPORTS flag.
caf_set_default_properties(${target})
target_compile_definitions(${target} PRIVATE libcaf_openssl_EXPORTS)
# Pull in public dependencies.
caf_target_link_libraries(${target} PUBLIC
CAF::core CAF::io OpenSSL::SSL OpenSSL::Crypto)
endforeach()
endfunction()
# -- add library target --------------------------------------------------------
add_library(libcaf_openssl_obj OBJECT ${CAF_OPENSSL_HEADERS}
......@@ -12,69 +31,13 @@ add_library(libcaf_openssl_obj OBJECT ${CAF_OPENSSL_HEADERS}
src/openssl/session.cpp
)
target_include_directories(libcaf_openssl_obj PRIVATE
"${CMAKE_CURRENT_SOURCE_DIR}")
add_library(libcaf_openssl
"${PROJECT_SOURCE_DIR}/cmake/dummy.cpp"
$<TARGET_OBJECTS:libcaf_openssl_obj>)
target_include_directories(libcaf_openssl INTERFACE
$<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}>)
add_library(CAF::openssl ALIAS libcaf_openssl)
if(BUILD_SHARED_LIBS AND NOT WIN32)
target_compile_options(libcaf_openssl PRIVATE -fPIC)
target_compile_options(libcaf_openssl_obj PRIVATE -fPIC)
endif()
caf_openssl_set_default_properties(libcaf_openssl_obj libcaf_openssl)
if(NOT TARGET OpenSSL::SSL OR NOT TARGET OpenSSL::Crypto)
find_package(OpenSSL REQUIRED)
endif()
target_include_directories(libcaf_openssl_obj PRIVATE
$<TARGET_PROPERTY:libcaf_core,INTERFACE_INCLUDE_DIRECTORIES>
$<TARGET_PROPERTY:libcaf_io,INTERFACE_INCLUDE_DIRECTORIES>
${OPENSSL_INCLUDE_DIR})
target_link_libraries(libcaf_openssl PUBLIC
CAF::core CAF::io
OpenSSL::SSL OpenSSL::Crypto)
generate_export_header(libcaf_openssl
EXPORT_MACRO_NAME CAF_OPENSSL_EXPORT
EXPORT_FILE_NAME "${CMAKE_BINARY_DIR}/caf/detail/openssl_export.hpp"
STATIC_DEFINE CAF_STATIC_BUILD)
target_compile_definitions(libcaf_openssl_obj PRIVATE libcaf_openssl_EXPORTS)
target_include_directories(libcaf_openssl PUBLIC
$<BUILD_INTERFACE:${CMAKE_BINARY_DIR}>
$<BUILD_INTERFACE:${CMAKE_SOURCE_DIR}>
$<INSTALL_INTERFACE:include>)
set_target_properties(libcaf_openssl PROPERTIES
EXPORT_NAME openssl
SOVERSION ${CAF_VERSION}
VERSION ${CAF_LIB_VERSION}
OUTPUT_NAME caf_openssl)
# -- install library and header files ------------------------------------------
install(FILES "${CMAKE_BINARY_DIR}/caf/detail/openssl_export.hpp"
DESTINATION "${CMAKE_INSTALL_INCLUDEDIR}/caf/detail")
install(TARGETS libcaf_openssl
EXPORT CAFTargets
ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR} COMPONENT openssl
RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR} COMPONENT openssl
LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR} COMPONENT openssl)
install(DIRECTORY "${CMAKE_CURRENT_SOURCE_DIR}/caf"
DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}
COMPONENT openssl
FILES_MATCHING PATTERN "*.hpp")
caf_export_and_install_lib(openssl)
# -- build unit tests ----------------------------------------------------------
......@@ -87,15 +50,11 @@ add_executable(caf-openssl-test
${CAF_OPENSSL_TEST_SOURCES}
$<TARGET_OBJECTS:libcaf_openssl_obj>)
target_include_directories(caf-openssl-test PRIVATE "${CMAKE_CURRENT_SOURCE_DIR}/test")
target_compile_definitions(caf-openssl-test PRIVATE libcaf_openssl_EXPORTS)
caf_openssl_set_default_properties(caf-openssl-test)
target_link_libraries(caf-openssl-test PRIVATE
CAF::io CAF::core CAF::test OpenSSL::SSL OpenSSL::Crypto)
target_include_directories(caf-openssl-test PRIVATE "${CMAKE_CURRENT_SOURCE_DIR}/test")
target_include_directories(caf-openssl-test PRIVATE
"${CMAKE_CURRENT_SOURCE_DIR}")
target_link_libraries(caf-openssl-test PRIVATE CAF::test)
caf_add_test_suites(caf-openssl-test
openssl.authentication
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment