dash/depends
fanquake 48b1186ce1 Merge bitcoin/bitcoin#22234: build: Mark print-% target as phony.
fb7be92b094477131140b58a4e3ae98366b93e76 Mark print-% target as phony. (Dmitry Goncharov)

Pull request description:

  .PHONY does not take patterns (such as print-%) as prerequisites.
  Have print-% depend on force and mark force as phony.

  This change ensures print-% rule works even when there is a file that matches the target.

  ```
  $ # on master
  $ make print-host
  host=x86_64-pc-linux-gnu
  $ touch print-host
  $ make print-host
  make: 'print-host' is up to date.
  $
  $ git co mark_print_as_phony
  Switched to branch 'mark_print_as_phony'
  $ make print-host
  host=x86_64-pc-linux-gnu
  $ touch force
  $ make print-host
  host=x86_64-pc-linux-gnu
  ```

ACKs for top commit:
  hebasto:
    ACK fb7be92b094477131140b58a4e3ae98366b93e76, tested on Linux Mint 20.2 (x86_64).

Tree-SHA512: b89ae66aa8c7aa6a7ab5f0956f9eb3b3ef9d56994b60dc2a97d498d4c1bba537845c190723e8a10310280b1b35df2cd935cc30aeb76735cac2dc621ad7823772
2023-04-16 23:40:59 +03:00
..
builders
hosts merge bitcoin#16110: Add Android NDK support 2021-11-24 10:02:59 +05:30
packages Merge #16352: build: prune dbus from depends 2023-03-29 21:01:56 +03:00
patches partial Merge bitcoin/bitcoin#19817: build: macOS toolchain bump 2023-03-26 16:50:26 -05:00
.gitignore
config.guess
config.site.in Merge #17658: depends: add ability to skip building qrencode 2022-05-30 19:09:39 +07:00
config.sub
description.md trivial: add some missing dashifications (#4772) 2022-04-19 09:09:42 +03:00
funcs.mk Merge bitcoin/bitcoin#21427: depends: Fix id_string invocations 2023-04-14 23:34:14 -05:00
gen_id Merge bitcoin/bitcoin#21427: depends: Fix id_string invocations 2023-04-14 23:34:14 -05:00
Makefile Merge bitcoin/bitcoin#22234: build: Mark print-% target as phony. 2023-04-16 23:40:59 +03:00
packages.md Merge #16691: doc: improve depends prefix documentation 2023-04-04 12:45:27 -05:00
README.md Merge #20985: doc: add xorriso to macOS depends packages 2023-04-09 00:06:56 -05: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'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 point it at the appropriate --prefix directory generated by the build. In the above example, a prefix dir named x86_64-w64-mingw32 will be created. To use it for Dash:

./configure --prefix=`pwd`/depends/x86_64-w64-mingw32

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-darwin19 for macOS
  • arm-linux-gnueabihf for Linux ARM 32 bit
  • aarch64-linux-gnu for Linux ARM 64 bit
  • riscv32-linux-gnu for Linux RISC-V 32 bit
  • riscv64-linux-gnu for Linux RISC-V 64 bit
  • armv7a-linux-android for Android ARM 32 bit
  • aarch64-linux-android for Android ARM 64 bit
  • i686-linux-android for Android x86 32 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 librsvg2-bin libtiff-tools bsdmainutils cmake imagemagick 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 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.

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 sdk's 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
NO_NATPMP
Don't download/build/cache packages needed for enabling NAT-PMP
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