Skip to content
Snippets Groups Projects
  • Administrator's avatar
    2e280308
    Fix flesnet compilation and installation · 2e280308
    Administrator authored
    Update to latest flesnet version
    This version disables all code which need cpprest if the package isn't found
    on the system. All functionality needed for CbmRoot is build.
    
    Fix link errors on several systems
    macosx, Debian11
    
    Fix git clone issue on CentOS
    
    Add installation of flesnet libraries and headers
    2e280308
    History
    Fix flesnet compilation and installation
    Administrator authored
    Update to latest flesnet version
    This version disables all code which need cpprest if the package isn't found
    on the system. All functionality needed for CbmRoot is build.
    
    Fix link errors on several systems
    macosx, Debian11
    
    Fix git clone issue on CentOS
    
    Add installation of flesnet libraries and headers
InstallFlesnet.cmake 3.80 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 b503c3ce500c1b25894c393ff4bae2f5ba058a22) # 2022-06-10

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
  CMAKE_CACHE_ARGS
  -DINCLUDE_ZMQ:BOOL=TRUE
  -DCMAKE_POSITION_INDEPENDENT_CODE:BOOL=ON
  -DOPENSSL_ROOT_DIR:FILEPATH=${OPENSSL_PATH}
  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 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_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}
    )
list(APPEND dir_to_link
     ${Boost_LOG_LIBRARY}
     ${Boost_FILESYSTEM_LIBRARY}
     ${Boost_REGEX_LIBRARY}
     ${Boost_SERIALIZATION_LIBRARY}     
    )
if(NOT APPLE)
  list(APPEND dir_to_link ${Boost_THREAD_LIBRARY})
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/src/zeromq-build/lib/${CMAKE_STATIC_LIBRARY_PREFIX}zmq${CMAKE_STATIC_LIBRARY_SUFFIX}
        DESTINATION lib
       )

file(GLOB LIB_HEADERS ${CMAKE_CURRENT_SOURCE_DIR}/flesnet/lib/fles_ipc/*.hpp)

Install(FILES ${LIB_HEADERS}
        DESTINATION include
       )