diff --git a/configure.ac b/configure.ac index 0e8292f19a..81986c6347 100644 --- a/configure.ac +++ b/configure.ac @@ -1364,6 +1364,23 @@ if test "$enable_fuzz_binary" = "yes"; then CHECK_RUNTIME_LIB fi +dnl Check for libsecp256k1, only if explicitly requested +AC_ARG_WITH([system-libsecp256k1], + [AS_HELP_STRING([--with-system-libsecp256k1], + [Build with system libsecp256k1 (default is no; DANGEROUS; NOT SUPPORTED)])], + [system_libsecp256k1=$withval], + [system_libsecp256k1=no] +) +if test x$system_libsecp256k1 != xno; then + PKG_CHECK_MODULES([libsecp256k1],[libsecp256k1],,[true]) +else + libsecp256k1_CFLAGS='-I$(srcdir)/secp256k1/include' + libsecp256k1_LIBS='secp256k1/libsecp256k1.la' +fi +AM_CONDITIONAL([EMBEDDED_LIBSECP256K1],[test x$system_libsecp256k1 = xno]) +AC_SUBST(libsecp256k1_CFLAGS) +AC_SUBST(libsecp256k1_LIBS) + if test "$enable_wallet" != "no"; then dnl Check for libdb_cxx only if wallet enabled if test "$use_bdb" != "no"; then @@ -1959,8 +1976,10 @@ CPPFLAGS_TEMP="$CPPFLAGS" unset CPPFLAGS CPPFLAGS="$CPPFLAGS_TEMP" +if test x$system_libsecp256k1 = xno; then ac_configure_args="${ac_configure_args} --disable-shared --with-pic --enable-benchmark=no --enable-module-recovery --disable-module-ecdh" AC_CONFIG_SUBDIRS([src/secp256k1]) +fi AC_OUTPUT diff --git a/src/Makefile.am b/src/Makefile.am index 8905c0ad1c..fe079a35bc 100644 --- a/src/Makefile.am +++ b/src/Makefile.am @@ -24,7 +24,7 @@ check_PROGRAMS = TESTS = BENCHMARKS = -BITCOIN_INCLUDES=-I$(builddir) -I$(srcdir)/$(MINISKETCH_INCLUDE_DIR_INT) -I$(srcdir)/secp256k1/include -I$(srcdir)/$(UNIVALUE_INCLUDE_DIR_INT) +BITCOIN_INCLUDES=-I$(builddir) -I$(srcdir)/$(MINISKETCH_INCLUDE_DIR_INT) $(libsecp256k1_CFLAGS) -I$(srcdir)/$(UNIVALUE_INCLUDE_DIR_INT) LIBBITCOIN_NODE=libbitcoin_node.a LIBBITCOIN_COMMON=libbitcoin_common.a @@ -33,7 +33,11 @@ LIBBITCOIN_CLI=libbitcoin_cli.a LIBBITCOIN_UTIL=libbitcoin_util.a LIBBITCOIN_CRYPTO_BASE=crypto/libbitcoin_crypto_base.la LIBBITCOINQT=qt/libbitcoinqt.a +if EMBEDDED_LIBSECP256K1 LIBSECP256K1=secp256k1/libsecp256k1.la +else +LIBSECP256K1=$(libsecp256k1_LIBS) +endif if ENABLE_ZMQ LIBBITCOIN_ZMQ=libbitcoin_zmq.a @@ -68,8 +72,10 @@ LIBBITCOIN_CRYPTO += $(LIBBITCOIN_CRYPTO_ARM_SHANI) endif noinst_LTLIBRARIES += $(LIBBITCOIN_CRYPTO) +if EMBEDDED_LIBSECP256K1 $(LIBSECP256K1): $(wildcard secp256k1/src/*.h) $(wildcard secp256k1/src/*.c) $(wildcard secp256k1/include/*) $(AM_V_at)$(MAKE) $(AM_MAKEFLAGS) -C $(@D) $(@F) +endif # 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: @@ -908,7 +914,7 @@ lib_LTLIBRARIES += $(LIBBITCOINKERNEL) libbitcoinkernel_la_LDFLAGS = $(AM_LDFLAGS) -no-undefined $(RELDFLAGS) $(PTHREAD_FLAGS) libbitcoinkernel_la_LIBADD = $(LIBBITCOIN_CRYPTO) $(LIBLEVELDB) $(LIBMEMENV) $(LIBSECP256K1) -libbitcoinkernel_la_CPPFLAGS = $(AM_CPPFLAGS) -I$(builddir)/obj -I$(srcdir)/secp256k1/include -DBUILD_BITCOIN_INTERNAL $(BOOST_CPPFLAGS) $(LEVELDB_CPPFLAGS) +libbitcoinkernel_la_CPPFLAGS = $(AM_CPPFLAGS) -I$(builddir)/obj $(libsecp256k1_CFLAGS) -DBUILD_BITCOIN_INTERNAL $(BOOST_CPPFLAGS) $(LEVELDB_CPPFLAGS) # libbitcoinkernel requires default symbol visibility, explicitly specify that # here so that things still work even when user configures with @@ -1015,7 +1021,7 @@ libbitcoinconsensus_la_SOURCES = support/cleanse.cpp $(crypto_libbitcoin_crypto_ libbitcoinconsensus_la_LDFLAGS = $(AM_LDFLAGS) -no-undefined $(RELDFLAGS) libbitcoinconsensus_la_LIBADD = $(LIBSECP256K1) -libbitcoinconsensus_la_CPPFLAGS = $(AM_CPPFLAGS) -I$(builddir)/obj -I$(srcdir)/secp256k1/include -DBUILD_BITCOIN_INTERNAL +libbitcoinconsensus_la_CPPFLAGS = $(AM_CPPFLAGS) -I$(builddir)/obj $(libsecp256k1_CFLAGS) -DBUILD_BITCOIN_INTERNAL libbitcoinconsensus_la_CXXFLAGS = $(AM_CXXFLAGS) $(PIE_FLAGS) endif diff --git a/src/Makefile.test.include b/src/Makefile.test.include index b610dabd07..cf79094fb9 100644 --- a/src/Makefile.test.include +++ b/src/Makefile.test.include @@ -392,7 +392,9 @@ if ENABLE_BENCH $(BENCH_BINARY) -sanity-check -priority-level=high endif endif +if EMBEDDED_LIBSECP256K1 $(AM_V_at)$(MAKE) $(AM_MAKEFLAGS) -C secp256k1 check +endif if ENABLE_TESTS UNIVALUE_TESTS = univalue/test/object univalue/test/unitester