dash/depends
fanquake dc4e834d4a
Merge bitcoin/bitcoin#25918: build: prune event2 compat headers
22dada5d1744c3e6f1a38ef1b3f5a93cba6e3163 build: prune compat event headers (fanquake)

Pull request description:

  The `*_compat` headers are the deprecated / non-threadsafe function containing
  versions of the current headers. There's no need for us to ship them in depends.
  Prune them to save the safe / nuke the possibility of them being used.

  Guix Build (x86_64):
  ```bash
  4f48b4987101c3624673ab0a19daad5b99cb3c99b273d96a65e77cbbc3813444  guix-build-22dada5d1744/output/aarch64-linux-gnu/SHA256SUMS.part
  8296443d555666628d43be42c507e15856ee8e611738a1cdf4bdb731e1d75264  guix-build-22dada5d1744/output/aarch64-linux-gnu/bitcoin-22dada5d1744-aarch64-linux-gnu-debug.tar.gz
  dc986fe901d2fdfd2596325798ac8da3d3170ef66dfd3a4eb8804a3883c9e133  guix-build-22dada5d1744/output/aarch64-linux-gnu/bitcoin-22dada5d1744-aarch64-linux-gnu.tar.gz
  dcb142a1b2b9370cb2e3bf52853afc66ca9abede97189da8b05ecf5563054fb0  guix-build-22dada5d1744/output/arm-linux-gnueabihf/SHA256SUMS.part
  5e42eef5e8bc618878647e782a307f5a7780ffc1a263b3466d277341fdc33e2b  guix-build-22dada5d1744/output/arm-linux-gnueabihf/bitcoin-22dada5d1744-arm-linux-gnueabihf-debug.tar.gz
  4d766d4799e354c24973396eb97efefb356847b2b35a5540d2861ea8010ed8ca  guix-build-22dada5d1744/output/arm-linux-gnueabihf/bitcoin-22dada5d1744-arm-linux-gnueabihf.tar.gz
  a174b3da7a4a66210dafb4c7b1742e6fcefa2ac2d7e332cb1bd2e7d909fe2728  guix-build-22dada5d1744/output/arm64-apple-darwin/SHA256SUMS.part
  010fb348996a7ba55746d02ba83ad0638768c235015b23b84ab1fea5dc50fc55  guix-build-22dada5d1744/output/arm64-apple-darwin/bitcoin-22dada5d1744-arm64-apple-darwin-unsigned.dmg
  163a3e5f8ad71e41ce52a1f1f1281fbcbc73cfc66500345eae1ca99c3f5fba85  guix-build-22dada5d1744/output/arm64-apple-darwin/bitcoin-22dada5d1744-arm64-apple-darwin-unsigned.tar.gz
  bf88d8ab9d70be73e9d7b14053e7a9c5cf6641ccef8f100f6f6fba7762e8092e  guix-build-22dada5d1744/output/arm64-apple-darwin/bitcoin-22dada5d1744-arm64-apple-darwin.tar.gz
  d60415586a2d66558e816bc2be8b7a74f111b944ddb15e5a8e9c6331a0436083  guix-build-22dada5d1744/output/dist-archive/bitcoin-22dada5d1744.tar.gz
  665a9677417a1931382cf5dbeab29c84f642da31cf3258b5879ebd29ad43bed8  guix-build-22dada5d1744/output/powerpc64-linux-gnu/SHA256SUMS.part
  0e2551558bd40657bf0cc3cbd03b4bfdf3b87ac07258dc8751d616af5fce729d  guix-build-22dada5d1744/output/powerpc64-linux-gnu/bitcoin-22dada5d1744-powerpc64-linux-gnu-debug.tar.gz
  fd771b607cc5749b666ddd995f47ff7ba8e0e46d811abb295636cc90270ed30a  guix-build-22dada5d1744/output/powerpc64-linux-gnu/bitcoin-22dada5d1744-powerpc64-linux-gnu.tar.gz
  117e11774ab23f6302c363f710ea68367f8fa80342d8a8919775db76864fc151  guix-build-22dada5d1744/output/powerpc64le-linux-gnu/SHA256SUMS.part
  6e10bc01e2352d8db7eb16328206ee622fc2605a87d203f134e6137954789ce8  guix-build-22dada5d1744/output/powerpc64le-linux-gnu/bitcoin-22dada5d1744-powerpc64le-linux-gnu-debug.tar.gz
  1825d5bda86f6fd247c43cbf1922e0bcd60a0637233c6eb95d58917751eb2e3a  guix-build-22dada5d1744/output/powerpc64le-linux-gnu/bitcoin-22dada5d1744-powerpc64le-linux-gnu.tar.gz
  15ea9e04d72ebe4fd446698f71bf45c76b7e5bb8bdd5e027250d6efe1ac3ddfa  guix-build-22dada5d1744/output/riscv64-linux-gnu/SHA256SUMS.part
  7cf329951c79ccdf700f9283b5e55990eb85c9f11e74ee3672a15f5e5c1250f8  guix-build-22dada5d1744/output/riscv64-linux-gnu/bitcoin-22dada5d1744-riscv64-linux-gnu-debug.tar.gz
  5a73600f715e01823e9ede02376fc6538680996c713d04ccc8b2ae0caa6b476c  guix-build-22dada5d1744/output/riscv64-linux-gnu/bitcoin-22dada5d1744-riscv64-linux-gnu.tar.gz
  f5b30bcea748e78b125fa4da979038627e9a15b7a20f002f53538b4dbeed2c5d  guix-build-22dada5d1744/output/x86_64-apple-darwin/SHA256SUMS.part
  f649de898e0e2aebf7e94ee0fbd2d7011a789b235e0c9c151f33e0b9ad0fa132  guix-build-22dada5d1744/output/x86_64-apple-darwin/bitcoin-22dada5d1744-x86_64-apple-darwin-unsigned.dmg
  9f36c3d2edfd5f5b8d1833bb54f9fe0b91805de85828fed211d4d1e43c9d0fe3  guix-build-22dada5d1744/output/x86_64-apple-darwin/bitcoin-22dada5d1744-x86_64-apple-darwin-unsigned.tar.gz
  43b1c1880858a6a1c94bd2004d25172f0d12e5e6042c83f1905eda6252a0febb  guix-build-22dada5d1744/output/x86_64-apple-darwin/bitcoin-22dada5d1744-x86_64-apple-darwin.tar.gz
  ce7b249b3349f5c272484fd108239260c70eb6c9d2afcf2031650f7cbb09cd17  guix-build-22dada5d1744/output/x86_64-linux-gnu/SHA256SUMS.part
  ea6d8ffd517a07cb8c1806e6d4bf90dd5784db76bb8cb3ea0f747da92672a7f6  guix-build-22dada5d1744/output/x86_64-linux-gnu/bitcoin-22dada5d1744-x86_64-linux-gnu-debug.tar.gz
  18bed83f2384d8952c86c760f012fe870922a8cccaeb1181176bd05f06b43436  guix-build-22dada5d1744/output/x86_64-linux-gnu/bitcoin-22dada5d1744-x86_64-linux-gnu.tar.gz
  1836ad08ef45635dc2f5f49f48b0a812290b7cce23974474cc6a1db9e779d54e  guix-build-22dada5d1744/output/x86_64-w64-mingw32/SHA256SUMS.part
  37c859523561a9dedd956ef235189eb4335396f0be154cb36aa35cb0cd4f1b93  guix-build-22dada5d1744/output/x86_64-w64-mingw32/bitcoin-22dada5d1744-win64-debug.zip
  d574828d8a7c3ddcdc1ea1cf686ba7102a25b7403d338d896ef0e9a57e3b5611  guix-build-22dada5d1744/output/x86_64-w64-mingw32/bitcoin-22dada5d1744-win64-setup-unsigned.exe
  20828fd22d8b2104747440a180d4a944912244f405061c29fb58a8e19604dcbd  guix-build-22dada5d1744/output/x86_64-w64-mingw32/bitcoin-22dada5d1744-win64-unsigned.tar.gz
  a0ecdec301e54cb65e35badae05d94338ec33b03e0b4e0f332025ce5248fd74a  guix-build-22dada5d1744/output/x86_64-w64-mingw32/bitcoin-22dada5d1744-win64.zip
  ```

