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() ...@@ -12,6 +12,8 @@ else()
endif() endif()
unset(_parent) unset(_parent)
option(BUILD_SHARED_LIBS "" ON)
set(CMAKE_INSTALL_CMAKEBASEDIR "lib/cmake" CACHE PATH set(CMAKE_INSTALL_CMAKEBASEDIR "lib/cmake" CACHE PATH
"Base directory for installing cmake specific artifacts") "Base directory for installing cmake specific artifacts")
set(INSTALL_CAF_CMAKEDIR "${CMAKE_INSTALL_CMAKEBASEDIR}/caf") set(INSTALL_CAF_CMAKEDIR "${CMAKE_INSTALL_CMAKEBASEDIR}/caf")
...@@ -462,26 +464,11 @@ include_directories("${LIBCAF_INCLUDE_DIRS}") ...@@ -462,26 +464,11 @@ include_directories("${LIBCAF_INCLUDE_DIRS}")
################################################################################ ################################################################################
macro(add_caf_lib name) macro(add_caf_lib name)
string(TOUPPER ${name} upper_name)
set(full_name libcaf_${name}) set(full_name libcaf_${name})
set(shared_target ${full_name}_shared)
set(static_target ${full_name}_static)
add_subdirectory(${full_name}) 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_unit_tests("${full_name}/test/*.cpp")
# add headers to include directories so other subprojects can use them # 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() endmacro()
macro(add_optional_caf_lib name) macro(add_optional_caf_lib name)
...@@ -589,6 +576,27 @@ add_optional_caf_binaries(examples) ...@@ -589,6 +576,27 @@ add_optional_caf_binaries(examples)
# build tools if not being told otherwise # build tools if not being told otherwise
add_optional_caf_binaries(tools) 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 # # 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 ...@@ -149,45 +149,33 @@ list(APPEND LIBCAF_CORE_HDRS
"${CMAKE_CURRENT_BINARY_DIR}/caf/detail/build_config.hpp" "${CMAKE_CURRENT_BINARY_DIR}/caf/detail/build_config.hpp"
) )
add_custom_target(libcaf_core) add_library(libcaf_core ${LIBCAF_CORE_SRCS} ${LIBCAF_CORE_HDRS})
target_link_libraries(libcaf_core PUBLIC ${CAF_EXTRA_LDFLAGS})
# build shared library if not compiling static only target_include_directories(libcaf_core PUBLIC
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_BINARY_DIR}>
$<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}> $<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}>
$<INSTALL_INTERFACE:include> $<INSTALL_INTERFACE:include>
) )
set_target_properties(libcaf_core_shared set_target_properties(libcaf_core
PROPERTIES PROPERTIES
EXPORT_NAME core
SOVERSION ${CAF_VERSION} SOVERSION ${CAF_VERSION}
VERSION ${CAF_VERSION} VERSION ${CAF_VERSION}
OUTPUT_NAME caf_core 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" install(DIRECTORY "${CMAKE_CURRENT_SOURCE_DIR}/caf"
DESTINATION include DESTINATION include
COMPONENT core
FILES_MATCHING PATTERN "*.hpp" 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 ...@@ -49,41 +49,32 @@ set(LIBCAF_IO_SRCS
src/worker.cpp src/worker.cpp
) )
add_custom_target(libcaf_io) add_library(libcaf_io ${LIBCAF_IO_SRCS} ${LIBCAF_IO_HDRS})
target_link_libraries(libcaf_io PUBLIC caf::core)
# build shared library if not compiling static only target_include_directories(libcaf_io PUBLIC
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}> $<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}>
$<INSTALL_INTERFACE:include> $<INSTALL_INTERFACE:include>
) )
set_target_properties(libcaf_io_shared set_target_properties(libcaf_io
PROPERTIES PROPERTIES
EXPORT_NAME io
SOVERSION ${CAF_VERSION} SOVERSION ${CAF_VERSION}
VERSION ${CAF_VERSION} VERSION ${CAF_VERSION}
OUTPUT_NAME caf_io) 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 ()
# install includes install(TARGETS libcaf_io
install(DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/caf 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 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 ...@@ -14,42 +14,34 @@ set(LIBCAF_OPENCL_SRCS
src/program.cpp src/program.cpp
) )
# build shared library if not compiling static only message(STATUS "OpenCL_LIBRARIES = ${OpenCL_LIBRARIES}")
if(NOT CAF_BUILD_STATIC_ONLY) add_library(libcaf_opencl ${LIBCAF_OPENCL_SRCS} ${LIBCAF_OPENCL_HDRS})
add_library(libcaf_opencl_shared SHARED ${LIBCAF_OPENCL_SRCS} target_link_libraries(libcaf_opencl PUBLIC caf::core ${OpenCL_LIBRARIES})
${LIBCAF_OPENCL_HDRS} ${OpenCL_INCLUDE_DIRS}) target_include_directories(libcaf_opencl PUBLIC
target_link_libraries(libcaf_opencl_shared ${CAF_EXTRA_LDFLAGS}
${CAF_LIBRARY_CORE}
${OpenCL_LIBRARIES})
target_link_libraries(libcaf_opencl_shared
$<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}> $<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}>
$<INSTALL_INTERFACE:include> $<INSTALL_INTERFACE:include>
) )
set_target_properties(libcaf_opencl_shared set_target_properties(libcaf_opencl
PROPERTIES PROPERTIES
SOVERSION "${CAF_VERSION}" EXPORT_NAME opencl
VERSION "${CAF_VERSION}" SOVERSION ${CAF_VERSION}
OUTPUT_NAME caf_opencl) VERSION ${CAF_VERSION}
install(TARGETS libcaf_opencl_shared LIBRARY DESTINATION lib) OUTPUT_NAME caf_opencl
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()
# install includes install(TARGETS libcaf_opencl
install(DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/caf 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 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 ...@@ -13,54 +13,35 @@ set(LIBCAF_OPENSSL_SRCS
src/session.cpp src/session.cpp
) )
add_custom_target(libcaf_openssl) add_library(libcaf_openssl ${LIBCAF_OPENSSL_SRCS} ${LIBCAF_OPENSSL_HDRS})
target_link_libraries(libcaf_openssl PUBLIC caf::core caf::io ${OPENSSL_LIBRARIES})
if (MINGW) if(NOT APPLE AND NOT WIN32)
set(OPENSSL_LIBRARIES ${OPENSSL_LIBRARIES} -lz) target_link_libraries(libcaf_openssl PUBLIC "-pthread")
endif() endif()
# build shared library if not compiling static only target_include_directories(libcaf_openssl PUBLIC
if (NOT CAF_BUILD_STATIC_ONLY) $<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}>
add_library(libcaf_openssl_shared SHARED $<INSTALL_INTERFACE:include>
${LIBCAF_OPENSSL_SRCS} ${LIBCAF_OPENSSL_HDRS}) )
target_link_libraries(libcaf_openssl_shared ${CAF_EXTRA_LDFLAGS} set_target_properties(libcaf_openssl
${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
PROPERTIES PROPERTIES
EXPORT_NAME openssl
SOVERSION ${CAF_VERSION} SOVERSION ${CAF_VERSION}
VERSION ${CAF_VERSION} VERSION ${CAF_VERSION}
OUTPUT_NAME caf_openssl) 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})
# install includes install(TARGETS libcaf_openssl
if(NOT WIN32) EXPORT CAFTargets
install(DIRECTORY caf/ DESTINATION include/caf FILES_MATCHING PATTERN "*.hpp") ARCHIVE DESTINATION lib COMPONENT openssl
endif() 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) project(caf_cash CXX)
# check whether submodules are available # check whether submodules are available
...@@ -47,8 +47,7 @@ if(NOT CAF_NO_PYTHON) ...@@ -47,8 +47,7 @@ if(NOT CAF_NO_PYTHON)
add_executable(caf-python ${CAF_PYTHON_SRCS} ${CAF_PYTHON_HDRS}) add_executable(caf-python ${CAF_PYTHON_SRCS} ${CAF_PYTHON_HDRS})
target_link_libraries(caf-python target_link_libraries(caf-python
${CAF_EXTRA_LDFLAGS} ${CAF_EXTRA_LDFLAGS}
${CAF_LIBRARY_CORE} caf::core caf::io
${CAF_LIBRARY_IO}
${CAF_LIBRARY_RIAC} ${CAF_LIBRARY_RIAC}
${PTHREAD_LIBRARIES} ${PTHREAD_LIBRARIES}
${LIBEDIT_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