added option to use system zmq (#1318)

* added option to use system zmq
* added notes in release.txt
This commit is contained in:
Erik Fröjdh
2025-10-21 11:15:51 +02:00
committed by GitHub
parent 5041fd7fef
commit db91f06c02
4 changed files with 122 additions and 44 deletions

View File

@@ -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,6 +51,66 @@ 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_USE_SYSTEM_ZMQ)
# find_package(ZeroMQ REQUIRED)
# 1) Try a CMake package config if available (vcpkg, Homebrew, source builds)
# Many installs export either ZeroMQ::libzmq or libzmq.
find_package(ZeroMQ QUIET CONFIG)
set(ZEROMQ_TARGET "")
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()
if(SLS_FETCH_ZMQ_FROM_GITHUB) if(SLS_FETCH_ZMQ_FROM_GITHUB)
# Opt in to pull down a zmq version from github instead of # Opt in to pull down a zmq version from github instead of
# using the bundled version # using the bundled version
@@ -71,6 +132,7 @@ else()
) )
endif() endif()
# Disable unwanted options from libzmq # Disable unwanted options from libzmq
set(BUILD_TESTS OFF CACHE BOOL "Switch off libzmq test build") set(BUILD_TESTS OFF CACHE BOOL "Switch off libzmq test build")
set(BUILD_SHARED OFF CACHE BOOL "Switch off libzmq shared libs") set(BUILD_SHARED OFF CACHE BOOL "Switch off libzmq shared libs")
@@ -84,7 +146,6 @@ set(WITH_DOC OFF CACHE BOOL "")
set(WITH_DOCS OFF CACHE BOOL "") set(WITH_DOCS OFF CACHE BOOL "")
# Using GetProperties and Populate to be able to exclude zmq # Using GetProperties and Populate to be able to exclude zmq
# from install (not possible with FetchContent_MakeAvailable(libzmq)) # from install (not possible with FetchContent_MakeAvailable(libzmq))
FetchContent_GetProperties(libzmq) FetchContent_GetProperties(libzmq)
@@ -93,7 +154,7 @@ if(NOT libzmq_POPULATED)
add_subdirectory(${libzmq_SOURCE_DIR} ${libzmq_BINARY_DIR} EXCLUDE_FROM_ALL) add_subdirectory(${libzmq_SOURCE_DIR} ${libzmq_BINARY_DIR} EXCLUDE_FROM_ALL)
endif() endif()
endif()
include(GNUInstallDirs) include(GNUInstallDirs)

View File

@@ -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.

View File

@@ -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}

View File

@@ -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)