diff --git a/jni/android/build.gradle.kts b/jni/android/build.gradle.kts index 6ab6b86..40d9bd6 100644 --- a/jni/android/build.gradle.kts +++ b/jni/android/build.gradle.kts @@ -27,6 +27,7 @@ android { externalNativeBuild { cmake { + version = "3.22.1" path("src/main/CMakeLists.txt") } } diff --git a/jni/jvm/darwin/build.gradle.kts b/jni/jvm/darwin/build.gradle.kts index 2b4f90b..358234c 100644 --- a/jni/jvm/darwin/build.gradle.kts +++ b/jni/jvm/darwin/build.gradle.kts @@ -12,8 +12,12 @@ dependencies { val copyJni by tasks.creating(Sync::class) { onlyIf { org.gradle.internal.os.OperatingSystem.current().isMacOsX } dependsOn(":jni:jvm:buildNativeHost") + val arch = when (System.getProperty("os.arch")) { + "aarch64" -> "aarch64" + else -> "x86_64" + } from(rootDir.resolve("jni/jvm/build/darwin/libsecp256k1-jni.dylib")) - into(buildDir.resolve("jniResources/fr/acinq/secp256k1/jni/native/darwin-x86_64")) + into(buildDir.resolve("jniResources/fr/acinq/secp256k1/jni/native/darwin-$arch")) } (tasks["processResources"] as ProcessResources).apply { diff --git a/native/build.sh b/native/build.sh index c6646cf..7e67763 100755 --- a/native/build.sh +++ b/native/build.sh @@ -16,7 +16,7 @@ if [ "$TARGET" == "mingw" ]; then elif [ "$TARGET" == "linux" ]; then CONF_OPTS="CFLAGS=-fPIC" elif [ "$TARGET" == "darwin" ]; then - CONF_OPTS="--host=x86_64-w64-darwin" + CONF_OPTS="" else echo "Unknown TARGET=$TARGET" exit 1 diff --git a/publishing/PUBLISHING.md b/publishing/PUBLISHING.md index d2588be..5854d5e 100644 --- a/publishing/PUBLISHING.md +++ b/publishing/PUBLISHING.md @@ -27,7 +27,9 @@ You must edit `secp256k1-kmp-staging-upload.sh` and add your sonatype credential ## Adding custom JNI bindings Github CI currently generates JNI bindings for Windows x64, Linux x64 and iOS x64. But it is possible to add custom bindings to JNI packages before -they are published to maven central. This is how we add linux arm64 bindings: +they are published to maven central. + +This is how we add linux arm64 bindings: - compile JNI bindings for Linux Arm64 (on a Linux Arm64 machine, cross-compilation is not supported) - git clone --recursive https://github.com/ACINQ/secp256k1-kmp.git - cd secp256k1-kmp @@ -37,6 +39,19 @@ they are published to maven central. This is how we add linux arm64 bindings: - JNI library is: jni/jvm/build/linux/libsecp256k1-jni.so - copy libsecp256k1-jni.so to fr/acinq/secp256k1/jni/native/linux-aarch64/libsecp256k1-jni.so - run `secp256k1-kmp-add-linuxarm64.sh` and specify either `release` or `snapshot` and the `VERSION` environment variable, for example: - - VERSION=0.6.4-SNAPSHOT ./secp256k1-kmp-add-linuxarm64.sh snapshot - - VERSION=0.6.3 ./secp256k1-kmp-add-linuxarm64.sh release + - VERSION=0.9.0-SNAPSHOT ./secp256k1-kmp-add-linuxarm64.sh snapshot + - VERSION=0.9.0 ./secp256k1-kmp-add-linuxarm64.sh release + +This is how we add macos arm64 (M1/M2) bindings: +- compile JNI bindings for macos Arm64 (on a macos Arm64 machine, cross-compilation is not supported) + - git clone --recursive https://github.com/ACINQ/secp256k1-kmp.git + - cd secp256k1-kmp + - TARGET=darwin ./native/build.sh + - mkdir -p jni/jvm/build/darwin + - TARGET=darwin ./jni/jvm/build.sh + - JNI library is: jni/jvm/build/darwin/libsecp256k1-jni.dylib +- copy libsecp256k1-jni.dylib to fr/acinq/secp256k1/jni/native/darwin-aarch64/libsecp256k1-jni.dylib +- run `secp256k1-kmp-add-darwinaarch64.sh` and specify either `release` or `snapshot` and the `VERSION` environment variable, for example: + - VERSION=0.9.0-SNAPSHOT ./secp256k1-kmp-add-darwinaarch64.sh snapshot + - VERSION=0.9.0 ./secp256k1-kmp-add-darwinaarch64.sh release diff --git a/publishing/secp256k1-kmp-add-darwinaarch64.sh b/publishing/secp256k1-kmp-add-darwinaarch64.sh new file mode 100755 index 0000000..ce79be3 --- /dev/null +++ b/publishing/secp256k1-kmp-add-darwinaarch64.sh @@ -0,0 +1,17 @@ +#!/bin/bash -x + +if [ $# -eq 0 ] + then + echo "specify either snapshot or release" + exit 1 +fi + +# add aarch64 (ARM64) library to the darwin jar +if [ -e fr/acinq/secp256k1/jni/native/darwin-aarch64/libsecp256k1-jni.dylib ] +then + jar -uf $1/fr/acinq/secp256k1/secp256k1-kmp-jni-jvm-darwin/$VERSION/secp256k1-kmp-jni-jvm-darwin-$VERSION.jar fr || exit +else + libsecp256k1-jni.dylib for arch64 is missing + exit 1 +fi + diff --git a/publishing/secp256k1-kmp-snapshot-deploy.sh b/publishing/secp256k1-kmp-snapshot-deploy.sh index 9585c6c..56196bb 100755 --- a/publishing/secp256k1-kmp-snapshot-deploy.sh +++ b/publishing/secp256k1-kmp-snapshot-deploy.sh @@ -2,7 +2,7 @@ GROUP_ID=fr.acinq.secp256k1 ARTIFACT_ID_BASE=secp256k1-kmp -VERSION=0.6.3-SNAPSHOT +VERSION=0.9.0-SNAPSHOT cd snapshot pushd .