diff --git a/depends/README.md b/depends/README.md --- a/depends/README.md +++ b/depends/README.md @@ -6,29 +6,79 @@ To build for another arch/OS: - make HOST=host-platform-triplet + make build- -For example: +Where `` is one of the following: + - linux64 + - linux32 + - linux-arm + - linux-aarch64 + - osx + - win32 + - win64 - make HOST=x86_64-w64-mingw32 +For example, building the dependencies for macOS: -A prefix will be generated that's suitable for plugging into Bitcoin's -configure. In the above example, a dir named x86_64-w64-mingw32 will be -created. To use it for bitcoin-abc: + make build-osx - ./configure --prefix=`pwd`/depends/x86_64-w64-mingw32 +Note that it will use all the CPU cores available on the machine by default. +This behavior can be changed by setting the `JOBS` environment variable (see +below). -Common `host-platform-triplets` for cross compilation are: +To use the dependencies for building Bitcoin ABC, you need to set the platform +file to be used by `cmake`. +The platform files are located under `cmake/platforms/`. +For example, cross-building for macOS (run from the project root): -- `i686-w64-mingw32` for Win32 -- `x86_64-w64-mingw32` for Win64 -- `x86_64-apple-darwin14` for macOS -- `arm-linux-gnueabihf` for Linux ARM 32 bit -- `aarch64-linux-gnu` for Linux ARM 64 bit + mkdir build_osx + cd build_osx + cmake -GNinja .. -DCMAKE_TOOLCHAIN_FILE=../cmake/platforms/OSX.cmake + ninja No other options are needed, the paths are automatically configured. -Dependency Options: +### Install the required dependencies: Ubuntu & Debian + +#### Common to all arch/OS + + sudo apt-get install build-essential autoconf automake cmake curl git libtool ninja-build patch pkg-config python3 + +#### For macOS cross compilation + + sudo apt-get install imagemagick libbz2-dev libcap-dev librsvg2-bin libtiff-tools python3-setuptools + +#### For Win32/Win64 cross compilation + +- see [build-windows.md](../doc/build-windows.md#cross-compilation-for-ubuntu-and-windows-subsystem-for-linux) + +#### For linux cross compilation + +Common linux dependencies: + + sudo apt-get install gperf + +For linux 32 bits cross compilation: + +First add the i386 architecture to `dpkg`: + + sudo dpkg --add-architecture i386 + sudo apt-get update + +Then install the dependencies: + + sudo apt-get install lib32stdc++-8-dev libc6-dev:i386 + +For linux ARM cross compilation: + + sudo apt-get install g++-arm-linux-gnueabihf + +For linux AARCH64 cross compilation: + + sudo apt-get install g++-aarch64-linux-gnu + + +### Dependency Options + The following can be set when running make: make FOO=bar SOURCES_PATH: downloaded sources will be placed here @@ -44,8 +94,11 @@ BUILD_ID_SALT: Optional salt to use when generating build package ids JOBS: Number of jobs to use for each package build -If some packages are not built, for example `make NO_WALLET=1`, the appropriate -options will be passed to bitcoin's configure. In this case, `--disable-wallet`. +If some packages are not built, for example by building the depends with +`make NO_WALLET=1`, the appropriate options should be set when building Bitcoin +ABC using these dependencies. +In this example, `-DBUILD_BITCOIN_WALLET=OFF` should be passed to the `cmake` +command line to ensure that the build will not fail due to missing dependencies. Additional targets: @@ -53,6 +106,7 @@ 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 + build-all: build the dependencies for all the arch/OS ### Other documentation diff --git a/doc/build-unix.md b/doc/build-unix.md --- a/doc/build-unix.md +++ b/doc/build-unix.md @@ -79,6 +79,9 @@ sudo apt update sudo apt install cmake +Now, you can either build from self-compiled [depends](/depends/README.md) or +install the required dependencies with the following instructions. + Options when installing required Boost library files: 1. On at least Ubuntu 16.04+ and Debian 9+ there are generic names for the