Three things broke the x86_64-w64-mingw32 build; two are real and fixed
here (the third was a stale-object contamination from building Linux and
Windows in the same tree, resolved by a clean rebuild — not a code fix).
1. Single-pass mingw ld could not resolve the cross-references DragonX
added between the internal static archives (libbitcoin_util/common
objects pulling in UniValue; util<->common mutual deps). GNU ld on
Linux re-scans archives so it never surfaced; ld64 on macOS rejects
the grouping flag outright. Bracket each binary's _LDADD in
-Wl,--start-group/--end-group, delivered via AC_SUBST(LINK_GROUP_*)
so automake does not reject the linker flag inside _LDADD, and left
empty on every non-Windows target.
2. The Rust build emits the mingw archive as rustzcash.lib, but the
link line asks for -lrustzcash, i.e. librustzcash.a. Normalize the
staged filename to librustzcash.a for every host (a no-op on
Linux/macOS, where the basename was already librustzcash.a).
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
- Update compiler references from gcc-8 to gcc-15 across build system
(build-mac.sh, darwin.mk, Makefile_custom)
- Use system Rust (rustup) instead of bundled Rust 1.32.0 for librustzcash
to fix rlib linker incompatibility on macOS Sequoia
- Replace deprecated std::random_shuffle with std::shuffle (net.cpp,
transaction_builder.cpp, wallet.cpp)
- Fix -std=gnu17 -> -std=gnu++17 for C++ targets (libzcash, libhush)
- Fix nodiscard warning in glibcxx_sanity.cpp
- Replace deprecated OSMemoryBarrier with std::atomic_thread_fence in LevelDB
- Add -Wno-error=deprecated-declarations to CXXFLAGS for third-party headers
- Fix REMAINING_ARGS unbound variable in build.sh
- Add --disable-tests handling to build-mac.sh
- Update README with correct macOS build dependencies and instructions
The only upstream change relative to the previous commit is that the
various Zcash-specific dependencies have been pulled into a cargo
workspace. The dependecies in the workspace use the same commits as the
crates we had previously vendored.
The patches are necessary to handle the fact that cargo requires that
dev dependencies are available even if not used, and we would otherwise
need to vendor all the underlying crates.