diff --git a/configure.ac b/configure.ac index 7be76833c..6dd1bf210 100644 --- a/configure.ac +++ b/configure.ac @@ -88,6 +88,12 @@ AC_ARG_ENABLE([mining], [enable_mining=$enableval], [enable_mining=yes]) +AC_ARG_ENABLE([rust], + [AS_HELP_STRING([--enable-rust], + [enable rust (default is yes)])], + [enable_rust=$enableval], + [enable_rust=yes]) + AC_ARG_WITH([miniupnpc], [AS_HELP_STRING([--with-miniupnpc], [enable UPNP (default is yes if libminiupnpc is found)])], @@ -751,7 +757,12 @@ 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]) -LIBZCASH_LIBS="-lrustzcash -lsnark -lgmp -lgmpxx -lboost_system-mt -lcrypto -lsodium -fopenmp" +RUST_LIBS="" +if test x$enable_rust != xno; then + RUST_LIBS="-lrustzcash" +fi + +LIBZCASH_LIBS="-lsnark -lgmp -lgmpxx -lboost_system-mt -lcrypto -lsodium -fopenmp $RUST_LIBS" CXXFLAGS_TEMP="$CXXFLAGS" LIBS_TEMP="$LIBS" @@ -819,6 +830,16 @@ else AC_MSG_RESULT(no) fi +dnl enable rust +AC_MSG_CHECKING([if rust should be enabled]) +if test x$enable_rust != xno; then + AC_MSG_RESULT(yes) + AC_DEFINE(ENABLE_RUST, 1, [Define to 1 to enable Rust language dependent functions]) + +else + AC_MSG_RESULT(no) +fi + dnl enable upnp support AC_MSG_CHECKING([whether to build with support for UPnP]) if test x$have_miniupnpc = xno; then @@ -873,6 +894,7 @@ AM_CONDITIONAL([BUILD_DARWIN], [test x$BUILD_OS = xdarwin]) AM_CONDITIONAL([TARGET_WINDOWS], [test x$TARGET_OS = xwindows]) AM_CONDITIONAL([ENABLE_WALLET],[test x$enable_wallet = xyes]) AM_CONDITIONAL([ENABLE_MINING],[test x$enable_mining = xyes]) +AM_CONDITIONAL([ENABLE_RUST],[test x$enable_rust = xyes]) AM_CONDITIONAL([ENABLE_TESTS],[test x$BUILD_TEST = xyes]) AM_CONDITIONAL([USE_LCOV],[test x$use_lcov = xyes]) AM_CONDITIONAL([USE_COMPARISON_TOOL],[test x$use_comparison_tool != xno]) diff --git a/depends/Makefile b/depends/Makefile index 0e9e880ae..d23002a5e 100644 --- a/depends/Makefile +++ b/depends/Makefile @@ -72,10 +72,11 @@ include builders/$(build_os).mk include builders/default.mk include packages/packages.mk +rust_packages_$(NO_RUST) = $(rust_packages) wallet_packages_$(NO_WALLET) = $(wallet_packages) upnp_packages_$(NO_UPNP) = $(upnp_packages) -packages += $($(host_arch)_$(host_os)_packages) $($(host_os)_packages) $(wallet_packages_) $(upnp_packages_) +packages += $($(host_arch)_$(host_os)_packages) $($(host_os)_packages) $(rust_packages_) $(wallet_packages_) $(upnp_packages_) native_packages += $($(host_arch)_$(host_os)_native_packages) $($(host_os)_native_packages) all_packages = $(packages) $(native_packages) diff --git a/depends/packages/packages.mk b/depends/packages/packages.mk index 7710c0f47..6b47eb650 100644 --- a/depends/packages/packages.mk +++ b/depends/packages/packages.mk @@ -1,4 +1,5 @@ -zcash_packages := libsnark libgmp libsodium rust librustzcash +rust_packages := rust librustzcash +zcash_packages := libsnark libgmp libsodium packages := boost openssl zeromq $(zcash_packages) googletest googlemock native_packages := native_ccache diff --git a/src/pow.cpp b/src/pow.cpp index 298b77fd0..83e83e9e9 100644 --- a/src/pow.cpp +++ b/src/pow.cpp @@ -5,8 +5,6 @@ #include "pow.h" -#include "librustzcash.h" - #include "arith_uint256.h" #include "chain.h" #include "chainparams.h" @@ -18,6 +16,10 @@ #include "sodium.h" +#ifdef ENABLE_RUST +#include "librustzcash.h" +#endif // ENABLE_RUST + unsigned int GetNextWorkRequired(const CBlockIndex* pindexLast, const CBlockHeader *pblock, const Consensus::Params& params) { unsigned int nProofOfWorkLimit = UintToArith256(params.powLimit).GetCompact(); @@ -98,11 +100,13 @@ bool CheckEquihashSolution(const CBlockHeader *pblock, const CChainParams& param // H(I||V||... crypto_generichash_blake2b_update(&state, (unsigned char*)&ss[0], ss.size()); + #ifdef ENABLE_RUST // Ensure that our Rust interactions are working in production builds. This is // temporary and should be removed. { assert(librustzcash_xor(0x0f0f0f0f0f0f0f0f, 0x1111111111111111) == 0x1e1e1e1e1e1e1e1e); } + #endif // ENABLE_RUST bool isValid; EhIsValidSolution(n, k, state, pblock->nSolution, isValid); diff --git a/zcutil/build.sh b/zcutil/build.sh index 5b2030b52..2e3837f3a 100755 --- a/zcutil/build.sh +++ b/zcutil/build.sh @@ -33,7 +33,7 @@ Usage: $0 --help Show this help message and exit. -$0 [ --enable-lcov || --disable-tests ] [ --disable-mining ] [ MAKEARGS... ] +$0 [ --enable-lcov || --disable-tests ] [ --disable-mining ] [ --disable-rust ] [ MAKEARGS... ] Build Zcash and most of its transitive dependencies from source. MAKEARGS are applied to both dependencies and Zcash itself. @@ -43,6 +43,9 @@ $0 [ --enable-lcov || --disable-tests ] [ --disable-mining ] [ MAKEARGS... ] If --disable-mining is passed, Zcash is configured to not build any mining code. It must be passed after the test arguments, if present. + + If --disable-rust is passed, Zcash is configured to not build any Rust language + assets. It must be passed after mining/test arguments, if present. EOF exit 0 fi @@ -73,9 +76,17 @@ then shift fi +# If --disable-rust is the next argument, disable Rust code: +RUST_ARG='' +if [ "x${1:-}" = 'x--disable-rust' ] +then + RUST_ARG='--enable-rust=no' + shift +fi + PREFIX="$(pwd)/depends/$BUILD/" -HOST="$HOST" BUILD="$BUILD" "$MAKE" "$@" -C ./depends/ V=1 +HOST="$HOST" BUILD="$BUILD" NO_RUST="$RUST_ARG" "$MAKE" "$@" -C ./depends/ V=1 ./autogen.sh -CC="$CC" CXX="$CXX" ./configure --prefix="${PREFIX}" --host="$HOST" --build="$BUILD" "$HARDENING_ARG" "$LCOV_ARG" "$TEST_ARG" "$MINING_ARG" CXXFLAGS='-fwrapv -fno-strict-aliasing -Werror -g' +CC="$CC" CXX="$CXX" ./configure --prefix="${PREFIX}" --host="$HOST" --build="$BUILD" "$RUST_ARG" "$HARDENING_ARG" "$LCOV_ARG" "$TEST_ARG" "$MINING_ARG" CXXFLAGS='-fwrapv -fno-strict-aliasing -Werror -g' "$MAKE" "$@" V=1