Compare commits
11 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
d50d9060c2 | ||
|
|
6fedb1577c | ||
|
|
94bb2d67cf | ||
|
|
bf05a001fe | ||
|
|
d9e5fda600 | ||
|
|
8c984678be | ||
|
|
840de25c5f | ||
|
|
cec3fb385f | ||
|
|
d59def1c79 | ||
|
|
52d73951e6 | ||
|
|
08669500b6 |
@@ -1,4 +1,4 @@
|
|||||||
[](http://kotlinlang.org)
|
[](http://kotlinlang.org)
|
||||||
[](https://search.maven.org/search?q=g:fr.acinq.secp256k1%20a:secp256k1-kmp*)
|
[](https://search.maven.org/search?q=g:fr.acinq.secp256k1%20a:secp256k1-kmp*)
|
||||||

|

|
||||||
[](https://github.com/ACINQ/secp256k1-kmp/blob/master/LICENSE)
|
[](https://github.com/ACINQ/secp256k1-kmp/blob/master/LICENSE)
|
||||||
@@ -30,19 +30,19 @@ kotlin {
|
|||||||
val commonMain by getting {
|
val commonMain by getting {
|
||||||
dependencies {
|
dependencies {
|
||||||
implementation(kotlin("stdlib-common"))
|
implementation(kotlin("stdlib-common"))
|
||||||
implementation(kotlin("fr.acinq.secp256k1:secp256k1-kmp:$secp256k1_version"))
|
implementation("fr.acinq.secp256k1:secp256k1-kmp:$secp256k1_version")
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
val jvmMain by getting {
|
val jvmMain by getting {
|
||||||
dependencies {
|
dependencies {
|
||||||
implementation(kotlin("stdlib"))
|
implementation(kotlin("stdlib"))
|
||||||
implementation(kotlin("fr.acinq.secp256k1:secp256k1-kmp-jni-jvm:$secp256k1_version"))
|
implementation("fr.acinq.secp256k1:secp256k1-kmp-jni-jvm:$secp256k1_version")
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
val androidMain by getting {
|
val androidMain by getting {
|
||||||
dependencies {
|
dependencies {
|
||||||
implementation(kotlin("stdlib"))
|
implementation(kotlin("stdlib"))
|
||||||
implementation(kotlin("fr.acinq.secp256k1:secp256k1-kmp-jni-android:$secp256k1_version"))
|
implementation("fr.acinq.secp256k1:secp256k1-kmp-jni-android:$secp256k1_version")
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -15,14 +15,14 @@ buildscript {
|
|||||||
}
|
}
|
||||||
|
|
||||||
dependencies {
|
dependencies {
|
||||||
classpath("com.android.tools.build:gradle:4.2.2")
|
classpath("com.android.tools.build:gradle:7.3.1")
|
||||||
classpath("org.jetbrains.dokka:dokka-gradle-plugin:1.6.21")
|
classpath("org.jetbrains.dokka:dokka-gradle-plugin:1.6.21")
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
allprojects {
|
allprojects {
|
||||||
group = "fr.acinq.secp256k1"
|
group = "fr.acinq.secp256k1"
|
||||||
version = "0.7.0"
|
version = "0.9.0"
|
||||||
|
|
||||||
repositories {
|
repositories {
|
||||||
google()
|
google()
|
||||||
|
|||||||
@@ -15,12 +15,9 @@ dependencies {
|
|||||||
|
|
||||||
android {
|
android {
|
||||||
defaultConfig {
|
defaultConfig {
|
||||||
compileSdkVersion(30)
|
compileSdk = 33
|
||||||
minSdkVersion(21)
|
minSdk = 21
|
||||||
testInstrumentationRunner = "androidx.test.runner.AndroidJUnitRunner"
|
testInstrumentationRunner = "androidx.test.runner.AndroidJUnitRunner"
|
||||||
externalNativeBuild {
|
|
||||||
cmake {}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
compileOptions {
|
compileOptions {
|
||||||
@@ -30,10 +27,12 @@ android {
|
|||||||
|
|
||||||
externalNativeBuild {
|
externalNativeBuild {
|
||||||
cmake {
|
cmake {
|
||||||
|
version = "3.22.1"
|
||||||
path("src/main/CMakeLists.txt")
|
path("src/main/CMakeLists.txt")
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
ndkVersion = "21.4.7075529"
|
|
||||||
|
ndkVersion = "25.2.9519653"
|
||||||
|
|
||||||
afterEvaluate {
|
afterEvaluate {
|
||||||
tasks.withType<com.android.build.gradle.tasks.factory.AndroidUnitTest>().all {
|
tasks.withType<com.android.build.gradle.tasks.factory.AndroidUnitTest>().all {
|
||||||
@@ -43,8 +42,8 @@ android {
|
|||||||
}
|
}
|
||||||
|
|
||||||
afterEvaluate {
|
afterEvaluate {
|
||||||
configure(listOf("Debug", "Release").map { tasks["externalNativeBuild$it"] }) {
|
tasks.filter { it.name.startsWith("configureCMake") }.forEach {
|
||||||
dependsOn(":native:buildSecp256k1Android")
|
it.dependsOn(":native:buildSecp256k1Android")
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -1,5 +1,7 @@
|
|||||||
cmake_minimum_required(VERSION 3.10.0)
|
cmake_minimum_required(VERSION 3.10.0)
|
||||||
|
|
||||||
|
project(secp256k1jni)
|
||||||
|
|
||||||
add_library( secp256k1-jni SHARED
|
add_library( secp256k1-jni SHARED
|
||||||
${CMAKE_CURRENT_LIST_DIR}/../../../c/src/fr_acinq_secp256k1_Secp256k1CFunctions.c
|
${CMAKE_CURRENT_LIST_DIR}/../../../c/src/fr_acinq_secp256k1_Secp256k1CFunctions.c
|
||||||
)
|
)
|
||||||
|
|||||||
@@ -12,8 +12,12 @@ dependencies {
|
|||||||
val copyJni by tasks.creating(Sync::class) {
|
val copyJni by tasks.creating(Sync::class) {
|
||||||
onlyIf { org.gradle.internal.os.OperatingSystem.current().isMacOsX }
|
onlyIf { org.gradle.internal.os.OperatingSystem.current().isMacOsX }
|
||||||
dependsOn(":jni:jvm:buildNativeHost")
|
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"))
|
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 {
|
(tasks["processResources"] as ProcessResources).apply {
|
||||||
|
|||||||
@@ -19,18 +19,16 @@ else
|
|||||||
fi
|
fi
|
||||||
|
|
||||||
TARGET=$SYS-linux-android
|
TARGET=$SYS-linux-android
|
||||||
TOOLTARGET=$TARGET
|
|
||||||
if [ "$SYS" == "armv7a" ]; then
|
if [ "$SYS" == "armv7a" ]; then
|
||||||
TARGET=armv7a-linux-androideabi
|
TARGET=armv7a-linux-androideabi
|
||||||
TOOLTARGET=arm-linux-androideabi
|
|
||||||
fi
|
fi
|
||||||
|
|
||||||
export CC=$ANDROID_NDK/toolchains/llvm/prebuilt/$TOOLCHAIN/bin/${TARGET}21-clang
|
export CC=$ANDROID_NDK/toolchains/llvm/prebuilt/$TOOLCHAIN/bin/${TARGET}21-clang
|
||||||
export LD=$ANDROID_NDK/toolchains/llvm/prebuilt/$TOOLCHAIN/bin/$TOOLTARGET-ld
|
export LD=$ANDROID_NDK/toolchains/llvm/prebuilt/$TOOLCHAIN/bin/ld
|
||||||
export AR=$ANDROID_NDK/toolchains/llvm/prebuilt/$TOOLCHAIN/bin/$TOOLTARGET-ar
|
export AR=$ANDROID_NDK/toolchains/llvm/prebuilt/$TOOLCHAIN/bin/llvm-ar
|
||||||
export AS=$ANDROID_NDK/toolchains/llvm/prebuilt/$TOOLCHAIN/bin/$TOOLTARGET-as
|
export AS=$CC
|
||||||
export RANLIB=$ANDROID_NDK/toolchains/llvm/prebuilt/$TOOLCHAIN/bin/$TOOLTARGET-ranlib
|
export RANLIB=$ANDROID_NDK/toolchains/llvm/prebuilt/$TOOLCHAIN/bin/llvm-ranlib
|
||||||
export STRIP=$ANDROID_NDK/toolchains/llvm/prebuilt/$TOOLCHAIN/bin/$TOOLTARGET-strip
|
export STRIP=$ANDROID_NDK/toolchains/llvm/prebuilt/$TOOLCHAIN/bin/llvm-strip
|
||||||
|
|
||||||
cd secp256k1
|
cd secp256k1
|
||||||
|
|
||||||
|
|||||||
@@ -16,7 +16,7 @@ if [ "$TARGET" == "mingw" ]; then
|
|||||||
elif [ "$TARGET" == "linux" ]; then
|
elif [ "$TARGET" == "linux" ]; then
|
||||||
CONF_OPTS="CFLAGS=-fPIC"
|
CONF_OPTS="CFLAGS=-fPIC"
|
||||||
elif [ "$TARGET" == "darwin" ]; then
|
elif [ "$TARGET" == "darwin" ]; then
|
||||||
CONF_OPTS="--host=x86_64-w64-darwin"
|
CONF_OPTS=""
|
||||||
else
|
else
|
||||||
echo "Unknown TARGET=$TARGET"
|
echo "Unknown TARGET=$TARGET"
|
||||||
exit 1
|
exit 1
|
||||||
|
|||||||
Submodule native/secp256k1 updated: 44c2452fd3...346a053d4c
@@ -27,7 +27,9 @@ You must edit `secp256k1-kmp-staging-upload.sh` and add your sonatype credential
|
|||||||
## Adding custom JNI bindings
|
## 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
|
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)
|
- 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
|
- git clone --recursive https://github.com/ACINQ/secp256k1-kmp.git
|
||||||
- cd secp256k1-kmp
|
- 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
|
- 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
|
- 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:
|
- 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.9.0-SNAPSHOT ./secp256k1-kmp-add-linuxarm64.sh snapshot
|
||||||
- VERSION=0.6.3 ./secp256k1-kmp-add-linuxarm64.sh release
|
- 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
|
||||||
|
|
||||||
|
|||||||
17
publishing/secp256k1-kmp-add-darwinaarch64.sh
Executable file
17
publishing/secp256k1-kmp-add-darwinaarch64.sh
Executable file
@@ -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
|
||||||
|
|
||||||
@@ -2,7 +2,7 @@
|
|||||||
|
|
||||||
GROUP_ID=fr.acinq.secp256k1
|
GROUP_ID=fr.acinq.secp256k1
|
||||||
ARTIFACT_ID_BASE=secp256k1-kmp
|
ARTIFACT_ID_BASE=secp256k1-kmp
|
||||||
VERSION=0.6.3-SNAPSHOT
|
VERSION=0.9.0-SNAPSHOT
|
||||||
|
|
||||||
cd snapshot
|
cd snapshot
|
||||||
pushd .
|
pushd .
|
||||||
|
|||||||
@@ -3,6 +3,13 @@ pluginManagement {
|
|||||||
google()
|
google()
|
||||||
gradlePluginPortal()
|
gradlePluginPortal()
|
||||||
}
|
}
|
||||||
|
resolutionStrategy {
|
||||||
|
eachPlugin {
|
||||||
|
if (requested.id.namespace == "com.android" || requested.id.name == "kotlin-android-extensions") {
|
||||||
|
useModule("com.android.tools.build:gradle:7.3.1")
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
rootProject.name = "secp256k1-kmp"
|
rootProject.name = "secp256k1-kmp"
|
||||||
|
|
||||||
|
|||||||
@@ -1,7 +0,0 @@
|
|||||||
package fr.acinq.secp256k1
|
|
||||||
|
|
||||||
import org.junit.Test
|
|
||||||
import kotlin.test.assertEquals
|
|
||||||
|
|
||||||
|
|
||||||
class AndroidTest {}
|
|
||||||
Reference in New Issue
Block a user