feather/BUILDING.md
2022-05-26 14:39:46 +02:00

5 KiB

Building with Docker

Builds with Docker are done in 3 steps:

  1. Cloning this repository (+submodules)
  2. Creating a base image containing the build environment
  3. Building Feather using the base image

Linux x86-64 (reproducible)

The instructions in this section are for 64-bit AMD/Intel processors. For ARM64 platforms see the next section.

Binaries produced in this section are reproducible and their digests should match those of release binaries.

1. Clone

Replace master with the desired version tag (e.g. 1.0.1) to build the release binary.

git clone https://github.com/feather-wallet/feather.git
cd feather
git checkout master
git submodule update --init --recursive

2. Base image

docker build -t feather:linux -f Dockerfile.linux --build-arg THREADS=8 .

Building the base image takes a while. You only need to build the base image once per release.

3. Build

Standalone static binary

If you're re-running a build make sure to rm -rf build/ first.

docker run --rm -it -v $PWD:/feather -w /feather feather:linux sh -c 'WITH_SCANNER=Off make release-static -j8'

The resulting binary can be found in ./build/bin/.

AppImage
rm -rf build
docker run --rm -it -v $PWD:/feather -w /feather feather:linux sh -c 'make release-static -j8'
docker run --rm -it -v $PWD:/feather -w /feather/build feather:linux ../contrib/build-appimage.sh

The resulting AppImage will be located in ./build.

Linux ARM64 (reproducible)

This section describes how to build Feather for ARM64 based platforms (including Raspberry Pi 3 and later, running 64-bit Rasbian).

Binaries produced in this section are not yet reproducible.

1. Clone

Replace master with the desired version tag (e.g. 1.0.1) to build the release binary.

git clone https://github.com/feather-wallet/feather.git
cd feather
git checkout master
git submodule update --init --recursive

2. Base image

docker build --tag feather:linux-arm64 --platform linux/arm64 -f Dockerfile.linux --build-arg THREADS=8 .

Building the base image takes a while (especially when emulated on x86-64). You only need to build the base image once per release.

3. Build

Standalone static binary
docker run --platform linux/arm64/v8 --rm -it -v $PWD:/feather -w /feather feather:linux-arm64 sh -c 'WITH_SCANNER=Off make release-static-linux-arm64 -j8'

Note: If you intend to run Feather on a Raspberry Pi or any device without AES hardware acceleration, use the following command instead:

docker run --platform linux/arm64/v8 --rm -it -v $PWD:/feather -w /feather feather:linux-arm64 sh -c 'WITH_SCANNER=Off make release-static-linux-arm64-rpi -j8'

The resulting binary can be found in ./build/bin/.

AppImage
ARMv8-a (with AES hardware acceleration)
rm -rf build
docker run --rm -it -v $PWD:/feather --platform linux/arm64/v8 -w /feather feather:linux-arm64 sh -c 'make release-static-linux-arm64 -j8'
docker run --rm -it -v $PWD:/feather --platform linux/arm64/v8 -w /feather/build feather:linux-arm64 ../contrib/build-appimage-arm64.sh
Raspberry Pi
rm -rf build
docker run --rm -it -v $PWD:/feather --platform linux/arm64/v8 -w /feather feather:linux-arm64 sh -c 'make release-static-linux-arm64-rpi -j8'
docker run --rm -it -v $PWD:/feather --platform linux/arm64/v8 -w /feather/build feather:linux-arm64 ../contrib/build-appimage-arm64.sh

The resulting AppImage will be located in ./build.

Windows (reproducible)

1. Clone

git clone --branch master --recursive https://github.com/feather-wallet/feather.git
cd feather

Replace master with the desired version tag (e.g. 1.0.1) to build the release binary.

2. Base image

docker build -f Dockerfile.windows --tag feather:win --build-arg THREADS=4 .

Building the base image takes a while. You only need to build the base image once.

3. Build

docker run --rm -it -v $PWD:/feather -w /feather feather:win sh -c 'make release-static-windows root=/depends target=x86_64-w64-mingw32 tag=win-x64 -j4'

If you're re-running a build make sure to rm -rf build/ first.

The resulting binary can be found in ./build/x86_64-w64-mingw32/release/bin/.


Building on macOS

For macOS it's easiest to leverage brew to install the required dependencies.

brew install qt libsodium libzip qrencode unbound cmake boost hidapi openssl expat libunwind-headers protobuf pkgconfig zbar

Build and install Polyseed:

git clone https://github.com/tevador/polyseed.git
cd polyseed
mkdir build
cd build
cmake ..
make
sudo make install

Clone the Feather repository.

git clone --recursive https://github.com/feather-wallet/feather.git
cd feather

Build Feather.

make mac-release

The resulting macOS application can be found build/bin/feather.app and will not have Tor embedded.

To run a Tor daemon on macOS:

brew install tor
brew services restart tor