-
Jan de Cuveland authoredJan de Cuveland authored
InstallFlesnet.cmake 5.53 KiB
# Build parts of the flesnet software, which is maintained in the flesnet repository on github
#
# The included libraries provide the interface to the experiment data in timeslices
# both online and in timeslice archive (.tsa) files.
set(FLESNET_VERSION 7d8bb6819671e9718da8cce052d9c070fe0c9cfc) # 2023-07-04
set(FLESNET_SRC_URL "https://github.com/cbm-fles/flesnet")
set(FLESNET_DESTDIR "${PROJECT_BINARY_DIR}/external/flesnet-prefix")
download_project_if_needed(
PROJECT flesnet
GIT_REPOSITORY ${FLESNET_SRC_URL}
GIT_TAG ${FLESNET_VERSION}
GIT_STASH TRUE
SOURCE_DIR ${CMAKE_CURRENT_SOURCE_DIR}/flesnet
TEST_FILE CMakeLists.txt
)
If(ProjectUpdated)
File(REMOVE_RECURSE ${FLESNET_DESTDIR})
Message("flesnet source directory was changed so build directory was deleted")
EndIf()
if(APPLE)
execute_process(COMMAND brew --prefix --installed openssl
RESULT_VARIABLE OPENSSL_FOUND
OUTPUT_VARIABLE OPENSSL_PATH
OUTPUT_STRIP_TRAILING_WHITESPACE
)
endif()
ExternalProject_Add(
flesnet
SOURCE_DIR ${CMAKE_CURRENT_SOURCE_DIR}/flesnet
CONFIGURE_COMMAND ${CMAKE_COMMAND} -E env SIMPATH=${SIMPATH}
${CMAKE_COMMAND}
-G ${CMAKE_GENERATOR}
-DINCLUDE_ZMQ:BOOL=TRUE
-DCMAKE_POSITION_INDEPENDENT_CODE:BOOL=ON
-DOPENSSL_ROOT_DIR:FILEPATH=${OPENSSL_PATH}
${CMAKE_CURRENT_SOURCE_DIR}/flesnet
BUILD_IN_SOURCE 0
LOG_DOWNLOAD 1 LOG_CONFIGURE 1 LOG_BUILD 1 LOG_INSTALL 1
BUILD_COMMAND ${CMAKE_COMMAND} --build . -j 1 --target logging monitoring fles_ipc
BUILD_BYPRODUCTS ${FLESNET_DESTDIR}/src/flesnet-build/lib/fles_ipc/${CMAKE_STATIC_LIBRARY_PREFIX}fles_ipc${CMAKE_STATIC_LIBRARY_SUFFIX}
INSTALL_COMMAND ""
)
add_library(external::fles_logging STATIC IMPORTED GLOBAL)
add_dependencies(external::fles_logging flesnet)
set_target_properties(external::fles_logging PROPERTIES
IMPORTED_LOCATION ${FLESNET_DESTDIR}/src/flesnet-build/lib/logging/${CMAKE_STATIC_LIBRARY_PREFIX}logging${CMAKE_STATIC_LIBRARY_SUFFIX}
)
target_include_directories(external::fles_logging INTERFACE
${CMAKE_CURRENT_SOURCE_DIR}/flesnet/lib/logging
${Boost_INCLUDE_DIRS}
)
target_compile_definitions(external::fles_logging
INTERFACE BOOST_LOG_DYN_LINK
INTERFACE BOOST_LOG_USE_NATIVE_SYSLOG
INTERFACE BOOST_ERROR_CODE_HEADER_ONLY
)
add_library(external::fles_monitoring STATIC IMPORTED GLOBAL)
add_dependencies(external::fles_monitoring flesnet)
set_target_properties(external::fles_monitoring PROPERTIES
IMPORTED_LOCATION ${FLESNET_DESTDIR}/src/flesnet-build/lib/monitoring/${CMAKE_STATIC_LIBRARY_PREFIX}monitoring${CMAKE_STATIC_LIBRARY_SUFFIX}
)
target_include_directories(external::fles_monitoring INTERFACE
${CMAKE_CURRENT_SOURCE_DIR}/flesnet/lib/monitoring
${Boost_INCLUDE_DIRS}
)
target_compile_definitions(external::fles_monitoring
INTERFACE BOOST_LOG_DYN_LINK
INTERFACE BOOST_LOG_USE_NATIVE_SYSLOG
INTERFACE BOOST_ERROR_CODE_HEADER_ONLY
)
add_library(external::fles_ipc STATIC IMPORTED GLOBAL)
add_dependencies(external::fles_ipc flesnet external::fles_logging)
set(dir_to_link
${FLESNET_DESTDIR}/src/flesnet-build/src/zeromq-build/lib/${CMAKE_STATIC_LIBRARY_PREFIX}zmq${CMAKE_STATIC_LIBRARY_SUFFIX}
)
find_package("GnuTLS" 3.6.7)
if(GNUTLS_FOUND)
list(APPEND dir_to_link
${GNUTLS_LIBRARIES}
)
endif()
list(APPEND dir_to_link
${FLESNET_DESTDIR}/src/flesnet-build/lib/logging/${CMAKE_STATIC_LIBRARY_PREFIX}logging${CMAKE_STATIC_LIBRARY_SUFFIX}
${FLESNET_DESTDIR}/src/flesnet-build/lib/monitoring/${CMAKE_STATIC_LIBRARY_PREFIX}monitoring${CMAKE_STATIC_LIBRARY_SUFFIX}
${FLESNET_DESTDIR}/src/flesnet-build/_deps/fmtlib-build/${CMAKE_STATIC_LIBRARY_PREFIX}fmt${CMAKE_STATIC_LIBRARY_SUFFIX}
)
list(APPEND dir_to_link
${Boost_LOG_LIBRARY}
${Boost_FILESYSTEM_LIBRARY}
${Boost_REGEX_LIBRARY}
${Boost_SERIALIZATION_LIBRARY}
${Boost_ASIO_LIBRARY}
${Boost_BEAST_LIBRARY}
)
if(NOT APPLE)
list(APPEND dir_to_link ${Boost_THREAD_LIBRARY} -lrt)
endif()
set_target_properties(external::fles_ipc PROPERTIES
IMPORTED_LOCATION ${FLESNET_DESTDIR}/src/flesnet-build/lib/fles_ipc/${CMAKE_STATIC_LIBRARY_PREFIX}fles_ipc${CMAKE_STATIC_LIBRARY_SUFFIX}
INTERFACE_INCLUDE_DIRECTORIES ${CMAKE_CURRENT_SOURCE_DIR}/flesnet/lib/fles_ipc
IMPORTED_LINK_INTERFACE_LIBRARIES "${dir_to_link}"
)
Install(FILES ${FLESNET_DESTDIR}/src/flesnet-build/lib/fles_ipc/${CMAKE_STATIC_LIBRARY_PREFIX}fles_ipc${CMAKE_STATIC_LIBRARY_SUFFIX}
${FLESNET_DESTDIR}/src/flesnet-build/lib/shm_ipc/${CMAKE_STATIC_LIBRARY_PREFIX}shm_ipc${CMAKE_STATIC_LIBRARY_SUFFIX}
${FLESNET_DESTDIR}/src/flesnet-build/lib/logging/${CMAKE_STATIC_LIBRARY_PREFIX}logging${CMAKE_STATIC_LIBRARY_SUFFIX}
${FLESNET_DESTDIR}/src/flesnet-build/lib/monitoring/${CMAKE_STATIC_LIBRARY_PREFIX}monitoring${CMAKE_STATIC_LIBRARY_SUFFIX}
${FLESNET_DESTDIR}/src/flesnet-build/src/zeromq-build/lib/${CMAKE_STATIC_LIBRARY_PREFIX}zmq${CMAKE_STATIC_LIBRARY_SUFFIX}
DESTINATION lib
)
file(GLOB IPC_LIB_HEADERS ${CMAKE_CURRENT_SOURCE_DIR}/flesnet/lib/fles_ipc/*.hpp)
file(GLOB LOG_LIB_HEADERS ${CMAKE_CURRENT_SOURCE_DIR}/flesnet/lib/logging/*.hpp)
file(GLOB MONITOR_LIB_HEADERS ${CMAKE_CURRENT_SOURCE_DIR}/flesnet/lib/monitoring/*.hpp)
file(GLOB MONITOR_LIB_IPP ${CMAKE_CURRENT_SOURCE_DIR}/flesnet/lib/monitoring/*.ipp)
Install(FILES ${IPC_LIB_HEADERS}
${LOG_LIB_HEADERS}
${MONITOR_LIB_HEADERS}
${MONITOR_LIB_IPP}
DESTINATION include
)