mirror of
https://github.com/bitcoin/bitcoin.git
synced 2025-02-02 14:37:42 -03:00
Merge bitcoin/bitcoin#30903: cmake: Add FindZeroMQ
module
Some checks are pending
Some checks are pending
915640e191
depends: zeromq: don't install .pc files and remove patches for them (Cory Fields)6b8a74463b
cmake: Add `FindZeroMQ` module (Hennadii Stepanov) Pull request description: This PR introduces the `FindZeroMQ` module, which first attempts to find the `libzmq` library using CMake's `find_package()` and falls back to `pkg_check_modules()` if unsuccessful. Addresses https://github.com/bitcoin/bitcoin/issues/30876 for the ZeroMQ package. ACKs for top commit: fanquake: ACK915640e191
Tree-SHA512: 2f17bae21be5d3f280a13425d22f5d1b2e23837a8aaf5ec89c433767509de030a42d598b261e102bdb5b860d8ede98013c124c3d25e081e956d4ee3a81b2584f
This commit is contained in:
commit
dc97e7f6db
6 changed files with 47 additions and 77 deletions
|
@ -123,16 +123,7 @@ option(WITH_CCACHE "Attempt to use ccache for compiling." ON)
|
||||||
|
|
||||||
option(WITH_ZMQ "Enable ZMQ notifications." OFF)
|
option(WITH_ZMQ "Enable ZMQ notifications." OFF)
|
||||||
if(WITH_ZMQ)
|
if(WITH_ZMQ)
|
||||||
if(VCPKG_TARGET_TRIPLET)
|
find_package(ZeroMQ 4.0.0 MODULE REQUIRED)
|
||||||
find_package(ZeroMQ CONFIG REQUIRED)
|
|
||||||
else()
|
|
||||||
# The ZeroMQ project has provided config files since v4.2.2.
|
|
||||||
# However, mainstream distributions do not yet provide CMake
|
|
||||||
# config files for ZeroMQ packages. If they do in the future,
|
|
||||||
# find_package(ZeroMQ) may be used instead.
|
|
||||||
find_package(PkgConfig REQUIRED)
|
|
||||||
pkg_check_modules(libzmq REQUIRED IMPORTED_TARGET libzmq>=4)
|
|
||||||
endif()
|
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
option(WITH_USDT "Enable tracepoints for Userspace, Statically Defined Tracing." OFF)
|
option(WITH_USDT "Enable tracepoints for Userspace, Statically Defined Tracing." OFF)
|
||||||
|
|
41
cmake/module/FindZeroMQ.cmake
Normal file
41
cmake/module/FindZeroMQ.cmake
Normal file
|
@ -0,0 +1,41 @@
|
||||||
|
# Copyright (c) 2024-present The Bitcoin Core developers
|
||||||
|
# Distributed under the MIT software license, see the accompanying
|
||||||
|
# file COPYING or https://opensource.org/license/mit/.
|
||||||
|
|
||||||
|
#[=======================================================================[
|
||||||
|
FindZeroMQ
|
||||||
|
----------
|
||||||
|
|
||||||
|
Finds the ZeroMQ headers and library.
|
||||||
|
|
||||||
|
This is a wrapper around find_package()/pkg_check_modules() commands that:
|
||||||
|
- facilitates searching in various build environments
|
||||||
|
- prints a standard log message
|
||||||
|
|
||||||
|
#]=======================================================================]
|
||||||
|
|
||||||
|
include(FindPackageHandleStandardArgs)
|
||||||
|
find_package(ZeroMQ ${ZeroMQ_FIND_VERSION} NO_MODULE QUIET)
|
||||||
|
if(ZeroMQ_FOUND)
|
||||||
|
find_package_handle_standard_args(ZeroMQ
|
||||||
|
REQUIRED_VARS ZeroMQ_DIR
|
||||||
|
VERSION_VAR ZeroMQ_VERSION
|
||||||
|
)
|
||||||
|
if(TARGET libzmq)
|
||||||
|
add_library(zeromq ALIAS libzmq)
|
||||||
|
elseif(TARGET libzmq-static)
|
||||||
|
add_library(zeromq ALIAS libzmq-static)
|
||||||
|
endif()
|
||||||
|
mark_as_advanced(ZeroMQ_DIR)
|
||||||
|
else()
|
||||||
|
find_package(PkgConfig REQUIRED)
|
||||||
|
pkg_check_modules(libzmq QUIET
|
||||||
|
IMPORTED_TARGET
|
||||||
|
libzmq>=${ZeroMQ_FIND_VERSION}
|
||||||
|
)
|
||||||
|
find_package_handle_standard_args(ZeroMQ
|
||||||
|
REQUIRED_VARS libzmq_LIBRARY_DIRS
|
||||||
|
VERSION_VAR libzmq_VERSION
|
||||||
|
)
|
||||||
|
add_library(zeromq ALIAS PkgConfig::libzmq)
|
||||||
|
endif()
|
|
@ -4,15 +4,13 @@ $(package)_download_path=https://github.com/zeromq/libzmq/releases/download/v$($
|
||||||
$(package)_file_name=$(package)-$($(package)_version).tar.gz
|
$(package)_file_name=$(package)-$($(package)_version).tar.gz
|
||||||
$(package)_sha256_hash=6653ef5910f17954861fe72332e68b03ca6e4d9c7160eb3a8de5a5a913bfab43
|
$(package)_sha256_hash=6653ef5910f17954861fe72332e68b03ca6e4d9c7160eb3a8de5a5a913bfab43
|
||||||
$(package)_build_subdir=build
|
$(package)_build_subdir=build
|
||||||
$(package)_patches = remove_libstd_link.patch
|
$(package)_patches = macos_mktemp_check.patch
|
||||||
$(package)_patches += macos_mktemp_check.patch
|
|
||||||
$(package)_patches += builtin_sha1.patch
|
$(package)_patches += builtin_sha1.patch
|
||||||
$(package)_patches += fix_have_windows.patch
|
$(package)_patches += fix_have_windows.patch
|
||||||
$(package)_patches += openbsd_kqueue_headers.patch
|
$(package)_patches += openbsd_kqueue_headers.patch
|
||||||
$(package)_patches += cmake_minimum.patch
|
$(package)_patches += cmake_minimum.patch
|
||||||
$(package)_patches += cacheline_undefined.patch
|
$(package)_patches += cacheline_undefined.patch
|
||||||
$(package)_patches += no_librt.patch
|
$(package)_patches += no_librt.patch
|
||||||
$(package)_patches += fix_mingw_link.patch
|
|
||||||
|
|
||||||
define $(package)_set_vars
|
define $(package)_set_vars
|
||||||
$(package)_config_opts := -DCMAKE_BUILD_TYPE=None -DWITH_DOCS=OFF -DWITH_LIBSODIUM=OFF
|
$(package)_config_opts := -DCMAKE_BUILD_TYPE=None -DWITH_DOCS=OFF -DWITH_LIBSODIUM=OFF
|
||||||
|
@ -24,15 +22,13 @@ define $(package)_set_vars
|
||||||
endef
|
endef
|
||||||
|
|
||||||
define $(package)_preprocess_cmds
|
define $(package)_preprocess_cmds
|
||||||
patch -p1 < $($(package)_patch_dir)/remove_libstd_link.patch && \
|
|
||||||
patch -p1 < $($(package)_patch_dir)/macos_mktemp_check.patch && \
|
patch -p1 < $($(package)_patch_dir)/macos_mktemp_check.patch && \
|
||||||
patch -p1 < $($(package)_patch_dir)/builtin_sha1.patch && \
|
patch -p1 < $($(package)_patch_dir)/builtin_sha1.patch && \
|
||||||
patch -p1 < $($(package)_patch_dir)/cacheline_undefined.patch && \
|
patch -p1 < $($(package)_patch_dir)/cacheline_undefined.patch && \
|
||||||
patch -p1 < $($(package)_patch_dir)/fix_have_windows.patch && \
|
patch -p1 < $($(package)_patch_dir)/fix_have_windows.patch && \
|
||||||
patch -p1 < $($(package)_patch_dir)/openbsd_kqueue_headers.patch && \
|
patch -p1 < $($(package)_patch_dir)/openbsd_kqueue_headers.patch && \
|
||||||
patch -p1 < $($(package)_patch_dir)/cmake_minimum.patch && \
|
patch -p1 < $($(package)_patch_dir)/cmake_minimum.patch && \
|
||||||
patch -p1 < $($(package)_patch_dir)/no_librt.patch && \
|
patch -p1 < $($(package)_patch_dir)/no_librt.patch
|
||||||
patch -p1 < $($(package)_patch_dir)/fix_mingw_link.patch
|
|
||||||
endef
|
endef
|
||||||
|
|
||||||
define $(package)_config_cmds
|
define $(package)_config_cmds
|
||||||
|
@ -48,5 +44,6 @@ define $(package)_stage_cmds
|
||||||
endef
|
endef
|
||||||
|
|
||||||
define $(package)_postprocess_cmds
|
define $(package)_postprocess_cmds
|
||||||
rm -rf share
|
rm -rf share && \
|
||||||
|
rm -rf lib/pkgconfig
|
||||||
endef
|
endef
|
||||||
|
|
|
@ -1,31 +0,0 @@
|
||||||
Fix CMake-generated `libzmq.pc` file
|
|
||||||
|
|
||||||
This change mirrors the Autotools-based build system behavior for
|
|
||||||
cross-compiling for Windows with static linking.
|
|
||||||
|
|
||||||
See https://github.com/zeromq/libzmq/pull/4706.
|
|
||||||
|
|
||||||
|
|
||||||
diff --git a/CMakeLists.txt b/CMakeLists.txt
|
|
||||||
index 03462271..0315e606 100644
|
|
||||||
--- a/CMakeLists.txt
|
|
||||||
+++ b/CMakeLists.txt
|
|
||||||
@@ -546,12 +546,18 @@ if(ZMQ_HAVE_WINDOWS)
|
|
||||||
# Cannot use check_library_exists because the symbol is always declared as char(*)(void)
|
|
||||||
set(CMAKE_REQUIRED_LIBRARIES "ws2_32.lib")
|
|
||||||
check_cxx_symbol_exists(WSAStartup "winsock2.h" HAVE_WS2_32)
|
|
||||||
+ if(HAVE_WS2_32)
|
|
||||||
+ set(pkg_config_libs_private "${pkg_config_libs_private} -lws2_32")
|
|
||||||
+ endif()
|
|
||||||
|
|
||||||
set(CMAKE_REQUIRED_LIBRARIES "rpcrt4.lib")
|
|
||||||
check_cxx_symbol_exists(UuidCreateSequential "rpc.h" HAVE_RPCRT4)
|
|
||||||
|
|
||||||
set(CMAKE_REQUIRED_LIBRARIES "iphlpapi.lib")
|
|
||||||
check_cxx_symbol_exists(GetAdaptersAddresses "winsock2.h;iphlpapi.h" HAVE_IPHLAPI)
|
|
||||||
+ if(HAVE_IPHLAPI)
|
|
||||||
+ set(pkg_config_libs_private "${pkg_config_libs_private} -liphlpapi")
|
|
||||||
+ endif()
|
|
||||||
check_cxx_symbol_exists(if_nametoindex "iphlpapi.h" HAVE_IF_NAMETOINDEX)
|
|
||||||
|
|
||||||
set(CMAKE_REQUIRED_LIBRARIES "")
|
|
|
@ -1,25 +0,0 @@
|
||||||
commit 47d4cd12a2c051815ddda78adebdb3923b260d8a
|
|
||||||
Author: fanquake <fanquake@gmail.com>
|
|
||||||
Date: Tue Aug 18 14:45:40 2020 +0800
|
|
||||||
|
|
||||||
Remove needless linking against libstdc++
|
|
||||||
|
|
||||||
This is broken for a number of reasons, including:
|
|
||||||
- g++ understands "static-libstdc++ -lstdc++" to mean "link against
|
|
||||||
whatever libstdc++ exists, probably shared", which in itself is buggy.
|
|
||||||
- another stdlib (libc++ for example) may be in use
|
|
||||||
|
|
||||||
See #11981.
|
|
||||||
|
|
||||||
diff --git a/src/libzmq.pc.in b/src/libzmq.pc.in
|
|
||||||
index 233bc3a..3c2bf0d 100644
|
|
||||||
--- a/src/libzmq.pc.in
|
|
||||||
+++ b/src/libzmq.pc.in
|
|
||||||
@@ -7,6 +7,6 @@ Name: libzmq
|
|
||||||
Description: 0MQ c++ library
|
|
||||||
Version: @VERSION@
|
|
||||||
Libs: -L${libdir} -lzmq
|
|
||||||
-Libs.private: -lstdc++ @pkg_config_libs_private@
|
|
||||||
+Libs.private: @pkg_config_libs_private@
|
|
||||||
Requires.private: @pkg_config_names_private@
|
|
||||||
Cflags: -I${includedir} @pkg_config_defines@
|
|
|
@ -12,13 +12,10 @@ add_library(bitcoin_zmq STATIC EXCLUDE_FROM_ALL
|
||||||
target_compile_definitions(bitcoin_zmq
|
target_compile_definitions(bitcoin_zmq
|
||||||
INTERFACE
|
INTERFACE
|
||||||
ENABLE_ZMQ=1
|
ENABLE_ZMQ=1
|
||||||
PRIVATE
|
|
||||||
$<$<AND:$<PLATFORM_ID:Windows>,$<CXX_COMPILER_ID:GNU>>:ZMQ_STATIC>
|
|
||||||
)
|
)
|
||||||
target_link_libraries(bitcoin_zmq
|
target_link_libraries(bitcoin_zmq
|
||||||
PRIVATE
|
PRIVATE
|
||||||
core_interface
|
core_interface
|
||||||
univalue
|
univalue
|
||||||
$<TARGET_NAME_IF_EXISTS:libzmq>
|
zeromq
|
||||||
$<TARGET_NAME_IF_EXISTS:PkgConfig::libzmq>
|
|
||||||
)
|
)
|
||||||
|
|
Loading…
Add table
Reference in a new issue