mirror of
https://github.com/bitcoin/bitcoin.git
synced 2026-06-04 18:22:57 +02:00
Merge bitcoin/bitcoin#24322: [kernel 1/n] Introduce initial libbitcoinkernel
035fa1f07abuild: Remove LIBTOOL_APP_LDFLAGS for bitcoin-chainstate (Cory Fields)3f0595095ddocs: Add libbitcoinkernel_la_SOURCES explanation (Carl Dong)94ad45deb2ci: Build libbitcoinkernel (Carl Dong)26b2e7ffb3build: Extract the libbitcoinkernel library (Carl Dong)1df44dd20cb-cs: Define G_TRANSLATION_FUN in bitcoinkernel.cpp (Carl Dong)83a0bb7cc9build: Separate lib_LTLIBRARIES initialization (Carl Dong)c1e16cb31fbuild: Create .la library for bitcoincrypto (Carl Dong)8bdfe057c7build: Create .la library for leveldb (Carl Dong)05d1525b6dbuild: Create .la library for crc32c (Carl Dong)64caf94479build: Remove vestigial LIBLEVELDB_SSE42 (Carl Dong)1392e8e2d8build: Don't add unrelated libs to LIBTEST_* (Carl Dong) Pull request description: Part of: #24303 This PR introduces a `libbitcoinkernel` static library linking in the minimal list of files necessary to use our consensus engine as-is. `bitcoin-chainstate` introduced in #24304 now will link against `libbitcoinkernel`. Most of the changes are related to the build system. Please read the commit messages for more details. ACKs for top commit: theuni: This may be my favorite PR ever. It's a privilege to ACK035fa1f07a. Tree-SHA512: b755edc3471c7c1098847e9b16ab182a6abb7582563d9da516de376a770ac7543c6fdb24238ddd4d3d2d458f905a0c0614b8667aab182aa7e6b80c1cca7090bc
This commit is contained in:
163
src/Makefile.am
163
src/Makefile.am
@@ -15,14 +15,23 @@ AM_LIBTOOLFLAGS = --preserve-dup-deps
|
||||
PTHREAD_FLAGS = $(PTHREAD_CFLAGS) $(PTHREAD_LIBS)
|
||||
EXTRA_LIBRARIES =
|
||||
|
||||
lib_LTLIBRARIES =
|
||||
noinst_LTLIBRARIES =
|
||||
|
||||
bin_PROGRAMS =
|
||||
noinst_PROGRAMS =
|
||||
TESTS =
|
||||
BENCHMARKS =
|
||||
|
||||
BITCOIN_INCLUDES=-I$(builddir) -I$(srcdir)/$(MINISKETCH_INCLUDE_DIR_INT) -I$(srcdir)/secp256k1/include -I$(srcdir)/$(UNIVALUE_INCLUDE_DIR_INT) $(BDB_CPPFLAGS) $(BOOST_CPPFLAGS) $(LEVELDB_CPPFLAGS)
|
||||
|
||||
LIBBITCOIN_NODE=libbitcoin_node.a
|
||||
LIBBITCOIN_COMMON=libbitcoin_common.a
|
||||
LIBBITCOIN_CONSENSUS=libbitcoin_consensus.a
|
||||
LIBBITCOIN_CLI=libbitcoin_cli.a
|
||||
LIBBITCOIN_KERNEL=libbitcoin_kernel.a
|
||||
LIBBITCOIN_UTIL=libbitcoin_util.a
|
||||
LIBBITCOIN_CRYPTO_BASE=crypto/libbitcoin_crypto_base.a
|
||||
LIBBITCOIN_CRYPTO_BASE=crypto/libbitcoin_crypto_base.la
|
||||
LIBBITCOINQT=qt/libbitcoinqt.a
|
||||
LIBSECP256K1=secp256k1/libsecp256k1.la
|
||||
|
||||
@@ -32,28 +41,32 @@ endif
|
||||
if BUILD_BITCOIN_LIBS
|
||||
LIBBITCOINCONSENSUS=libbitcoinconsensus.la
|
||||
endif
|
||||
if BUILD_BITCOIN_KERNEL_LIB
|
||||
LIBBITCOINKERNEL=libbitcoinkernel.la
|
||||
endif
|
||||
if ENABLE_WALLET
|
||||
LIBBITCOIN_WALLET=libbitcoin_wallet.a
|
||||
LIBBITCOIN_WALLET_TOOL=libbitcoin_wallet_tool.a
|
||||
endif
|
||||
|
||||
LIBBITCOIN_CRYPTO= $(LIBBITCOIN_CRYPTO_BASE)
|
||||
LIBBITCOIN_CRYPTO = $(LIBBITCOIN_CRYPTO_BASE)
|
||||
if ENABLE_SSE41
|
||||
LIBBITCOIN_CRYPTO_SSE41 = crypto/libbitcoin_crypto_sse41.a
|
||||
LIBBITCOIN_CRYPTO_SSE41 = crypto/libbitcoin_crypto_sse41.la
|
||||
LIBBITCOIN_CRYPTO += $(LIBBITCOIN_CRYPTO_SSE41)
|
||||
endif
|
||||
if ENABLE_AVX2
|
||||
LIBBITCOIN_CRYPTO_AVX2 = crypto/libbitcoin_crypto_avx2.a
|
||||
LIBBITCOIN_CRYPTO_AVX2 = crypto/libbitcoin_crypto_avx2.la
|
||||
LIBBITCOIN_CRYPTO += $(LIBBITCOIN_CRYPTO_AVX2)
|
||||
endif
|
||||
if ENABLE_X86_SHANI
|
||||
LIBBITCOIN_CRYPTO_X86_SHANI = crypto/libbitcoin_crypto_x86_shani.a
|
||||
LIBBITCOIN_CRYPTO_X86_SHANI = crypto/libbitcoin_crypto_x86_shani.la
|
||||
LIBBITCOIN_CRYPTO += $(LIBBITCOIN_CRYPTO_X86_SHANI)
|
||||
endif
|
||||
if ENABLE_ARM_SHANI
|
||||
LIBBITCOIN_CRYPTO_ARM_SHANI = crypto/libbitcoin_crypto_arm_shani.a
|
||||
LIBBITCOIN_CRYPTO_ARM_SHANI = crypto/libbitcoin_crypto_arm_shani.la
|
||||
LIBBITCOIN_CRYPTO += $(LIBBITCOIN_CRYPTO_ARM_SHANI)
|
||||
endif
|
||||
noinst_LTLIBRARIES += $(LIBBITCOIN_CRYPTO)
|
||||
|
||||
$(LIBSECP256K1): $(wildcard secp256k1/src/*.h) $(wildcard secp256k1/src/*.c) $(wildcard secp256k1/include/*)
|
||||
$(AM_V_at)$(MAKE) $(AM_MAKEFLAGS) -C $(@D) $(@F)
|
||||
@@ -61,7 +74,6 @@ $(LIBSECP256K1): $(wildcard secp256k1/src/*.h) $(wildcard secp256k1/src/*.c) $(w
|
||||
# Make is not made aware of per-object dependencies to avoid limiting building parallelization
|
||||
# But to build the less dependent modules first, we manually select their order here:
|
||||
EXTRA_LIBRARIES += \
|
||||
$(LIBBITCOIN_CRYPTO) \
|
||||
$(LIBBITCOIN_UTIL) \
|
||||
$(LIBBITCOIN_COMMON) \
|
||||
$(LIBBITCOIN_CONSENSUS) \
|
||||
@@ -72,14 +84,6 @@ EXTRA_LIBRARIES += \
|
||||
$(LIBBITCOIN_WALLET_TOOL) \
|
||||
$(LIBBITCOIN_ZMQ)
|
||||
|
||||
lib_LTLIBRARIES = $(LIBBITCOINCONSENSUS)
|
||||
noinst_LTLIBRARIES =
|
||||
|
||||
bin_PROGRAMS =
|
||||
noinst_PROGRAMS =
|
||||
TESTS =
|
||||
BENCHMARKS =
|
||||
|
||||
if BUILD_BITCOIND
|
||||
bin_PROGRAMS += bitcoind
|
||||
endif
|
||||
@@ -464,9 +468,16 @@ libbitcoin_wallet_tool_a_SOURCES = \
|
||||
$(BITCOIN_CORE_H)
|
||||
|
||||
# crypto primitives library
|
||||
crypto_libbitcoin_crypto_base_a_CPPFLAGS = $(AM_CPPFLAGS)
|
||||
crypto_libbitcoin_crypto_base_a_CXXFLAGS = $(AM_CXXFLAGS) $(PIE_FLAGS)
|
||||
crypto_libbitcoin_crypto_base_a_SOURCES = \
|
||||
crypto_libbitcoin_crypto_base_la_CPPFLAGS = $(AM_CPPFLAGS)
|
||||
|
||||
# Specify -static in both CXXFLAGS and LDFLAGS so libtool will only build a
|
||||
# static version of this library. We don't need a dynamic version, and a dynamic
|
||||
# version can't be used on windows anyway because the library doesn't currently
|
||||
# export DLL symbols.
|
||||
crypto_libbitcoin_crypto_base_la_CXXFLAGS = $(AM_CXXFLAGS) $(PIE_FLAGS) -static
|
||||
crypto_libbitcoin_crypto_base_la_LDFLAGS = $(AM_LDFLAGS) -static
|
||||
|
||||
crypto_libbitcoin_crypto_base_la_SOURCES = \
|
||||
crypto/aes.cpp \
|
||||
crypto/aes.h \
|
||||
crypto/chacha_poly_aead.h \
|
||||
@@ -498,32 +509,44 @@ crypto_libbitcoin_crypto_base_a_SOURCES = \
|
||||
crypto/siphash.h
|
||||
|
||||
if USE_ASM
|
||||
crypto_libbitcoin_crypto_base_a_SOURCES += crypto/sha256_sse4.cpp
|
||||
crypto_libbitcoin_crypto_base_la_SOURCES += crypto/sha256_sse4.cpp
|
||||
endif
|
||||
|
||||
crypto_libbitcoin_crypto_sse41_a_CXXFLAGS = $(AM_CXXFLAGS) $(PIE_FLAGS)
|
||||
crypto_libbitcoin_crypto_sse41_a_CPPFLAGS = $(AM_CPPFLAGS)
|
||||
crypto_libbitcoin_crypto_sse41_a_CXXFLAGS += $(SSE41_CXXFLAGS)
|
||||
crypto_libbitcoin_crypto_sse41_a_CPPFLAGS += -DENABLE_SSE41
|
||||
crypto_libbitcoin_crypto_sse41_a_SOURCES = crypto/sha256_sse41.cpp
|
||||
# See explanation for -static in crypto_libbitcoin_crypto_base_la's LDFLAGS and
|
||||
# CXXFLAGS above
|
||||
crypto_libbitcoin_crypto_sse41_la_LDFLAGS = $(AM_LDFLAGS) -static
|
||||
crypto_libbitcoin_crypto_sse41_la_CXXFLAGS = $(AM_CXXFLAGS) $(PIE_FLAGS) -static
|
||||
crypto_libbitcoin_crypto_sse41_la_CPPFLAGS = $(AM_CPPFLAGS)
|
||||
crypto_libbitcoin_crypto_sse41_la_CXXFLAGS += $(SSE41_CXXFLAGS)
|
||||
crypto_libbitcoin_crypto_sse41_la_CPPFLAGS += -DENABLE_SSE41
|
||||
crypto_libbitcoin_crypto_sse41_la_SOURCES = crypto/sha256_sse41.cpp
|
||||
|
||||
crypto_libbitcoin_crypto_avx2_a_CXXFLAGS = $(AM_CXXFLAGS) $(PIE_FLAGS)
|
||||
crypto_libbitcoin_crypto_avx2_a_CPPFLAGS = $(AM_CPPFLAGS)
|
||||
crypto_libbitcoin_crypto_avx2_a_CXXFLAGS += $(AVX2_CXXFLAGS)
|
||||
crypto_libbitcoin_crypto_avx2_a_CPPFLAGS += -DENABLE_AVX2
|
||||
crypto_libbitcoin_crypto_avx2_a_SOURCES = crypto/sha256_avx2.cpp
|
||||
# See explanation for -static in crypto_libbitcoin_crypto_base_la's LDFLAGS and
|
||||
# CXXFLAGS above
|
||||
crypto_libbitcoin_crypto_avx2_la_LDFLAGS = $(AM_LDFLAGS) -static
|
||||
crypto_libbitcoin_crypto_avx2_la_CXXFLAGS = $(AM_CXXFLAGS) $(PIE_FLAGS) -static
|
||||
crypto_libbitcoin_crypto_avx2_la_CPPFLAGS = $(AM_CPPFLAGS)
|
||||
crypto_libbitcoin_crypto_avx2_la_CXXFLAGS += $(AVX2_CXXFLAGS)
|
||||
crypto_libbitcoin_crypto_avx2_la_CPPFLAGS += -DENABLE_AVX2
|
||||
crypto_libbitcoin_crypto_avx2_la_SOURCES = crypto/sha256_avx2.cpp
|
||||
|
||||
crypto_libbitcoin_crypto_x86_shani_a_CXXFLAGS = $(AM_CXXFLAGS) $(PIE_FLAGS)
|
||||
crypto_libbitcoin_crypto_x86_shani_a_CPPFLAGS = $(AM_CPPFLAGS)
|
||||
crypto_libbitcoin_crypto_x86_shani_a_CXXFLAGS += $(X86_SHANI_CXXFLAGS)
|
||||
crypto_libbitcoin_crypto_x86_shani_a_CPPFLAGS += -DENABLE_X86_SHANI
|
||||
crypto_libbitcoin_crypto_x86_shani_a_SOURCES = crypto/sha256_x86_shani.cpp
|
||||
# See explanation for -static in crypto_libbitcoin_crypto_base_la's LDFLAGS and
|
||||
# CXXFLAGS above
|
||||
crypto_libbitcoin_crypto_x86_shani_la_LDFLAGS = $(AM_LDFLAGS) -static
|
||||
crypto_libbitcoin_crypto_x86_shani_la_CXXFLAGS = $(AM_CXXFLAGS) $(PIE_FLAGS) -static
|
||||
crypto_libbitcoin_crypto_x86_shani_la_CPPFLAGS = $(AM_CPPFLAGS)
|
||||
crypto_libbitcoin_crypto_x86_shani_la_CXXFLAGS += $(X86_SHANI_CXXFLAGS)
|
||||
crypto_libbitcoin_crypto_x86_shani_la_CPPFLAGS += -DENABLE_X86_SHANI
|
||||
crypto_libbitcoin_crypto_x86_shani_la_SOURCES = crypto/sha256_x86_shani.cpp
|
||||
|
||||
crypto_libbitcoin_crypto_arm_shani_a_CXXFLAGS = $(AM_CXXFLAGS) $(PIE_FLAGS)
|
||||
crypto_libbitcoin_crypto_arm_shani_a_CPPFLAGS = $(AM_CPPFLAGS)
|
||||
crypto_libbitcoin_crypto_arm_shani_a_CXXFLAGS += $(ARM_SHANI_CXXFLAGS)
|
||||
crypto_libbitcoin_crypto_arm_shani_a_CPPFLAGS += -DENABLE_ARM_SHANI
|
||||
crypto_libbitcoin_crypto_arm_shani_a_SOURCES = crypto/sha256_arm_shani.cpp
|
||||
# See explanation for -static in crypto_libbitcoin_crypto_base_la's LDFLAGS and
|
||||
# CXXFLAGS above
|
||||
crypto_libbitcoin_crypto_arm_shani_la_LDFLAGS = $(AM_LDFLAGS) -static
|
||||
crypto_libbitcoin_crypto_arm_shani_la_CXXFLAGS = $(AM_CXXFLAGS) $(PIE_FLAGS) -static
|
||||
crypto_libbitcoin_crypto_arm_shani_la_CPPFLAGS = $(AM_CPPFLAGS)
|
||||
crypto_libbitcoin_crypto_arm_shani_la_CXXFLAGS += $(ARM_SHANI_CXXFLAGS)
|
||||
crypto_libbitcoin_crypto_arm_shani_la_CPPFLAGS += -DENABLE_ARM_SHANI
|
||||
crypto_libbitcoin_crypto_arm_shani_la_SOURCES = crypto/sha256_arm_shani.cpp
|
||||
|
||||
# consensus: shared between all executables that validate any consensus rules.
|
||||
libbitcoin_consensus_a_CPPFLAGS = $(AM_CPPFLAGS) $(BITCOIN_INCLUDES)
|
||||
@@ -683,7 +706,6 @@ bitcoin_bin_ldadd = \
|
||||
$(LIBBITCOIN_CONSENSUS) \
|
||||
$(LIBBITCOIN_CRYPTO) \
|
||||
$(LIBLEVELDB) \
|
||||
$(LIBLEVELDB_SSE42) \
|
||||
$(LIBMEMENV) \
|
||||
$(LIBSECP256K1)
|
||||
|
||||
@@ -782,8 +804,48 @@ bitcoin_util_LDADD = \
|
||||
#
|
||||
|
||||
# bitcoin-chainstate binary #
|
||||
bitcoin_chainstate_SOURCES = \
|
||||
bitcoin-chainstate.cpp \
|
||||
bitcoin_chainstate_SOURCES = bitcoin-chainstate.cpp
|
||||
bitcoin_chainstate_CPPFLAGS = $(AM_CPPFLAGS) $(BITCOIN_INCLUDES)
|
||||
bitcoin_chainstate_CXXFLAGS = $(AM_CXXFLAGS) $(PIE_FLAGS)
|
||||
|
||||
# $(LIBTOOL_APP_LDFLAGS) deliberately omitted here so that we can test linking
|
||||
# bitcoin-chainstate against libbitcoinkernel as a shared or static library by
|
||||
# setting --{en,dis}able-shared.
|
||||
bitcoin_chainstate_LDFLAGS = $(RELDFLAGS) $(AM_LDFLAGS) $(PTHREAD_FLAGS)
|
||||
bitcoin_chainstate_LDADD = $(LIBBITCOINKERNEL)
|
||||
#
|
||||
|
||||
# bitcoinkernel library #
|
||||
if BUILD_BITCOIN_KERNEL_LIB
|
||||
lib_LTLIBRARIES += $(LIBBITCOINKERNEL)
|
||||
|
||||
libbitcoinkernel_la_LDFLAGS = $(AM_LDFLAGS) -no-undefined $(RELDFLAGS) $(PTHREAD_FLAGS)
|
||||
libbitcoinkernel_la_LIBADD = $(LIBBITCOIN_CRYPTO) $(LIBUNIVALUE) $(LIBLEVELDB) $(LIBMEMENV) $(LIBSECP256K1)
|
||||
libbitcoinkernel_la_CPPFLAGS = $(AM_CPPFLAGS) -I$(builddir)/obj -I$(srcdir)/secp256k1/include -DBUILD_BITCOIN_INTERNAL $(BOOST_CPPFLAGS) $(LEVELDB_CPPFLAGS) -I$(srcdir)/$(UNIVALUE_INCLUDE_DIR_INT)
|
||||
|
||||
# libbitcoinkernel requires default symbol visibility, explicitly specify that
|
||||
# here so that things still work even when user configures with
|
||||
# --enable-reduce-exports
|
||||
#
|
||||
# Note this is a quick hack that will be removed as we incrementally define what
|
||||
# to export from the library.
|
||||
libbitcoinkernel_la_CXXFLAGS = $(AM_CXXFLAGS) $(PIE_FLAGS) -fvisibility=default
|
||||
|
||||
# TODO: For now, Specify -static in both CXXFLAGS and LDFLAGS when building for
|
||||
# windows targets so libtool will only build a static version of this
|
||||
# library. There are unresolved problems when building dll's for mingw-w64
|
||||
# and attempting to statically embed libstdc++, libpthread, etc.
|
||||
if TARGET_WINDOWS
|
||||
libbitcoinkernel_la_LDFLAGS += -static
|
||||
libbitcoinkernel_la_CXXFLAGS += -static
|
||||
endif
|
||||
|
||||
# TODO: libbitcoinkernel is a work in progress consensus engine library, as more
|
||||
# and more modules are decoupled from the consensus engine, this list will
|
||||
# shrink to only those which are absolutely necessary. For example, things
|
||||
# like index/*.cpp will be removed.
|
||||
libbitcoinkernel_la_SOURCES = \
|
||||
kernel/bitcoinkernel.cpp \
|
||||
arith_uint256.cpp \
|
||||
blockfilter.cpp \
|
||||
chain.cpp \
|
||||
@@ -862,26 +924,19 @@ bitcoin_chainstate_SOURCES = \
|
||||
validationinterface.cpp \
|
||||
versionbits.cpp \
|
||||
warnings.cpp
|
||||
bitcoin_chainstate_CPPFLAGS = $(AM_CPPFLAGS) $(BITCOIN_INCLUDES)
|
||||
bitcoin_chainstate_CXXFLAGS = $(AM_CXXFLAGS) $(PIE_FLAGS)
|
||||
bitcoin_chainstate_LDFLAGS = $(RELDFLAGS) $(AM_LDFLAGS) $(LIBTOOL_APP_LDFLAGS) $(PTHREAD_FLAGS)
|
||||
bitcoin_chainstate_LDADD = \
|
||||
$(LIBBITCOIN_CRYPTO) \
|
||||
$(LIBUNIVALUE) \
|
||||
$(LIBSECP256K1) \
|
||||
$(LIBLEVELDB) \
|
||||
$(LIBLEVELDB_SSE42) \
|
||||
$(LIBMEMENV)
|
||||
|
||||
# Required for obj/build.h to be generated first.
|
||||
# More details: https://www.gnu.org/software/automake/manual/html_node/Built-Sources-Example.html
|
||||
bitcoin_chainstate-clientversion.$(OBJEXT): obj/build.h
|
||||
libbitcoinkernel_la-clientversion.l$(OBJEXT): obj/build.h
|
||||
endif # BUILD_BITCOIN_KERNEL_LIB
|
||||
#
|
||||
|
||||
# bitcoinconsensus library #
|
||||
if BUILD_BITCOIN_LIBS
|
||||
lib_LTLIBRARIES += $(LIBBITCOINCONSENSUS)
|
||||
|
||||
include_HEADERS = script/bitcoinconsensus.h
|
||||
libbitcoinconsensus_la_SOURCES = support/cleanse.cpp $(crypto_libbitcoin_crypto_base_a_SOURCES) $(libbitcoin_consensus_a_SOURCES)
|
||||
libbitcoinconsensus_la_SOURCES = support/cleanse.cpp $(crypto_libbitcoin_crypto_base_la_SOURCES) $(libbitcoin_consensus_a_SOURCES)
|
||||
|
||||
libbitcoinconsensus_la_LDFLAGS = $(AM_LDFLAGS) -no-undefined $(RELDFLAGS)
|
||||
libbitcoinconsensus_la_LIBADD = $(LIBSECP256K1)
|
||||
|
||||
Reference in New Issue
Block a user