From e463edc1226020292183848d404ed28abf399645 Mon Sep 17 00:00:00 2001 From: Sean Bowe Date: Mon, 15 Feb 2016 15:27:15 -0700 Subject: [PATCH] Build and link libzerocash. --- configure.ac | 19 ++---------- src/Makefile.am | 63 +++++++++++++++++++++++++++++++++++---- src/Makefile.test.include | 2 +- 3 files changed, 60 insertions(+), 24 deletions(-) diff --git a/configure.ac b/configure.ac index 2c8bf75c5..b21a4c7cb 100644 --- a/configure.ac +++ b/configure.ac @@ -717,23 +717,7 @@ CPPFLAGS="-I$LIBSNARK_INCDIR $CPPFLAGS" AC_CHECK_HEADER([libsnark/gadgetlib1/gadget.hpp],,AC_MSG_ERROR(libsnark headers missing)) AC_CHECK_LIB([snark],[main],LIBSNARK_LIBS=-lsnark, [AC_MSG_ERROR(libsnark missing)], [-lgmpxx]) -# Abuse the ugly libsnark hack above further to get the libzerocash directory -[LIBZEROCASH_INCDIR=$(echo "$LIBSNARK_INCDIR" | sed 's,libsnark$,libzerocash,')] -if test -d "$LIBZEROCASH_INCDIR"; then - echo "Found libzerocash include directory: $LIBZEROCASH_INCDIR" -else - AC_MSG_ERROR(libzerocash include directory not found) -fi - -CPPFLAGS="-I$LIBZEROCASH_INCDIR $CPPFLAGS" - -# libzerocash depends on headers in ./src/, so for the following -# AC_CHECK_HEADER, that has to be on the include path list. -CPPFLAGS_TEMP="$CPPFLAGS" -CPPFLAGS="-I ./src/ $CPPFLAGS" -AC_CHECK_HEADER([libzerocash/libzerocash/Zerocash.h],,AC_MSG_ERROR(libzerocash headers missing)) -AC_CHECK_LIB([zerocash], [main],LIBZEROCASH_LIBS="-lzerocash -lsnark -lcryptopp -lgmp -lgmpxx -lboost_system-mt -lcrypto", [AC_MSG_ERROR(libzerocash missing)], [-lsnark -lcryptopp -lgmp -lgmpxx -lboost_system-mt -lcrypto]) -CPPFLAGS="$CPPFLAGS_TEMP" +LIBZEROCASH_LIBS="-lsnark -lcryptopp -lgmp -lgmpxx -lboost_system-mt -lcrypto" AC_CHECK_LIB([crypto],[RAND_egd],[],[ AC_ARG_WITH([libressl], @@ -782,6 +766,7 @@ if test x$build_bitcoin_libs = xyes; then AC_DEFINE(HAVE_CONSENSUS_LIB, 1, [Define this symbol if the consensus lib has been built]) AC_CONFIG_FILES([libbitcoinconsensus.pc:libbitcoinconsensus.pc.in]) fi + AC_MSG_RESULT($build_bitcoin_libs) AC_LANG_POP diff --git a/src/Makefile.am b/src/Makefile.am index 7aade4ea3..b03296957 100644 --- a/src/Makefile.am +++ b/src/Makefile.am @@ -31,6 +31,7 @@ LIBBITCOIN_CRYPTO=crypto/libbitcoin_crypto.a LIBBITCOIN_UNIVALUE=univalue/libbitcoin_univalue.a LIBBITCOINQT=qt/libbitcoinqt.a LIBSECP256K1=secp256k1/libsecp256k1.la +LIBZEROCASH=libzerocash.a $(LIBSECP256K1): $(wildcard secp256k1/src/*) $(wildcard secp256k1/include/*) $(AM_V_at)$(MAKE) $(AM_MAKEFLAGS) -C $(@D) $(@F) @@ -43,7 +44,8 @@ EXTRA_LIBRARIES = \ libbitcoin_common.a \ univalue/libbitcoin_univalue.a \ libbitcoin_server.a \ - libbitcoin_cli.a + libbitcoin_cli.a \ + libzerocash.a if ENABLE_WALLET BITCOIN_INCLUDES += $(BDB_CPPFLAGS) EXTRA_LIBRARIES += libbitcoin_wallet.a @@ -67,6 +69,27 @@ if BUILD_BITCOIN_UTILS bin_PROGRAMS += zcash-cli bitcoin-tx endif +LIBZEROCASH_H = \ + zerocash/Address.h \ + zerocash/CoinCommitment.h \ + zerocash/Coin.h \ + zerocash/IncrementalMerkleTree.h \ + zerocash/MintTransaction.h \ + zerocash/PourInput.h \ + zerocash/PourOutput.h \ + zerocash/PourProver.h \ + zerocash/PourTransaction.h \ + zerocash/Zerocash.h \ + zerocash/ZerocashParams.h \ + zerocash/zerocash_pour_params.hpp \ + zerocash/utils/sha256.h \ + zerocash/utils/util.h + +# zerocash/zerocash_pour_gadget.hpp +# zerocash/zerocash_pour_gadget.tcc +# zerocash/zerocash_pour_ppzksnark.hpp +# zerocash/zerocash_pour_ppzksnark.tcc + .PHONY: FORCE # bitcoin core # BITCOIN_CORE_H = \ @@ -202,7 +225,8 @@ libbitcoin_server_a_SOURCES = \ txmempool.cpp \ validationinterface.cpp \ $(JSON_H) \ - $(BITCOIN_CORE_H) + $(BITCOIN_CORE_H) \ + $(LIBZEROCASH_H) # wallet: shared between bitcoind and bitcoin-qt, but only linked # when wallet enabled @@ -215,7 +239,8 @@ libbitcoin_wallet_a_SOURCES = \ wallet/wallet.cpp \ wallet/wallet_ismine.cpp \ wallet/walletdb.cpp \ - $(BITCOIN_CORE_H) + $(BITCOIN_CORE_H) \ + $(LIBZEROCASH_H) # crypto primitives library crypto_libbitcoin_crypto_a_CPPFLAGS = $(BITCOIN_CONFIG_INCLUDES) @@ -269,7 +294,8 @@ libbitcoin_common_a_SOURCES = \ script/script_error.cpp \ script/sign.cpp \ script/standard.cpp \ - $(BITCOIN_CORE_H) + $(BITCOIN_CORE_H) \ + $(LIBZEROCASH_H) # util: shared between all executables. # This library *must* be included to make sure that the glibc @@ -291,7 +317,8 @@ libbitcoin_util_a_SOURCES = \ utilmoneystr.cpp \ utilstrencodings.cpp \ utiltime.cpp \ - $(BITCOIN_CORE_H) + $(BITCOIN_CORE_H) \ + $(LIBZEROCASH_H) if GLIBC_BACK_COMPAT libbitcoin_util_a_SOURCES += compat/glibc_compat.cpp @@ -301,7 +328,8 @@ endif libbitcoin_cli_a_CPPFLAGS = $(BITCOIN_INCLUDES) libbitcoin_cli_a_SOURCES = \ rpcclient.cpp \ - $(BITCOIN_CORE_H) + $(BITCOIN_CORE_H) \ + $(LIBZEROCASH_H) nodist_libbitcoin_util_a_SOURCES = $(srcdir)/obj/build.h # @@ -321,6 +349,7 @@ zcashd_LDADD = \ $(LIBBITCOIN_UNIVALUE) \ $(LIBBITCOIN_UTIL) \ $(LIBBITCOIN_CRYPTO) \ + $(LIBZEROCASH) \ $(LIBLEVELDB) \ $(LIBMEMENV) \ $(LIBSECP256K1) @@ -335,6 +364,7 @@ zcashd_LDADD += \ $(SSL_LIBS) \ $(CRYPTO_LIBS) \ $(MINIUPNPC_LIBS) \ + $(LIBZEROCASH) \ $(LIBZEROCASH_LIBS) # @@ -353,6 +383,7 @@ zcash_cli_LDADD = \ $(BOOST_LIBS) \ $(SSL_LIBS) \ $(CRYPTO_LIBS) \ + $(LIBZEROCASH) \ $(LIBZEROCASH_LIBS) # @@ -372,11 +403,31 @@ bitcoin_tx_LDADD = \ $(LIBBITCOIN_UTIL) \ $(LIBBITCOIN_CRYPTO) \ $(LIBSECP256K1) \ + $(LIBZEROCASH) \ $(LIBZEROCASH_LIBS) bitcoin_tx_LDADD += $(BOOST_LIBS) $(CRYPTO_LIBS) # +# zerocash protocol primitives # +libzerocash_a_SOURCES = \ + zerocash/Address.cpp \ + zerocash/CoinCommitment.cpp \ + zerocash/Coin.cpp \ + zerocash/IncrementalMerkleTree.cpp \ + zerocash/MintTransaction.cpp \ + zerocash/PourInput.cpp \ + zerocash/PourOutput.cpp \ + zerocash/PourProver.cpp \ + zerocash/PourTransaction.cpp \ + zerocash/ZerocashParams.cpp \ + zerocash/utils/sha256.cpp \ + zerocash/utils/util.cpp + +#libzerocash_a_LIBADD = $(LIBZEROCASH_LIBS) +libzerocash_a_CPPFLAGS = -fPIC -DCURVE_ALT_BN128 -DBOOST_SPIRIT_THREADSAFE -DHAVE_BUILD_INFO -D__STDC_FORMAT_MACROS -U_FORTIFY_SOURCE -D_FORTIFY_SOURCE=2 -std=c++11 -pipe -O2 -O0 -g -Wstack-protector -fstack-protector-all -fPIE -fvisibility=hidden -DSTATIC $(BITCOIN_INCLUDES) +#libzerocash_a_CPPFLAGS = -std=c++11 -fPIC -I$(builddir)/obj -DCURVE_ALT_BN128 -DSTATIC $(BITCOIN_INCLUDES) + # bitcoinconsensus library # if BUILD_BITCOIN_LIBS include_HEADERS = script/bitcoinconsensus.h diff --git a/src/Makefile.test.include b/src/Makefile.test.include index 64d984e9e..825e7130d 100644 --- a/src/Makefile.test.include +++ b/src/Makefile.test.include @@ -88,7 +88,7 @@ endif test_test_bitcoin_SOURCES = $(BITCOIN_TESTS) $(JSON_TEST_FILES) $(RAW_TEST_FILES) test_test_bitcoin_CPPFLAGS = $(BITCOIN_INCLUDES) -I$(builddir)/test/ $(TESTDEFS) test_test_bitcoin_LDADD = $(LIBBITCOIN_SERVER) $(LIBBITCOIN_CLI) $(LIBBITCOIN_COMMON) $(LIBBITCOIN_UTIL) $(LIBBITCOIN_CRYPTO) $(LIBBITCOIN_UNIVALUE) $(LIBLEVELDB) $(LIBMEMENV) \ - $(BOOST_LIBS) $(BOOST_UNIT_TEST_FRAMEWORK_LIB) $(LIBSECP256K1) $(LIBZEROCASH_LIBS) + $(BOOST_LIBS) $(BOOST_UNIT_TEST_FRAMEWORK_LIB) $(LIBSECP256K1) $(LIBZEROCASH) $(LIBZEROCASH_LIBS) if ENABLE_WALLET test_test_bitcoin_LDADD += $(LIBBITCOIN_WALLET) endif