From d77088c1f2f59154dced313008fdf4fd2b526dc2 Mon Sep 17 00:00:00 2001 From: M Date: Thu, 19 Mar 2026 09:30:50 -0500 Subject: [PATCH] Fix macOS Sequoia build with GCC 15 and update README - 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 --- README.md | 25 +++++++++++++++++++------ build.sh | 12 ++++++------ depends/builders/darwin.mk | 8 ++++---- depends/hosts/darwin.mk | 4 ++-- depends/packages/librustzcash.mk | 2 +- depends/strip-rlib-metadata.sh | 8 ++++++++ src/Makefile.am | 4 ++-- src/cc/Makefile_custom | 2 +- src/cc/customcc.dylib | Bin 0 -> 104288 bytes src/compat/glibcxx_sanity.cpp | 2 +- src/leveldb/port/atomic_pointer.h | 3 ++- src/libcc.dylib | Bin 0 -> 104288 bytes src/net.cpp | 6 ++++-- src/transaction_builder.cpp | 4 +++- src/wallet/wallet.cpp | 4 +++- util/build-mac.sh | 16 ++++++++++++---- 16 files changed, 68 insertions(+), 32 deletions(-) create mode 100755 depends/strip-rlib-metadata.sh create mode 100644 src/cc/customcc.dylib create mode 100644 src/libcc.dylib diff --git a/README.md b/README.md index b1a7cbbbf..f2079a4f1 100644 --- a/README.md +++ b/README.md @@ -106,19 +106,32 @@ apt-get install -y gcc-7 g++-7 && \ # Build on Mac -``` -sudo port update -sudo port upgrade outdated -sudo port install qt5 +Install Xcode Command Line Tools and [Homebrew](https://brew.sh/), then install dependencies: + +```sh +xcode-select --install +brew install gcc autoconf automake pkgconf libtool cmake curl + +# Install Rust (needed for librustzcash on macOS Sequoia+) +curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh +source "$HOME/.cargo/env" # clone git repo git clone https://git.hush.is/hush/hush3 cd hush3 -# Build -# This uses 3 build processes, you need 2GB of RAM for each. +# Build (uses 3 build processes, you need 2GB of RAM for each) +# Make sure libtool gnubin and cargo are on PATH +export PATH="$HOME/.cargo/bin:/usr/local/opt/libtool/libexec/gnubin:$PATH" ./build.sh -j3 ``` +For a release build: + +```sh +export PATH="$HOME/.cargo/bin:/usr/local/opt/libtool/libexec/gnubin:$PATH" +./build.sh --mac-release -j$(sysctl -n hw.ncpu) +``` + # Installing Hush binaries 1. [Download the release](https://git.hush.is/hush/hush3/releases) with a .deb file extension. diff --git a/build.sh b/build.sh index 2ad3722e3..52fb7f4d3 100755 --- a/build.sh +++ b/build.sh @@ -175,21 +175,21 @@ if [ $BUILD_LINUX_COMPAT -eq 1 ] || [ $BUILD_LINUX_RELEASE -eq 1 ] || [ $BUILD_W if [ $BUILD_LINUX_RELEASE -eq 1 ]; then echo "=== Building Linux release ===" clean_for_platform linux - ./util/build.sh --disable-tests "${REMAINING_ARGS[@]}" + ./util/build.sh --disable-tests ${REMAINING_ARGS[@]+"${REMAINING_ARGS[@]}"} package_release linux-amd64 fi if [ $BUILD_WIN_RELEASE -eq 1 ]; then echo "=== Building Windows release ===" clean_for_platform windows - ./util/build-win.sh --disable-tests "${REMAINING_ARGS[@]}" + ./util/build-win.sh --disable-tests ${REMAINING_ARGS[@]+"${REMAINING_ARGS[@]}"} package_release win64 fi if [ $BUILD_MAC_RELEASE -eq 1 ]; then echo "=== Building macOS release ===" clean_for_platform macos - ./util/build-mac.sh --disable-tests "${REMAINING_ARGS[@]}" + ./util/build-mac.sh --disable-tests ${REMAINING_ARGS[@]+"${REMAINING_ARGS[@]}"} package_release macos fi @@ -201,11 +201,11 @@ fi # Standard build (auto-detect OS) if [[ "$OSTYPE" == "linux-gnu"* ]]; then - ./util/build.sh --disable-tests "${REMAINING_ARGS[@]}" + ./util/build.sh --disable-tests ${REMAINING_ARGS[@]+"${REMAINING_ARGS[@]}"} elif [[ "$OSTYPE" == "darwin"* ]]; then - ./util/build-mac.sh --disable-tests "${REMAINING_ARGS[@]}" + ./util/build-mac.sh --disable-tests ${REMAINING_ARGS[@]+"${REMAINING_ARGS[@]}"} elif [[ "$OSTYPE" == "msys"* ]]; then - ./util/build-win.sh --disable-tests "${REMAINING_ARGS[@]}" + ./util/build-win.sh --disable-tests ${REMAINING_ARGS[@]+"${REMAINING_ARGS[@]}"} else echo "Unable to detect your OS. What are you using?" fi diff --git a/depends/builders/darwin.mk b/depends/builders/darwin.mk index cbbc5a667..4c366d8de 100644 --- a/depends/builders/darwin.mk +++ b/depends/builders/darwin.mk @@ -1,5 +1,5 @@ -build_darwin_CC = gcc-8 -build_darwin_CXX = g++-8 +build_darwin_CC = gcc-15 +build_darwin_CXX = g++-15 build_darwin_AR: = $(shell xcrun -f ar) build_darwin_RANLIB: = $(shell xcrun -f ranlib) build_darwin_STRIP: = $(shell xcrun -f strip) @@ -10,8 +10,8 @@ build_darwin_SHA256SUM = shasum -a 256 build_darwin_DOWNLOAD = curl --connect-timeout $(DOWNLOAD_CONNECT_TIMEOUT) --retry $(DOWNLOAD_RETRIES) -L -f -o #darwin host on darwin builder. overrides darwin host preferences. -darwin_CC= gcc-8 -darwin_CXX= g++-8 +darwin_CC= gcc-15 +darwin_CXX= g++-15 darwin_AR:=$(shell xcrun -f ar) darwin_RANLIB:=$(shell xcrun -f ranlib) darwin_STRIP:=$(shell xcrun -f strip) diff --git a/depends/hosts/darwin.mk b/depends/hosts/darwin.mk index 7be744aeb..fb5e7323c 100644 --- a/depends/hosts/darwin.mk +++ b/depends/hosts/darwin.mk @@ -2,8 +2,8 @@ OSX_MIN_VERSION=10.12 OSX_SDK_VERSION=10.12 OSX_SDK=$(SDK_PATH)/MacOSX$(OSX_SDK_VERSION).sdk LD64_VERSION=253.9 -darwin_CC=gcc-8 -target $(host) -mmacosx-version-min=$(OSX_MIN_VERSION) --sysroot $(OSX_SDK) -mlinker-version=$(LD64_VERSION) -darwin_CXX=g++-8 -target $(host) -mmacosx-version-min=$(OSX_MIN_VERSION) --sysroot $(OSX_SDK) -mlinker-version=$(LD64_VERSION) +darwin_CC=gcc-15 -target $(host) -mmacosx-version-min=$(OSX_MIN_VERSION) --sysroot $(OSX_SDK) -mlinker-version=$(LD64_VERSION) +darwin_CXX=g++-15 -target $(host) -mmacosx-version-min=$(OSX_MIN_VERSION) --sysroot $(OSX_SDK) -mlinker-version=$(LD64_VERSION) darwin_CFLAGS=-pipe darwin_CXXFLAGS=$(darwin_CFLAGS) diff --git a/depends/packages/librustzcash.mk b/depends/packages/librustzcash.mk index fe6ef8a58..cc3e95077 100644 --- a/depends/packages/librustzcash.mk +++ b/depends/packages/librustzcash.mk @@ -41,7 +41,7 @@ define $(package)_preprocess_cmds endef define $(package)_build_cmds - $(host_prefix)/native/bin/cargo build --package librustzcash $($(package)_build_opts) + CARGO=$(HOME)/.cargo/bin/cargo RUSTC=$(HOME)/.cargo/bin/rustc $(HOME)/.cargo/bin/cargo build --package librustzcash $($(package)_build_opts) endef define $(package)_stage_cmds diff --git a/depends/strip-rlib-metadata.sh b/depends/strip-rlib-metadata.sh new file mode 100755 index 000000000..94c337185 --- /dev/null +++ b/depends/strip-rlib-metadata.sh @@ -0,0 +1,8 @@ +#!/bin/sh +# Strip rust.metadata.bin from .rlib archives for macOS linker compatibility +RLIB_DIR="$1" +if [ -d "$RLIB_DIR" ]; then + for rlib in "$RLIB_DIR"/*.rlib; do + [ -f "$rlib" ] && ar d "$rlib" rust.metadata.bin 2>/dev/null || true + done +fi diff --git a/src/Makefile.am b/src/Makefile.am index 429f761cb..745921542 100644 --- a/src/Makefile.am +++ b/src/Makefile.am @@ -594,7 +594,7 @@ libzcash_a_CPPFLAGS = -DMULTICORE -fopenmp -fPIC -DBOOST_SPIRIT_THREADSAFE -DHAV #libzcash_a_LDFLAGS = $(RELDFLAGS) $(AM_LDFLAGS) $(LIBTOOL_APP_LDFLAGS) #libzcash_a_CPPFLAGS = $(AM_CPPFLAGS) $(BITCOIN_INCLUDES) -DMONTGOMERY_OUTPUT -libzcash_a_CXXFLAGS = $(SAN_CXXFLAGS) $(HARDENED_CXXFLAGS) -fwrapv -fno-strict-aliasing -std=gnu17 +libzcash_a_CXXFLAGS = $(SAN_CXXFLAGS) $(HARDENED_CXXFLAGS) -fwrapv -fno-strict-aliasing -std=gnu++17 libzcash_a_LDFLAGS = $(SAN_LDFLAGS) $(HARDENED_LDFLAGS) libzcash_a_CPPFLAGS += -DMONTGOMERY_OUTPUT @@ -636,7 +636,7 @@ libhush_a_SOURCES = \ libhush_a_CPPFLAGS = -DMULTICORE -fopenmp -fPIC -DBINARY_OUTPUT -DCURVE_ALT_BN128 -DBOOST_SPIRIT_THREADSAFE -DHAVE_BUILD_INFO -D__STDC_FORMAT_MACROS $(HARDENED_CPPFLAGS) -pipe -O1 -g -Wstack-protector -fstack-protector-all -fPIE -fvisibility=hidden -DSTATIC $(BITCOIN_INCLUDES) -libhush_a_CXXFLAGS = $(HARDENED_CXXFLAGS) -fwrapv -fno-strict-aliasing -std=gnu17 +libhush_a_CXXFLAGS = $(HARDENED_CXXFLAGS) -fwrapv -fno-strict-aliasing -std=gnu++17 libhush_a_LDFLAGS = $(HARDENED_LDFLAGS) diff --git a/src/cc/Makefile_custom b/src/cc/Makefile_custom index d3ecf9c25..ec27f6283 100644 --- a/src/cc/Makefile_custom +++ b/src/cc/Makefile_custom @@ -1,5 +1,5 @@ SHELL = /bin/sh -CC_DARWIN = g++-8 +CC_DARWIN = g++-15 CC_WIN = x86_64-w64-mingw32-gcc-posix CC_AARCH64 = aarch64-linux-gnu-g++ CFLAGS_DARWIN = -DBUILD_CUSTOMCC -std=c++11 -arch x86_64 -I../secp256k1/include -I../../depends/$(shell echo `../..//depends/config.guess`/include) -I../univalue/include -I../leveldb/include -I.. -I. -fPIC -Wl,-undefined -Wl,dynamic_lookup -Wno-write-strings -shared -dynamiclib diff --git a/src/cc/customcc.dylib b/src/cc/customcc.dylib new file mode 100644 index 0000000000000000000000000000000000000000..dc173003263572a3887de351cb1129a0fe562254 GIT binary patch literal 104288 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 YcaqT}FqIT;tJF{e inline void MemoryBarrier() { - OSMemoryBarrier(); + std::atomic_thread_fence(std::memory_order_seq_cst); } #define LEVELDB_HAVE_MEMORY_BARRIER diff --git a/src/libcc.dylib b/src/libcc.dylib new file mode 100644 index 0000000000000000000000000000000000000000..dc173003263572a3887de351cb1129a0fe562254 GIT binary patch literal 104288 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 YcaqT}FqIT;tJF{e +#include +#include #ifdef _WIN32 #include #else @@ -2004,7 +2006,7 @@ void ThreadMessageHandler() // Randomize the order in which we process messages from/to our peers. // This prevents attacks in which an attacker exploits having multiple // consecutive connections in the vNodes list. - random_shuffle(vNodesCopy.begin(), vNodesCopy.end(), GetRandInt); + std::shuffle(vNodesCopy.begin(), vNodesCopy.end(), std::mt19937(GetRand(std::numeric_limits::max()))); BOOST_FOREACH(CNode* pnode, vNodesCopy) { @@ -2516,7 +2518,7 @@ void RelayTransaction(const CTransaction& tx, const CDataStream& ss) // We always round down, except when we have only 1 connection auto newSize = (vNodes.size() / 2) == 0 ? 1 : (vNodes.size() / 2); - random_shuffle( vRelayNodes.begin(), vRelayNodes.end(), GetRandInt ); + std::shuffle( vRelayNodes.begin(), vRelayNodes.end(), std::mt19937(GetRand(std::numeric_limits::max())) ); vRelayNodes.resize(newSize); if (HUSH_TESTNODE==1 && vNodes.size() == 0) { diff --git a/src/transaction_builder.cpp b/src/transaction_builder.cpp index 10f2383e5..b3d8ac758 100644 --- a/src/transaction_builder.cpp +++ b/src/transaction_builder.cpp @@ -11,6 +11,8 @@ #include #include #include "zcash/Note.hpp" +#include +#include extern bool fZDebug; SpendDescriptionInfo::SpendDescriptionInfo( @@ -66,7 +68,7 @@ void TransactionBuilder::AddSaplingOutput( void TransactionBuilder::ShuffleOutputs() { LogPrintf("%s: Shuffling %d zouts\n", __func__, outputs.size() ); - random_shuffle( outputs.begin(), outputs.end(), GetRandInt ); + std::shuffle( outputs.begin(), outputs.end(), std::mt19937(GetRand(std::numeric_limits::max())) ); } void TransactionBuilder::AddTransparentInput(COutPoint utxo, CScript scriptPubKey, CAmount value, uint32_t _nSequence) diff --git a/src/wallet/wallet.cpp b/src/wallet/wallet.cpp index 31a266533..7308d7007 100644 --- a/src/wallet/wallet.cpp +++ b/src/wallet/wallet.cpp @@ -39,6 +39,8 @@ #include "coins.h" #include "wallet/asyncrpcoperation_saplingconsolidation.h" #include "wallet/asyncrpcoperation_sweep.h" +#include +#include #include "zcash/zip32.h" #include "cc/CCinclude.h" #include @@ -3416,7 +3418,7 @@ bool CWallet::SelectCoinsMinConf(const CAmount& nTargetValue, int nConfMine, int vector > > vValue; CAmount nTotalLower = 0; - random_shuffle(vCoins.begin(), vCoins.end(), GetRandInt); + std::shuffle(vCoins.begin(), vCoins.end(), std::mt19937(GetRand(std::numeric_limits::max()))); BOOST_FOREACH(const COutput &output, vCoins) { diff --git a/util/build-mac.sh b/util/build-mac.sh index 745a72238..7acd2337a 100755 --- a/util/build-mac.sh +++ b/util/build-mac.sh @@ -3,8 +3,8 @@ # Distributed under the GPLv3 software license, see the accompanying # file COPYING or https://www.gnu.org/licenses/gpl-3.0.en.html -export CC=gcc-8 -export CXX=g++-8 +export CC=gcc-15 +export CXX=g++-15 export LIBTOOL=libtool export AR=ar export RANLIB=ranlib @@ -34,16 +34,24 @@ fi # If --enable-lcov is the first argument, enable lcov coverage support: LCOV_ARG='' HARDENING_ARG='--disable-hardening' +TEST_ARG='' if [ "x${1:-}" = 'x--enable-lcov' ] then LCOV_ARG='--enable-lcov' HARDENING_ARG='--disable-hardening' shift +elif [ "x${1:-}" = 'x--disable-tests' ] +then + TEST_ARG='--enable-tests=no' + shift fi TRIPLET=`./depends/config.guess` PREFIX="$(pwd)/depends/$TRIPLET" +# Ensure system Rust is in PATH for modern macOS compatibility +export PATH="$HOME/.cargo/bin:$PATH" + make "$@" -C ./depends/ V=1 NO_QT=1 #BUILD CCLIB @@ -68,7 +76,7 @@ cd $WD ./autogen.sh CPPFLAGS="-I$PREFIX/include -arch x86_64" LDFLAGS="-L$PREFIX/lib -arch x86_64 -Wl,-no_pie" \ -CXXFLAGS='-arch x86_64 -I/usr/local/Cellar/gcc\@8/8.3.0/include/c++/8.3.0/ -I$PREFIX/include -fwrapv -fno-strict-aliasing -Wno-builtin-declaration-mismatch -Werror -g -Wl,-undefined -Wl,dynamic_lookup' \ -./configure --prefix="${PREFIX}" --with-gui=no "$HARDENING_ARG" "$LCOV_ARG" +CXXFLAGS='-arch x86_64 -I/usr/local/Cellar/gcc/15.2.0_1/include/c++/15/ -I$PREFIX/include -fwrapv -fno-strict-aliasing -Wno-builtin-declaration-mismatch -Werror -Wno-error=deprecated-declarations -g -Wl,-undefined -Wl,dynamic_lookup' \ +./configure --prefix="${PREFIX}" --with-gui=no "$HARDENING_ARG" "$LCOV_ARG" $TEST_ARG make "$@" V=1 NO_GTEST=1 STATIC=1