Commit 3fcb99f1 authored by Tobias Mayer's avatar Tobias Mayer

Use cmake builtin mechanism for static and shared

... and export the library targets.
parent 478bfeb0
......@@ -12,6 +12,8 @@ else()
endif()
unset(_parent)
option(BUILD_SHARED_LIBS "" ON)
set(CMAKE_INSTALL_CMAKEBASEDIR "lib/cmake" CACHE PATH
"Base directory for installing cmake specific artifacts")
set(INSTALL_CAF_CMAKEDIR "${CMAKE_INSTALL_CMAKEBASEDIR}/caf")
......@@ -462,26 +464,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)
......@@ -589,6 +576,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 #
################################################################################
......
@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")
......@@ -149,45 +149,33 @@ 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
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_shared
)
set_target_properties(libcaf_core
PROPERTIES
EXPORT_NAME core
SOVERSION ${CAF_VERSION}
VERSION ${CAF_VERSION}
OUTPUT_NAME caf_core
)
install(TARGETS libcaf_core_shared
RUNTIME DESTINATION bin
LIBRARY DESTINATION lib
)
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 lib)
add_dependencies(libcaf_core_static libcaf_core)
endif ()
)
install(TARGETS libcaf_core
EXPORT CAFTargets
ARCHIVE DESTINATION lib COMPONENT core
RUNTIME DESTINATION bin COMPONENT core
LIBRARY DESTINATION lib COMPONENT core
)
install(DIRECTORY "${CMAKE_CURRENT_SOURCE_DIR}/caf"
DESTINATION include
COMPONENT core
FILES_MATCHING PATTERN "*.hpp"
)
add_library(caf::core ALIAS libcaf_core)
list(APPEND CAF_LIBRARIES libcaf_core)
set(CAF_LIBRARIES ${CAF_LIBRARIES} PARENT_SCOPE)
......@@ -49,41 +49,32 @@ set(LIBCAF_IO_SRCS
src/worker.cpp
)
add_custom_target(libcaf_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
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_shared
)
set_target_properties(libcaf_io
PROPERTIES
EXPORT_NAME io
SOVERSION ${CAF_VERSION}
VERSION ${CAF_VERSION}
OUTPUT_NAME caf_io)
install(TARGETS libcaf_io_shared
RUNTIME DESTINATION bin
LIBRARY DESTINATION lib)
add_dependencies(libcaf_io_shared libcaf_io)
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_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 lib)
add_dependencies(libcaf_io_static libcaf_io)
endif ()
OUTPUT_NAME caf_io
)
# install includes
install(DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/caf
install(TARGETS libcaf_io
EXPORT CAFTargets
ARCHIVE DESTINATION lib COMPONENT io
RUNTIME DESTINATION bin COMPONENT io
LIBRARY DESTINATION lib COMPONENT io
)
install(DIRECTORY "${CMAKE_CURRENT_SOURCE_DIR}/caf"
DESTINATION include
FILES_MATCHING PATTERN "*.hpp")
COMPONENT io
FILES_MATCHING PATTERN "*.hpp"
)
add_library(caf::io ALIAS libcaf_io)
list(APPEND CAF_LIBRARIES libcaf_io)
set(CAF_LIBRARIES ${CAF_LIBRARIES} PARENT_SCOPE)
......@@ -14,42 +14,34 @@ set(LIBCAF_OPENCL_SRCS
src/program.cpp
)
# build shared library if not compiling static only
if(NOT CAF_BUILD_STATIC_ONLY)
add_library(libcaf_opencl_shared SHARED ${LIBCAF_OPENCL_SRCS}
${LIBCAF_OPENCL_HDRS} ${OpenCL_INCLUDE_DIRS})
target_link_libraries(libcaf_opencl_shared ${CAF_EXTRA_LDFLAGS}
${CAF_LIBRARY_CORE}
${OpenCL_LIBRARIES})
target_link_libraries(libcaf_opencl_shared
message(STATUS "OpenCL_LIBRARIES = ${OpenCL_LIBRARIES}")
add_library(libcaf_opencl ${LIBCAF_OPENCL_SRCS} ${LIBCAF_OPENCL_HDRS})
target_link_libraries(libcaf_opencl PUBLIC caf::core ${OpenCL_LIBRARIES})
target_include_directories(libcaf_opencl PUBLIC
$<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}>
$<INSTALL_INTERFACE:include>
)
set_target_properties(libcaf_opencl_shared
)
set_target_properties(libcaf_opencl
PROPERTIES
SOVERSION "${CAF_VERSION}"
VERSION "${CAF_VERSION}"
OUTPUT_NAME caf_opencl)
install(TARGETS libcaf_opencl_shared LIBRARY DESTINATION lib)
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_opencl_static STATIC ${LIBCAF_OPENCL_SRCS}
${LIBCAF_OPENCL_HDRS}
${OpenCL_INCLUDE_DIRS})
target_link_libraries(libcaf_opencl_static ${CAF_EXTRA_LDFLAGS}
${CAF_LIBRARY_CORE_STATIC}
${OpenCL_LIBRARIES})
target_link_libraries(libcaf_opencl_static
$<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}>
$<INSTALL_INTERFACE:include>
)
set_target_properties(libcaf_opencl_static PROPERTIES OUTPUT_NAME caf_opencl_static)
install(TARGETS libcaf_opencl_static ARCHIVE DESTINATION lib)
endif()
EXPORT_NAME opencl
SOVERSION ${CAF_VERSION}
VERSION ${CAF_VERSION}
OUTPUT_NAME caf_opencl
)
# install includes
install(DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/caf
install(TARGETS libcaf_opencl
EXPORT CAFTargets
ARCHIVE DESTINATION lib COMPONENT opencl
RUNTIME DESTINATION bin COMPONENT opencl
LIBRARY DESTINATION lib COMPONENT opencl
)
install(DIRECTORY "${CMAKE_CURRENT_SOURCE_DIR}/caf"
DESTINATION include
FILES_MATCHING PATTERN "*.hpp")
COMPONENT opencl
FILES_MATCHING PATTERN "*.hpp"
)
add_library(caf::opencl ALIAS libcaf_opencl)
list(APPEND CAF_LIBRARIES libcaf_opencl)
set(CAF_LIBRARIES ${CAF_LIBRARIES} PARENT_SCOPE)
......@@ -13,54 +13,35 @@ set(LIBCAF_OPENSSL_SRCS
src/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()
set_target_properties(libcaf_openssl_shared
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_VERSION}
OUTPUT_NAME caf_openssl)
if (CYGWIN)
install(TARGETS libcaf_openssl_shared RUNTIME DESTINATION bin)
elseif (NOT WIN32)
install(TARGETS libcaf_openssl_shared LIBRARY DESTINATION lib)
endif()
add_dependencies(libcaf_openssl_shared libcaf_openssl)
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_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 lib)
endif()
add_dependencies(libcaf_openssl_static libcaf_openssl)
endif ()
link_directories(${LD_DIRS})
include_directories(. ${INCLUDE_DIRS})
OUTPUT_NAME caf_openssl
)
# install includes
if(NOT WIN32)
install(DIRECTORY caf/ DESTINATION include/caf FILES_MATCHING PATTERN "*.hpp")
endif()
install(TARGETS libcaf_openssl
EXPORT CAFTargets
ARCHIVE DESTINATION lib COMPONENT openssl
RUNTIME DESTINATION bin COMPONENT openssl
LIBRARY DESTINATION lib COMPONENT openssl
)
install(DIRECTORY "${CMAKE_CURRENT_SOURCE_DIR}/caf"
DESTINATION include
COMPONENT openssl
FILES_MATCHING PATTERN "*.hpp"
)
add_library(caf::openssl ALIAS libcaf_openssl)
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