mirror of
https://github.com/slsdetectorgroup/slsDetectorPackage.git
synced 2026-02-13 11:18:40 +01:00
added option to use system zmq (#1318)
* added option to use system zmq * added notes in release.txt
This commit is contained in:
145
CMakeLists.txt
145
CMakeLists.txt
@@ -24,6 +24,7 @@ include(cmake/SlsAddFlag.cmake)
|
|||||||
include(cmake/helpers.cmake)
|
include(cmake/helpers.cmake)
|
||||||
|
|
||||||
|
|
||||||
|
option(SLS_USE_SYSTEM_ZMQ "Use system installed libzmq" OFF)
|
||||||
|
|
||||||
# Using FetchContent to get libzmq
|
# Using FetchContent to get libzmq
|
||||||
include(FetchContent)
|
include(FetchContent)
|
||||||
@@ -50,51 +51,111 @@ if(NOT PATCH_EXECUTABLE)
|
|||||||
message(FATAL_ERROR "The 'patch' tool is required for patching lib zeromq. Please install it.")
|
message(FATAL_ERROR "The 'patch' tool is required for patching lib zeromq. Please install it.")
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
if(SLS_FETCH_ZMQ_FROM_GITHUB)
|
if(SLS_USE_SYSTEM_ZMQ)
|
||||||
# Opt in to pull down a zmq version from github instead of
|
# find_package(ZeroMQ REQUIRED)
|
||||||
# using the bundled version
|
# 1) Try a CMake package config if available (vcpkg, Homebrew, source builds)
|
||||||
FetchContent_Declare(
|
# Many installs export either ZeroMQ::libzmq or libzmq.
|
||||||
libzmq
|
find_package(ZeroMQ QUIET CONFIG)
|
||||||
GIT_REPOSITORY https://github.com/zeromq/libzmq.git
|
|
||||||
GIT_TAG v${SLS_LIBZMQ_VERSION}
|
set(ZEROMQ_TARGET "")
|
||||||
PATCH_COMMAND ${CMAKE_COMMAND} -E chdir <SOURCE_DIR> patch -p1 < ${CMAKE_CURRENT_SOURCE_DIR}/libs/libzmq/libzmq_cmake_version.patch
|
|
||||||
UPDATE_DISCONNECTED 1
|
if (TARGET ZeroMQ::libzmq)
|
||||||
)
|
set(ZEROMQ_TARGET ZeroMQ::libzmq)
|
||||||
|
message(STATUS "Found target: ${ZEROMQ_TARGET} version: ${ZeroMQ_VERSION}")
|
||||||
|
elseif (TARGET libzmq)
|
||||||
|
set(ZEROMQ_TARGET libzmq)
|
||||||
|
message(STATUS "Found target: ${ZEROMQ_TARGET} version: ${ZeroMQ_VERSION}")
|
||||||
|
elseif (TARGET ZeroMQ::ZeroMQ) # rare older naming
|
||||||
|
set(ZEROMQ_TARGET ZeroMQ::ZeroMQ)
|
||||||
|
message(STATUS "Found target: ${ZEROMQ_TARGET} version: ${ZeroMQ_VERSION}")
|
||||||
|
endif()
|
||||||
|
|
||||||
|
# 2) Fallback: use pkg-config hints + manual find_* to create an imported target
|
||||||
|
if (NOT ZEROMQ_TARGET)
|
||||||
|
find_package(PkgConfig QUIET)
|
||||||
|
if (PkgConfig_FOUND)
|
||||||
|
pkg_check_modules(PC_ZeroMQ QUIET libzmq)
|
||||||
|
endif()
|
||||||
|
|
||||||
|
find_path(ZEROMQ_INCLUDE_DIR
|
||||||
|
NAMES zmq.h
|
||||||
|
HINTS ${PC_ZeroMQ_INCLUDE_DIRS}
|
||||||
|
)
|
||||||
|
|
||||||
|
find_library(ZEROMQ_LIBRARY
|
||||||
|
NAMES zmq libzmq
|
||||||
|
HINTS ${PC_ZeroMQ_LIBRARY_DIRS}
|
||||||
|
)
|
||||||
|
|
||||||
|
if (ZEROMQ_INCLUDE_DIR AND ZEROMQ_LIBRARY)
|
||||||
|
add_library(libzmq UNKNOWN IMPORTED)
|
||||||
|
set_target_properties(libzmq PROPERTIES
|
||||||
|
IMPORTED_LOCATION "${ZEROMQ_LIBRARY}"
|
||||||
|
INTERFACE_INCLUDE_DIRECTORIES "${ZEROMQ_INCLUDE_DIR}"
|
||||||
|
)
|
||||||
|
set(ZEROMQ_TARGET libzmq)
|
||||||
|
endif()
|
||||||
|
message(STATUS "ZeroMQ version (pkg-config): ${PC_ZeroMQ_VERSION}")
|
||||||
|
|
||||||
|
endif()
|
||||||
|
|
||||||
|
# 3) Error out if still not found, with a helpful message
|
||||||
|
if (NOT ZEROMQ_TARGET)
|
||||||
|
message(FATAL_ERROR "ZeroMQ (libzmq) not found. Please install ZeroMQ development files.")
|
||||||
|
endif()
|
||||||
|
|
||||||
|
# Use it
|
||||||
|
# target_link_libraries(your_target PRIVATE ${ZEROMQ_TARGET})
|
||||||
|
|
||||||
|
message(STATUS "Using system installed libzmq: ${ZeroMQ_LIBRARIES}")
|
||||||
|
message(STATUS "ZeroMQ target: ${ZEROMQ_TARGET}")
|
||||||
|
message(STATUS "ZeroMQ include dirs: ${ZeroMQ_INCLUDE_DIRS}")
|
||||||
else()
|
else()
|
||||||
# Standard behaviour use libzmq included in this repo (libs/libzmq)
|
if(SLS_FETCH_ZMQ_FROM_GITHUB)
|
||||||
FetchContent_Declare(
|
# Opt in to pull down a zmq version from github instead of
|
||||||
libzmq
|
# using the bundled version
|
||||||
URL ${CMAKE_CURRENT_SOURCE_DIR}/libs/libzmq/libzmq-${SLS_LIBZMQ_VERSION}.tar.gz
|
FetchContent_Declare(
|
||||||
URL_HASH MD5=cc20b769ac10afa352e5ed2769bb23b3
|
libzmq
|
||||||
PATCH_COMMAND ${CMAKE_COMMAND} -E chdir <SOURCE_DIR> patch -p1 < ${CMAKE_CURRENT_SOURCE_DIR}/libs/libzmq/libzmq_cmake_version.patch
|
GIT_REPOSITORY https://github.com/zeromq/libzmq.git
|
||||||
UPDATE_DISCONNECTED 1
|
GIT_TAG v${SLS_LIBZMQ_VERSION}
|
||||||
)
|
PATCH_COMMAND ${CMAKE_COMMAND} -E chdir <SOURCE_DIR> patch -p1 < ${CMAKE_CURRENT_SOURCE_DIR}/libs/libzmq/libzmq_cmake_version.patch
|
||||||
|
UPDATE_DISCONNECTED 1
|
||||||
|
)
|
||||||
|
else()
|
||||||
|
# Standard behaviour use libzmq included in this repo (libs/libzmq)
|
||||||
|
FetchContent_Declare(
|
||||||
|
libzmq
|
||||||
|
URL ${CMAKE_CURRENT_SOURCE_DIR}/libs/libzmq/libzmq-${SLS_LIBZMQ_VERSION}.tar.gz
|
||||||
|
URL_HASH MD5=cc20b769ac10afa352e5ed2769bb23b3
|
||||||
|
PATCH_COMMAND ${CMAKE_COMMAND} -E chdir <SOURCE_DIR> patch -p1 < ${CMAKE_CURRENT_SOURCE_DIR}/libs/libzmq/libzmq_cmake_version.patch
|
||||||
|
UPDATE_DISCONNECTED 1
|
||||||
|
)
|
||||||
|
endif()
|
||||||
|
|
||||||
|
|
||||||
|
# Disable unwanted options from libzmq
|
||||||
|
set(BUILD_TESTS OFF CACHE BOOL "Switch off libzmq test build")
|
||||||
|
set(BUILD_SHARED OFF CACHE BOOL "Switch off libzmq shared libs")
|
||||||
|
set(WITH_PERF_TOOL OFF CACHE BOOL "")
|
||||||
|
set(ENABLE_CPACK OFF CACHE BOOL "")
|
||||||
|
set(ENABLE_CLANG OFF CACHE BOOL "")
|
||||||
|
set(ENABLE_CURVE OFF CACHE BOOL "")
|
||||||
|
set(ENABLE_DRAFTS OFF CACHE BOOL "")
|
||||||
|
set(ENABLE_PRECOMPILED OFF CACHE BOOL "")
|
||||||
|
set(WITH_DOC OFF CACHE BOOL "")
|
||||||
|
set(WITH_DOCS OFF CACHE BOOL "")
|
||||||
|
|
||||||
|
|
||||||
|
# Using GetProperties and Populate to be able to exclude zmq
|
||||||
|
# from install (not possible with FetchContent_MakeAvailable(libzmq))
|
||||||
|
FetchContent_GetProperties(libzmq)
|
||||||
|
if(NOT libzmq_POPULATED)
|
||||||
|
FetchContent_Populate(libzmq)
|
||||||
|
add_subdirectory(${libzmq_SOURCE_DIR} ${libzmq_BINARY_DIR} EXCLUDE_FROM_ALL)
|
||||||
|
endif()
|
||||||
|
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
# Disable unwanted options from libzmq
|
|
||||||
set(BUILD_TESTS OFF CACHE BOOL "Switch off libzmq test build")
|
|
||||||
set(BUILD_SHARED OFF CACHE BOOL "Switch off libzmq shared libs")
|
|
||||||
set(WITH_PERF_TOOL OFF CACHE BOOL "")
|
|
||||||
set(ENABLE_CPACK OFF CACHE BOOL "")
|
|
||||||
set(ENABLE_CLANG OFF CACHE BOOL "")
|
|
||||||
set(ENABLE_CURVE OFF CACHE BOOL "")
|
|
||||||
set(ENABLE_DRAFTS OFF CACHE BOOL "")
|
|
||||||
set(ENABLE_PRECOMPILED OFF CACHE BOOL "")
|
|
||||||
set(WITH_DOC OFF CACHE BOOL "")
|
|
||||||
set(WITH_DOCS OFF CACHE BOOL "")
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
# Using GetProperties and Populate to be able to exclude zmq
|
|
||||||
# from install (not possible with FetchContent_MakeAvailable(libzmq))
|
|
||||||
FetchContent_GetProperties(libzmq)
|
|
||||||
if(NOT libzmq_POPULATED)
|
|
||||||
FetchContent_Populate(libzmq)
|
|
||||||
add_subdirectory(${libzmq_SOURCE_DIR} ${libzmq_BINARY_DIR} EXCLUDE_FROM_ALL)
|
|
||||||
endif()
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
include(GNUInstallDirs)
|
include(GNUInstallDirs)
|
||||||
|
|
||||||
# If conda build, always set lib dir to 'lib'
|
# If conda build, always set lib dir to 'lib'
|
||||||
|
|||||||
@@ -26,6 +26,8 @@ This document describes the differences between vx.x.x and vx.0.2
|
|||||||
1 New, Changed or Resolved Features
|
1 New, Changed or Resolved Features
|
||||||
=====================================
|
=====================================
|
||||||
|
|
||||||
|
Added SLS_USE_SYSTEM_ZMQ option (default OFF) to use the libzmq of the host
|
||||||
|
instead of the one included in our repo.
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -162,9 +162,17 @@ if (SLS_USE_RECEIVER_BINARIES)
|
|||||||
rt
|
rt
|
||||||
PRIVATE
|
PRIVATE
|
||||||
slsProjectWarnings
|
slsProjectWarnings
|
||||||
"$<BUILD_INTERFACE:libzmq-static>"
|
|
||||||
)
|
)
|
||||||
|
|
||||||
|
#Treat both vendored and system zmq as interface for receiver binaries
|
||||||
|
if(SLS_USE_SYSTEM_ZMQ)
|
||||||
|
message(STATUS "slsFrameSynchronizer ZEROMQ_TARGET=${ZEROMQ_TARGET}")
|
||||||
|
target_link_libraries(slsFrameSynchronizer PRIVATE "${ZEROMQ_TARGET}")
|
||||||
|
else()
|
||||||
|
target_link_libraries(slsFrameSynchronizer PRIVATE "$<BUILD_INTERFACE:libzmq-static>")
|
||||||
|
endif()
|
||||||
|
|
||||||
install(TARGETS slsReceiver slsMultiReceiver slsFrameSynchronizer
|
install(TARGETS slsReceiver slsMultiReceiver slsFrameSynchronizer
|
||||||
EXPORT "${TARGETS_EXPORT_NAME}"
|
EXPORT "${TARGETS_EXPORT_NAME}"
|
||||||
RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR}
|
RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR}
|
||||||
|
|||||||
@@ -93,9 +93,16 @@ target_link_libraries(slsSupportObject
|
|||||||
PRIVATE
|
PRIVATE
|
||||||
slsProjectWarnings
|
slsProjectWarnings
|
||||||
md5sls
|
md5sls
|
||||||
"$<BUILD_INTERFACE:libzmq-static>"
|
|
||||||
)
|
)
|
||||||
|
|
||||||
|
#Treat both vendored and system zmq as interface for receiver binaries
|
||||||
|
if(SLS_USE_SYSTEM_ZMQ)
|
||||||
|
message(STATUS "slsSupportLib using ZEROMQ_TARGET=${ZEROMQ_TARGET}")
|
||||||
|
target_link_libraries(slsSupportObject PRIVATE "${ZEROMQ_TARGET}")
|
||||||
|
else()
|
||||||
|
target_link_libraries(slsSupportObject PRIVATE "$<BUILD_INTERFACE:libzmq-static>")
|
||||||
|
endif()
|
||||||
|
|
||||||
if (SLS_USE_TESTS)
|
if (SLS_USE_TESTS)
|
||||||
add_subdirectory(tests)
|
add_subdirectory(tests)
|
||||||
endif(SLS_USE_TESTS)
|
endif(SLS_USE_TESTS)
|
||||||
|
|||||||
Reference in New Issue
Block a user