Skip to content
Merged
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
34 changes: 18 additions & 16 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -4,21 +4,21 @@ GDK is a cross-platform, cross-language library for Blockstream Green wallets.

Read the API documentation at https://gdk.readthedocs.io/en/latest/

## building from source
### installing required software
## Building from source
### Installing required software
#### Android ndk
If you want to target Android you will need to download the NDK and set the ANDROID_NDK env variable to the directory you uncompress it to, for example
`export ANDROID_NDK=$HOME/Downloads/ndk`
or you can add it to your bash profile `~/.bash_profile`

#### rust
#### Rust
1. Install rustup: `curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh`

2. Install default rust toolchain: `rustup install 1.85.0`

3. Install additional rust targets for cross-building: `rustup target add aarch64-linux-android armv7-linux-androideabi i686-linux-android x86_64-linux-android x86_64-pc-windows-gnu aarch64-apple-ios x86_64-apple-ios`

### platform-specific dependencies
### Platform-specific dependencies
For Debian Bullseye:
```
sudo ./docker/debian/install_deps.sh
Expand All @@ -29,10 +29,12 @@ For Mac OSX:

Install Xcode and brew if not installed, then
```
brew update && brew install cmake automake autoconf libtool gnu-sed python3 pkg-config swig gnu-getopt (optional) gnu-tar
brew update && brew install cmake automake autoconf libtool gnu-sed python3 pkg-config swig gnu-getopt
xcode-select --install
```

Optionally, install GNU tar with `brew install gnu-tar`.

**IMPORTANT:** Since the build scripts require GNU-style `getopt` rather than the macOS BSD-style version, ensure that `gnu-getopt` is installed and added to your PATH right before running the build script:

```bash
Expand All @@ -41,14 +43,14 @@ $ PATH="$(brew --prefix gnu-getopt)/bin:$PATH" ./tools/build.sh ...

You may also need to change your PATH environment variable to add `$HOME/Library/Python/3.X/bin`

## cmake build:
#### building dependencies
## Cmake build:
#### Building dependencies
Using the tool in ``tools`` you can build in one go all the required dependencies for gdk
```bash
$ ./tools/builddeps.sh <options> --prefix <absolute-destination-path>
```
``<options>`` are:
- ``--clang`` , ``--gcc`` , ``--ndk <arch>`` , ``-mingw-w64`` , ``--iphone`` , ``iphonesimulator`` : (cross-)build with different compilers, on different platforms. Android build supports following ``<arch>``s
- ``--clang`` , ``--gcc`` , ``--ndk <arch>`` , ``--mingw-w64`` , ``--iphone static`` , ``--iphonesim static`` : (cross-)build with different compilers, on different platforms. The Apple options include the required `static` argument, as used in CI. Android build supports following ``<arch>``s
- ``armeabi-v7a``
- ``arm64-v8a``
- ``x86``
Expand All @@ -61,13 +63,13 @@ $ ./tools/builddeps.sh --clang --prefix $HOME/prebuilt/clang
```
downloads, builds and installs all dependencies using clang compiler under ``$HOME/prebuild/clang`` folder

### building gdk
### Building GDK
A script located in tools is enough to cover most common build use cases
```bash
$ tools/build.sh <options>
```
``<options>`` are:
- ``--clang`` , ``--gcc`` , ``--ndk <arch>`` , ``-mingw-w64`` , ``--iphone`` , ``iphonesimulator`` : (cross-)build with different compilers, on different platforms
- ``--clang`` , ``--gcc`` , ``--ndk <arch>`` , ``--mingw-w64`` , ``--iphone static`` , ``--iphonesim static`` : (cross-)build with different compilers, on different platforms. The Apple options include the required `static` argument, as used in CI.
- ``--enable-tests``: builds test that can be easily launched using ``ctest`` (if your cmake is <= 3.20 you need to ``cd`` into the build directory, otherwise just use ``--test-dir``)
- ``--python-version <version>``: builds python-wheels. ``<version>`` can be something as simple as ``3``, you let cmake pick the 3.X version present in your system for you. Or it can be ``venv`` to indicate cmake that you are using a virtual environment and cmake should pick whatever python interpreter you set up in it.
- ``--parallel <jobs>``: set the number of parallel process that the build-system can spawn, default to CPU count.
Expand All @@ -81,23 +83,23 @@ tools/build.sh --clang --external-deps-dir $HOME/prefix/clang
Build output is placed in `build-<target>`, e.g. `build-clang`, `build-gcc` sub-directories.


\* Cmake introduces the concept of ``COMPONENT``s .GDK install is now split into two components: ``gdk-runtime`` includes only the dynamic library (with symbol files) and the python-wheel (if built and available); ``gdk-dev`` includes static library libgreenaddress-full.a, header files and all the header files for languages bindings like java and swift. CI as well as ``tools/build.sh --install <path>`` will always install everything.
\* Cmake introduces the concept of ``COMPONENT``s .GDK install is now split into two components: ``gdk-runtime`` includes only the dynamic library (with symbol files) and the python-wheel (if built and available); ``gdk-dev`` includes static library libgreen_gdk_full.a, header files and all the header files for languages bindings like java and swift. CI as well as ``tools/build.sh --install <path>`` will always install everything.

### Docker based deps & build (apple platforms excluded)

This doesn't require any of the previous steps but requires docker installed; it will build the project

```
docker build -t greenaddress_sdk -f ./tools/Dockerfile .
docker run -v $PWD:/root/gdk -it greenaddress_sdk
docker build -t gdk-debian -f ./docker/debian/Dockerfile .
docker run -v $PWD:/root/gdk -it gdk-debian
```

This will open a bash shell into the container, where you can then launch builds for any platform.
The docker container provided by GreenAddress comes with dependencies already built under the ``/prebuid`` folder
The docker container provided by GDK comes with dependencies already built under the ``/prebuild`` folder

```bash
root@bab682a071e6:~/gdk# ./tools/build.sh --gcc --external-deps-dir /prebuid/gcc
root@bab682a071e6:~/gdk# ./tools/build.sh --clang --external-deps-dir /prebuid/clang
root@bab682a071e6:~/gdk# ./tools/build.sh --gcc --external-deps-dir /prebuild/gcc
root@bab682a071e6:~/gdk# ./tools/build.sh --clang --external-deps-dir /prebuild/clang
```

#### Debug builds
Expand Down