Add sections and more info
This commit is contained in:
parent
cafc15197c
commit
fea6a3d1ee
106
README.md
106
README.md
@ -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
|
| Language | Platform | Status |
|
||||||
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
|
| --- | --- | --- |
|
||||||
```
|
| 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
|
### General
|
||||||
(or on Mac OSX install the latest Xcode)
|
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
|
## 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
|
### For pass by value objects
|
||||||
|
|
||||||
1. create new rust struct with only fields that are supported UniFFI types
|
1. create new rust struct with only fields that are supported UniFFI types
|
||||||
2. update mapping `bdk.udl` file with new `dictionary`
|
1. update mapping `bdk.udl` file with new `dictionary`
|
||||||
|
|
||||||
### For pass by reference values
|
### For pass by reference values
|
||||||
|
|
||||||
1. create wrapper rust struct/impl with only fields that are `Sync + Send`
|
1. create wrapper rust struct/impl with only fields that are `Sync + Send`
|
||||||
2. update mapping `bdk.udl` file with new `interface`
|
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)
|
1. Language bindings should feel idiomatic in target languages/platforms
|
||||||
2. Create tests in `bindings/bdk-kotlin` and/or `bindings/bdk-swift`
|
1. Adding new targets should be easy
|
||||||
3. Use `test.sh` to run all bindings tests
|
1. Getting up and running should be easy
|
||||||
|
1. Contributing should be easy
|
||||||
|
1. Get it right, then automate
|
||||||
|
|
||||||
### Run kotlin demo application
|
## Thanks
|
||||||
|
|
||||||
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
|
|
||||||
```
|
|
||||||
|
|
||||||
|
This project is made possible thanks to the wonderful work on [mozilla/uniffi-rs](https://github.com/mozilla/uniffi-rs)
|
||||||
|
Loading…
x
Reference in New Issue
Block a user