Add sections and more info

This commit is contained in:
Sudarsan Balaji 2021-10-30 00:27:02 +05:30
parent cafc15197c
commit fea6a3d1ee

106
README.md
View File

@ -1,23 +1,76 @@
# BDK UniFFI Language Bindings
# Foreign language bindings for BDK (bdk-ffi)
## Setup Android build environment
This repository contains source code for generating foreign language bindings
for the rust library bdk for the Bitcoin Dev Kit (BDK) project.
1. Add Android rust targets
## Supported target languages and platforms
```sh
rustup target add x86_64-apple-darwin x86_64-unknown-linux-gnu x86_64-linux-android aarch64-linux-android armv7-linux-androideabi i686-linux-android
```
| Language | Platform | Status |
| --- | --- | --- |
| Kotlin | JVM | WIP |
| Kotlin | Android | WIP |
| Swift | iOS | WIP |
2. Install Android SDK and Build-Tools for API level 30+
## Getting Started
## Setup Swift build environment
This project uses rust. A basic knowledge of the rust ecosystem is helpful.
1. install Swift, see ["Download Swift"](https://swift.org/download/) page
(or on Mac OSX install the latest Xcode)
### General
1. Install `uniffi-bindgen`
```sh
cargo install uniffi_bindgen
```
1. See the [UniFFI User Guide](https://mozilla.github.io/uniffi-rs/) for more info
## Setup UniFFI
### Kotlin Bindings for JVM (OSX / Linux)
1. `cargo install uniffi_bindgen`
1. Install required targets
```sh
rustup target add x86_64-apple-darwin x86_64-unknown-linux-gnu
```
1. Build kotlin (JVM) bindings
```sh
./build.sh -k
```
1. Generated kotlin bindings are available at `/bindings/bdk-kotlin/`
1. A demo app is available at `/bindings/bdk-kotlin/demo/`. It uses stdin for
inputs and can be run from gradle.
```sh
cd bindings/bdk-kotlin
./gradlew :demo:run
```
### Kotlin bindings for Android
1. Install required targets
```sh
rustup target add x86_64-linux-android aarch64-linux-android
armv7-linux-androideabi i686-linux-android
```
1. Install Android SDK and Build-Tools for API level 30+
1. Setup `$ANDROID_NDK_HOME` and `$ANDROID_SDK_ROOT` path variables (which are
required by the build scripts)
1. Build kotlin (Android) bindings
```sh
./build.sh -a
```
2. A demo android app is available at [notmandatory/bdk-sample-app](https://github.com/notmandatory/bitcoindevkit-android-sample-app/tree/upgrade-to-bdk-ffi/)
## Swift bindings for iOS
1. Install the latest version of xcode, download and install the advanced tools.
1. Ensure Swift is installed
1. Install required targets
```sh
rustup target add aarch64-apple-ios x86_64-apple-ios
```
1. Build swift (iOS) bindings
```sh
./build.sh -s
```
1. Example iOS app can be found in `/examples/iOS` which can be run by xcode.
## Notes
## Adding new structs and functions
@ -25,27 +78,22 @@ See the [UniFFI User Guide](https://mozilla.github.io/uniffi-rs/)
### For pass by value objects
1. create new rust struct with only fields that are supported UniFFI types
2. update mapping `bdk.udl` file with new `dictionary`
1. create new rust struct with only fields that are supported UniFFI types
1. update mapping `bdk.udl` file with new `dictionary`
### For pass by reference values
1. create wrapper rust struct/impl with only fields that are `Sync + Send`
2. update mapping `bdk.udl` file with new `interface`
1. create wrapper rust struct/impl with only fields that are `Sync + Send`
1. update mapping `bdk.udl` file with new `interface`
### Build and test
## Goals
1. Use `build.sh` script (TODO do it all in build.rs instead)
2. Create tests in `bindings/bdk-kotlin` and/or `bindings/bdk-swift`
3. Use `test.sh` to run all bindings tests
1. Language bindings should feel idiomatic in target languages/platforms
1. Adding new targets should be easy
1. Getting up and running should be easy
1. Contributing should be easy
1. Get it right, then automate
### Run kotlin demo application
We have a kotlin demo console application which uses bdk.
It uses stdin for inputs and can be run from gradle.
```sh
cd bindings/bdk-kotlin
./gradlew :demo:run
```
## Thanks
This project is made possible thanks to the wonderful work on [mozilla/uniffi-rs](https://github.com/mozilla/uniffi-rs)