From 2c6183654228954c6e36bfb10b6d350adace3b2f Mon Sep 17 00:00:00 2001 From: Prasanna Loganathar Date: Sun, 18 Jun 2023 10:02:57 +0800 Subject: [PATCH 01/14] Refine build process --- Makefile.am | 105 ++---------------------------------- configure.ac | 105 +++++++++++------------------------- lib/Makefile.am | 88 ++++++++++++------------------ lib/ain-rs-exports/build.rs | 2 +- src/Makefile.am | 13 +++-- 5 files changed, 76 insertions(+), 237 deletions(-) diff --git a/Makefile.am b/Makefile.am index df6fb6b1f99..5d4c35e88f1 100644 --- a/Makefile.am +++ b/Makefile.am @@ -52,11 +52,6 @@ DIST_SHARE = \ BIN_CHECKS=$(top_srcdir)/contrib/devtools/symbol-check.py \ $(top_srcdir)/contrib/devtools/security-check.py -COVERAGE_INFO = baseline.info \ - test_defi_filtered.info total_coverage.info \ - baseline_filtered.info functional_test.info functional_test_filtered.info \ - test_defi_coverage.info test_defi.info - dist-hook: -$(GIT) archive --format=tar HEAD -- src/clientversion.cpp | $(AMTAR) -C $(top_distdir) -xf - @@ -69,51 +64,6 @@ $(DEFI_CLI_BIN): FORCE $(DEFI_TX_BIN): FORCE $(MAKE) -C src $(@F) -if USE_LCOV -LCOV_FILTER_PATTERN=-p "/usr/include/" -p "/usr/lib/" -p "src/leveldb/" -p "src/bench/" -p "src/univalue" -p "src/crypto/ctaes" -p "src/secp256k1" - -baseline.info: - $(LCOV) -c -i -d $(abs_builddir)/src -o $@ - -baseline_filtered.info: baseline.info - $(abs_builddir)/contrib/filter-lcov.py $(LCOV_FILTER_PATTERN) $< $@ - $(LCOV) -a $@ $(LCOV_OPTS) -o $@ - -test_defi.info: baseline_filtered.info - $(MAKE) -C src/ check - $(LCOV) -c $(LCOV_OPTS) -d $(abs_builddir)/src -t test_defi -o $@ - $(LCOV) -z $(LCOV_OPTS) -d $(abs_builddir)/src - -test_defi_filtered.info: test_defi.info - $(abs_builddir)/contrib/filter-lcov.py $(LCOV_FILTER_PATTERN) $< $@ - $(LCOV) -a $@ $(LCOV_OPTS) -o $@ - -functional_test.info: test_defi_filtered.info - @TIMEOUT=15 test/functional/test_runner.py $(EXTENDED_FUNCTIONAL_TESTS) - $(LCOV) -c $(LCOV_OPTS) -d $(abs_builddir)/src --t functional-tests -o $@ - $(LCOV) -z $(LCOV_OPTS) -d $(abs_builddir)/src - -functional_test_filtered.info: functional_test.info - $(abs_builddir)/contrib/filter-lcov.py $(LCOV_FILTER_PATTERN) $< $@ - $(LCOV) -a $@ $(LCOV_OPTS) -o $@ - -test_defi_coverage.info: baseline_filtered.info test_defi_filtered.info - $(LCOV) -a $(LCOV_OPTS) baseline_filtered.info -a test_defi_filtered.info -o $@ - -total_coverage.info: test_defi_filtered.info functional_test_filtered.info - $(LCOV) -a $(LCOV_OPTS) baseline_filtered.info -a test_defi_filtered.info -a functional_test_filtered.info -o $@ | $(GREP) "\%" | $(AWK) '{ print substr($$3,2,50) "/" $$5 }' > coverage_percent.txt - -test_defi.coverage/.dirstamp: test_defi_coverage.info - $(GENHTML) -s $(LCOV_OPTS) $< -o $(@D) - @touch $@ - -total.coverage/.dirstamp: total_coverage.info - $(GENHTML) -s $(LCOV_OPTS) $< -o $(@D) - @touch $@ - -cov: test_defi.coverage/.dirstamp total.coverage/.dirstamp - -endif dist_noinst_SCRIPTS = autogen.sh @@ -125,61 +75,12 @@ EXTRA_DIST += \ EXTRA_DIST += \ test/util/defi-util-test.py \ - test/util/data/defi-util-test.json \ - test/util/data/blanktxv1.hex \ - test/util/data/blanktxv1.json \ - test/util/data/blanktxv2.hex \ - test/util/data/blanktxv2.json \ - test/util/data/tt-delin1-out.hex \ - test/util/data/tt-delin1-out.json \ - test/util/data/tt-delout1-out.hex \ - test/util/data/tt-delout1-out.json \ - test/util/data/tt-locktime317000-out.hex \ - test/util/data/tt-locktime317000-out.json \ - test/util/data/tx394b54bb.hex \ - test/util/data/txcreate1.hex \ - test/util/data/txcreate1.json \ - test/util/data/txcreate2.hex \ - test/util/data/txcreate2.json \ - test/util/data/txcreatedata1.hex \ - test/util/data/txcreatedata1.json \ - test/util/data/txcreatedata2.hex \ - test/util/data/txcreatedata2.json \ - test/util/data/txcreatedata_seq0.hex \ - test/util/data/txcreatedata_seq0.json \ - test/util/data/txcreatedata_seq1.hex \ - test/util/data/txcreatedata_seq1.json \ - test/util/data/txcreatemultisig1.hex \ - test/util/data/txcreatemultisig1.json \ - test/util/data/txcreatemultisig2.hex \ - test/util/data/txcreatemultisig2.json \ - test/util/data/txcreatemultisig3.hex \ - test/util/data/txcreatemultisig3.json \ - test/util/data/txcreatemultisig4.hex \ - test/util/data/txcreatemultisig4.json \ - test/util/data/txcreatemultisig5.json \ - test/util/data/txcreateoutpubkey1.hex \ - test/util/data/txcreateoutpubkey1.json \ - test/util/data/txcreateoutpubkey2.hex \ - test/util/data/txcreateoutpubkey2.json \ - test/util/data/txcreateoutpubkey3.hex \ - test/util/data/txcreateoutpubkey3.json \ - test/util/data/txcreatescript1.hex \ - test/util/data/txcreatescript1.json \ - test/util/data/txcreatescript2.hex \ - test/util/data/txcreatescript2.json \ - test/util/data/txcreatescript3.hex \ - test/util/data/txcreatescript3.json \ - test/util/data/txcreatescript4.hex \ - test/util/data/txcreatescript4.json \ - test/util/data/txcreatesignv1.hex \ - test/util/data/txcreatesignv1.json \ - test/util/data/txcreatesignv2.hex \ - test/util/rpcauth-test.py + test/util/rpcauth-test.py \ + $(wildcard test/util/data/*) CLEANFILES = -.INTERMEDIATE: $(COVERAGE_INFO) +.INTERMEDIATE: DISTCHECK_CONFIGURE_FLAGS = diff --git a/configure.ac b/configure.ac index 02190c0185e..0aa88263102 100644 --- a/configure.ac +++ b/configure.ac @@ -83,15 +83,11 @@ dnl Check/return PATH for base programs. AC_PATH_TOOL(AR, ar) AC_PATH_TOOL(RANLIB, ranlib) AC_PATH_TOOL(STRIP, strip) -AC_PATH_TOOL(GCOV, gcov) -AC_PATH_PROG(LCOV, lcov) dnl Python 3.5 is specified in .python-version and should be used if available, see doc/dependencies.md AC_PATH_PROGS([PYTHON], [python3.5 python3.6 python3.7 python3.8 python3 python]) -AC_PATH_PROG(GENHTML, genhtml) AC_PATH_PROG([GIT], [git]) AC_PATH_PROG(CCACHE,ccache) -AC_PATH_PROG(XGETTEXT,xgettext) -AC_PATH_PROG(HEXDUMP,hexdump) +AC_PATH_PROG(HEXDUMP, hexdump) AC_PATH_TOOL(READELF, readelf) AC_PATH_TOOL(CPPFILT, c++filt) AC_PATH_TOOL(OBJCOPY, objcopy) @@ -144,7 +140,7 @@ AC_ARG_ENABLE(bench, [use_bench=yes]) AC_ARG_ENABLE([extended-functional-tests], - AS_HELP_STRING([--enable-extended-functional-tests],[enable expensive functional tests when using lcov (default no)]), + AS_HELP_STRING([--enable-extended-functional-tests],[enable expensive functional tests]), [use_extended_functional_tests=$enableval], [use_extended_functional_tests=no]) @@ -172,18 +168,6 @@ AC_ARG_ENABLE([ccache], [use_ccache=$enableval], [use_ccache=auto]) -AC_ARG_ENABLE([lcov], - [AS_HELP_STRING([--enable-lcov], - [enable lcov testing (default is no)])], - [use_lcov=$enableval], - [use_lcov=no]) - -AC_ARG_ENABLE([lcov-branch-coverage], - [AS_HELP_STRING([--enable-lcov-branch-coverage], - [enable lcov testing branch coverage (default is no)])], - [use_lcov_branch=yes], - [use_lcov_branch=no]) - AC_ARG_ENABLE([glibc-back-compat], [AS_HELP_STRING([--enable-glibc-back-compat], [enable backwards compatibility with glibc])], @@ -610,32 +594,6 @@ if test x$use_extended_functional_tests != xno; then AC_SUBST(EXTENDED_FUNCTIONAL_TESTS, --extended) fi -if test x$use_lcov = xyes; then - if test x$LCOV = x; then - AC_MSG_ERROR("lcov testing requested but lcov not found") - fi - if test x$GCOV = x; then - AC_MSG_ERROR("lcov testing requested but gcov not found") - fi - if test x$PYTHON = x; then - AC_MSG_ERROR("lcov testing requested but python not found") - fi - if test x$GENHTML = x; then - AC_MSG_ERROR("lcov testing requested but genhtml not found") - fi - LCOV="$LCOV --gcov-tool=$GCOV" - AX_CHECK_LINK_FLAG([[--coverage]], [LDFLAGS="$LDFLAGS --coverage"], - [AC_MSG_ERROR("lcov testing requested but --coverage linker flag does not work")]) - AX_CHECK_COMPILE_FLAG([--coverage],[CXXFLAGS="$CXXFLAGS --coverage"], - [AC_MSG_ERROR("lcov testing requested but --coverage flag does not work")]) - AC_DEFINE(USE_COVERAGE, 1, [Define this symbol if coverage is enabled]) - CXXFLAGS="$CXXFLAGS -Og" -fi - -if test x$use_lcov_branch != xno; then - AC_SUBST(LCOV_OPTS, "$LCOV_OPTS --rc lcov_branch_coverage=1") -fi - dnl Check for endianness AC_C_BIGENDIAN @@ -1335,7 +1293,6 @@ AM_CONDITIONAL([ENABLE_WALLET],[test x$enable_wallet = xyes]) AM_CONDITIONAL([ENABLE_TESTS],[test x$BUILD_TEST = xyes]) AM_CONDITIONAL([ENABLE_FUZZ],[test x$enable_fuzz = xyes]) AM_CONDITIONAL([ENABLE_BENCH],[test x$use_bench = xno]) -AM_CONDITIONAL([USE_LCOV],[test x$use_lcov = xyes]) AM_CONDITIONAL([GLIBC_BACK_COMPAT],[test x$use_glibc_compat = xyes]) AM_CONDITIONAL([HARDEN],[test x$use_hardening = xyes]) AM_CONDITIONAL([ENABLE_SSE42],[test x$enable_sse42 = xyes]) @@ -1412,17 +1369,17 @@ AC_SUBST(HAVE_STRONG_GETAUXVAL) AC_SUBST(PROTOC) AC_SUBST(PROTOC_INCLUDE_DIR) -dnl If the host and build triplets are the same, we don't -dnl keep this empty +dnl If the host and build triplets are the same, we keep this empty if test x$host = x$build; then - RUST_TARGET= + CARGO_BUILD_TARGET= else - RUST_TARGET=`TARGET="$host" $ac_abs_confdir/make.sh get_rust_target` + CARGO_BUILD_TARGET=`TARGET="$host" $ac_abs_confdir/make.sh get_rust_target` if test $? != 0; then AC_MSG_ERROR("unsupported host target") fi fi -AC_SUBST(RUST_TARGET) +AC_SUBST(CARGO_BUILD_TARGET) +AM_CONDITIONAL([HAVE_CARGO_BUILD_TARGET], [test x$CARGO_BUILD_TARGET != x]) AC_CONFIG_FILES([Makefile src/Makefile lib/Makefile test/config.ini]) AC_CONFIG_FILES([contrib/devtools/split-debug.sh],[chmod +x contrib/devtools/split-debug.sh]) @@ -1485,32 +1442,32 @@ esac echo echo "Options used to compile and link:" -echo " with wallet = $enable_wallet" -echo " with zmq = $use_zmq" -echo " with test = $use_tests" +echo " with wallet = $enable_wallet" +echo " with zmq = $use_zmq" +echo " with test = $use_tests" if test x$use_tests != xno; then - echo " with prop = $enable_property_tests" - echo " with fuzz = $enable_fuzz" + echo " with prop = $enable_property_tests" + echo " with fuzz = $enable_fuzz" fi -echo " with bench = $use_bench" -echo " with upnp = $use_upnp" -echo " use asm = $use_asm" -echo " sanitizers = $use_sanitizers" -echo " debug enabled = $enable_debug" -echo " gprof enabled = $enable_gprof" -echo " werror = $enable_werror" +echo " with bench = $use_bench" +echo " with upnp = $use_upnp" +echo " use asm = $use_asm" +echo " sanitizers = $use_sanitizers" +echo " debug enabled = $enable_debug" +echo " gprof enabled = $enable_gprof" +echo " werror = $enable_werror" echo -echo " target os = $TARGET_OS" -echo " build os = $BUILD_OS" +echo " target os = $TARGET_OS" +echo " build os = $BUILD_OS" echo -echo " CC = $CC" -echo " CFLAGS = $CFLAGS" -echo " CPPFLAGS = $DEBUG_CPPFLAGS $HARDENED_CPPFLAGS $CPPFLAGS" -echo " CXX = $CXX" -echo " CXXFLAGS = $DEBUG_CXXFLAGS $HARDENED_CXXFLAGS $WARN_CXXFLAGS $NOWARN_CXXFLAGS $ERROR_CXXFLAGS $GPROF_CXXFLAGS $CXXFLAGS" -echo " LDFLAGS = $PTHREAD_CFLAGS $HARDENED_LDFLAGS $GPROF_LDFLAGS $LDFLAGS" -echo " ARFLAGS = $ARFLAGS" -echo " CARGO = $CARGO" -echo " ENABLE_DEBUG = $ENABLE_DEBUG" -echo " RUST_TARGET = $RUST_TARGET" +echo " CC = $CC" +echo " CFLAGS = $CFLAGS" +echo " CPPFLAGS = $DEBUG_CPPFLAGS $HARDENED_CPPFLAGS $CPPFLAGS" +echo " CXX = $CXX" +echo " CXXFLAGS = $DEBUG_CXXFLAGS $HARDENED_CXXFLAGS $WARN_CXXFLAGS $NOWARN_CXXFLAGS $ERROR_CXXFLAGS $GPROF_CXXFLAGS $CXXFLAGS" +echo " LDFLAGS = $PTHREAD_CFLAGS $HARDENED_LDFLAGS $GPROF_LDFLAGS $LDFLAGS" +echo " ARFLAGS = $ARFLAGS" +echo " CARGO = $CARGO" +echo " CARGO_BUILD_TARGET = $CARGO_BUILD_TARGET" +echo " ENABLE_DEBUG = $ENABLE_DEBUG" echo diff --git a/lib/Makefile.am b/lib/Makefile.am index 6ba80834aab..80481c7ed16 100644 --- a/lib/Makefile.am +++ b/lib/Makefile.am @@ -1,82 +1,60 @@ CARGO := $(if $(CARGO),$(CARGO),cargo) -# RUST_TARGET is set from configure. Can be empty. If it is we skip -# setting target. This is done to emulate cargo's default behavior where -# it puts things into `target/` directly where no `--target ` -# is set. If set, it uses `target/` and there's no way to force -# cargo to always just stick to one. -# -# If it's empty, this collapses dir for SPECIFIC_TARGET_DIR to retain -# cargo's behavior -TARGET = $(if $(RUST_TARGET),$(RUST_TARGET),) - -# This is set from configure -ENABLE_DEBUG ?= -# We use DEBUG as well, since that's the more conventional -# setup. Either of them set will result in debug builds +# ENABLE_DEBUG is set from configure. We respect DEBUG too if set DEBUG ?= $(ENABLE_DEBUG) -TARGET_DIR ?= $(abs_builddir)/target -SPECIFIC_TARGET_DIR = $(TARGET_DIR)/$(TARGET)/$(if $(DEBUG),debug,release) +# CARGO_BUILD_TARGET and HAVE_CARGO_BUILD_TARGET is set from configure. +# Can be empty. If empty, we skip export it. Otherwise we do. +# +# We do this to emulate cargo's default behavior (--target=) where +# it puts things into `target/` directly when not given or `target/`. +# There's no way to force cargo to a stick to one behavior at the moment. +# +# Note: We use HAVE checks due to automake ifeq/ifneq not working outside rules +if HAVE_CARGO_BUILD_TARGET +export CARGO_BUILD_TARGET := $(CARGO_BUILD_TARGET) +endif + +export CARGO_TARGET_DIR ?= $(abs_builddir)/target CARGO_MANIFEST_PATH = $(abs_srcdir)/Cargo.toml +SPECIFIC_TARGET_DIR = $(CARGO_TARGET_DIR)/$(CARGO_BUILD_TARGET)/$(if $(DEBUG),debug,release) + +CARGO_MANIFEST_ARG = --manifest-path "$(CARGO_MANIFEST_PATH)" +CARGO_BUILD_TYPE_ARG = $(if $(DEBUG),,--release) + +# Export compiler flags +export CC CXX CFLAGS CXXFLAGS CPPFLAGS LDFLAGS AR NM RANLIB +# Export protoc vars +export PROTOC PROTOC_INCLUDE_DIR -# We're resetting DESTDIR so that nested autotools based builds -# don't end up in unexpected places (Currently protobuf-src is affected) +# Ensure nested autotools calls by cargo don't end up in unexpected places +unexport DESTDIR .PHONY: all: build .PHONY: build: - DESTDIR= TARGET_DIR="$(TARGET_DIR)" \ - CC="$(CC)" CXX="$(CXX)" \ - CFLAGS="$(CFLAGS)" CXXFLAGS="$(CXXFLAGS)" CPPFLAGS="$(CPPFLAGS)" \ - LDFLAGS="$(LDFLAGS)" AR="$(AR)" NM="$(NM)" RANLIB="$(RANLIB)" \ - PROTOC="$(PROTOC)" PROTOC_INCLUDE_DIR="$(PROTOC_INCLUDE_DIR)" \ - $(CARGO) build \ - --manifest-path "$(CARGO_MANIFEST_PATH)" \ - --target-dir "$(TARGET_DIR)" \ - $(if $(DEBUG),,--release) \ - $(if $(TARGET),--target $(TARGET),) && \ - cp $(SPECIFIC_TARGET_DIR)/libain_rs_exports.a $(TARGET_DIR)/lib/ + $(CARGO) build $(CARGO_MANIFEST_ARG) $(CARGO_BUILD_TYPE_ARG) && \ + cp $(SPECIFIC_TARGET_DIR)/libain_rs_exports.a $(CARGO_TARGET_DIR)/lib/ .PHONY: check: - DESTDIR= TARGET_DIR="$(TARGET_DIR)" \ - CC="$(CC)" CXX="$(CXX)" \ - CFLAGS="$(CFLAGS)" CXXFLAGS="$(CXXFLAGS)" CPPFLAGS="$(CPPFLAGS)" \ - LDFLAGS="$(LDFLAGS)" AR="$(AR)" NM="$(NM)" RANLIB="$(RANLIB)" \ - PROTOC="$(PROTOC)" PROTOC_INCLUDE_DIR="$(PROTOC_INCLUDE_DIR)" \ - $(CARGO) test \ - --manifest-path "$(CARGO_MANIFEST_PATH)" \ - --target-dir "$(TARGET_DIR)" \ - $(if $(TARGET),--target $(TARGET),) + $(CARGO) test $(CARGO_MANIFEST_ARG) .PHONY: clippy: - DESTDIR= TARGET_DIR="$(TARGET_DIR)" \ - CC="$(CC)" CXX="$(CXX)" \ - CFLAGS="$(CFLAGS)" CXXFLAGS="$(CXXFLAGS)" CPPFLAGS="$(CPPFLAGS)" \ - LDFLAGS="$(LDFLAGS)" AR="$(AR)" NM="$(NM)" RANLIB="$(RANLIB)" \ - PROTOC="$(PROTOC)" PROTOC_INCLUDE_DIR="$(PROTOC_INCLUDE_DIR)" \ - $(CARGO) clippy \ - --manifest-path "$(CARGO_MANIFEST_PATH)" \ - --target-dir "$(TARGET_DIR)" \ - $(if $(TARGET),--target $(TARGET),) + $(CARGO) clippy $(CARGO_MANIFEST_ARG) .PHONY: fmt-check: - $(CARGO) fmt --all --check \ - --manifest-path "$(CARGO_MANIFEST_PATH)" + $(CARGO) fmt $(CARGO_MANIFEST_ARG) --all --check .PHONY: fmt: - $(CARGO) fmt --all \ - --manifest-path "$(CARGO_MANIFEST_PATH)" + $(CARGO) fmt $(CARGO_MANIFEST_ARG) --all .PHONY: clean-local: - $(CARGO) clean \ - --manifest-path "$(CARGO_MANIFEST_PATH)" \ - --target-dir "$(TARGET_DIR)" && \ - rm -rf $(TARGET_DIR)/{include,lib,src} + $(CARGO) clean $(CARGO_MANIFEST_ARG) && \ + rm -rf $(CARGO_TARGET_DIR)/{include,lib,src} diff --git a/lib/ain-rs-exports/build.rs b/lib/ain-rs-exports/build.rs index 64acce5f2e5..1e360b94c0c 100644 --- a/lib/ain-rs-exports/build.rs +++ b/lib/ain-rs-exports/build.rs @@ -13,7 +13,7 @@ fn main() -> Result<(), Box> { // Otherwise, use the path for OUT_DIR that cargo sets, as usual. // Reason: Currently setting --out-dir is nightly only, so there's no way to get OUT_DIR // out of cargo reliably for pointing the C++ link targets to this determinisitcally. - let target_dir: PathBuf = PathBuf::from(env::var("TARGET_DIR").or(env::var("OUT_DIR"))?); + let target_dir: PathBuf = PathBuf::from(env::var("CARGO_TARGET_DIR").or(env::var("OUT_DIR"))?); let res = ["src", "include", "lib"].map(|x| target_dir.join(x)); for x in &res { std::fs::create_dir_all(x)?; diff --git a/src/Makefile.am b/src/Makefile.am index dd39d3d3c4d..8800eab2605 100644 --- a/src/Makefile.am +++ b/src/Makefile.am @@ -27,16 +27,18 @@ LIBDEFI_SPV_INCLUDES = \ -I$(srcdir)/spv/bcash LIBAIN_DIR = $(abs_top_builddir)/lib/target -LIBAIN_RS_INCLUDES = -I$(LIBAIN_DIR)/include -LIBAIN_RS_LIB = -L$(LIBAIN_DIR)/lib -lain_rs_exports LIBAIN_RS_SRC = $(LIBAIN_DIR)/src/ain_rs_exports.cpp LIBAIN_RS_H = $(LIBAIN_DIR)/include/ain_rs_exports.h +LIBAIN_RS_LIB = -L$(LIBAIN_DIR)/lib -lain_rs_exports +LIBAIN_RS_LIB_PATH = $(LIBAIN_DIR)/lib/libain_rs_exports.a +LIBAIN_RS_INCLUDES = -I$(LIBAIN_DIR)/include $(LIBAIN_RS_SRC): $(LIBAIN_RS_H): -$(LIBAIN_RS_LIB): FORCE +$(LIBAIN_RS_LIB_PATH): FORCE $(AM_V_at)$(MAKE) $(AM_MAKEFLAGS) -C $(abs_top_builddir)/lib + DEFI_INCLUDES = -I$(builddir) $(BDB_CPPFLAGS) $(BOOST_CPPFLAGS) $(LEVELDB_CPPFLAGS) DEFI_INCLUDES += -I$(srcdir)/secp256k1/include DEFI_INCLUDES += $(UNIVALUE_CFLAGS) @@ -695,7 +697,7 @@ nodist_libdefi_util_a_SOURCES = $(srcdir)/obj/build.h # # defid binary -defid_SOURCES = $(LIBAIN_RS_SRC) $(LIBAIN_RS_H) defid.cpp +defid_SOURCES = defid.cpp defid_CPPFLAGS = $(AM_CPPFLAGS) $(DEFI_INCLUDES) defid_CXXFLAGS = $(AM_CXXFLAGS) $(PIE_FLAGS) defid_LDFLAGS = $(RELDFLAGS) $(AM_LDFLAGS) $(LIBTOOL_APP_LDFLAGS) @@ -733,6 +735,8 @@ if TARGET_WINDOWS defid_LDADD += -luserenv -lbcrypt endif +EXTRA_defid_DEPENDENCIES: $(LIBAIN_RS_LIB_PATH) + # defi-cli binary # defi_cli_SOURCES = defi-cli.cpp defi_cli_CPPFLAGS = $(AM_CPPFLAGS) $(DEFI_INCLUDES) $(EVENT_CFLAGS) @@ -810,7 +814,6 @@ $(top_srcdir)/$(subdir)/config/defi-config.h.in: $(am__configure_deps) clean-local: -$(MAKE) -C secp256k1 clean -$(MAKE) -C univalue clean - -$(MAKE) -C rust clean -rm -f leveldb/*/*.gcda leveldb/*/*.gcno leveldb/helpers/memenv/*.gcda leveldb/helpers/memenv/*.gcno -rm -f config.h -rm -rf test/__pycache__ From 8d126c28030ff419af1aa90d6541c5f86de93e60 Mon Sep 17 00:00:00 2001 From: Prasanna Loganathar Date: Mon, 19 Jun 2023 10:47:44 +0800 Subject: [PATCH 02/14] Update proto --- depends/packages/protobuf.mk | 19 +++++++------------ 1 file changed, 7 insertions(+), 12 deletions(-) diff --git a/depends/packages/protobuf.mk b/depends/packages/protobuf.mk index a439305230e..846d7239790 100644 --- a/depends/packages/protobuf.mk +++ b/depends/packages/protobuf.mk @@ -1,28 +1,23 @@ package=protobuf -$(package)_version=22.2 -$(package)_download_path=https://github.com/protocolbuffers/protobuf/releases/download/v22.2/ +$(package)_version=23.3 +$(package)_download_path=https://github.com/protocolbuffers/protobuf/releases/download/v$($(package)_version)/ # NOTE: protoc gets invoked on the BUILD OS during compile. So, we don't # care about HOST OS, unlike all other dependencies. # That is: protoc is run on the BUILD OS, not targeted to run on the # HOST OS. -# TODO: Fill up hashes later ifeq ($(build_os)-$(build_arch),linux-x86_64) $(package)_file_name=protoc-$($(package)_version)-linux-x86_64.zip - $(package)_sha256_hash=15f281b36897e0ffbbe3a02f687ff9108c7a0f98bb653fb433e4bd62e698abe7 + $(package)_sha256_hash=8f5abeb19c0403a7bf6e48f4fa1bb8b97724d8701f6823a327922df8cc1da4f5 endif ifeq ($(build_os)-$(build_arch),linux-aarch64) $(package)_file_name=protoc-$($(package)_version)-linux-aarch_64.zip - $(package)_sha256_hash=aa2efbb2d481b7ad3c2428e0aa4dd6d813e4538e6c0a1cd4d921ac998187e07e + $(package)_sha256_hash=4e5154e51744c288ca1362f9cca942188003fc7b860431a984a30cb1e73aed9e endif -ifeq ($(build_os)-$(build_arch),darwin-x86_64) - $(package)_file_name=protoc-$($(package)_version)-osx-x86_64.zip - $(package)_sha256_hash=8bb75680c376190d960ef1d073618c1103960f70dc4fafa7bde872029562aec1 -endif -ifeq ($(build_os)-$(build_arch),darwin-arm) - $(package)_file_name=protoc-$($(package)_version)-osx-aarch_64.zip - $(package)_sha256_hash=a196fd39acd312688b58e81266fd88e9f7799967c5439738c10345a29049261d +ifeq ($(build_os),darwin) + $(package)_file_name=protoc-$($(package)_version)-osx-universal_binary.zip + $(package)_sha256_hash=2783d50e35cbb546c0d75fbc2a46f76e2c620fb66c9f6bfc5ff70f5dda234100 endif ifeq ($($(package)_file_name),) From 5c215e62cdf30e1f3f3bc0f3ad8436d19d70cecb Mon Sep 17 00:00:00 2001 From: Prasanna Loganathar Date: Mon, 19 Jun 2023 10:48:17 +0800 Subject: [PATCH 03/14] Additional refinements --- {lib/.cargo => .cargo}/config.toml | 2 +- lib/Makefile.am | 26 +++++---- lib/ain-grpc/src/rpc/eth.rs | 4 +- lib/ain-grpc/src/transaction_request.rs | 6 +- lib/ain-rs-exports/src/lib.rs | 19 +++--- lib/labs-grpc2/build.rs | 12 ++-- make.sh | 78 +++++++++++++++++-------- src/masternodes/mn_checks.cpp | 2 +- src/miner.cpp | 2 +- 9 files changed, 90 insertions(+), 61 deletions(-) rename {lib/.cargo => .cargo}/config.toml (93%) diff --git a/lib/.cargo/config.toml b/.cargo/config.toml similarity index 93% rename from lib/.cargo/config.toml rename to .cargo/config.toml index e7ae27d7a96..13ec4f9bc7d 100644 --- a/lib/.cargo/config.toml +++ b/.cargo/config.toml @@ -2,7 +2,7 @@ # We set this so that Makefile based # builds and ad-hoc cargo invocations all # result in the consistent compilation -target-dir = "../build/lib/target" +target-dir = "./build/lib/target" # We temporarily ignore linkages until # we fix cpp links diff --git a/lib/Makefile.am b/lib/Makefile.am index 80481c7ed16..caba3b42043 100644 --- a/lib/Makefile.am +++ b/lib/Makefile.am @@ -1,4 +1,7 @@ CARGO := $(if $(CARGO),$(CARGO),cargo) +CARGO_EXTRA_ARGS ?= --all-targets + +export CARGO_BUILD_JOBS := $(if $(CARGO_BUILD_JOBS),$(CARGO_BUILD_JOBS),-1) # ENABLE_DEBUG is set from configure. We respect DEBUG too if set DEBUG ?= $(ENABLE_DEBUG) @@ -33,28 +36,31 @@ unexport DESTDIR .PHONY: all: build -.PHONY: -build: - $(CARGO) build $(CARGO_MANIFEST_ARG) $(CARGO_BUILD_TYPE_ARG) && \ +.PHONY: build +build: + $(CARGO) build $(CARGO_MANIFEST_ARG) $(CARGO_BUILD_TYPE_ARG) $(CARGO_EXTRA_ARGS) && \ cp $(SPECIFIC_TARGET_DIR)/libain_rs_exports.a $(CARGO_TARGET_DIR)/lib/ -.PHONY: +.PHONY: check check: - $(CARGO) test $(CARGO_MANIFEST_ARG) + $(CARGO) check $(CARGO_MANIFEST_ARG) $(CARGO_EXTRA_ARGS) -.PHONY: +.PHONY: test +test: + $(CARGO) test $(CARGO_MANIFEST_ARG) $(CARGO_EXTRA_ARGS) + +.PHONY: clippy clippy: - $(CARGO) clippy $(CARGO_MANIFEST_ARG) + $(CARGO) clippy $(CARGO_MANIFEST_ARG) $(CARGO_EXTRA_ARGS) -.PHONY: +.PHONY: fmt-check fmt-check: $(CARGO) fmt $(CARGO_MANIFEST_ARG) --all --check -.PHONY: +.PHONY: fmt fmt: $(CARGO) fmt $(CARGO_MANIFEST_ARG) --all -.PHONY: clean-local: $(CARGO) clean $(CARGO_MANIFEST_ARG) && \ rm -rf $(CARGO_TARGET_DIR)/{include,lib,src} diff --git a/lib/ain-grpc/src/rpc/eth.rs b/lib/ain-grpc/src/rpc/eth.rs index c254975c43e..19c2806556d 100644 --- a/lib/ain-grpc/src/rpc/eth.rs +++ b/lib/ain-grpc/src/rpc/eth.rs @@ -297,7 +297,7 @@ impl MetachainRPCServer for MetachainRPCModule { &input .map(|d| d.0) .unwrap_or(data.map(|d| d.0).unwrap_or_default()), - gas.unwrap_or(U256::from(MAX_GAS_PER_BLOCK)).as_u64(), + gas.unwrap_or(MAX_GAS_PER_BLOCK).as_u64(), vec![], self.block_number_to_u256(block_number), ) @@ -687,7 +687,7 @@ impl MetachainRPCServer for MetachainRPCModule { to, value.unwrap_or_default(), &data.map(|d| d.0).unwrap_or_default(), - gas.unwrap_or(U256::from(MAX_GAS_PER_BLOCK)).as_u64(), + gas.unwrap_or(MAX_GAS_PER_BLOCK).as_u64(), vec![], block_number, ) diff --git a/lib/ain-grpc/src/transaction_request.rs b/lib/ain-grpc/src/transaction_request.rs index e52090a410b..0687a834b96 100644 --- a/lib/ain-grpc/src/transaction_request.rs +++ b/lib/ain-grpc/src/transaction_request.rs @@ -58,7 +58,7 @@ impl From for Option { value: req.value.unwrap_or_default(), input: req .input - .or_else(|| req.data) + .or(req.data) .map(Bytes::into_vec) .unwrap_or_default(), action: match req.to { @@ -75,7 +75,7 @@ impl From for Option { value: req.value.unwrap_or_default(), input: req .input - .or_else(|| req.data) + .or(req.data) .map(Bytes::into_vec) .unwrap_or_default(), action: match req.to { @@ -96,7 +96,7 @@ impl From for Option { value: req.value.unwrap_or_default(), input: req .input - .or_else(|| req.data) + .or(req.data) .map(Bytes::into_vec) .unwrap_or_default(), action: match req.to { diff --git a/lib/ain-rs-exports/src/lib.rs b/lib/ain-rs-exports/src/lib.rs index 4de57f3d03f..425c9e791e9 100644 --- a/lib/ain-rs-exports/src/lib.rs +++ b/lib/ain-rs-exports/src/lib.rs @@ -12,7 +12,7 @@ use ethereum::{EnvelopedEncodable, TransactionAction, TransactionSignature}; use primitive_types::{H160, H256, U256}; use transaction::{LegacyUnsignedTransaction, TransactionError, LOWER_H256}; -use crate::ffi::RustRes; +use crate::ffi::CrossBoundaryResult; pub const WEI_TO_GWEI: u64 = 1_000_000_000; pub const GWEI_TO_SATS: u64 = 10; @@ -43,9 +43,9 @@ pub mod ffi { used_gas: u64, } - pub struct RustRes { - ok: bool, - reason: String, + pub struct CrossBoundaryResult { + pub ok: bool, + pub reason: String, } extern "Rust" { @@ -67,7 +67,7 @@ pub mod ffi { ) -> Result; fn evm_try_prevalidate_raw_tx( - result: &mut RustRes, + result: &mut CrossBoundaryResult, tx: &str, with_gas_usage: bool, ) -> Result; @@ -75,7 +75,7 @@ pub mod ffi { fn evm_get_context() -> u64; fn evm_discard_context(context: u64); fn evm_try_queue_tx( - result: &mut RustRes, + result: &mut CrossBoundaryResult, context: u64, raw_tx: &str, native_tx_hash: [u8; 32], @@ -311,7 +311,7 @@ pub fn evm_sub_balance( /// Returns the transaction nonce, sender address and gas used if the transaction is valid. /// logs and set the error reason to result object otherwise. pub fn evm_try_prevalidate_raw_tx( - result: &mut RustRes, + result: &mut CrossBoundaryResult, tx: &str, with_gas_usage: bool, ) -> Result> { @@ -325,10 +325,9 @@ pub fn evm_try_prevalidate_raw_tx( }) } Err(e) => { - debug!("evm_try_prevalidate_raw_tx fails with error: {e}"); + debug!("evm_try_prevalidate_raw_tx failed with error: {e}"); result.ok = false; result.reason = e.to_string(); - Ok(ffi::ValidateTxResult::default()) } } @@ -372,7 +371,7 @@ fn evm_discard_context(context: u64) { /// /// Returns `true` if the transaction is successfully queued, `false` otherwise. fn evm_try_queue_tx( - result: &mut RustRes, + result: &mut CrossBoundaryResult, context: u64, raw_tx: &str, hash: [u8; 32], diff --git a/lib/labs-grpc2/build.rs b/lib/labs-grpc2/build.rs index d91b90098fd..817ebd6a8a8 100644 --- a/lib/labs-grpc2/build.rs +++ b/lib/labs-grpc2/build.rs @@ -2,8 +2,9 @@ use anyhow::{format_err, Result}; use std::path::PathBuf; fn main() -> Result<()> { - std::env::set_var("PROTOC", protobuf_src::protoc()); - let proto_include = protobuf_src::include(); + let proto_include = std::env::var("PROTOC_INCLUDE_DIR") + .map(PathBuf::from) + .map(|f| String::from(f.to_str().unwrap())); // let manifest_path = PathBuf::from(std::env::var("CARGO_MANIFEST_DIR")?); // let gen_path = manifest_path.join("gen"); @@ -27,12 +28,7 @@ fn main() -> Result<()> { .type_attribute(".", default_attrs) .compile( &["proto/services.proto"], - &[ - "proto", - proto_include - .to_str() - .ok_or(format_err!("proto include path err"))?, - ], + &["proto", proto_include.unwrap_or(".".to_string()).as_str()], )?; Ok(()) } diff --git a/make.sh b/make.sh index fa6fb776a2f..10ec27553ff 100755 --- a/make.sh +++ b/make.sh @@ -45,7 +45,7 @@ setup_vars() { default_compiler_flags="CC=clang-${clang_ver} CXX=clang++-${clang_ver}" fi - MAKE_JOBS=${MAKE_JOBS:-"$(_nproc)"} + MAKE_JOBS=${MAKE_JOBS:-"$(_get_default_jobs)"} MAKE_CONF_ARGS="$(_get_default_conf_args) ${MAKE_CONF_ARGS:-}" MAKE_CONF_ARGS="${default_compiler_flags} ${MAKE_CONF_ARGS:-}" @@ -174,8 +174,7 @@ build_make() { _fold_start "build_make" # shellcheck disable=SC2086 - make DESTDIR="${build_target_dir}" -j${make_jobs} ${make_args} - + make DESTDIR="${build_target_dir}" -j${make_jobs} CARGO_BUILD_JOBS=${make_jobs} ${make_args} _fold_end _exit_dir @@ -382,7 +381,7 @@ exec() { _fold_start "exec:: ${*-(default)}" # shellcheck disable=SC2086,SC2068 - make -j$make_jobs $make_args $@ + make -j$make_jobs CARGO_BUILD_JOBS=${make_jobs} $make_args $@ _fold_end _exit_dir @@ -725,6 +724,16 @@ _get_default_conf_args() { echo "$conf_args" } +_get_default_jobs() { + local total=$(_nproc) + # Use a num closer to 80% of the cores by default + local jobs=$(( total * 4/5 )) + if (( jobs > 1 )); then + echo $jobs + else + echo 1 + fi +} # Dev tools # --- @@ -763,9 +772,9 @@ check_git_dirty() { check_rs() { check_enter_build_rs_dir - lint_cargo_check - lint_cargo_clippy - lint_cargo_fmt + lib check 1 + lib clippy 1 + lib fmt-check 1 _exit_dir } @@ -776,31 +785,31 @@ check_enter_build_rs_dir() { exit 1; } } -lint_cargo_check() { +lib() { + local cmd="${1-}" + local exit_on_err="${2:-0}" + local jobs="$MAKE_JOBS" + check_enter_build_rs_dir - make check || { - echo "Error: Please resolve compiler checks before commit"; - exit 1; } + make CARGO_BUILD_JOBS=${jobs} ${cmd} || { if [[ "${exit_on_err}" == "1" ]]; then + echo "Error: Please resolve all checks"; + exit 1; + fi; } _exit_dir } -lint_cargo_clippy() { - check_enter_build_rs_dir - make clippy || { - echo "Error: Please resolve compiler lints before commit"; - exit 1; } - _exit_dir +rust_analyzer_check() { + lib "check CARGO_EXTRA_ARGS=--all-targets --workspace --message-format=json" } -lint_cargo_fmt() { - check_enter_build_rs_dir - make fmt-check || { - echo "Error: Please format code before commit"; - exit 1; } - _exit_dir +compiledb() { + _platform_init_intercept_build + clean 2> /dev/null || true + build_deps + build_conf + _intercept_build ./make.sh build_make } - # Platform specifics # --- @@ -847,6 +856,25 @@ _platform_pkg_tip() { echo "tip: osx: brew install ${brew_pkg}" } +_platform_init_intercept_build() { + _INTERCEPT_BUILD_CMD="" + local intercept_build_cmds=("intercept-build-15" "intercept-build") + local x + for x in "${intercept_build_cmds[@]}"; do + if command -v "$x" >/dev/null ; then + _INTERCEPT_BUILD_CMD="$x" + _intercept_build() { + "$_INTERCEPT_BUILD_CMD" "$@" + } + return + fi + done + + echo "error: intercept-build-15/intercept-build required" + _platform_pkg_tip clang-tools + exit 1 +} + _nproc() { if [[ "${OSTYPE}" == "darwin"* ]]; then sysctl -n hw.logicalcpu @@ -903,7 +931,7 @@ ci_setup_deps_test() { } get_rust_target() { - # Note: https://github.com/llvm/llvm-project/blob/dc895d023e63fd9276fe493eded776e101015c86/llvm/lib/TargetParser/Triple.cpp + # Note: https://github.com/llvm/llvm-project/blob/master/llvm/lib/TargetParser/Triple.cpp # The function is called in 2 places: # 1. When setting up Rust, which TARGET is passed from the environment # 2. In configure, which sets TARGET with the additional unknown vendor part in the triplet diff --git a/src/masternodes/mn_checks.cpp b/src/masternodes/mn_checks.cpp index 997c5ff186d..180e0d35447 100644 --- a/src/masternodes/mn_checks.cpp +++ b/src/masternodes/mn_checks.cpp @@ -3859,7 +3859,7 @@ class CCustomTxApplyVisitor : public CCustomTxVisitor { if (obj.evmTx.size() > static_cast(EVM_TX_SIZE)) return Res::Err("evm tx size too large"); - RustRes result; + CrossBoundaryResult result; const auto hashAndGas = evm_try_prevalidate_raw_tx(result, HexStr(obj.evmTx), true); if (!result.ok) { diff --git a/src/miner.cpp b/src/miner.cpp index 34245917871..6c77c18ecbb 100644 --- a/src/miner.cpp +++ b/src/miner.cpp @@ -800,7 +800,7 @@ void BlockAssembler::addPackageTxs(int &nPackagesSelected, int &nDescendantsUpda const auto obj = std::get(txMessage); - RustRes result; + CrossBoundaryResult result; const auto txResult = evm_try_prevalidate_raw_tx(result, HexStr(obj.evmTx), false); if (!result.ok) { customTxPassed = false; From ebf6dfede91fe79bb649782bda87eccba873e3db Mon Sep 17 00:00:00 2001 From: Prasanna Loganathar Date: Mon, 19 Jun 2023 11:27:07 +0800 Subject: [PATCH 04/14] Fix lints --- make.sh | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/make.sh b/make.sh index 10ec27553ff..acc9f48f1c9 100755 --- a/make.sh +++ b/make.sh @@ -725,7 +725,8 @@ _get_default_conf_args() { } _get_default_jobs() { - local total=$(_nproc) + local total + total=$(_nproc) # Use a num closer to 80% of the cores by default local jobs=$(( total * 4/5 )) if (( jobs > 1 )); then From 9ef1f503f828d6836276ca53413f664c76df68d2 Mon Sep 17 00:00:00 2001 From: Prasanna Loganathar Date: Mon, 19 Jun 2023 11:44:06 +0800 Subject: [PATCH 05/14] Add vscode default --- .dockerignore | 2 +- .gitignore | 2 +- .vscode/settings.default.json | 6 ++++++ make.sh | 1 + 4 files changed, 9 insertions(+), 2 deletions(-) create mode 100644 .vscode/settings.default.json diff --git a/.dockerignore b/.dockerignore index 08b61ae038d..0594990d9f5 100644 --- a/.dockerignore +++ b/.dockerignore @@ -4,7 +4,7 @@ # Editors. *.sw* -.vscode +.vscode/settings.json .clangd # Misc diff --git a/.gitignore b/.gitignore index a3a8374190f..c2112ce6214 100644 --- a/.gitignore +++ b/.gitignore @@ -4,7 +4,7 @@ # Editors. *.sw* -.vscode +.vscode/settings.json .clangd # Misc diff --git a/.vscode/settings.default.json b/.vscode/settings.default.json new file mode 100644 index 00000000000..ddef25f8d43 --- /dev/null +++ b/.vscode/settings.default.json @@ -0,0 +1,6 @@ +{ + "rust-analyzer.assist.expressionFillDefault": "default", + "rust-analyzer.cargo.buildScripts.overrideCommand": ["../make.sh", "rust-analyzer-check" ], + "rust-analyzer.check.overrideCommand": ["../make.sh", "rust-analyzer-check" ], + "rust-analyzer.workspace.symbol.search.kind": "all_symbols" +} \ No newline at end of file diff --git a/make.sh b/make.sh index acc9f48f1c9..277377bd05c 100755 --- a/make.sh +++ b/make.sh @@ -792,6 +792,7 @@ lib() { local jobs="$MAKE_JOBS" check_enter_build_rs_dir + # shellcheck disable=SC2086 make CARGO_BUILD_JOBS=${jobs} ${cmd} || { if [[ "${exit_on_err}" == "1" ]]; then echo "Error: Please resolve all checks"; exit 1; From dd20c7e7490dcadbf64b9022c443da0314d8729a Mon Sep 17 00:00:00 2001 From: Prasanna Loganathar Date: Mon, 19 Jun 2023 11:56:52 +0800 Subject: [PATCH 06/14] Update gitignores --- .dockerignore | 3 ++- .gitignore | 3 ++- 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/.dockerignore b/.dockerignore index 0594990d9f5..2e663fa6094 100644 --- a/.dockerignore +++ b/.dockerignore @@ -4,7 +4,8 @@ # Editors. *.sw* -.vscode/settings.json +.vscode +!.vscode/settings.default.json .clangd # Misc diff --git a/.gitignore b/.gitignore index c2112ce6214..33d619c7e44 100644 --- a/.gitignore +++ b/.gitignore @@ -4,7 +4,8 @@ # Editors. *.sw* -.vscode/settings.json +.vscode +!.vscode/settings.default.json .clangd # Misc From a54e64a9c747ea7d979b371d86d5ef460e86663e Mon Sep 17 00:00:00 2001 From: Prasanna Loganathar Date: Mon, 19 Jun 2023 12:02:51 +0800 Subject: [PATCH 07/14] Update comments --- .vscode/settings.default.json | 2 ++ 1 file changed, 2 insertions(+) diff --git a/.vscode/settings.default.json b/.vscode/settings.default.json index ddef25f8d43..696e6d439d7 100644 --- a/.vscode/settings.default.json +++ b/.vscode/settings.default.json @@ -1,4 +1,6 @@ { + // Recommended default config. Place into settings.json + // or copy over as `.vscode/settings.json` to take effect. "rust-analyzer.assist.expressionFillDefault": "default", "rust-analyzer.cargo.buildScripts.overrideCommand": ["../make.sh", "rust-analyzer-check" ], "rust-analyzer.check.overrideCommand": ["../make.sh", "rust-analyzer-check" ], From ff87081ae7a010b0ee88ade5a4117b25e00a5bd3 Mon Sep 17 00:00:00 2001 From: Prasanna Loganathar Date: Mon, 19 Jun 2023 15:55:03 +0800 Subject: [PATCH 08/14] Cleanup invalid cfg flags --- lib/ain-cpp-imports/src/lib.rs | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/lib/ain-cpp-imports/src/lib.rs b/lib/ain-cpp-imports/src/lib.rs index 4e81a4d5a79..a148efc0288 100644 --- a/lib/ain-cpp-imports/src/lib.rs +++ b/lib/ain-cpp-imports/src/lib.rs @@ -1,12 +1,12 @@ use std::error::Error; -#[cfg(not(any(test, bench, example, doc)))] +#[cfg(not(test))] mod bridge; -#[cfg(not(any(test, bench, example, doc)))] +#[cfg(not(test))] use bridge::ffi; -#[cfg(any(test, bench, example, doc))] +#[cfg(test)] #[allow(non_snake_case)] mod ffi { const UNIMPL_MSG: &str = "This cannot be used on a test path"; From 747c134ee791f7fee055973e60471842086add53 Mon Sep 17 00:00:00 2001 From: Prasanna Loganathar Date: Mon, 19 Jun 2023 15:55:23 +0800 Subject: [PATCH 09/14] Add all flags from depends config.site --- lib/Makefile.am | 2 ++ 1 file changed, 2 insertions(+) diff --git a/lib/Makefile.am b/lib/Makefile.am index caba3b42043..f69e556674f 100644 --- a/lib/Makefile.am +++ b/lib/Makefile.am @@ -27,6 +27,8 @@ CARGO_BUILD_TYPE_ARG = $(if $(DEBUG),,--release) # Export compiler flags export CC CXX CFLAGS CXXFLAGS CPPFLAGS LDFLAGS AR NM RANLIB +# Export compiler support +export PKG_CONFIG_PATH PKGCONFIG_LIBDIR PYTHONPATH # Export protoc vars export PROTOC PROTOC_INCLUDE_DIR From 485e480e477bd04652f27859b04ed109d503b4cd Mon Sep 17 00:00:00 2001 From: Prasanna Loganathar Date: Mon, 19 Jun 2023 15:55:40 +0800 Subject: [PATCH 10/14] Cleanup rust workaround args --- .cargo/config.toml | 19 ------------------- 1 file changed, 19 deletions(-) diff --git a/.cargo/config.toml b/.cargo/config.toml index 13ec4f9bc7d..8c555b72ea5 100644 --- a/.cargo/config.toml +++ b/.cargo/config.toml @@ -3,22 +3,3 @@ # builds and ad-hoc cargo invocations all # result in the consistent compilation target-dir = "./build/lib/target" - -# We temporarily ignore linkages until -# we fix cpp links -rustflags = [ - "-C", "link-arg=-z", - "-C", "link-arg=undefs", -] - -[target.x86_64-apple-darwin] -rustflags = [ - "-C", "link-arg=-undefined", - "-C", "link-arg=dynamic_lookup", -] - -[target.aarch64-apple-darwin] -rustflags = [ - "-C", "link-arg=-undefined", - "-C", "link-arg=dynamic_lookup", -] From f843018bbcdd697e653771c58c5634183af8c99f Mon Sep 17 00:00:00 2001 From: Prasanna Loganathar Date: Mon, 19 Jun 2023 15:56:11 +0800 Subject: [PATCH 11/14] Fix locales on CI --- make.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/make.sh b/make.sh index 277377bd05c..f58460ca054 100755 --- a/make.sh +++ b/make.sh @@ -446,7 +446,6 @@ pkg_install_deps() { # gcc-multilib: for cross compilations # locales: for using en-US.UTF-8 (see head of this file). - apt-get install -y \ software-properties-common build-essential git libtool autotools-dev automake \ pkg-config bsdmainutils python3 python3-pip libssl-dev libevent-dev libboost-system-dev \ @@ -454,6 +453,7 @@ pkg_install_deps() { libminiupnpc-dev libzmq3-dev libqrencode-dev wget \ libdb-dev libdb++-dev libdb5.3 libdb5.3-dev libdb5.3++ libdb5.3++-dev \ curl cmake unzip libc6-dev gcc-multilib locales locales-all + locale-gen "en_US.UTF-8" _fold_end } From 46dd79d67b3177c5e09b6affd7175a7cb4f7794f Mon Sep 17 00:00:00 2001 From: Prasanna Loganathar Date: Tue, 20 Jun 2023 09:11:22 +0800 Subject: [PATCH 12/14] Fix cross compilers --- configure.ac | 10 +++++----- lib/Makefile.am | 18 +++++++++++------- make.sh | 6 +++--- 3 files changed, 19 insertions(+), 15 deletions(-) diff --git a/configure.ac b/configure.ac index 0aa88263102..6a7670b7cdc 100644 --- a/configure.ac +++ b/configure.ac @@ -1371,15 +1371,15 @@ AC_SUBST(PROTOC_INCLUDE_DIR) dnl If the host and build triplets are the same, we keep this empty if test x$host = x$build; then - CARGO_BUILD_TARGET= + RUST_TARGET= else - CARGO_BUILD_TARGET=`TARGET="$host" $ac_abs_confdir/make.sh get_rust_target` + RUST_TARGET=`TARGET="$host" $ac_abs_confdir/make.sh get_rust_target` if test $? != 0; then AC_MSG_ERROR("unsupported host target") fi fi -AC_SUBST(CARGO_BUILD_TARGET) -AM_CONDITIONAL([HAVE_CARGO_BUILD_TARGET], [test x$CARGO_BUILD_TARGET != x]) +AC_SUBST(RUST_TARGET) +AM_CONDITIONAL([HAVE_RUST_TARGET], [test x$RUST_TARGET != x]) AC_CONFIG_FILES([Makefile src/Makefile lib/Makefile test/config.ini]) AC_CONFIG_FILES([contrib/devtools/split-debug.sh],[chmod +x contrib/devtools/split-debug.sh]) @@ -1468,6 +1468,6 @@ echo " CXXFLAGS = $DEBUG_CXXFLAGS $HARDENED_CXXFLAGS $WARN_CXXFLAGS echo " LDFLAGS = $PTHREAD_CFLAGS $HARDENED_LDFLAGS $GPROF_LDFLAGS $LDFLAGS" echo " ARFLAGS = $ARFLAGS" echo " CARGO = $CARGO" -echo " CARGO_BUILD_TARGET = $CARGO_BUILD_TARGET" +echo " RUST_TARGET = $RUST_TARGET" echo " ENABLE_DEBUG = $ENABLE_DEBUG" echo diff --git a/lib/Makefile.am b/lib/Makefile.am index f69e556674f..c7aa51c3a5e 100644 --- a/lib/Makefile.am +++ b/lib/Makefile.am @@ -1,12 +1,9 @@ CARGO := $(if $(CARGO),$(CARGO),cargo) -CARGO_EXTRA_ARGS ?= --all-targets - -export CARGO_BUILD_JOBS := $(if $(CARGO_BUILD_JOBS),$(CARGO_BUILD_JOBS),-1) # ENABLE_DEBUG is set from configure. We respect DEBUG too if set DEBUG ?= $(ENABLE_DEBUG) -# CARGO_BUILD_TARGET and HAVE_CARGO_BUILD_TARGET is set from configure. +# RUST_TARGET and HAVE_RUST_TARGET is set from configure. # Can be empty. If empty, we skip export it. Otherwise we do. # # We do this to emulate cargo's default behavior (--target=) where @@ -14,17 +11,24 @@ DEBUG ?= $(ENABLE_DEBUG) # There's no way to force cargo to a stick to one behavior at the moment. # # Note: We use HAVE checks due to automake ifeq/ifneq not working outside rules -if HAVE_CARGO_BUILD_TARGET -export CARGO_BUILD_TARGET := $(CARGO_BUILD_TARGET) +if HAVE_RUST_TARGET +export CARGO_BUILD_TARGET = $(RUST_TARGET) endif +TARGET = $(RUST_TARGET) export CARGO_TARGET_DIR ?= $(abs_builddir)/target +export CARGO_BUILD_JOBS ?= $(if $(JOBS),$(JOBS),-1) + CARGO_MANIFEST_PATH = $(abs_srcdir)/Cargo.toml -SPECIFIC_TARGET_DIR = $(CARGO_TARGET_DIR)/$(CARGO_BUILD_TARGET)/$(if $(DEBUG),debug,release) +SPECIFIC_TARGET_DIR = $(CARGO_TARGET_DIR)/$(TARGET)/$(if $(DEBUG),debug,release) CARGO_MANIFEST_ARG = --manifest-path "$(CARGO_MANIFEST_PATH)" CARGO_BUILD_TYPE_ARG = $(if $(DEBUG),,--release) +# If $build == $host, we add --all-targets otherwise we skip +# since compiling with `--test` fails on cross compilation +CARGO_EXTRA_ARGS ?= $(if $(subst $(build),,$(host)),,--all-targets) + # Export compiler flags export CC CXX CFLAGS CXXFLAGS CPPFLAGS LDFLAGS AR NM RANLIB # Export compiler support diff --git a/make.sh b/make.sh index f58460ca054..3a36a2b7adb 100755 --- a/make.sh +++ b/make.sh @@ -174,7 +174,7 @@ build_make() { _fold_start "build_make" # shellcheck disable=SC2086 - make DESTDIR="${build_target_dir}" -j${make_jobs} CARGO_BUILD_JOBS=${make_jobs} ${make_args} + make DESTDIR="${build_target_dir}" -j${make_jobs} JOBS=${make_jobs} ${make_args} _fold_end _exit_dir @@ -381,7 +381,7 @@ exec() { _fold_start "exec:: ${*-(default)}" # shellcheck disable=SC2086,SC2068 - make -j$make_jobs CARGO_BUILD_JOBS=${make_jobs} $make_args $@ + make -j$make_jobs JOBS=${make_jobs} $make_args $@ _fold_end _exit_dir @@ -793,7 +793,7 @@ lib() { check_enter_build_rs_dir # shellcheck disable=SC2086 - make CARGO_BUILD_JOBS=${jobs} ${cmd} || { if [[ "${exit_on_err}" == "1" ]]; then + make JOBS=${jobs} ${cmd} || { if [[ "${exit_on_err}" == "1" ]]; then echo "Error: Please resolve all checks"; exit 1; fi; } From 7182d2a37bc69fa47144c379c488f00d1ecd7acc Mon Sep 17 00:00:00 2001 From: Prasanna Loganathar Date: Tue, 20 Jun 2023 09:19:19 +0800 Subject: [PATCH 13/14] Better naming --- lib/Makefile.am | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/lib/Makefile.am b/lib/Makefile.am index c7aa51c3a5e..913bef1d6fa 100644 --- a/lib/Makefile.am +++ b/lib/Makefile.am @@ -20,7 +20,7 @@ export CARGO_TARGET_DIR ?= $(abs_builddir)/target export CARGO_BUILD_JOBS ?= $(if $(JOBS),$(JOBS),-1) CARGO_MANIFEST_PATH = $(abs_srcdir)/Cargo.toml -SPECIFIC_TARGET_DIR = $(CARGO_TARGET_DIR)/$(TARGET)/$(if $(DEBUG),debug,release) +BUILD_ARTIFACTS_DIR = $(CARGO_TARGET_DIR)/$(TARGET)/$(if $(DEBUG),debug,release) CARGO_MANIFEST_ARG = --manifest-path "$(CARGO_MANIFEST_PATH)" CARGO_BUILD_TYPE_ARG = $(if $(DEBUG),,--release) @@ -45,7 +45,7 @@ all: build .PHONY: build build: $(CARGO) build $(CARGO_MANIFEST_ARG) $(CARGO_BUILD_TYPE_ARG) $(CARGO_EXTRA_ARGS) && \ - cp $(SPECIFIC_TARGET_DIR)/libain_rs_exports.a $(CARGO_TARGET_DIR)/lib/ + cp $(BUILD_ARTIFACTS_DIR)/libain_rs_exports.a $(CARGO_TARGET_DIR)/lib/ .PHONY: check check: From f323c727de7ff7c9fb6bfdcb65a8ce0c5a4e4c52 Mon Sep 17 00:00:00 2001 From: Prasanna Loganathar Date: Tue, 20 Jun 2023 09:24:48 +0800 Subject: [PATCH 14/14] Refactor locales properly to fit into make.sh --- make.sh | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/make.sh b/make.sh index 3a36a2b7adb..41e9755b56e 100755 --- a/make.sh +++ b/make.sh @@ -453,11 +453,16 @@ pkg_install_deps() { libminiupnpc-dev libzmq3-dev libqrencode-dev wget \ libdb-dev libdb++-dev libdb5.3 libdb5.3-dev libdb5.3++ libdb5.3++-dev \ curl cmake unzip libc6-dev gcc-multilib locales locales-all - locale-gen "en_US.UTF-8" _fold_end } +pkg_setup_locale() { + # Not a hard requirement. We use en_US.UTF-8 to maintain coherence across + # different platforms. C.UTF-8 is not available on all platforms. + locale-gen "en_US.UTF-8" +} + pkg_install_deps_mingw_x86_64() { _fold_start "pkg-install-deps-mingw-x86_64" @@ -899,6 +904,7 @@ ci_export_vars() { ci_setup_deps() { DEBIAN_FRONTEND=noninteractive pkg_update_base DEBIAN_FRONTEND=noninteractive pkg_install_deps + DEBIAN_FRONTEND=noninteractive pkg_setup_locale DEBIAN_FRONTEND=noninteractive pkg_install_llvm DEBIAN_FRONTEND=noninteractive pkg_install_rust }