SPDX-FileCopyrightText: © 2023 Foundation Devices, Inc. SPDX-License-Identifier: GPL-3.0-or-later These patch series allow to compile Fulcrum without using any bundled libraries. From 141d590b4189908a88ca07ad8e3880e4933e6427 Mon Sep 17 00:00:00 2001 From: Jean-Pierre De Jesus DIAZ Date: Thu, 6 Jul 2023 14:56:53 +0200 Subject: [PATCH 1/4] Add config to build without secp256k1 Signed-off-by: Jean-Pierre De Jesus DIAZ --- Fulcrum.pro | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Fulcrum.pro b/Fulcrum.pro index e7fdfde..2dad355 100644 --- a/Fulcrum.pro +++ b/Fulcrum.pro @@ -480,7 +480,7 @@ HEADERS += \ # Enable secp256k1 compilation on x86_64 only -- we don't actually use this lib # yet in Fulcrum, so on platforms that aren't x86_64 it's ok to exclude it; it # was included in case we wish to someday verify signatures in Fulcrum, etc. -contains(QT_ARCH, x86_64):!win32-msvc { +contains(QT_ARCH, x86_64):!contains(CONFIG, config_without_bundled_secp256k1):!win32-msvc { message("Including embedded secp256k1") SOURCES += bitcoin/secp256k1/secp256k1.c -- 2.34.1 From 093a43d02dd14039ae8aed992223e5167f3fb866 Mon Sep 17 00:00:00 2001 From: Jean-Pierre De Jesus DIAZ Date: Thu, 6 Jul 2023 15:49:01 +0200 Subject: [PATCH 2/4] Allow using system simdjson Signed-off-by: Jean-Pierre De Jesus DIAZ --- Fulcrum.pro | 7 +++++++ src/Json/Json_Parser.cpp | 5 ++++- 2 files changed, 11 insertions(+), 1 deletion(-) diff --git a/Fulcrum.pro b/Fulcrum.pro index 2dad355..c478af6 100644 --- a/Fulcrum.pro +++ b/Fulcrum.pro @@ -149,6 +149,13 @@ contains(CONFIG, config_endian_big) { } # /GIT_COMMIT= +# simdjson +contains(LIBS, -lsimdjson) { + message("simdjson: Using CLI override") + DEFINES += SYSTEM_SIMDJSON +} +# /simdjson + # ZMQ !contains(LIBS, -lzmq) { # Test for ZMQ, and if found, add pkg-config which we will rely upon to find libs diff --git a/src/Json/Json_Parser.cpp b/src/Json/Json_Parser.cpp index c24fe94..eb42eec 100644 --- a/src/Json/Json_Parser.cpp +++ b/src/Json/Json_Parser.cpp @@ -56,7 +56,10 @@ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. // embed simdjson here, if we are on a known 64-bit platform and the header & sources are available #if defined(__x86_64__) || defined(_M_AMD64) || defined(__aarch64__) || defined(_M_ARM64) -#if __has_include("simdjson/simdjson.h") && __has_include("simdjson/simdjson.cpp") +#if defined(SYSTEM_SIMDJSON) +#include +#define HAVE_SIMDJSON 1 +#elif __has_include("simdjson/simdjson.h") && __has_include("simdjson/simdjson.cpp") #include "simdjson/simdjson.h" #include "simdjson/simdjson.cpp" #define HAVE_SIMDJSON 1 -- 2.34.1 From 4c609cb1467478cb669b5ca2290606128543a48c Mon Sep 17 00:00:00 2001 From: Jean-Pierre De Jesus DIAZ Date: Thu, 6 Jul 2023 15:56:01 +0200 Subject: [PATCH 3/4] Allow using system robin-hood-hashing Signed-off-by: Jean-Pierre De Jesus DIAZ --- Fulcrum.pro | 13 ++++++++++--- src/Controller.cpp | 2 +- src/Storage.cpp | 4 ++-- 3 files changed, 13 insertions(+), 6 deletions(-) diff --git a/Fulcrum.pro b/Fulcrum.pro index c478af6..99c7659 100644 --- a/Fulcrum.pro +++ b/Fulcrum.pro @@ -149,6 +149,16 @@ contains(CONFIG, config_endian_big) { } # /GIT_COMMIT= +# robin-hood-hashing +!contains(CONFIG, config_without_bundled_robin_hood) { + # Robin Hood unordered_flat_map implememntation (single header and MUCH more efficient than unordered_map!) + HEADERS += robin_hood/robin_hood.h + INCLUDEPATH += src/robin_hood/ +} else { + message("robin-hood-hashing: Using CLI override") +} +# /robin-hood-hashing + # simdjson contains(LIBS, -lsimdjson) { message("simdjson: Using CLI override") @@ -402,9 +412,6 @@ HEADERS += \ WebSocket.h \ ZmqSubNotifier.h -# Robin Hood unordered_flat_map implememntation (single header and MUCH more efficient than unordered_map!) -HEADERS += robin_hood/robin_hood.h - RESOURCES += \ resources.qrc diff --git a/src/Controller.cpp b/src/Controller.cpp index 918c1f2..d0cab56 100644 --- a/src/Controller.cpp +++ b/src/Controller.cpp @@ -33,7 +33,7 @@ #include "bitcoin/crypto/common.h" // ReadLE32 #include "bitcoin/rpc/protocol.h" // for RPC_INVALID_ADDRESS_OR_KEY #include "bitcoin/transaction.h" -#include "robin_hood/robin_hood.h" +#include #include #include diff --git a/src/Storage.cpp b/src/Storage.cpp index e74278c..0f0b91e 100644 --- a/src/Storage.cpp +++ b/src/Storage.cpp @@ -31,7 +31,7 @@ #include "bitcoin/hash.h" -#include "robin_hood/robin_hood.h" +#include #if __has_include() // Newer rocksdb 8.1 defines the `Cache` class in this header. :/ @@ -4537,7 +4537,7 @@ namespace { } // end anon namespace #ifdef ENABLE_TESTS -#include "robin_hood/robin_hood.h" +#include namespace { template -- 2.34.1 From 0e3888b12f62553b032a56b71d2c1545add080b6 Mon Sep 17 00:00:00 2001 From: Jean-Pierre De Jesus DIAZ Date: Thu, 6 Jul 2023 16:04:57 +0200 Subject: [PATCH 4/4] Allow using system cppzmq Signed-off-by: Jean-Pierre De Jesus DIAZ --- Fulcrum.pro | 8 ++++++++ src/ZmqSubNotifier.cpp | 2 +- 2 files changed, 9 insertions(+), 1 deletion(-) diff --git a/Fulcrum.pro b/Fulcrum.pro index 99c7659..0948834 100644 --- a/Fulcrum.pro +++ b/Fulcrum.pro @@ -186,6 +186,14 @@ contains(LIBS, -lsimdjson) { } # /ZMQ +# cppzmq +!contains(CONFIG, config_without_bundled_cppzmq) { + INCLUDEPATH += src/zmq +} else { + message("cppzmq: Using CLI override") +} +# /cppzmq + # - Try and detect rocksdb and if not, fall back to the staticlib. # - User can suppress this behavior by specifying a "LIBS+=-lrocksdb..." on the # CLI when they invoked qmake. In that case, they must set-up the LIBS+= and diff --git a/src/ZmqSubNotifier.cpp b/src/ZmqSubNotifier.cpp index 6b03784..48a41be 100644 --- a/src/ZmqSubNotifier.cpp +++ b/src/ZmqSubNotifier.cpp @@ -23,7 +23,7 @@ #if defined(ENABLE_ZMQ) // real implementation #define ZMQ_CPP11 -#include "zmq/zmq.hpp" +#include #include -- 2.34.1