From b3ea4f94a395355a1d9acdafaa719ef4395b509c Mon Sep 17 00:00:00 2001 From: Hennadii Stepanov <32963518+hebasto@users.noreply.github.com> Date: Sat, 29 Mar 2025 10:48:50 +0000 Subject: [PATCH] depends: Switch from multilib to platform-specific toolchains --- ci/test/00_setup_env_i686_multiprocess.sh | 5 +-- contrib/guix/libexec/build.sh | 10 ++---- depends/README.md | 42 +++++++++++++---------- depends/hosts/linux.mk | 21 ------------ 4 files changed, 29 insertions(+), 49 deletions(-) diff --git a/ci/test/00_setup_env_i686_multiprocess.sh b/ci/test/00_setup_env_i686_multiprocess.sh index d7c8e3ef1b9..1f70b854f1d 100755 --- a/ci/test/00_setup_env_i686_multiprocess.sh +++ b/ci/test/00_setup_env_i686_multiprocess.sh @@ -6,11 +6,12 @@ export LC_ALL=C.UTF-8 -export HOST=i686-pc-linux-gnu +export HOST=i686-linux-gnu +export DPKG_ADD_ARCH="i386" export CONTAINER_NAME=ci_i686_multiprocess export CI_IMAGE_NAME_TAG="mirror.gcr.io/ubuntu:24.04" export CI_IMAGE_PLATFORM="linux/amd64" -export PACKAGES="llvm clang g++-multilib" +export PACKAGES="llvm clang g++-i686-linux-gnu binutils-i686-linux-gnu libstdc++6:i386 libatomic1:i386" export DEP_OPTS="DEBUG=1 MULTIPROCESS=1" export GOAL="install" export TEST_RUNNER_EXTRA="--v2transport" diff --git a/contrib/guix/libexec/build.sh b/contrib/guix/libexec/build.sh index 26180bae24b..ad09a5ac08d 100755 --- a/contrib/guix/libexec/build.sh +++ b/contrib/guix/libexec/build.sh @@ -166,20 +166,14 @@ export TZ="UTC" # Depends Building # #################### -# Build the depends tree, overriding variables that assume multilib gcc +# Build the depends tree make -C depends --jobs="$JOBS" HOST="$HOST" \ ${V:+V=1} \ ${SOURCES_PATH+SOURCES_PATH="$SOURCES_PATH"} \ ${BASE_CACHE+BASE_CACHE="$BASE_CACHE"} \ ${SDK_PATH+SDK_PATH="$SDK_PATH"} \ ${build_CC+build_CC="$build_CC"} \ - ${build_CXX+build_CXX="$build_CXX"} \ - x86_64_linux_CC=x86_64-linux-gnu-gcc \ - x86_64_linux_CXX=x86_64-linux-gnu-g++ \ - x86_64_linux_AR=x86_64-linux-gnu-gcc-ar \ - x86_64_linux_RANLIB=x86_64-linux-gnu-gcc-ranlib \ - x86_64_linux_NM=x86_64-linux-gnu-gcc-nm \ - x86_64_linux_STRIP=x86_64-linux-gnu-strip + ${build_CXX+build_CXX="$build_CXX"} case "$HOST" in *darwin*) diff --git a/depends/README.md b/depends/README.md index ab1df59a884..92f41a47a9c 100644 --- a/depends/README.md +++ b/depends/README.md @@ -4,7 +4,7 @@ To build dependencies for the current arch+OS: make -To build for another arch/OS: +To build for another arch+OS: make HOST=host-platform-triplet @@ -22,17 +22,17 @@ created. To use it during configuring Bitcoin Core: Common `host-platform-triplet`s for cross compilation are: -- `i686-pc-linux-gnu` for Linux x86 32 bit -- `x86_64-pc-linux-gnu` for Linux x86 64 bit -- `x86_64-w64-mingw32` for Win64 +- `i686-linux-gnu` for Linux x86 32-bit +- `x86_64-linux-gnu` for Linux x86 64-bit +- `x86_64-w64-mingw32` for Windows - `x86_64-apple-darwin` for macOS - `arm64-apple-darwin` for ARM macOS -- `arm-linux-gnueabihf` for Linux ARM 32 bit -- `aarch64-linux-gnu` for Linux ARM 64 bit -- `powerpc64-linux-gnu` for Linux POWER 64 bit (big endian) -- `powerpc64le-linux-gnu` for Linux POWER 64 bit (little endian) -- `riscv32-linux-gnu` for Linux RISC-V 32 bit -- `riscv64-linux-gnu` for Linux RISC-V 64 bit +- `arm-linux-gnueabihf` for Linux ARM 32-bit +- `aarch64-linux-gnu` for Linux ARM 64-bit +- `powerpc64-linux-gnu` for Linux POWER 64-bit (big endian) +- `powerpc64le-linux-gnu` for Linux POWER 64-bit (little endian) +- `riscv32-linux-gnu` for Linux RISC-V 32-bit +- `riscv64-linux-gnu` for Linux RISC-V 64-bit - `s390x-linux-gnu` for Linux S390X The paths are automatically configured and no other options are needed. @@ -62,29 +62,35 @@ For more information, see [SDK Extraction](../contrib/macdeploy/README.md#sdk-ex apt install g++-mingw-w64-x86-64-posix -#### For linux (including i386, ARM) cross compilation +#### For Linux cross compilation -Common linux dependencies: +Please note that package availability might depend on your arch+OS your are building on. - sudo apt-get install g++-multilib binutils +For Linux x86 32-bit cross compilation: -For linux ARM cross compilation: + sudo apt-get install g++-i686-linux-gnu binutils-i686-linux-gnu + +For Linux x86 64-bit cross compilation: + + sudo apt-get install g++-x86-64-linux-gnu binutils-x86-64-linux-gnu + +For Linux ARM 32-bit cross compilation: sudo apt-get install g++-arm-linux-gnueabihf binutils-arm-linux-gnueabihf -For linux AARCH64 cross compilation: +For Linux ARM 64-bit cross compilation: sudo apt-get install g++-aarch64-linux-gnu binutils-aarch64-linux-gnu -For linux POWER 64-bit cross compilation (there are no packages for 32-bit): +For Linux POWER 64-bit cross compilation (there are no packages for 32-bit): sudo apt-get install g++-powerpc64-linux-gnu binutils-powerpc64-linux-gnu g++-powerpc64le-linux-gnu binutils-powerpc64le-linux-gnu -For linux RISC-V 64-bit cross compilation (there are no packages for 32-bit): +For Linux RISC-V 64-bit cross compilation (there are no packages for 32-bit): sudo apt-get install g++-riscv64-linux-gnu binutils-riscv64-linux-gnu -For linux S390X cross compilation: +For Linux S390X cross compilation: sudo apt-get install g++-s390x-linux-gnu binutils-s390x-linux-gnu diff --git a/depends/hosts/linux.mk b/depends/hosts/linux.mk index e2f34265d15..9b90b1b840c 100644 --- a/depends/hosts/linux.mk +++ b/depends/hosts/linux.mk @@ -19,27 +19,6 @@ linux_debug_CPPFLAGS=-D_GLIBCXX_DEBUG -D_GLIBCXX_DEBUG_PEDANTIC # https://libcxx.llvm.org/Hardening.html linux_debug_CPPFLAGS+=-D_LIBCPP_HARDENING_MODE=_LIBCPP_HARDENING_MODE_DEBUG -ifeq (86,$(findstring 86,$(build_arch))) -i686_linux_CC=gcc -m32 -i686_linux_CXX=g++ -m32 -i686_linux_AR=ar -i686_linux_RANLIB=ranlib -i686_linux_NM=nm -i686_linux_STRIP=strip - -x86_64_linux_CC=gcc -m64 -x86_64_linux_CXX=g++ -m64 -x86_64_linux_AR=ar -x86_64_linux_RANLIB=ranlib -x86_64_linux_NM=nm -x86_64_linux_STRIP=strip -else -i686_linux_CC=$(default_host_CC) -m32 -i686_linux_CXX=$(default_host_CXX) -m32 -x86_64_linux_CC=$(default_host_CC) -m64 -x86_64_linux_CXX=$(default_host_CXX) -m64 -endif - linux_cmake_system_name=Linux # Refer to doc/dependencies.md for the minimum required kernel. linux_cmake_system_version=3.17.0