Merge bitcoin/bitcoin#32764: guix: Build for macOS using LLVM toolchain only

8a90c7cd97 guix: Build for macOS using LLVM toolchain only (Hennadii Stepanov)
7e1a750d45 guix, refactor: Use `target` variable instead of hardcoded value (Hennadii Stepanov)

Pull request description:

  This PR makes macOS builds LLVM-only (non-GCC) by switching the build compiler in depends to `clang` + `libc++`.

  See: https://github.com/bitcoin/bitcoin/issues/30206.

ACKs for top commit:
  fanquake:
    ACK 8a90c7cd97

Tree-SHA512: 02bfa784f89db980de2d2bb759200a0e8c0b10f48ac7e14e2bcdba75416aef30afa68d36e98c4652e18d282f023d1e94a351ff65b4a2731bdcac7c8a8c720623
This commit is contained in:
merge-script
2026-07-23 13:56:58 +01:00
5 changed files with 51 additions and 20 deletions

View File

@@ -8,13 +8,21 @@ 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 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"
# Build the depends tree
make -C depends --jobs="$JOBS" HOST="$HOST" \
@@ -24,6 +32,12 @@ make -C depends --jobs="$JOBS" HOST="$HOST" \
${SDK_PATH+SDK_PATH="$SDK_PATH"} \
${build_CC+build_CC="$build_CC"} \
${build_CXX+build_CXX="$build_CXX"} \
${build_LDFLAGS+build_LDFLAGS="$build_LDFLAGS"} \
${build_AR+build_AR="$build_AR"} \
${build_RANLIB+build_RANLIB="$build_RANLIB"} \
${build_OBJDUMP+build_OBJDUMP="$build_OBJDUMP"} \
${build_NM+build_NM="$build_NM"} \
${build_STRIP+build_STRIP="$build_STRIP"} \
NO_QT=1
mkdir -p "$DISTSRC"

View File

@@ -8,13 +8,21 @@ 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 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"
# Build the depends tree
make -C depends --jobs="$JOBS" HOST="$HOST" \
@@ -23,7 +31,13 @@ make -C depends --jobs="$JOBS" HOST="$HOST" \
${BASE_CACHE+BASE_CACHE="$BASE_CACHE"} \
${SDK_PATH+SDK_PATH="$SDK_PATH"} \
${build_CC+build_CC="$build_CC"} \
${build_CXX+build_CXX="$build_CXX"}
${build_CXX+build_CXX="$build_CXX"} \
${build_LDFLAGS+build_LDFLAGS="$build_LDFLAGS"} \
${build_AR+build_AR="$build_AR"} \
${build_RANLIB+build_RANLIB="$build_RANLIB"} \
${build_OBJDUMP+build_OBJDUMP="$build_OBJDUMP"} \
${build_NM+build_NM="$build_NM"} \
${build_STRIP+build_STRIP="$build_STRIP"}
mkdir -p "$DISTSRC"
(

View File

@@ -264,7 +264,6 @@ chain for " target " development."))
tar
gzip
;; Build tools
gcc-toolchain-14
cmake-minimal
gnu-make
;; Scripting
@@ -273,12 +272,14 @@ chain for " target " development."))
git-minimal)
(let ((target (getenv "HOST")))
(cond ((string-suffix? "-mingw32" target)
(list (make-mingw-pthreads-cross-toolchain "x86_64-w64-mingw32")))
(list gcc-toolchain-14
(make-mingw-pthreads-cross-toolchain target)))
((string-contains target "-linux-")
(list (list gcc-toolchain-14 "static")
(list gcc-toolchain-14
(list gcc-toolchain-14 "static")
(make-bitcoin-cross-toolchain target)))
((string-contains target "darwin")
(list clang-toolchain-19
lld-19
(make-lld-wrapper lld-19 #:lld-as-ld? #t)))
libcxx ;; 19.1.7
lld-19))
(else '())))))

View File

@@ -94,6 +94,7 @@ $(package)_config_env += OBJCXX="$$(build_CXX)"
endif
$(package)_cmake_opts := -DCMAKE_EXE_LINKER_FLAGS="$$(build_LDFLAGS)"
$(package)_cmake_opts += -DCMAKE_AR="$$(build_AR)"
ifneq ($(V),)
$(package)_cmake_opts += --log-level=STATUS
endif

View File

@@ -201,6 +201,7 @@ endif
$(package)_cmake_opts += -DCMAKE_EXE_LINKER_FLAGS="$$($$($(package)_type)_LDFLAGS)"
$(package)_cmake_opts += -DCMAKE_EXE_LINKER_FLAGS_RELEASE="$$($$($(package)_type)_release_LDFLAGS)"
$(package)_cmake_opts += -DCMAKE_EXE_LINKER_FLAGS_DEBUG="$$($$($(package)_type)_debug_LDFLAGS)"
$(package)_cmake_opts += -DCMAKE_AR="$$($(package)_ar)"
ifneq ($(host),$(build))
$(package)_cmake_opts += -DCMAKE_SYSTEM_NAME=$($(host_os)_cmake_system_name)