mirror of
https://github.com/bitcoin/bitcoin.git
synced 2025-02-22 06:52:36 +01:00
Integrate univalue into our buildsystem
This addresses issues like the one in #12467, where some of our compiler flags end up being dropped during the subconfigure of Univalue. Specifically, we're still using the compiler-default c++ version rather than forcing c++17. We can drop the need subconfigure completely in favor of a tighter build integration, where the sources are listed separately from the build recipes, so that they may be included directly by upstream projects. This is similar to the way leveldb build integration works in Core. Core benefits of this approach include: - Better caching (for ex. ccache and autoconf) - No need for a slow subconfigure - Faster autoconf - No more missing compile flags - Compile only the objects needed There are no benefits to Univalue itself that I can think of. These changes should be a no-op there, and to downstreams as well until they take advantage of the new sources.mk. This also removes the option to use an external univalue to avoid similar ABI issues with mystery binaries. Co-authored-by: fanquake <fanquake@gmail.com>
This commit is contained in:
parent
3043193675
commit
0f95247246
6 changed files with 32 additions and 57 deletions
|
@ -9,14 +9,12 @@ export LC_ALL=C.UTF-8
|
|||
if [[ $HOST = *-mingw32 ]]; then
|
||||
# Generate all binaries, so that they can be wrapped
|
||||
DOCKER_EXEC make $MAKEJOBS -C src/secp256k1 VERBOSE=1
|
||||
DOCKER_EXEC make $MAKEJOBS -C src/univalue VERBOSE=1
|
||||
DOCKER_EXEC "${BASE_ROOT_DIR}/ci/test/wrap-wine.sh"
|
||||
fi
|
||||
|
||||
if [ -n "$QEMU_USER_CMD" ]; then
|
||||
# Generate all binaries, so that they can be wrapped
|
||||
DOCKER_EXEC make $MAKEJOBS -C src/secp256k1 VERBOSE=1
|
||||
DOCKER_EXEC make $MAKEJOBS -C src/univalue VERBOSE=1
|
||||
DOCKER_EXEC "${BASE_ROOT_DIR}/ci/test/wrap-qemu.sh"
|
||||
fi
|
||||
|
||||
|
|
38
configure.ac
38
configure.ac
|
@ -262,12 +262,6 @@ if test "x$use_asm" = xyes; then
|
|||
AC_DEFINE(USE_ASM, 1, [Define this symbol to build in assembly routines])
|
||||
fi
|
||||
|
||||
AC_ARG_WITH([system-univalue],
|
||||
[AS_HELP_STRING([--with-system-univalue],
|
||||
[Build with system UniValue (default is no)])],
|
||||
[system_univalue=$withval],
|
||||
[system_univalue=no]
|
||||
)
|
||||
AC_ARG_ENABLE([zmq],
|
||||
[AS_HELP_STRING([--disable-zmq],
|
||||
[disable ZMQ notifications])],
|
||||
|
@ -1546,34 +1540,6 @@ if test "x$use_zmq" = xyes; then
|
|||
esac
|
||||
fi
|
||||
|
||||
dnl univalue check
|
||||
|
||||
need_bundled_univalue=yes
|
||||
if test x$build_bitcoin_wallet$build_bitcoin_cli$build_bitcoin_tx$build_bitcoin_util$build_bitcoind$bitcoin_enable_qt$use_tests$use_bench = xnononononononono; then
|
||||
need_bundled_univalue=no
|
||||
else
|
||||
if test x$system_univalue != xno; then
|
||||
PKG_CHECK_MODULES([UNIVALUE], [libunivalue >= 1.0.4], [found_univalue=yes], [found_univalue=no])
|
||||
if test x$found_univalue = xyes; then
|
||||
system_univalue=yes
|
||||
need_bundled_univalue=no
|
||||
elif test x$system_univalue = xyes; then
|
||||
AC_MSG_ERROR([univalue not found])
|
||||
else
|
||||
system_univalue=no
|
||||
fi
|
||||
fi
|
||||
|
||||
if test x$need_bundled_univalue = xyes; then
|
||||
UNIVALUE_CFLAGS='-I$(srcdir)/univalue/include'
|
||||
UNIVALUE_LIBS='univalue/libunivalue.la'
|
||||
fi
|
||||
fi
|
||||
|
||||
AM_CONDITIONAL([EMBEDDED_UNIVALUE],[test x$need_bundled_univalue = xyes])
|
||||
AC_SUBST(UNIVALUE_CFLAGS)
|
||||
AC_SUBST(UNIVALUE_LIBS)
|
||||
|
||||
dnl libmultiprocess library check
|
||||
|
||||
libmultiprocess_found=no
|
||||
|
@ -1936,10 +1902,6 @@ PKGCONFIG_LIBDIR_TEMP="$PKG_CONFIG_LIBDIR"
|
|||
unset PKG_CONFIG_LIBDIR
|
||||
PKG_CONFIG_LIBDIR="$PKGCONFIG_LIBDIR_TEMP"
|
||||
|
||||
if test x$need_bundled_univalue = xyes; then
|
||||
AC_CONFIG_SUBDIRS([src/univalue])
|
||||
fi
|
||||
|
||||
ac_configure_args="${ac_configure_args} --disable-shared --with-pic --enable-benchmark=no --enable-module-recovery --enable-module-schnorrsig --enable-experimental"
|
||||
AC_CONFIG_SUBDIRS([src/secp256k1])
|
||||
|
||||
|
|
|
@ -297,7 +297,7 @@ mkdir -p "$DISTSRC"
|
|||
${HOST_CXXFLAGS:+CXXFLAGS="${HOST_CXXFLAGS}"} \
|
||||
${HOST_LDFLAGS:+LDFLAGS="${HOST_LDFLAGS}"}
|
||||
|
||||
sed -i.old 's/-lstdc++ //g' config.status libtool src/univalue/config.status src/univalue/libtool
|
||||
sed -i.old 's/-lstdc++ //g' config.status libtool
|
||||
|
||||
# Build Bitcoin Core
|
||||
make --jobs="$JOBS" ${V:+V=1}
|
||||
|
|
|
@ -6,7 +6,7 @@
|
|||
print-%: FORCE
|
||||
@echo '$*'='$($*)'
|
||||
|
||||
DIST_SUBDIRS = secp256k1 univalue
|
||||
DIST_SUBDIRS = secp256k1
|
||||
|
||||
AM_LDFLAGS = $(LIBTOOL_LDFLAGS) $(HARDENED_LDFLAGS) $(GPROF_LDFLAGS) $(SANITIZER_LDFLAGS)
|
||||
AM_CXXFLAGS = $(DEBUG_CXXFLAGS) $(HARDENED_CXXFLAGS) $(WARN_CXXFLAGS) $(NOWARN_CXXFLAGS) $(ERROR_CXXFLAGS) $(GPROF_CXXFLAGS) $(SANITIZER_CXXFLAGS)
|
||||
|
@ -15,18 +15,7 @@ AM_LIBTOOLFLAGS = --preserve-dup-deps
|
|||
PTHREAD_FLAGS = $(PTHREAD_CFLAGS) $(PTHREAD_LIBS)
|
||||
EXTRA_LIBRARIES =
|
||||
|
||||
if EMBEDDED_UNIVALUE
|
||||
LIBUNIVALUE = univalue/libunivalue.la
|
||||
|
||||
$(LIBUNIVALUE): $(wildcard univalue/lib/*) $(wildcard univalue/include/*)
|
||||
$(AM_V_at)$(MAKE) $(AM_MAKEFLAGS) -C $(@D) $(@F)
|
||||
else
|
||||
LIBUNIVALUE = $(UNIVALUE_LIBS)
|
||||
endif
|
||||
|
||||
BITCOIN_INCLUDES=-I$(builddir) -I$(srcdir)/secp256k1/include $(BDB_CPPFLAGS) $(BOOST_CPPFLAGS) $(LEVELDB_CPPFLAGS)
|
||||
|
||||
BITCOIN_INCLUDES += $(UNIVALUE_CFLAGS)
|
||||
BITCOIN_INCLUDES=-I$(builddir) -I$(srcdir)/secp256k1/include -I$(srcdir)/$(UNIVALUE_INCLUDE_DIR_INT) $(BDB_CPPFLAGS) $(BOOST_CPPFLAGS) $(LEVELDB_CPPFLAGS)
|
||||
|
||||
LIBBITCOIN_SERVER=libbitcoin_server.a
|
||||
LIBBITCOIN_COMMON=libbitcoin_common.a
|
||||
|
@ -80,6 +69,7 @@ EXTRA_LIBRARIES += \
|
|||
$(LIBBITCOIN_ZMQ)
|
||||
|
||||
lib_LTLIBRARIES = $(LIBBITCOINCONSENSUS)
|
||||
noinst_LTLIBRARIES =
|
||||
|
||||
bin_PROGRAMS =
|
||||
noinst_PROGRAMS =
|
||||
|
@ -797,7 +787,6 @@ $(top_srcdir)/$(subdir)/config/bitcoin-config.h.in: $(am__configure_deps)
|
|||
|
||||
clean-local:
|
||||
-$(MAKE) -C secp256k1 clean
|
||||
-$(MAKE) -C univalue clean
|
||||
-rm -f leveldb/*/*.gcda leveldb/*/*.gcno leveldb/helpers/memenv/*.gcda leveldb/helpers/memenv/*.gcno
|
||||
-rm -f config.h
|
||||
-rm -rf test/__pycache__
|
||||
|
@ -887,3 +876,5 @@ endif
|
|||
if ENABLE_QT_TESTS
|
||||
include Makefile.qttest.include
|
||||
endif
|
||||
|
||||
include Makefile.univalue.include
|
||||
|
|
|
@ -350,8 +350,26 @@ if ENABLE_BENCH
|
|||
endif
|
||||
endif
|
||||
$(AM_V_at)$(MAKE) $(AM_MAKEFLAGS) -C secp256k1 check
|
||||
if EMBEDDED_UNIVALUE
|
||||
$(AM_V_at)$(MAKE) $(AM_MAKEFLAGS) -C univalue check
|
||||
|
||||
if !ENABLE_FUZZ
|
||||
UNIVALUE_TESTS = univalue/test/object univalue/test/unitester univalue/test/no_nul
|
||||
noinst_PROGRAMS += $(UNIVALUE_TESTS)
|
||||
TESTS += $(UNIVALUE_TESTS)
|
||||
|
||||
univalue_test_unitester_SOURCES = $(UNIVALUE_TEST_UNITESTER_INT)
|
||||
univalue_test_unitester_LDADD = $(LIBUNIVALUE)
|
||||
univalue_test_unitester_CPPFLAGS = -I$(srcdir)/$(UNIVALUE_INCLUDE_DIR_INT) -DJSON_TEST_SRC=\"$(srcdir)/$(UNIVALUE_TEST_DATA_DIR_INT)\"
|
||||
univalue_test_unitester_LDFLAGS = -static $(LIBTOOL_APP_LDFLAGS)
|
||||
|
||||
univalue_test_no_nul_SOURCES = $(UNIVALUE_TEST_NO_NUL_INT)
|
||||
univalue_test_no_nul_LDADD = $(LIBUNIVALUE)
|
||||
univalue_test_no_nul_CPPFLAGS = -I$(srcdir)/$(UNIVALUE_INCLUDE_DIR_INT)
|
||||
univalue_test_no_nul_LDFLAGS = -static $(LIBTOOL_APP_LDFLAGS)
|
||||
|
||||
univalue_test_object_SOURCES = $(UNIVALUE_TEST_OBJECT_INT)
|
||||
univalue_test_object_LDADD = $(LIBUNIVALUE)
|
||||
univalue_test_object_CPPFLAGS = -I$(srcdir)/$(UNIVALUE_INCLUDE_DIR_INT)
|
||||
univalue_test_object_LDFLAGS = -static $(LIBTOOL_APP_LDFLAGS)
|
||||
endif
|
||||
|
||||
%.cpp.test: %.cpp
|
||||
|
|
6
src/Makefile.univalue.include
Normal file
6
src/Makefile.univalue.include
Normal file
|
@ -0,0 +1,6 @@
|
|||
include univalue/sources.mk
|
||||
|
||||
LIBUNIVALUE = libunivalue.la
|
||||
noinst_LTLIBRARIES += $(LIBUNIVALUE)
|
||||
libunivalue_la_SOURCES = $(UNIVALUE_LIB_SOURCES_INT) $(UNIVALUE_DIST_HEADERS_INT) $(UNIVALUE_LIB_HEADERS_INT) $(UNIVALUE_TEST_FILES_INT)
|
||||
libunivalue_la_CPPFLAGS = $(AM_CPPFLAGS) -I$(srcdir)/$(UNIVALUE_INCLUDE_DIR_INT)
|
Loading…
Add table
Reference in a new issue