From c93f292b0e93837ab5f3e4e7cf3564257209f83e Mon Sep 17 00:00:00 2001 From: thunderbiscuit Date: Mon, 27 Feb 2023 14:43:52 -0500 Subject: [PATCH] Upgrade uniffi-rs to 0.23.0 and migrate Gradle plugins --- Cargo.lock | 158 +++++++++++++++--- .../plugins/UniFfiAndroidPlugin.kt | 37 ++-- bdk-ffi/Cargo.toml | 11 +- bdk-ffi/build.rs | 2 +- bdk-ffi/src/lib.rs | 2 +- bdk-ffi/uniffi-bindgen.rs | 3 + .../bitcoindevkit/plugins/UniFfiJvmPlugin.kt | 21 +-- 7 files changed, 161 insertions(+), 73 deletions(-) create mode 100644 bdk-ffi/uniffi-bindgen.rs diff --git a/Cargo.lock b/Cargo.lock index 4f8f533..a09eb6b 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -156,13 +156,11 @@ dependencies = [ [[package]] name = "bdk-ffi" -version = "0.27.0" +version = "0.27.1" dependencies = [ "assert_matches", "bdk", "uniffi", - "uniffi_build", - "uniffi_macros", ] [[package]] @@ -172,7 +170,7 @@ dependencies = [ "anyhow", "camino", "structopt", - "uniffi_bindgen", + "uniffi_bindgen 0.21.1", ] [[package]] @@ -309,15 +307,16 @@ dependencies = [ [[package]] name = "cargo_metadata" -version = "0.14.2" +version = "0.15.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4acbb09d9ee8e23699b9634375c72795d095bf268439da88562cf9b501f181fa" +checksum = "08a1ec454bc3eead8719cb56e15dbbfecdbc14e4b3a3ae4936cc6e31f5fc0d07" dependencies = [ "camino", "cargo-platform", "semver", "serde", "serde_json", + "thiserror", ] [[package]] @@ -514,6 +513,12 @@ dependencies = [ "wasi", ] +[[package]] +name = "glob" +version = "0.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d2fabcfbdc87f4758337ca535fb41a6d701b65693ce38287d856d1674551ec9b" + [[package]] name = "goblin" version = "0.5.4" @@ -525,6 +530,17 @@ dependencies = [ "scroll", ] +[[package]] +name = "goblin" +version = "0.6.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0d6b4de4a8eb6c46a8c77e1d3be942cb9a8bf073c22374578e5ba4b08ed0ff68" +dependencies = [ + "log", + "plain", + "scroll", +] + [[package]] name = "hashbrown" version = "0.12.3" @@ -1179,6 +1195,26 @@ version = "0.16.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "222a222a5bfe1bba4a77b45ec488a741b3cb8872e5e499451fd7d0129c9c7c3d" +[[package]] +name = "thiserror" +version = "1.0.38" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6a9cd18aa97d5c45c6603caea1da6628790b37f7a34b6ca89522331c5180fed0" +dependencies = [ + "thiserror-impl", +] + +[[package]] +name = "thiserror-impl" +version = "1.0.38" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1fb327af4685e4d03fa8cbcf1716380da910eeb2bb8be417e7f9fd3fb164f36f" +dependencies = [ + "proc-macro2", + "quote", + "syn", +] + [[package]] name = "tokio" version = "1.25.0" @@ -1255,19 +1291,13 @@ checksum = "c0edd1e5b14653f783770bce4a4dabb4a5108a5370a5f5d8cfe8710c361f6c8b" [[package]] name = "uniffi" -version = "0.21.1" +version = "0.23.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b983553c0d1ad73547c65fa0c399aa800bee4a70ad330198e1c7a523212da5ee" +checksum = "f71cc01459bc34cfe43fabf32b39f1228709bc6db1b3a664a92940af3d062376" dependencies = [ "anyhow", - "bytes", - "camino", - "cargo_metadata", - "log", - "once_cell", - "paste", - "static_assertions", - "uniffi_bindgen", + "uniffi_build", + "uniffi_core", "uniffi_macros", ] @@ -1283,26 +1313,50 @@ dependencies = [ "camino", "clap 3.2.23", "fs-err", - "goblin", + "goblin 0.5.4", "heck 0.4.1", "once_cell", "paste", "serde", "serde_json", "toml", - "uniffi_meta", + "uniffi_meta 0.21.1", + "weedle2", +] + +[[package]] +name = "uniffi_bindgen" +version = "0.23.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dbbba5103051c18f10b22f80a74439ddf7100273f217a547005d2735b2498994" +dependencies = [ + "anyhow", + "askama", + "bincode", + "camino", + "fs-err", + "glob", + "goblin 0.6.1", + "heck 0.4.1", + "once_cell", + "paste", + "serde", + "serde_json", + "toml", + "uniffi_meta 0.23.0", + "uniffi_testing", "weedle2", ] [[package]] name = "uniffi_build" -version = "0.21.1" +version = "0.23.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d035e50433ee3d52ab0dcdcf3b9b26f2cc2ec39294b3c07d95865a518709455f" +checksum = "0ee1a28368ff3d83717e3d3e2e15a66269c43488c3f036914131bb68892f29fb" dependencies = [ "anyhow", "camino", - "uniffi_bindgen", + "uniffi_bindgen 0.23.0", ] [[package]] @@ -1316,10 +1370,36 @@ dependencies = [ ] [[package]] -name = "uniffi_macros" -version = "0.21.1" +name = "uniffi_checksum_derive" +version = "0.23.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c96a574677566f83ea8458dac1dd7792fd63e7c3f9dbcd865f0e8d6f8057b127" +checksum = "03de61393a42b4ad4984a3763c0600594ac3e57e5aaa1d05cede933958987c03" +dependencies = [ + "quote", + "syn", +] + +[[package]] +name = "uniffi_core" +version = "0.23.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7a2b4852d638d74ca2d70e450475efb6d91fe6d54a7cd8d6bd80ad2ee6cd7daa" +dependencies = [ + "anyhow", + "bytes", + "camino", + "cargo_metadata", + "log", + "once_cell", + "paste", + "static_assertions", +] + +[[package]] +name = "uniffi_macros" +version = "0.23.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fa03394de21e759e0022f1ea8d992d2e39290d735b9ed52b1f74b20a684f794e" dependencies = [ "bincode", "camino", @@ -1331,7 +1411,7 @@ dependencies = [ "syn", "toml", "uniffi_build", - "uniffi_meta", + "uniffi_meta 0.23.0", ] [[package]] @@ -1342,7 +1422,33 @@ checksum = "729835442da829c9b6f7c111c76cf87b2498e129101203bec94f0c39a3296a38" dependencies = [ "serde", "siphasher", - "uniffi_checksum_derive", + "uniffi_checksum_derive 0.21.1", +] + +[[package]] +name = "uniffi_meta" +version = "0.23.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "66fdab2c436aed7a6391bec64204ec33948bfed9b11b303235740771f85c4ea6" +dependencies = [ + "serde", + "siphasher", + "uniffi_checksum_derive 0.23.0", +] + +[[package]] +name = "uniffi_testing" +version = "0.23.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "92b0570953ec41d97ce23e3b92161ac18231670a1f97523258a6d2ab76d7f76c" +dependencies = [ + "anyhow", + "camino", + "cargo_metadata", + "fs-err", + "once_cell", + "serde", + "serde_json", ] [[package]] diff --git a/bdk-android/plugins/src/main/kotlin/org/bitcoindevkit/plugins/UniFfiAndroidPlugin.kt b/bdk-android/plugins/src/main/kotlin/org/bitcoindevkit/plugins/UniFfiAndroidPlugin.kt index 4d2b16d..f934984 100644 --- a/bdk-android/plugins/src/main/kotlin/org/bitcoindevkit/plugins/UniFfiAndroidPlugin.kt +++ b/bdk-android/plugins/src/main/kotlin/org/bitcoindevkit/plugins/UniFfiAndroidPlugin.kt @@ -21,8 +21,7 @@ internal class UniFfiAndroidPlugin : Plugin { val buildAndroidAarch64Binary by tasks.register("buildAndroidAarch64Binary") { workingDir("${projectDir}/../../bdk-ffi") - val cargoArgs: MutableList = - mutableListOf("build", "--profile", "release-smaller", "--target", "aarch64-linux-android") + val cargoArgs: List = listOf("build", "--features", "uniffi/cli", "--profile", "release-smaller", "--target", "aarch64-linux-android") executable("cargo") args(cargoArgs) @@ -36,9 +35,7 @@ internal class UniFfiAndroidPlugin : Plugin { environment( // add build toolchain to PATH - Pair("PATH", - "${System.getenv("PATH")}:${System.getenv("ANDROID_NDK_ROOT")}/toolchains/llvm/prebuilt/$llvmArchPath/bin"), - + Pair("PATH", "${System.getenv("PATH")}:${System.getenv("ANDROID_NDK_ROOT")}/toolchains/llvm/prebuilt/$llvmArchPath/bin"), Pair("CFLAGS", "-D__ANDROID_API__=21"), Pair("CARGO_TARGET_AARCH64_LINUX_ANDROID_LINKER", "aarch64-linux-android21-clang"), Pair("CC", "aarch64-linux-android21-clang") @@ -53,8 +50,7 @@ internal class UniFfiAndroidPlugin : Plugin { val buildAndroidX86_64Binary by tasks.register("buildAndroidX86_64Binary") { workingDir("${project.projectDir}/../../bdk-ffi") - val cargoArgs: MutableList = - mutableListOf("build", "--profile", "release-smaller", "--target", "x86_64-linux-android") + val cargoArgs: List = listOf("build", "--features", "uniffi/cli", "--profile", "release-smaller", "--target", "x86_64-linux-android") executable("cargo") args(cargoArgs) @@ -68,9 +64,7 @@ internal class UniFfiAndroidPlugin : Plugin { environment( // add build toolchain to PATH - Pair("PATH", - "${System.getenv("PATH")}:${System.getenv("ANDROID_NDK_ROOT")}/toolchains/llvm/prebuilt/$llvmArchPath/bin"), - + Pair("PATH", "${System.getenv("PATH")}:${System.getenv("ANDROID_NDK_ROOT")}/toolchains/llvm/prebuilt/$llvmArchPath/bin"), Pair("CFLAGS", "-D__ANDROID_API__=21"), Pair("CARGO_TARGET_X86_64_LINUX_ANDROID_LINKER", "x86_64-linux-android21-clang"), Pair("CC", "x86_64-linux-android21-clang") @@ -85,8 +79,7 @@ internal class UniFfiAndroidPlugin : Plugin { val buildAndroidArmv7Binary by tasks.register("buildAndroidArmv7Binary") { workingDir("${project.projectDir}/../../bdk-ffi") - val cargoArgs: MutableList = - mutableListOf("build", "--profile", "release-smaller", "--target", "armv7-linux-androideabi") + val cargoArgs: List = listOf("build", "--features", "uniffi/cli", "--profile", "release-smaller", "--target", "armv7-linux-androideabi") executable("cargo") args(cargoArgs) @@ -100,12 +93,9 @@ internal class UniFfiAndroidPlugin : Plugin { environment( // add build toolchain to PATH - Pair("PATH", - "${System.getenv("PATH")}:${System.getenv("ANDROID_NDK_ROOT")}/toolchains/llvm/prebuilt/$llvmArchPath/bin"), - + Pair("PATH", "${System.getenv("PATH")}:${System.getenv("ANDROID_NDK_ROOT")}/toolchains/llvm/prebuilt/$llvmArchPath/bin"), Pair("CFLAGS", "-D__ANDROID_API__=21"), - Pair("CARGO_TARGET_ARMV7_LINUX_ANDROIDEABI_LINKER", - "armv7a-linux-androideabi21-clang"), + Pair("CARGO_TARGET_ARMV7_LINUX_ANDROIDEABI_LINKER", "armv7a-linux-androideabi21-clang"), Pair("CC", "armv7a-linux-androideabi21-clang") ) @@ -145,17 +135,10 @@ internal class UniFfiAndroidPlugin : Plugin { dependsOn(moveNativeAndroidLibs) workingDir("${project.projectDir}/../../bdk-ffi") + val cargoArgs: List = listOf("run", "--features", "uniffi/cli", "--bin", "uniffi-bindgen", "generate", "src/bdk.udl", "--language", "kotlin", "--out-dir", "../bdk-android/lib/src/main/kotlin") + executable("cargo") - args( - "run", - "--package", - "bdk-ffi-bindgen", - "--", - "--language", - "kotlin", - "--out-dir", - "../bdk-android/lib/src/main/kotlin" - ) + args(cargoArgs) doLast { println("Android bindings file successfully created") diff --git a/bdk-ffi/Cargo.toml b/bdk-ffi/Cargo.toml index 07ad364..0dac7a7 100644 --- a/bdk-ffi/Cargo.toml +++ b/bdk-ffi/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "bdk-ffi" -version = "0.27.0" +version = "0.27.1" authors = ["Steve Myers ", "Sudarsan Balaji "] edition = "2018" license = "MIT OR Apache-2.0" @@ -9,13 +9,16 @@ license = "MIT OR Apache-2.0" crate-type = ["staticlib", "cdylib"] name = "bdkffi" +[[bin]] +name = "uniffi-bindgen" +path = "uniffi-bindgen.rs" + [dependencies] bdk = { version = "0.27.1", features = ["all-keys", "use-esplora-ureq", "sqlite-bundled", "rpc"] } -uniffi_macros = { version = "0.21.0", features = ["builtin-bindgen"] } -uniffi = { version = "0.21.0", features = ["builtin-bindgen"] } +uniffi = { version = "0.23.0" } [build-dependencies] -uniffi_build = { version = "0.21.0", features = ["builtin-bindgen"] } +uniffi = { version = "0.23.0", features = ["build"] } [dev-dependencies] assert_matches = "1.5.0" diff --git a/bdk-ffi/build.rs b/bdk-ffi/build.rs index 153077f..e1207e6 100644 --- a/bdk-ffi/build.rs +++ b/bdk-ffi/build.rs @@ -1,3 +1,3 @@ fn main() { - uniffi_build::generate_scaffolding("src/bdk.udl").unwrap(); + uniffi::generate_scaffolding("./src/bdk.udl").unwrap(); } diff --git a/bdk-ffi/src/lib.rs b/bdk-ffi/src/lib.rs index 81dadb3..f82b6cb 100644 --- a/bdk-ffi/src/lib.rs +++ b/bdk-ffi/src/lib.rs @@ -32,7 +32,7 @@ use std::io::Cursor; use std::str::FromStr; use std::sync::Arc; -uniffi_macros::include_scaffolding!("bdk"); +uniffi::include_scaffolding!("bdk"); /// A output script and an amount of satoshis. pub struct ScriptAmount { diff --git a/bdk-ffi/uniffi-bindgen.rs b/bdk-ffi/uniffi-bindgen.rs new file mode 100644 index 0000000..f6cff6c --- /dev/null +++ b/bdk-ffi/uniffi-bindgen.rs @@ -0,0 +1,3 @@ +fn main() { + uniffi::uniffi_bindgen_main() +} diff --git a/bdk-jvm/plugins/src/main/kotlin/org/bitcoindevkit/plugins/UniFfiJvmPlugin.kt b/bdk-jvm/plugins/src/main/kotlin/org/bitcoindevkit/plugins/UniFfiJvmPlugin.kt index 3bad185..798ca7e 100644 --- a/bdk-jvm/plugins/src/main/kotlin/org/bitcoindevkit/plugins/UniFfiJvmPlugin.kt +++ b/bdk-jvm/plugins/src/main/kotlin/org/bitcoindevkit/plugins/UniFfiJvmPlugin.kt @@ -12,26 +12,26 @@ internal class UniFfiJvmPlugin : Plugin { override fun apply(target: Project): Unit = target.run { // register a task called buildJvmBinaries which will run something like - // cargo build --release --target aarch64-apple-darwin + // cargo build --features uniffi/cli --release --target aarch64-apple-darwin val buildJvmBinaries by tasks.register("buildJvmBinaries") { if (operatingSystem == OS.MAC) { exec { workingDir("${project.projectDir}/../../bdk-ffi") executable("cargo") - val cargoArgs: List = listOf("build", "--profile", "release-smaller", "--target", "x86_64-apple-darwin") + val cargoArgs: List = listOf("build", "--features", "uniffi/cli", "--profile", "release-smaller", "--target", "x86_64-apple-darwin") args(cargoArgs) } exec { workingDir("${project.projectDir}/../../bdk-ffi") executable("cargo") - val cargoArgs: List = listOf("build", "--profile", "release-smaller", "--target", "aarch64-apple-darwin") + val cargoArgs: List = listOf("build", "--features", "uniffi/cli", "--profile", "release-smaller", "--target", "aarch64-apple-darwin") args(cargoArgs) } } else if(operatingSystem == OS.LINUX) { exec { workingDir("${project.projectDir}/../../bdk-ffi") executable("cargo") - val cargoArgs: List = listOf("build", "--profile", "release-smaller", "--target", "x86_64-unknown-linux-gnu") + val cargoArgs: List = listOf("build", "--features", "uniffi/cli", "--profile", "release-smaller", "--target", "x86_64-unknown-linux-gnu") args(cargoArgs) } } @@ -90,17 +90,10 @@ internal class UniFfiJvmPlugin : Plugin { dependsOn(moveNativeJvmLibs) workingDir("${project.projectDir}/../../bdk-ffi") + val cargoArgs: List = listOf("run", "--features", "uniffi/cli", "--bin", "uniffi-bindgen", "generate", "src/bdk.udl", "--language", "kotlin", "--out-dir", "../bdk-jvm/lib/src/main/kotlin") + executable("cargo") - args( - "run", - "--package", - "bdk-ffi-bindgen", - "--", - "--language", - "kotlin", - "--out-dir", - "../bdk-jvm/lib/src/main/kotlin" - ) + args(cargoArgs) doLast { println("JVM bindings file successfully created")