diff --git a/buildSrc/build.gradle.kts b/buildSrc/build.gradle.kts new file mode 100644 index 0000000..3f0ee3c --- /dev/null +++ b/buildSrc/build.gradle.kts @@ -0,0 +1,8 @@ +plugins { + `kotlin-dsl` + // id("org.gradle.kotlin.kotlin-dsl") version "2.2.0" +} + +repositories { + mavenCentral() +} diff --git a/buildSrc/settings.gradle.kts b/buildSrc/settings.gradle.kts new file mode 100644 index 0000000..e69de29 diff --git a/buildSrc/src/main/kotlin/org/bitcoindevkit/plugin/generate-bdk-bindings.gradle.kts b/buildSrc/src/main/kotlin/org/bitcoindevkit/plugin/generate-bdk-bindings.gradle.kts new file mode 100644 index 0000000..f36d66f --- /dev/null +++ b/buildSrc/src/main/kotlin/org/bitcoindevkit/plugin/generate-bdk-bindings.gradle.kts @@ -0,0 +1,76 @@ +package org.bitcoindevkit.plugin + +val operatingSystem: OS = when { + System.getProperty("os.name").contains("mac", ignoreCase = true) -> OS.MAC + System.getProperty("os.name").contains("linux", ignoreCase = true) -> OS.LINUX + else -> OS.OTHER +} +val architecture: Arch = when (System.getProperty("os.arch")) { + "x86_64" -> Arch.X86_64 + "aarch64" -> Arch.AARCH64 + else -> Arch.OTHER +} + +tasks.register("buildJvmBinaries") { + group = "Bitcoindevkit" + description = "Build the JVM native binaries for the bitcoindevkit" + + workingDir("${project.projectDir}/../bdk-ffi") + val cargoArgs: MutableList = mutableListOf("build", "--release", "--target") + + if (operatingSystem == OS.MAC && architecture == Arch.X86_64) { + println("Building the JVM native libs for macOS x86_64") + cargoArgs.add("x86_64-apple-darwin") + } else if (operatingSystem == OS.MAC && architecture == Arch.AARCH64) { + println("Building the JVM native libs for macOS x86_64") + cargoArgs.add("aarch64-apple-darwin") + } else if (operatingSystem == OS.LINUX) { + println("Building the JVM native libs for Linux x86_64") + cargoArgs.add("x86_64-unknown-linux-gnu") + } + + executable("cargo") + args(cargoArgs) +} + +tasks.register("moveNativeLibs") { + group = "Bitcoindevkit" + description = "Move the native libraries in the bdk-jvm project" + + var targetDir = "" + var resDir = "" + if (operatingSystem == OS.MAC && architecture == Arch.X86_64) { + targetDir = "x86_64-apple-darwin" + resDir = "darwin-x86-64" + } else if (operatingSystem == OS.MAC && architecture == Arch.AARCH64) { + targetDir = "aarch64-apple-darwin" + resDir = "darwin-aarch64" + } else if (operatingSystem == OS.LINUX) { + targetDir = "x86_64-unknown-linux-gnu" + resDir = "linux-x86-64" + } + + from("${project.projectDir}/../bdk-ffi/target/$targetDir/release/libbdkffi.dylib") + into("${project.projectDir}/../jvm/src/main/resources/$resDir/") +} + +tasks.register("generateBindings") { + group = "Bitcoindevkit" + description = "Building the bindings file for the bitcoindevkit" + + workingDir("${project.projectDir}/../bdk-ffi") + executable("uniffi-bindgen") + args("generate", "./src/bdk.udl", "--no-format", "--out-dir", "../jvm/src/main/kotlin", "--language", "kotlin") +} + +enum class Arch { + AARCH64, + X86_64, + OTHER, +} + +enum class OS { + MAC, + LINUX, + OTHER, +} diff --git a/jvm/build.gradle.kts b/jvm/build.gradle.kts index 5ff3dbb..dfa082b 100644 --- a/jvm/build.gradle.kts +++ b/jvm/build.gradle.kts @@ -7,6 +7,7 @@ plugins { id("maven-publish") id("signing") id("org.jetbrains.dokka") version "1.6.10" + id("org.bitcoindevkit.plugin.generate-bdk-bindings") } java { diff --git a/settings.gradle b/settings.gradle deleted file mode 100644 index 024cf9f..0000000 --- a/settings.gradle +++ /dev/null @@ -1,4 +0,0 @@ -rootProject.name = 'bdk-kotlin' - -include ':jvm',':android' - diff --git a/settings.gradle.kts b/settings.gradle.kts new file mode 100644 index 0000000..ff3e310 --- /dev/null +++ b/settings.gradle.kts @@ -0,0 +1,4 @@ +rootProject.name = "bdk-kotlin" + +include(":jvm", ":android") +//include 'buildSrc'