Commit 3dc4abf9 authored by Dominik Charousset's avatar Dominik Charousset

Merge pull request #897

parents b91102ed f52deca7
......@@ -49,6 +49,29 @@ if(NOT CMAKE_CROSSCOMPILING)
endif()
endif()
set(CAF_LINKAGE_DEFAULT_SHARED ON)
if(WIN32)
# Shared libs are currently not supported on Windows.
set(CAF_LINKAGE_DEFAULT_SHARED OFF)
endif()
option(BUILD_SHARED_LIBS "" ${CAF_LINKAGE_DEFAULT_SHARED})
if (DEFINED CAF_BUILD_STATIC OR DEFINED CAF_BUILD_STATIC_ONLY)
if (CAF_BUILD_STATIC OR CAF_BUILD_STATIC_ONLY)
set(BUILD_SHARED_LIBS OFF)
else ()
set(BUILD_SHARED_LIBS ON)
endif ()
endif ()
if(BUILD_SHARED_LIBS)
set(LINK_TYPE "shared")
else()
set(LINK_TYPE "static")
endif()
set(CMAKE_INSTALL_CMAKEBASEDIR "${CMAKE_INSTALL_LIBDIR}/cmake" CACHE PATH
"Base directory for installing cmake specific artifacts")
set(INSTALL_CAF_CMAKEDIR "${CMAKE_INSTALL_CMAKEBASEDIR}/caf")
# Be nice to VIM users and Clang tools.
set(CMAKE_EXPORT_COMPILE_COMMANDS 1)
......@@ -57,12 +80,6 @@ if(APPLE AND NOT DEFINED CMAKE_MACOSX_RPATH)
set(CMAKE_MACOSX_RPATH true)
endif()
# Shared libs are currently not supported on Windows.
if(WIN32 AND NOT CAF_BUILD_STATIC_ONLY)
message(STATUS "CAF currently only supports static-only builds on Windows")
set(CAF_BUILD_STATIC_ONLY yes)
endif()
if(CAF_BUILD_STATIC_RUNTIME)
set(flags_configs
CMAKE_CXX_FLAGS
......@@ -169,8 +186,6 @@ pretty_yes("CAF_FORCE_NO_EXCEPTIONS")
pretty_no("CAF_ENABLE_RUNTIME_CHECKS")
pretty_no("CAF_NO_MEM_MANAGEMENT")
pretty_no("CAF_NO_EXCEPTIONS")
pretty_no("CAF_BUILD_STATIC_ONLY")
pretty_no("CAF_BUILD_STATIC")
pretty_no("CAF_NO_OPENSSL")
pretty_no("CAF_NO_PYTHON")
pretty_no("CAF_NO_TOOLS")
......@@ -332,8 +347,6 @@ if(MINGW)
build_string("EXTRA_FLAGS" "-static")
elseif(CYGWIN)
build_string("EXTRA_FLAGS" "-U__STRICT_ANSI__")
else()
build_string("EXTRA_FLAGS" "-fPIC")
endif()
if (WIN32)
list(APPEND CAF_EXTRA_LDFLAGS ws2_32 iphlpapi)
......@@ -444,26 +457,11 @@ include_directories("${LIBCAF_INCLUDE_DIRS}")
################################################################################
macro(add_caf_lib name)
string(TOUPPER ${name} upper_name)
set(full_name libcaf_${name})
set(shared_target ${full_name}_shared)
set(static_target ${full_name}_static)
add_subdirectory(${full_name})
set(lib_varname CAF_LIBRARY_${upper_name})
set(lib_varname_static ${lib_varname}_STATIC)
if(NOT CAF_BUILD_STATIC_ONLY)
set(${lib_varname} ${shared_target})
set(CAF_LIBRARIES ${CAF_LIBRARIES} ${shared_target})
else()
set(${lib_varname} ${static_target})
set(CAF_LIBRARIES ${CAF_LIBRARIES} ${static_target})
endif()
if(CAF_BUILD_STATIC_ONLY OR CAF_BUILD_STATIC)
set(${lib_varname_static} ${static_target})
endif()
add_unit_tests("${full_name}/test/*.cpp")
# add headers to include directories so other subprojects can use them
include_directories("${CMAKE_CURRENT_SOURCE_DIR}/libcaf_${name}")
include_directories("${CMAKE_CURRENT_SOURCE_DIR}/${full_name}")
endmacro()
macro(add_optional_caf_lib name)
......@@ -554,6 +552,27 @@ add_optional_caf_binaries(examples)
# build tools if not being told otherwise
add_optional_caf_binaries(tools)
export(EXPORT CAFTargets FILE CAFTargets.cmake NAMESPACE caf::)
install(EXPORT CAFTargets
DESTINATION "${INSTALL_CAF_CMAKEDIR}"
NAMESPACE caf::)
include(CMakePackageConfigHelpers)
write_basic_package_version_file(
"${CMAKE_CURRENT_BINARY_DIR}/CAFConfigVersion.cmake"
VERSION ${CAF_VERSION}
COMPATIBILITY ExactVersion)
configure_package_config_file(
"${CMAKE_CURRENT_SOURCE_DIR}/cmake/CAFConfig.cmake.in"
"${CMAKE_CURRENT_BINARY_DIR}/CAFConfig.cmake" INSTALL_DESTINATION
"${INSTALL_CAF_CMAKEDIR}")
install(FILES "${CMAKE_CURRENT_BINARY_DIR}/CAFConfig.cmake"
"${CMAKE_CURRENT_BINARY_DIR}/CAFConfigVersion.cmake"
DESTINATION "${INSTALL_CAF_CMAKEDIR}")
################################################################################
# unit tests setup #
################################################################################
......@@ -652,8 +671,7 @@ if(NOT CAF_NO_SUMMARY)
"\nCAF version: ${CAF_VERSION}"
"\n"
"\nBuild type: ${CMAKE_BUILD_TYPE}"
"\nBuild static: ${CAF_BUILD_STATIC}"
"\nBuild static only: ${CAF_BUILD_STATIC_ONLY}"
"\nLink type: ${LINK_TYPE}"
"\nBuild static runtime: ${CAF_BUILD_STATIC_RUNTIME}"
"\nRuntime checks: ${CAF_ENABLE_RUNTIME_CHECKS}"
"\nLog level: ${CAF_LOG_LEVEL}"
......
......@@ -98,14 +98,6 @@ config = [
'OPENSSL_INCLUDE_DIR=/usr/local/opt/openssl/include',
],
],
Windows: [
debug: defaultDebugBuildFlags + [
'CAF_BUILD_STATIC_ONLY:BOOL=yes',
],
release: defaultReleaseBuildFlags + [
'CAF_BUILD_STATIC_ONLY:BOOL=yes',
],
],
],
// Configures what binary the coverage report uses and what paths to exclude.
coverage: [
......
@PACKAGE_INIT@
include(CMakeFindDependencyMacro)
set(CMAKE_THREAD_PREFER_PTHREAD TRUE)
set(THREADS_PREFER_PTHREAD_FLAG TRUE)
find_dependency(Threads)
include("${CMAKE_CURRENT_LIST_DIR}/CAFTargets.cmake")
......@@ -71,7 +71,7 @@ foreach (comp ${CAF_FIND_COMPONENTS})
message(WARNING "Found all.hpp for CAF core, but not build_config.hpp")
set(CAF_${comp}_FOUND false)
else()
list(APPEND CAF_INCLUDE_DIRS "${caf_build_header_path}")
list(APPEND CAF_INCLUDE_DIR_${UPPERCOMP} "${caf_build_header_path}")
endif()
endif()
list(APPEND CAF_INCLUDE_DIRS "${CAF_INCLUDE_DIR_${UPPERCOMP}}")
......@@ -84,7 +84,6 @@ foreach (comp ${CAF_FIND_COMPONENTS})
find_library(CAF_LIBRARY_${UPPERCOMP}
NAMES
"caf_${comp}"
"caf_${comp}_static"
HINTS
${library_hints}
/usr/lib
......@@ -120,3 +119,43 @@ mark_as_advanced(CAF_ROOT_DIR
CAF_LIBRARIES
CAF_INCLUDE_DIRS)
if (CAF_core_FOUND AND NOT TARGET caf::core)
add_library(caf::core UNKNOWN IMPORTED)
set_target_properties(caf::core PROPERTIES
IMPORTED_LOCATION "${CAF_LIBRARY_CORE}"
INTERFACE_INCLUDE_DIRECTORIES "${CAF_INCLUDE_DIR_CORE}")
endif ()
if (CAF_io_FOUND AND NOT TARGET caf::io)
add_library(caf::io UNKNOWN IMPORTED)
set_target_properties(caf::io PROPERTIES
IMPORTED_LOCATION "${CAF_LIBRARY_IO}"
INTERFACE_INCLUDE_DIRECTORIES "${CAF_INCLUDE_DIR_IO}"
INTERFACE_LINK_LIBRARIES "caf::core")
endif ()
if (CAF_openssl_FOUND AND NOT TARGET caf::openssl)
add_library(caf::openssl UNKNOWN IMPORTED)
set_target_properties(caf::openssl PROPERTIES
IMPORTED_LOCATION "${CAF_LIBRARY_OPENSSL}"
INTERFACE_INCLUDE_DIRECTORIES "${CAF_INCLUDE_DIR_OPENSSL}"
INTERFACE_LINK_LIBRARIES "caf::core;caf::io")
if (NOT BUILD_SHARED_LIBS)
include(CMakeFindDependencyMacro)
set(OPENSSL_USE_STATIC_LIBS TRUE)
find_dependency(OpenSSL)
set_property(TARGET caf::openssl APPEND PROPERTY
INTERFACE_LINK_LIBRARIES "OpenSSL::SSL")
endif ()
endif ()
if (CAF_opencl_FOUND AND NOT TARGET caf::opencl)
add_library(caf::opencl UNKNOWN IMPORTED)
set_target_properties(caf::opencl PROPERTIES
IMPORTED_LOCATION "${CAF_LIBRARY_OPENCL}"
INTERFACE_INCLUDE_DIRECTORIES "${CAF_INCLUDE_DIR_OPENCL}"
INTERFACE_LINK_LIBRARIES "caf::core")
endif ()
if (CAF_test_FOUND AND NOT TARGET caf::test)
add_library(caf::test INTERFACE IMPORTED)
set_target_properties(caf::test PROPERTIES
INTERFACE_INCLUDE_DIRECTORIES "${CAF_INCLUDE_DIR_TEST}"
INTERFACE_LINK_LIBRARIES "caf::core")
endif ()
......@@ -34,8 +34,7 @@ Usage: $0 [OPTION]... [VAR=VALUE]...
--with-qt-prefix=PATH prefix path for Qt5 cmake modules
--with-openssl=PATH path to OpenSSL library and headers
--dual-build build using both gcc and clang
--build-static build as static and shared library
--build-static-only build as static library only
--build-static build as static library
--static-runtime build with static C++ runtime
--more-warnings enables most warnings
--no-compiler-check disable compiler version check
......@@ -340,10 +339,7 @@ while [ $# -ne 0 ]; do
append_cache_entry CAF_NO_OPENSSL BOOL yes
;;
--build-static)
append_cache_entry CAF_BUILD_STATIC BOOL yes
;;
--build-static-only)
append_cache_entry CAF_BUILD_STATIC_ONLY BOOL yes
append_cache_entry BUILD_SHARED_LIBS BOOL no
;;
--static-runtime)
append_cache_entry CAF_BUILD_STATIC_RUNTIME BOOL yes
......
......@@ -167,45 +167,38 @@ list(APPEND LIBCAF_CORE_HDRS
"${CMAKE_CURRENT_BINARY_DIR}/caf/detail/build_config.hpp"
)
add_custom_target(libcaf_core)
# build shared library if not compiling static only
if (NOT CAF_BUILD_STATIC_ONLY)
add_library(libcaf_core_shared SHARED ${LIBCAF_CORE_SRCS} ${LIBCAF_CORE_HDRS})
target_link_libraries(libcaf_core_shared ${CAF_EXTRA_LDFLAGS})
target_include_directories(libcaf_core_shared PUBLIC
$<BUILD_INTERFACE:${CMAKE_CURRENT_BINARY_DIR}>
$<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}>
$<INSTALL_INTERFACE:include>
)
set_target_properties(libcaf_core_shared
PROPERTIES
SOVERSION ${CAF_VERSION}
VERSION ${CAF_LIB_VERSION}
OUTPUT_NAME caf_core
)
install(TARGETS libcaf_core_shared
RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR}
LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR}
)
add_dependencies(libcaf_core_shared libcaf_core)
endif ()
# build static library only if --build-static or --build-static-only was set
if (CAF_BUILD_STATIC_ONLY OR CAF_BUILD_STATIC)
add_library(libcaf_core_static STATIC ${LIBCAF_CORE_HDRS} ${LIBCAF_CORE_SRCS})
target_link_libraries(libcaf_core_static ${CAF_EXTRA_LDFLAGS})
target_include_directories(libcaf_core_static PUBLIC
$<BUILD_INTERFACE:${CMAKE_CURRENT_BINARY_DIR}>
$<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}>
$<INSTALL_INTERFACE:include>
)
set_target_properties(libcaf_core_static PROPERTIES OUTPUT_NAME caf_core_static)
install(TARGETS libcaf_core_static ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR})
add_dependencies(libcaf_core_static libcaf_core)
endif ()
add_library(libcaf_core ${LIBCAF_CORE_SRCS} ${LIBCAF_CORE_HDRS})
target_link_libraries(libcaf_core PUBLIC ${CAF_EXTRA_LDFLAGS})
target_include_directories(libcaf_core PUBLIC
$<BUILD_INTERFACE:${CMAKE_CURRENT_BINARY_DIR}>
$<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}>
$<INSTALL_INTERFACE:include>
)
set_target_properties(libcaf_core
PROPERTIES
EXPORT_NAME core
SOVERSION ${CAF_VERSION}
VERSION ${CAF_LIB_VERSION}
OUTPUT_NAME caf_core
)
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"
)
add_library(caf::core ALIAS libcaf_core)
if (BUILD_SHARED_LIBS)
add_library(libcaf_core_shared ALIAS libcaf_core)
else ()
add_library(libcaf_core_static ALIAS libcaf_core)
endif ()
list(APPEND CAF_LIBRARIES libcaf_core)
set(CAF_LIBRARIES ${CAF_LIBRARIES} PARENT_SCOPE)
......@@ -51,41 +51,37 @@ set(LIBCAF_IO_SRCS
src/policy/udp.cpp
)
add_custom_target(libcaf_io)
add_library(libcaf_io ${LIBCAF_IO_SRCS} ${LIBCAF_IO_HDRS})
target_link_libraries(libcaf_io PUBLIC caf::core)
target_include_directories(libcaf_io PUBLIC
$<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}>
$<INSTALL_INTERFACE:include>
)
set_target_properties(libcaf_io
PROPERTIES
EXPORT_NAME io
SOVERSION ${CAF_VERSION}
VERSION ${CAF_LIB_VERSION}
OUTPUT_NAME caf_io
)
# build shared library if not compiling static only
if (NOT CAF_BUILD_STATIC_ONLY)
add_library(libcaf_io_shared SHARED ${LIBCAF_IO_SRCS} ${LIBCAF_IO_HDRS})
target_link_libraries(libcaf_io_shared ${CAF_EXTRA_LDFLAGS} ${CAF_LIBRARY_CORE})
target_include_directories(libcaf_io_shared PUBLIC
$<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}>
$<INSTALL_INTERFACE:include>
)
set_target_properties(libcaf_io_shared
PROPERTIES
SOVERSION ${CAF_VERSION}
VERSION ${CAF_LIB_VERSION}
OUTPUT_NAME caf_io)
install(TARGETS libcaf_io_shared
RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR}
LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR})
add_dependencies(libcaf_io_shared libcaf_io)
endif ()
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"
)
# build static library only if --build-static or --build-static-only was set
if (CAF_BUILD_STATIC_ONLY OR CAF_BUILD_STATIC)
add_library(libcaf_io_static STATIC ${LIBCAF_IO_HDRS} ${LIBCAF_IO_SRCS})
target_link_libraries(libcaf_io_static ${CAF_EXTRA_LDFLAGS} ${CAF_LIBRARY_CORE_STATIC})
target_include_directories(libcaf_io_static PUBLIC
$<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}>
$<INSTALL_INTERFACE:include>
)
set_target_properties(libcaf_io_static PROPERTIES OUTPUT_NAME caf_io_static)
install(TARGETS libcaf_io_static ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR})
add_dependencies(libcaf_io_static libcaf_io)
add_library(caf::io ALIAS libcaf_io)
if (BUILD_SHARED_LIBS)
add_library(libcaf_io_shared ALIAS libcaf_io)
else ()
add_library(libcaf_io_static ALIAS libcaf_io)
endif ()
# install includes
install(DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/caf
DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}
FILES_MATCHING PATTERN "*.hpp")
list(APPEND CAF_LIBRARIES libcaf_io)
set(CAF_LIBRARIES ${CAF_LIBRARIES} PARENT_SCOPE)
......@@ -13,54 +13,40 @@ set(LIBCAF_OPENSSL_SRCS
src/openssl/session.cpp
)
add_custom_target(libcaf_openssl)
if (MINGW)
set(OPENSSL_LIBRARIES ${OPENSSL_LIBRARIES} -lz)
add_library(libcaf_openssl ${LIBCAF_OPENSSL_SRCS} ${LIBCAF_OPENSSL_HDRS})
target_link_libraries(libcaf_openssl PUBLIC caf::core caf::io ${OPENSSL_LIBRARIES})
if(NOT APPLE AND NOT WIN32)
target_link_libraries(libcaf_openssl PUBLIC "-pthread")
endif()
# build shared library if not compiling static only
if (NOT CAF_BUILD_STATIC_ONLY)
add_library(libcaf_openssl_shared SHARED
${LIBCAF_OPENSSL_SRCS} ${LIBCAF_OPENSSL_HDRS})
target_link_libraries(libcaf_openssl_shared ${CAF_EXTRA_LDFLAGS}
${CAF_LIBRARY_CORE} ${CAF_LIBRARY_IO} ${OPENSSL_LIBRARIES})
if(NOT APPLE AND NOT WIN32)
target_link_libraries(libcaf_openssl_shared "-pthread")
endif()
target_include_directories(libcaf_openssl PUBLIC
$<BUILD_INTERFACE:${CMAKE_CURRENT_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
)
set_target_properties(libcaf_openssl_shared
PROPERTIES
SOVERSION ${CAF_VERSION}
VERSION ${CAF_LIB_VERSION}
OUTPUT_NAME caf_openssl)
if (CYGWIN)
install(TARGETS libcaf_openssl_shared RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR})
elseif (NOT WIN32)
install(TARGETS libcaf_openssl_shared LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR})
endif()
add_dependencies(libcaf_openssl_shared libcaf_openssl)
endif ()
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"
)
# build static library only if --build-static or --build-static-only was set
if (CAF_BUILD_STATIC_ONLY OR CAF_BUILD_STATIC)
add_library(libcaf_openssl_static STATIC
${LIBCAF_OPENSSL_HDRS} ${LIBCAF_OPENSSL_SRCS})
target_link_libraries(libcaf_openssl_static ${CAF_EXTRA_LDFLAGS}
${CAF_LIBRARY_CORE_STATIC} ${CAF_LIBRARY_IO_STATIC} ${OPENSSL_LIBRARIES})
set_target_properties(libcaf_openssl_static PROPERTIES
OUTPUT_NAME caf_openssl_static)
if(NOT WIN32)
install(TARGETS libcaf_openssl_static ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR})
endif()
add_dependencies(libcaf_openssl_static libcaf_openssl)
add_library(caf::openssl ALIAS libcaf_openssl)
if (BUILD_SHARED_LIBS)
add_library(libcaf_openssl_shared ALIAS libcaf_openssl)
else ()
add_library(libcaf_openssl_static ALIAS libcaf_openssl)
endif ()
link_directories(${LD_DIRS})
include_directories(. ${INCLUDE_DIRS})
# install includes
if(NOT WIN32)
install(DIRECTORY caf/ DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}/caf FILES_MATCHING PATTERN "*.hpp")
endif()
list(APPEND CAF_LIBRARIES libcaf_openssl)
set(CAF_LIBRARIES ${CAF_LIBRARIES} PARENT_SCOPE)
cmake_minimum_required(VERSION 2.8)
cmake_minimum_required(VERSION 2.8.12)
project(caf_cash CXX)
# check whether submodules are available
......@@ -47,8 +47,7 @@ if(NOT CAF_NO_PYTHON)
add_executable(caf-python ${CAF_PYTHON_SRCS} ${CAF_PYTHON_HDRS})
target_link_libraries(caf-python
${CAF_EXTRA_LDFLAGS}
${CAF_LIBRARY_CORE}
${CAF_LIBRARY_IO}
caf::core caf::io
${CAF_LIBRARY_RIAC}
${PTHREAD_LIBRARIES}
${LIBEDIT_LIBRARIES}
......
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