mirror of
https://github.com/bitcoin/bitcoin.git
synced 2026-09-12 05:32:22 +02:00
de9b436ba3depends: Switch from multilib to platform-specific toolchains (Hennadii Stepanov) Pull request description: Using the multilib GCC toolchain, as currently documented in [`depends/README.md`](4c1906a500/depends/README.md), has several issues, such as: 1. The [`g++-multilib`](https://packages.ubuntu.com/noble/g++-multilib) package conflicts with platform-specific cross-compiler packages. This means it is not possible to cross compile for `i686` and other platforms using the same set of installed packages. 2. The [`g++-multilib`](https://packages.ubuntu.com/noble/g++-multilib) package is not available for `arm64`: ```sh $ sudo apt install g++-multilib Reading package lists... Done Building dependency tree... Done Reading state information... Done E: Unable to locate package g++-multilib ``` 3. Managing the multilib GCC toolchain requires additional code in both depends and Guix scripts. This PR addresses all the issues mentioned above by switching from multilib to platform-specific toolchains. Also see https://github.com/bitcoin/bitcoin/pull/22456. --- Here are examples of building for different scenarions: - Linux, `x86_64` or `arm64`, building with depends natively: ```sh $ gmake -C depends -j $(nproc) $ cmake -B build --toolchain depends/$(./depends/config.sub $(./depends/config.guess))/toolchain.cmake $ cmake --build build -j $(nproc) ``` - Linux, `x86_64` or `arm64`, cross compiling for `i686-pc-linux-gnu`: ```sh $ sudo apt install g++-i686-linux-gnu binutils-i686-linux-gnu $ export HOST=i686-linux-gnu $ gmake -C depends -j $(nproc) $ cmake -B build-${HOST} --toolchain depends/${HOST}/toolchain.cmake $ cmake --build build-${HOST} -j $(nproc) ``` - Linux, `x86_64`, cross compiling for `arm64`: ```sh $ sudo apt install g++-aarch64-linux-gnu binutils-aarch64-linux-gnu $ export HOST=aarch64-linux-gnu $ gmake -C depends -j $(nproc) $ cmake -B build-${HOST} --toolchain depends/${HOST}/toolchain.cmake $ cmake --build build-${HOST} -j $(nproc) ``` - Linux, `arm64`, cross compiling for `x86_64`: ```sh $ sudo apt install g++-x86-64-linux-gnu binutils-x86-64-linux-gnu $ export HOST=x86_64-linux-gnu $ gmake -C depends -j $(nproc) $ cmake -B build-${HOST} --toolchain depends/${HOST}/toolchain.cmake $ cmake --build build-${HOST} -j $(nproc) ``` ACKs for top commit: fanquake: ACKde9b436ba3BrandonOdiwuor: ACKde9b436ba3Tree-SHA512: 453b4744974cdf56d6edfdbe93bb11e3bae3f9bc9cd99b9c57aee74e65fcdd3ac011a1dcc19f485ea3be427f4e9c6c6b0d704881369f719620f0cb299123e561