ACKs for top commit:
  hebasto:
    ACK 22dada5d1744c3e6f1a38ef1b3f5a93cba6e3163

Tree-SHA512: 8a042b25a8081678465fd00b615f8007a4be65c4d383725586e4b5f1b89638ad7d9eaba6113a8d96413aa774ec15b6593b0a364b593db8cdbb09e80e0b358109
2024-02-29 12:35:16 -06:00
..
builders Merge bitcoin/bitcoin#23955: build: add support for NetBSD in depends 2023-12-26 22:26:21 -06:00
hosts Merge bitcoin/bitcoin#24392: build: Fix configuring depends with cmake 2024-01-19 11:02:22 -06:00
packages Merge bitcoin/bitcoin#25918: build: prune event2 compat headers 2024-02-29 12:35:16 -06:00
patches Merge bitcoin/bitcoin#24134: build: Fix zeromq package when cross-compiling 2024-01-13 19:32:29 -06:00
.gitignore Merge #17678: depends: Support for S390X and POWER targets 2023-04-25 23:14:25 +03:00
config.guess
config.site.in Merge #18677: Multiprocess build support 2024-01-16 09:34:26 -06:00
config.sub
description.md trivial: add some missing dashifications (#4772) 2022-04-19 09:09:42 +03:00
funcs.mk Merge bitcoin/bitcoin#25046: build: Fix libmultiprocess cross-compiling to Linux hosts 2024-02-22 20:58:43 -06:00
gen_id Merge bitcoin/bitcoin#21427: depends: Fix id_string invocations 2023-04-14 23:34:14 -05:00
Makefile Merge #18677: Multiprocess build support 2024-01-16 09:34:26 -06:00
packages.md Merge #16691: doc: improve depends prefix documentation 2023-04-04 12:45:27 -05:00
README.md Merge #19124: doc: Document ALLOW_HOST_PACKAGES dependency option 2024-01-26 12:50:31 -06:00

Usage

To build dependencies for the current arch+OS:

make

To build for another arch/OS:

make HOST=host-platform-triplet

For example:

make HOST=x86_64-w64-mingw32 -j4

Dash Core's configure script by default will ignore the depends output. In order for it to pick up libraries, tools, and settings from the depends build, you must set the CONFIG_SITE environment variable to point to a config.site settings file. In the above example, a file named depends/x86_64-w64-mingw32/share/config.site will be created. To use it during compilation:

CONFIG_SITE=$PWD/depends/x86_64-w64-mingw32/share/config.site ./configure

The default install prefix when using config.site is --prefix=depends/<host-platform-triplet>, so depends build outputs will be installed in that location.

Common host-platform-triplets for cross compilation are:

  • i686-pc-linux-gnu for Linux 32 bit
  • x86_64-pc-linux-gnu for x86 Linux
  • x86_64-w64-mingw32 for Win64
  • 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
  • s390x-linux-gnu for Linux S390X
  • armv7a-linux-android for Android ARM 32 bit
  • aarch64-linux-android for Android ARM 64 bit
  • x86_64-linux-android for Android x86 64 bit

The paths are automatically configured and no other options are needed unless targeting Android.

Install the required dependencies: Ubuntu & Debian

For macOS cross compilation

sudo apt-get install curl bsdmainutils cmake libcap-dev libz-dev libbz2-dev python3-setuptools libtinfo5 xorriso

Note: You must obtain the macOS SDK before proceeding with a cross-compile. Under the depends directory, create a subdirectory named SDKs. Then, place the extracted SDK under this new directory. For more information, see SDK Extraction.

For Win64 cross compilation

For linux (including i386, ARM) cross compilation

Common linux dependencies:

sudo apt-get install make automake curl g++-multilib libtool binutils-gold bsdmainutils pkg-config python3 patch bison

For linux ARM cross compilation:

sudo apt-get install g++-arm-linux-gnueabihf binutils-arm-linux-gnueabihf

For linux AARCH64 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):

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):

