From b12a70f330d0ffcc3064ecf2643f8cfe765cf9c8 Mon Sep 17 00:00:00 2001 From: fanquake Date: Thu, 23 Jul 2026 11:16:04 +0100 Subject: [PATCH 1/5] guix: turn linux/win linker warnings into errors Can do this now that the GUI has been split out. riscv64-linux-gnu failus due to https://github.com/boostorg/test/issues/345: ```bash [102%] Linking CXX executable ../../bin/test_bitcoin /gnu/store/r03804zpq5i6wsalx0yaqrr5jb7pqrmv-binutils-cross-riscv64-linux-gnu-2.46.0/bin/riscv64-linux-gnu-ld: CMakeFiles/test_bitcoin.dir/main.cpp.o: in function `boost::fpe::disable(unsigned int)': /bitcoin/depends/riscv64-linux-gnu/boost/include/boost/test/impl/execution_monitor.ipp:1538:(.text+0x9dc8): warning: fedisableexcept is not implemented and will always fail /gnu/store/r03804zpq5i6wsalx0yaqrr5jb7pqrmv-binutils-cross-riscv64-linux-gnu-2.46.0/bin/riscv64-linux-gnu-ld: CMakeFiles/test_bitcoin.dir/main.cpp.o: in function `boost::fpe::enable(unsigned int)': /bitcoin/depends/riscv64-linux-gnu/boost/include/boost/test/impl/execution_monitor.ipp:1502:(.text+0x9d76): warning: feenableexcept is not implemented and will always fail collect2: error: ld returned 1 exit status ``` Darwin could be done after something like https://github.com/bitcoin/bitcoin/pull/35756. --- contrib/guix/libexec/build_linux.sh | 6 ++++++ contrib/guix/libexec/build_win.sh | 2 +- contrib/guix/libexec/build_win_gui.sh | 2 +- 3 files changed, 8 insertions(+), 2 deletions(-) diff --git a/contrib/guix/libexec/build_linux.sh b/contrib/guix/libexec/build_linux.sh index 492890ecc1c..f1b25b52e55 100755 --- a/contrib/guix/libexec/build_linux.sh +++ b/contrib/guix/libexec/build_linux.sh @@ -65,6 +65,12 @@ esac # LDFLAGS HOST_LDFLAGS="-Wl,--as-needed -Wl,--dynamic-linker=$(glibc_dynamic_linker "$HOST") -Wl,-O2" +# Use LINK_WARNING_AS_ERROR when using CMake 4.x +case "$HOST" in + riscv64-linux-gnu) ;; # https://github.com/boostorg/test/issues/345 + *) HOST_LDFLAGS="${HOST_LDFLAGS} -Wl,--fatal-warnings" ;; +esac + mkdir -p "$DISTSRC" ( cd "$DISTSRC" diff --git a/contrib/guix/libexec/build_win.sh b/contrib/guix/libexec/build_win.sh index ce1f7fd4d03..de9870f879e 100755 --- a/contrib/guix/libexec/build_win.sh +++ b/contrib/guix/libexec/build_win.sh @@ -54,7 +54,7 @@ HOST_CFLAGS+=" -fno-ident" HOST_CXXFLAGS="$HOST_CFLAGS" # LDFLAGS -HOST_LDFLAGS="-Wl,--no-insert-timestamp" +HOST_LDFLAGS="-Wl,--no-insert-timestamp -Wl,--fatal-warnings" mkdir -p "$DISTSRC" ( diff --git a/contrib/guix/libexec/build_win_gui.sh b/contrib/guix/libexec/build_win_gui.sh index 94f21166392..ec5048d84ea 100755 --- a/contrib/guix/libexec/build_win_gui.sh +++ b/contrib/guix/libexec/build_win_gui.sh @@ -53,7 +53,7 @@ HOST_CFLAGS+=" -fno-ident" HOST_CXXFLAGS="$HOST_CFLAGS" # LDFLAGS -HOST_LDFLAGS="-Wl,--no-insert-timestamp" +HOST_LDFLAGS="-Wl,--no-insert-timestamp -Wl,--fatal-warnings" mkdir -p "$DISTSRC" ( From cc9b0f2266d93fd1380a0a6a15d042c3ffad5752 Mon Sep 17 00:00:00 2001 From: fanquake Date: Thu, 23 Jul 2026 14:19:06 +0100 Subject: [PATCH 2/5] guix: consolidate LLVM toolchain setup --- contrib/guix/libexec/build_macos.sh | 17 ++--------------- contrib/guix/libexec/build_macos_gui.sh | 17 ++--------------- contrib/guix/libexec/setup.sh | 16 ++++++++++++++++ 3 files changed, 20 insertions(+), 30 deletions(-) diff --git a/contrib/guix/libexec/build_macos.sh b/contrib/guix/libexec/build_macos.sh index b8dc2500994..e765b2793e6 100755 --- a/contrib/guix/libexec/build_macos.sh +++ b/contrib/guix/libexec/build_macos.sh @@ -8,21 +8,8 @@ set -o errexit -o pipefail # shellcheck source=setup.sh source "$(dirname "${BASH_SOURCE[0]}")/setup.sh" -# Set toolchain -CLANG_TOOLCHAIN="$(store_path clang-toolchain)" -LIBCXX="$(store_path libcxx)" -build_CC="${CLANG_TOOLCHAIN}/bin/clang \ - -isystem ${CLANG_TOOLCHAIN}/include" -build_CXX="${CLANG_TOOLCHAIN}/bin/clang++ \ - -stdlib=libc++ \ - -isystem ${LIBCXX}/include/c++/v1 \ - -isystem ${CLANG_TOOLCHAIN}/include" -build_LDFLAGS="-fuse-ld=lld -rtlib=compiler-rt -unwindlib=libunwind -L${LIBCXX}/lib -Wl,-rpath,${LIBCXX}/lib" -build_AR="${CLANG_TOOLCHAIN}/bin/llvm-ar" -build_RANLIB="${CLANG_TOOLCHAIN}/bin/llvm-ranlib" -build_OBJDUMP="${CLANG_TOOLCHAIN}/bin/llvm-objdump" -build_NM="${CLANG_TOOLCHAIN}/bin/llvm-nm" -build_STRIP="${CLANG_TOOLCHAIN}/bin/llvm-strip" +# Setup toolchain +llvm_toolchain # Build the depends tree make -C depends --jobs="$JOBS" HOST="$HOST" \ diff --git a/contrib/guix/libexec/build_macos_gui.sh b/contrib/guix/libexec/build_macos_gui.sh index 3db1cfac643..c1636bbf46a 100755 --- a/contrib/guix/libexec/build_macos_gui.sh +++ b/contrib/guix/libexec/build_macos_gui.sh @@ -8,21 +8,8 @@ set -o errexit -o pipefail # shellcheck source=setup.sh source "$(dirname "${BASH_SOURCE[0]}")/setup.sh" -# Set toolchain -CLANG_TOOLCHAIN="$(store_path clang-toolchain)" -LIBCXX="$(store_path libcxx)" -build_CC="${CLANG_TOOLCHAIN}/bin/clang \ - -isystem ${CLANG_TOOLCHAIN}/include" -build_CXX="${CLANG_TOOLCHAIN}/bin/clang++ \ - -stdlib=libc++ \ - -isystem ${LIBCXX}/include/c++/v1 \ - -isystem ${CLANG_TOOLCHAIN}/include" -build_LDFLAGS="-fuse-ld=lld -rtlib=compiler-rt -unwindlib=libunwind -L${LIBCXX}/lib -Wl,-rpath,${LIBCXX}/lib" -build_AR="${CLANG_TOOLCHAIN}/bin/llvm-ar" -build_RANLIB="${CLANG_TOOLCHAIN}/bin/llvm-ranlib" -build_OBJDUMP="${CLANG_TOOLCHAIN}/bin/llvm-objdump" -build_NM="${CLANG_TOOLCHAIN}/bin/llvm-nm" -build_STRIP="${CLANG_TOOLCHAIN}/bin/llvm-strip" +# Setup toolchain +llvm_toolchain # Build the depends tree make -C depends --jobs="$JOBS" HOST="$HOST" \ diff --git a/contrib/guix/libexec/setup.sh b/contrib/guix/libexec/setup.sh index c6858c9862d..af2e8add524 100755 --- a/contrib/guix/libexec/setup.sh +++ b/contrib/guix/libexec/setup.sh @@ -86,6 +86,22 @@ glibc_dynamic_linker() { esac } +llvm_toolchain() { + local CLANG_TOOLCHAIN LIB_CXX + + CLANG_TOOLCHAIN="$(store_path clang-toolchain)" + LIB_CXX="$(store_path libcxx)" + + export build_CC="${CLANG_TOOLCHAIN}/bin/clang -isystem ${CLANG_TOOLCHAIN}/include" + export build_CXX="${CLANG_TOOLCHAIN}/bin/clang++ -stdlib=libc++ -isystem ${LIB_CXX}/include/c++/v1 -isystem ${CLANG_TOOLCHAIN}/include" + export build_LDFLAGS="-fuse-ld=lld -rtlib=compiler-rt -unwindlib=libunwind -L${LIB_CXX}/lib -Wl,-rpath,${LIB_CXX}/lib" + export build_AR="${CLANG_TOOLCHAIN}/bin/llvm-ar" + export build_RANLIB="${CLANG_TOOLCHAIN}/bin/llvm-ranlib" + export build_OBJDUMP="${CLANG_TOOLCHAIN}/bin/llvm-objdump" + export build_NM="${CLANG_TOOLCHAIN}/bin/llvm-nm" + export build_STRIP="${CLANG_TOOLCHAIN}/bin/llvm-strip" +} + # Disable Guix ld auto-rpath behavior export GUIX_LD_WRAPPER_DISABLE_RPATH=yes From 288f76ed0fcb42cca5530e3e1b1a76627c12de79 Mon Sep 17 00:00:00 2001 From: fanquake Date: Fri, 24 Jul 2026 09:50:18 +0100 Subject: [PATCH 3/5] guix: consolidate mingw-w64 toolchain setup --- contrib/guix/libexec/build_win.sh | 28 ++---------------------- contrib/guix/libexec/build_win_gui.sh | 28 ++---------------------- contrib/guix/libexec/setup.sh | 31 +++++++++++++++++++++++++++ 3 files changed, 35 insertions(+), 52 deletions(-) diff --git a/contrib/guix/libexec/build_win.sh b/contrib/guix/libexec/build_win.sh index de9870f879e..6e54a3906d9 100755 --- a/contrib/guix/libexec/build_win.sh +++ b/contrib/guix/libexec/build_win.sh @@ -8,32 +8,8 @@ set -o errexit -o pipefail # shellcheck source=setup.sh source "$(dirname "${BASH_SOURCE[0]}")/setup.sh" -# Set environment variables to point the NATIVE toolchain to the right -# includes/libs -NATIVE_GCC="$(store_path gcc-toolchain)" - -# Set native toolchain -build_CC="${NATIVE_GCC}/bin/gcc -isystem ${NATIVE_GCC}/include" -build_CXX="${NATIVE_GCC}/bin/g++ -isystem ${NATIVE_GCC}/include/c++ -isystem ${NATIVE_GCC}/include" - -# Set environment variables to point the CROSS toolchain to the right -# includes/libs for $HOST -# Determine output paths to use in CROSS_* environment variables -CROSS_GLIBC="$(store_path "mingw-w64-x86_64-winpthreads")" -CROSS_GCC="$(store_path "gcc-cross-${HOST}")" -CROSS_GCC_LIB_STORE="$(store_path "gcc-cross-${HOST}" lib)" -CROSS_GCC_LIBS=( "${CROSS_GCC_LIB_STORE}/lib/gcc/${HOST}"/* ) # This expands to an array of directories... -CROSS_GCC_LIB="${CROSS_GCC_LIBS[0]}" # ...we just want the first one (there should only be one) - -# The search path ordering is generally: -# 1. gcc-related search paths -# 2. libc-related search paths -# 2. kernel-header-related search paths (not applicable to mingw-w64 hosts) -export CROSS_C_INCLUDE_PATH="${CROSS_GCC_LIB}/include:${CROSS_GCC_LIB}/include-fixed:${CROSS_GLIBC}/include" -export CROSS_CPLUS_INCLUDE_PATH="${CROSS_GCC}/include/c++:${CROSS_GCC}/include/c++/${HOST}:${CROSS_GCC}/include/c++/backward:${CROSS_C_INCLUDE_PATH}" -export CROSS_LIBRARY_PATH="${CROSS_GCC_LIB_STORE}/lib:${CROSS_GCC_LIB}:${CROSS_GLIBC}/lib" - -check_cross_paths "${CROSS_C_INCLUDE_PATH}:${CROSS_CPLUS_INCLUDE_PATH}:${CROSS_LIBRARY_PATH}" +# setup mingw-w64 toolchain +mingw_w64_toolchain # Build the depends tree make -C depends --jobs="$JOBS" HOST="$HOST" \ diff --git a/contrib/guix/libexec/build_win_gui.sh b/contrib/guix/libexec/build_win_gui.sh index ec5048d84ea..809e1c72180 100755 --- a/contrib/guix/libexec/build_win_gui.sh +++ b/contrib/guix/libexec/build_win_gui.sh @@ -8,32 +8,8 @@ set -o errexit -o pipefail # shellcheck source=setup.sh source "$(dirname "${BASH_SOURCE[0]}")/setup.sh" -# Set environment variables to point the NATIVE toolchain to the right -# includes/libs -NATIVE_GCC="$(store_path gcc-toolchain)" - -# Set native toolchain -build_CC="${NATIVE_GCC}/bin/gcc -isystem ${NATIVE_GCC}/include" -build_CXX="${NATIVE_GCC}/bin/g++ -isystem ${NATIVE_GCC}/include/c++ -isystem ${NATIVE_GCC}/include" - -# Set environment variables to point the CROSS toolchain to the right -# includes/libs for $HOST -# Determine output paths to use in CROSS_* environment variables -CROSS_GLIBC="$(store_path "mingw-w64-x86_64-winpthreads")" -CROSS_GCC="$(store_path "gcc-cross-${HOST}")" -CROSS_GCC_LIB_STORE="$(store_path "gcc-cross-${HOST}" lib)" -CROSS_GCC_LIBS=( "${CROSS_GCC_LIB_STORE}/lib/gcc/${HOST}"/* ) # This expands to an array of directories... -CROSS_GCC_LIB="${CROSS_GCC_LIBS[0]}" # ...we just want the first one (there should only be one) - -# The search path ordering is generally: -# 1. gcc-related search paths -# 2. libc-related search paths -# 2. kernel-header-related search paths (not applicable to mingw-w64 hosts) -export CROSS_C_INCLUDE_PATH="${CROSS_GCC_LIB}/include:${CROSS_GCC_LIB}/include-fixed:${CROSS_GLIBC}/include" -export CROSS_CPLUS_INCLUDE_PATH="${CROSS_GCC}/include/c++:${CROSS_GCC}/include/c++/${HOST}:${CROSS_GCC}/include/c++/backward:${CROSS_C_INCLUDE_PATH}" -export CROSS_LIBRARY_PATH="${CROSS_GCC_LIB_STORE}/lib:${CROSS_GCC_LIB}:${CROSS_GLIBC}/lib" - -check_cross_paths "${CROSS_C_INCLUDE_PATH}:${CROSS_CPLUS_INCLUDE_PATH}:${CROSS_LIBRARY_PATH}" +# setup mingw-w64 toolchain +mingw_w64_toolchain # Build the depends tree make -C depends --jobs="$JOBS" HOST="$HOST" \ diff --git a/contrib/guix/libexec/setup.sh b/contrib/guix/libexec/setup.sh index af2e8add524..031d5904161 100755 --- a/contrib/guix/libexec/setup.sh +++ b/contrib/guix/libexec/setup.sh @@ -102,6 +102,37 @@ llvm_toolchain() { export build_STRIP="${CLANG_TOOLCHAIN}/bin/llvm-strip" } +mingw_w64_toolchain() { + # Set environment variables to point the NATIVE toolchain to the right + # includes/libs + local NATIVE_GCC CROSS_GLIBC CROSS_GCC CROSS_GCC_LIB_STORE CROSS_GCC_LIBS CROSS_GCC_LIB + + NATIVE_GCC="$(store_path gcc-toolchain)" + + # Set native toolchain + export build_CC="${NATIVE_GCC}/bin/gcc -isystem ${NATIVE_GCC}/include" + export build_CXX="${NATIVE_GCC}/bin/g++ -isystem ${NATIVE_GCC}/include/c++ -isystem ${NATIVE_GCC}/include" + + # Set environment variables to point the CROSS toolchain to the right + # includes/libs for $HOST + # Determine output paths to use in CROSS_* environment variables + CROSS_GLIBC="$(store_path "mingw-w64-x86_64-winpthreads")" + CROSS_GCC="$(store_path "gcc-cross-${HOST}")" + CROSS_GCC_LIB_STORE="$(store_path "gcc-cross-${HOST}" lib)" + CROSS_GCC_LIBS=( "${CROSS_GCC_LIB_STORE}/lib/gcc/${HOST}"/* ) # This expands to an array of directories... + CROSS_GCC_LIB="${CROSS_GCC_LIBS[0]}" # ...we just want the first one (there should only be one) + + # The search path ordering is generally: + # 1. gcc-related search paths + # 2. libc-related search paths + # 2. kernel-header-related search paths (not applicable to mingw-w64 hosts) + export CROSS_C_INCLUDE_PATH="${CROSS_GCC_LIB}/include:${CROSS_GCC_LIB}/include-fixed:${CROSS_GLIBC}/include" + export CROSS_CPLUS_INCLUDE_PATH="${CROSS_GCC}/include/c++:${CROSS_GCC}/include/c++/${HOST}:${CROSS_GCC}/include/c++/backward:${CROSS_C_INCLUDE_PATH}" + export CROSS_LIBRARY_PATH="${CROSS_GCC_LIB_STORE}/lib:${CROSS_GCC_LIB}:${CROSS_GLIBC}/lib" + + check_cross_paths "${CROSS_C_INCLUDE_PATH}:${CROSS_CPLUS_INCLUDE_PATH}:${CROSS_LIBRARY_PATH}" +} + # Disable Guix ld auto-rpath behavior export GUIX_LD_WRAPPER_DISABLE_RPATH=yes From 665f11d04ac0fbc43ee6165ed7f005ffc178b115 Mon Sep 17 00:00:00 2001 From: fanquake Date: Fri, 24 Jul 2026 10:15:53 +0100 Subject: [PATCH 4/5] guix: consolidate gcc toolchain setup --- contrib/guix/libexec/build_linux.sh | 28 ++-------------------- contrib/guix/libexec/build_linux_gui.sh | 28 ++-------------------- contrib/guix/libexec/setup.sh | 31 +++++++++++++++++++++++++ 3 files changed, 35 insertions(+), 52 deletions(-) diff --git a/contrib/guix/libexec/build_linux.sh b/contrib/guix/libexec/build_linux.sh index f1b25b52e55..7cf39d4ba9e 100755 --- a/contrib/guix/libexec/build_linux.sh +++ b/contrib/guix/libexec/build_linux.sh @@ -8,32 +8,8 @@ set -o errexit -o pipefail # shellcheck source=setup.sh source "$(dirname "${BASH_SOURCE[0]}")/setup.sh" -# Set environment variables to point the NATIVE toolchain to the right -# includes/libs -NATIVE_GCC="$(store_path gcc-toolchain)" - -# Set native toolchain -build_CC="${NATIVE_GCC}/bin/gcc -isystem ${NATIVE_GCC}/include" -build_CXX="${NATIVE_GCC}/bin/g++ -isystem ${NATIVE_GCC}/include/c++ -isystem ${NATIVE_GCC}/include" - -NATIVE_GCC_STATIC="$(store_path gcc-toolchain static)" -export LIBRARY_PATH="${NATIVE_GCC}/lib:${NATIVE_GCC_STATIC}/lib" - -# Set environment variables to point the CROSS toolchain to the right -# includes/libs for $HOST -CROSS_GLIBC="$(store_path "glibc-cross-${HOST}")" -CROSS_GLIBC_STATIC="$(store_path "glibc-cross-${HOST}" static)" -CROSS_KERNEL="$(store_path "linux-libre-headers-cross-${HOST}")" -CROSS_GCC="$(store_path "gcc-cross-${HOST}")" -CROSS_GCC_LIB_STORE="$(store_path "gcc-cross-${HOST}" lib)" -CROSS_GCC_LIBS=( "${CROSS_GCC_LIB_STORE}/lib/gcc/${HOST}"/* ) # This expands to an array of directories... -CROSS_GCC_LIB="${CROSS_GCC_LIBS[0]}" # ...we just want the first one (there should only be one) - -export CROSS_C_INCLUDE_PATH="${CROSS_GCC_LIB}/include:${CROSS_GCC_LIB}/include-fixed:${CROSS_GLIBC}/include:${CROSS_KERNEL}/include" -export CROSS_CPLUS_INCLUDE_PATH="${CROSS_GCC}/include/c++:${CROSS_GCC}/include/c++/${HOST}:${CROSS_GCC}/include/c++/backward:${CROSS_C_INCLUDE_PATH}" -export CROSS_LIBRARY_PATH="${CROSS_GCC_LIB_STORE}/lib:${CROSS_GCC_LIB}:${CROSS_GLIBC}/lib:${CROSS_GLIBC_STATIC}/lib" - -check_cross_paths "${CROSS_C_INCLUDE_PATH}:${CROSS_CPLUS_INCLUDE_PATH}:${CROSS_LIBRARY_PATH}" +# setup gcc toolchain +gcc_toolchain # Build the depends tree, overriding variables that assume multilib gcc make -C depends --jobs="$JOBS" HOST="$HOST" \ diff --git a/contrib/guix/libexec/build_linux_gui.sh b/contrib/guix/libexec/build_linux_gui.sh index 218bc0a952c..33aa876868d 100755 --- a/contrib/guix/libexec/build_linux_gui.sh +++ b/contrib/guix/libexec/build_linux_gui.sh @@ -8,32 +8,8 @@ set -o errexit -o pipefail # shellcheck source=setup.sh source "$(dirname "${BASH_SOURCE[0]}")/setup.sh" -# Set environment variables to point the NATIVE toolchain to the right -# includes/libs -NATIVE_GCC="$(store_path gcc-toolchain)" - -# Set native toolchain -build_CC="${NATIVE_GCC}/bin/gcc -isystem ${NATIVE_GCC}/include" -build_CXX="${NATIVE_GCC}/bin/g++ -isystem ${NATIVE_GCC}/include/c++ -isystem ${NATIVE_GCC}/include" - -NATIVE_GCC_STATIC="$(store_path gcc-toolchain static)" -export LIBRARY_PATH="${NATIVE_GCC}/lib:${NATIVE_GCC_STATIC}/lib" - -# Set environment variables to point the CROSS toolchain to the right -# includes/libs for $HOST -CROSS_GLIBC="$(store_path "glibc-cross-${HOST}")" -CROSS_GLIBC_STATIC="$(store_path "glibc-cross-${HOST}" static)" -CROSS_KERNEL="$(store_path "linux-libre-headers-cross-${HOST}")" -CROSS_GCC="$(store_path "gcc-cross-${HOST}")" -CROSS_GCC_LIB_STORE="$(store_path "gcc-cross-${HOST}" lib)" -CROSS_GCC_LIBS=( "${CROSS_GCC_LIB_STORE}/lib/gcc/${HOST}"/* ) # This expands to an array of directories... -CROSS_GCC_LIB="${CROSS_GCC_LIBS[0]}" # ...we just want the first one (there should only be one) - -export CROSS_C_INCLUDE_PATH="${CROSS_GCC_LIB}/include:${CROSS_GCC_LIB}/include-fixed:${CROSS_GLIBC}/include:${CROSS_KERNEL}/include" -export CROSS_CPLUS_INCLUDE_PATH="${CROSS_GCC}/include/c++:${CROSS_GCC}/include/c++/${HOST}:${CROSS_GCC}/include/c++/backward:${CROSS_C_INCLUDE_PATH}" -export CROSS_LIBRARY_PATH="${CROSS_GCC_LIB_STORE}/lib:${CROSS_GCC_LIB}:${CROSS_GLIBC}/lib:${CROSS_GLIBC_STATIC}/lib" - -check_cross_paths "${CROSS_C_INCLUDE_PATH}:${CROSS_CPLUS_INCLUDE_PATH}:${CROSS_LIBRARY_PATH}" +# setup gcc toolchain +gcc_toolchain # Build the depends tree, overriding variables that assume multilib gcc make -C depends --jobs="$JOBS" HOST="$HOST" \ diff --git a/contrib/guix/libexec/setup.sh b/contrib/guix/libexec/setup.sh index 031d5904161..2e3eb159838 100755 --- a/contrib/guix/libexec/setup.sh +++ b/contrib/guix/libexec/setup.sh @@ -86,6 +86,37 @@ glibc_dynamic_linker() { esac } +gcc_toolchain() { + # Set environment variables to point the NATIVE toolchain to the right + # includes/libs + local NATIVE_GCC NATIVE_GCC_STATIC CROSS_GLIBC CROSS_GLIBC_STATIC CROSS_KERNEL CROSS_GCC CROSS_GCC_LIB_STORE CROSS_GCC_LIBS CROSS_GCC_LIB + + NATIVE_GCC="$(store_path gcc-toolchain)" + + # Set native toolchain + export build_CC="${NATIVE_GCC}/bin/gcc -isystem ${NATIVE_GCC}/include" + export build_CXX="${NATIVE_GCC}/bin/g++ -isystem ${NATIVE_GCC}/include/c++ -isystem ${NATIVE_GCC}/include" + + NATIVE_GCC_STATIC="$(store_path gcc-toolchain static)" + export LIBRARY_PATH="${NATIVE_GCC}/lib:${NATIVE_GCC_STATIC}/lib" + + # Set environment variables to point the CROSS toolchain to the right + # includes/libs for $HOST + CROSS_GLIBC="$(store_path "glibc-cross-${HOST}")" + CROSS_GLIBC_STATIC="$(store_path "glibc-cross-${HOST}" static)" + CROSS_KERNEL="$(store_path "linux-libre-headers-cross-${HOST}")" + CROSS_GCC="$(store_path "gcc-cross-${HOST}")" + CROSS_GCC_LIB_STORE="$(store_path "gcc-cross-${HOST}" lib)" + CROSS_GCC_LIBS=( "${CROSS_GCC_LIB_STORE}/lib/gcc/${HOST}"/* ) # This expands to an array of directories... + CROSS_GCC_LIB="${CROSS_GCC_LIBS[0]}" # ...we just want the first one (there should only be one) + + export CROSS_C_INCLUDE_PATH="${CROSS_GCC_LIB}/include:${CROSS_GCC_LIB}/include-fixed:${CROSS_GLIBC}/include:${CROSS_KERNEL}/include" + export CROSS_CPLUS_INCLUDE_PATH="${CROSS_GCC}/include/c++:${CROSS_GCC}/include/c++/${HOST}:${CROSS_GCC}/include/c++/backward:${CROSS_C_INCLUDE_PATH}" + export CROSS_LIBRARY_PATH="${CROSS_GCC_LIB_STORE}/lib:${CROSS_GCC_LIB}:${CROSS_GLIBC}/lib:${CROSS_GLIBC_STATIC}/lib" + + check_cross_paths "${CROSS_C_INCLUDE_PATH}:${CROSS_CPLUS_INCLUDE_PATH}:${CROSS_LIBRARY_PATH}" +} + llvm_toolchain() { local CLANG_TOOLCHAIN LIB_CXX From 683ae4c520b17d93e1fe7695506d1815ae200ded Mon Sep 17 00:00:00 2001 From: fanquake Date: Fri, 24 Jul 2026 14:46:22 +0100 Subject: [PATCH 5/5] guix: consolidate config flags --- contrib/guix/libexec/build_linux.sh | 7 ++++--- contrib/guix/libexec/build_linux_gui.sh | 5 +++-- contrib/guix/libexec/build_macos.sh | 4 ++-- contrib/guix/libexec/build_macos_gui.sh | 6 +++--- contrib/guix/libexec/build_win.sh | 4 ++-- contrib/guix/libexec/build_win_gui.sh | 4 ++-- 6 files changed, 16 insertions(+), 14 deletions(-) diff --git a/contrib/guix/libexec/build_linux.sh b/contrib/guix/libexec/build_linux.sh index 7cf39d4ba9e..212b86c23dc 100755 --- a/contrib/guix/libexec/build_linux.sh +++ b/contrib/guix/libexec/build_linux.sh @@ -58,15 +58,16 @@ mkdir -p "$DISTSRC" env CFLAGS="${HOST_CFLAGS}" CXXFLAGS="${HOST_CXXFLAGS}" LDFLAGS="${HOST_LDFLAGS}" \ cmake -S . -B build \ --toolchain "${BASEPREFIX}/${HOST}/toolchain.cmake" \ - -Werror=dev \ -DBUILD_BENCH=OFF \ -DBUILD_FUZZ_BINARY=OFF \ -DBUILD_GUI=OFF \ + -DBUILD_GUI_TESTS=OFF \ + -DCMAKE_EXE_LINKER_FLAGS="${HOST_LDFLAGS} -static-libstdc++ -static-libgcc" \ -DCMAKE_INSTALL_PREFIX="${INSTALLPATH}" \ -DCMAKE_SKIP_RPATH=TRUE \ -DREDUCE_EXPORTS=ON \ - -DCMAKE_EXE_LINKER_FLAGS="${HOST_LDFLAGS} -static-libstdc++ -static-libgcc" \ - -DWITH_CCACHE=OFF + -DWITH_CCACHE=OFF \ + -Werror=dev # Build Bitcoin Core cmake --build build -j "$JOBS" diff --git a/contrib/guix/libexec/build_linux_gui.sh b/contrib/guix/libexec/build_linux_gui.sh index 33aa876868d..f069d4b4f1b 100755 --- a/contrib/guix/libexec/build_linux_gui.sh +++ b/contrib/guix/libexec/build_linux_gui.sh @@ -51,8 +51,8 @@ mkdir -p "$DISTSRC" env CFLAGS="${HOST_CFLAGS}" CXXFLAGS="${HOST_CXXFLAGS}" LDFLAGS="${HOST_LDFLAGS}" \ cmake -S . -B build \ --toolchain "${BASEPREFIX}/${HOST}/toolchain.cmake" \ - -Werror=dev \ -DBUILD_BENCH=OFF \ + -DBUILD_BITCOIN_BIN=OFF \ -DBUILD_CLI=OFF \ -DBUILD_DAEMON=OFF \ -DBUILD_FUZZ_BINARY=OFF \ @@ -65,7 +65,8 @@ mkdir -p "$DISTSRC" -DCMAKE_INSTALL_PREFIX="${INSTALLPATH}" \ -DCMAKE_SKIP_RPATH=TRUE \ -DREDUCE_EXPORTS=ON \ - -DWITH_CCACHE=OFF + -DWITH_CCACHE=OFF \ + -Werror=dev # Build Bitcoin Core cmake --build build -j "$JOBS" --target bitcoin-gui bitcoin-qt diff --git a/contrib/guix/libexec/build_macos.sh b/contrib/guix/libexec/build_macos.sh index e765b2793e6..08298d3513c 100755 --- a/contrib/guix/libexec/build_macos.sh +++ b/contrib/guix/libexec/build_macos.sh @@ -37,7 +37,6 @@ mkdir -p "$DISTSRC" # Configure this DISTSRC for $HOST env cmake -S . -B build \ --toolchain "${BASEPREFIX}/${HOST}/toolchain.cmake" \ - -Werror=dev \ -DBUILD_BENCH=OFF \ -DBUILD_FUZZ_BINARY=OFF \ -DBUILD_GUI=OFF \ @@ -45,7 +44,8 @@ mkdir -p "$DISTSRC" -DCMAKE_INSTALL_PREFIX="${INSTALLPATH}" \ -DCMAKE_SKIP_RPATH=TRUE \ -DREDUCE_EXPORTS=ON \ - -DWITH_CCACHE=OFF + -DWITH_CCACHE=OFF \ + -Werror=dev # Build Bitcoin Core cmake --build build -j "$JOBS" diff --git a/contrib/guix/libexec/build_macos_gui.sh b/contrib/guix/libexec/build_macos_gui.sh index c1636bbf46a..1f2dbc6468d 100755 --- a/contrib/guix/libexec/build_macos_gui.sh +++ b/contrib/guix/libexec/build_macos_gui.sh @@ -36,8 +36,6 @@ mkdir -p "$DISTSRC" # Configure this DISTSRC for $HOST env cmake -S . -B build \ --toolchain "${BASEPREFIX}/${HOST}/toolchain.cmake" \ - -DWITH_CCACHE=OFF \ - -Werror=dev \ -DBUILD_BENCH=OFF \ -DBUILD_BITCOIN_BIN=OFF \ -DBUILD_CLI=OFF \ @@ -50,7 +48,9 @@ mkdir -p "$DISTSRC" -DBUILD_WALLET_TOOL=OFF \ -DCMAKE_INSTALL_PREFIX="${INSTALLPATH}" \ -DCMAKE_SKIP_RPATH=TRUE \ - -DREDUCE_EXPORTS=ON + -DREDUCE_EXPORTS=ON \ + -DWITH_CCACHE=OFF \ + -Werror=dev # Build Bitcoin Core cmake --build build -j "$JOBS" --target bitcoin-gui bitcoin-qt diff --git a/contrib/guix/libexec/build_win.sh b/contrib/guix/libexec/build_win.sh index 6e54a3906d9..3b4554e963d 100755 --- a/contrib/guix/libexec/build_win.sh +++ b/contrib/guix/libexec/build_win.sh @@ -43,14 +43,14 @@ mkdir -p "$DISTSRC" env CFLAGS="${HOST_CFLAGS}" CXXFLAGS="${HOST_CXXFLAGS}" LDFLAGS="${HOST_LDFLAGS}" \ cmake -S . -B build \ --toolchain "${BASEPREFIX}/${HOST}/toolchain.cmake" \ - -Werror=dev \ -DBUILD_BENCH=OFF \ -DBUILD_FUZZ_BINARY=OFF \ -DBUILD_GUI=OFF \ -DBUILD_GUI_TESTS=OFF \ -DCMAKE_INSTALL_PREFIX="${INSTALLPATH}" \ -DREDUCE_EXPORTS=ON \ - -DWITH_CCACHE=OFF + -DWITH_CCACHE=OFF \ + -Werror=dev # Build Bitcoin Core cmake --build build -j "$JOBS" diff --git a/contrib/guix/libexec/build_win_gui.sh b/contrib/guix/libexec/build_win_gui.sh index 809e1c72180..65696a2fb43 100755 --- a/contrib/guix/libexec/build_win_gui.sh +++ b/contrib/guix/libexec/build_win_gui.sh @@ -42,7 +42,6 @@ mkdir -p "$DISTSRC" env CFLAGS="${HOST_CFLAGS}" CXXFLAGS="${HOST_CXXFLAGS}" LDFLAGS="${HOST_LDFLAGS}" \ cmake -S . -B build \ --toolchain "${BASEPREFIX}/${HOST}/toolchain.cmake" \ - -Werror=dev \ -DBUILD_BENCH=OFF \ -DBUILD_BITCOIN_BIN=OFF \ -DBUILD_CLI=OFF \ @@ -55,7 +54,8 @@ mkdir -p "$DISTSRC" -DBUILD_WALLET_TOOL=OFF \ -DCMAKE_INSTALL_PREFIX="${INSTALLPATH}" \ -DREDUCE_EXPORTS=ON \ - -DWITH_CCACHE=OFF + -DWITH_CCACHE=OFF \ + -Werror=dev # Build Bitcoin Core cmake --build build -j "$JOBS" --target bitcoin-qt