sudo apt-get install g++-riscv64-linux-gnu binutils-riscv64-linux-gnu

RISC-V known issue: gcc-7.3.0 and gcc-7.3.1 result in a broken test_dash executable (see https://github.com/bitcoin/bitcoin/pull/13543), this is apparently fixed in gcc-8.1.0.

For linux S390X cross compilation:

sudo apt-get install g++-s390x-linux-gnu binutils-s390x-linux-gnu

Install the required dependencies: OpenBSD

pkg_add bash gtar

Dependency Options

The following can be set when running make: make FOO=bar

  • SOURCES_PATH: Downloaded sources will be placed here
  • BASE_CACHE: Built packages will be placed here
  • SDK_PATH: Path where SDKs can be found (used by macOS)
  • FALLBACK_DOWNLOAD_PATH: If a source file can't be fetched, try here before giving up
  • NO_QT: Don't download/build/cache Qt and its dependencies
  • NO_QR: Don't download/build/cache packages needed for enabling qrencode
  • NO_ZMQ: Don't download/build/cache packages needed for enabling ZeroMQ
  • NO_WALLET: Don't download/build/cache libs needed to enable the wallet
  • NO_BDB: Don't download/build/cache BerkeleyDB
  • NO_SQLITE: Don't download/build/cache SQLite
  • NO_UPNP: Don't download/build/cache packages needed for enabling UPnP
  • ALLOW_HOST_PACKAGES: Packages that are missed in dependencies (due to NO_* option or build script logic) are searched for among the host system packages using pkg-config. It allows building with packages of other (newer) versions
  • NO_NATPMP: Don't download/build/cache packages needed for enabling NAT-PMP
  • MULTIPROCESS: build libmultiprocess (experimental, requires cmake)
  • DEBUG: Disable some optimizations and enable more runtime checking
  • HOST_ID_SALT: Optional salt to use when generating host package ids
  • BUILD_ID_SALT: Optional salt to use when generating build package ids
  • FORCE_USE_SYSTEM_CLANG: (EXPERTS ONLY) When cross-compiling for macOS, use Clang found in the system's $PATH rather than the default prebuilt release of Clang from llvm.org. Clang 8 or later is required.

If some packages are not built, for example make NO_WALLET=1, the appropriate options will be passed to Dash Core's configure. In this case, --disable-wallet.

Additional targets

download: run 'make download' to fetch all sources without building them
download-osx: run 'make download-osx' to fetch all sources needed for macOS builds
download-win: run 'make download-win' to fetch all sources needed for win builds
download-linux: run 'make download-linux' to fetch all sources needed for linux builds

Android

Before proceeding with an Android build one needs to get the Android SDK and use the "SDK Manager" tool to download the NDK and one or more "Platform packages" (these are Android versions and have a corresponding API level). In order to build ANDROID_API_LEVEL (API level corresponding to the Android version targeted, e.g. Android 9.0 Pie is 28 and its "Platform package" needs to be available) and ANDROID_TOOLCHAIN_BIN (path to toolchain binaries depending on the platform the build is being performed on) need to be set.

API levels from 24 to 29 have been tested to work.

If the build includes Qt, environment variables ANDROID_SDK and ANDROID_NDK need to be set as well but can otherwise be omitted. This is an example command for a default build with no disabled dependencies:

ANDROID_SDK=/home/user/Android/Sdk ANDROID_NDK=/home/user/Android/Sdk/ndk-bundle make HOST=aarch64-linux-android ANDROID_API_LEVEL=28 ANDROID_TOOLCHAIN_BIN=/home/user/Android/Sdk/ndk-bundle/toolchains/llvm/prebuilt/linux-x86_64/bin

Other documentation