From 4764345b66e3392525e8846cfaab98a29b488647 Mon Sep 17 00:00:00 2001 From: Angelos Veglektsis Date: Wed, 28 Jan 2026 15:22:39 +0200 Subject: [PATCH] feat: Add iOS target in KMP bindings --- build/.tasks.yml | 12 +++-- gitlab/deploy-maven.yml | 8 +--- libs/gl-sdk-android/.gitignore | 5 +- libs/gl-sdk-android/lib/build.gradle.kts | 46 ++++++++++--------- .../com/blockstream/glsdk/CommonTest.kt | 13 ++++++ .../lib/src/nativeInterop/cinterop/glsdk.def | 6 ++- 6 files changed, 56 insertions(+), 34 deletions(-) create mode 100644 libs/gl-sdk-android/lib/src/commonTest/kotlin/com/blockstream/glsdk/CommonTest.kt diff --git a/build/.tasks.yml b/build/.tasks.yml index 74dd79ec..b3aaccf1 100644 --- a/build/.tasks.yml +++ b/build/.tasks.yml @@ -9,10 +9,12 @@ tasks: - linux-android-x86_64 cmds: - cp -a target/release/android/jniLibs libs/gl-sdk-android/lib/src/androidMain - + kotlin: deps: - android + - ios + - ios-sim vars: OS_NAME: sh: uname | tr '[:upper:]' '[:lower:]' @@ -20,6 +22,10 @@ tasks: - cargo install --bin gobley-uniffi-bindgen gobley-uniffi-bindgen@0.3.7 - gobley-uniffi-bindgen --config ./libs/gl-sdk/uniffi.kotlin-multiplatform.toml --library ./target/aarch64-linux-android/debug/libglsdk.a --out-dir target/release/kotlin-multiplatform - cp -a ./target/release/kotlin-multiplatform/* libs/gl-sdk-android/lib/src/ + - mkdir -p libs/gl-sdk-android/lib/src/lib/ios-arm64 + - mkdir -p libs/gl-sdk-android/lib/src/lib/ios-simulator-arm64 + - cp ./target/aarch64-apple-ios/release/libglsdk.a libs/gl-sdk-android/lib/src/lib/ios-arm64/ + - cp ./target/aarch64-apple-ios-sim/release/libglsdk.a libs/gl-sdk-android/lib/src/lib/ios-simulator-arm64/ - cp -a {{.ANDROID_NDK_HOME}}/toolchains/llvm/prebuilt/{{.OS_NAME}}-x86_64/sysroot/usr/lib/aarch64-linux-android/libc++_shared.so libs/gl-sdk-android/lib/src/androidMain/jniLibs/arm64-v8a/ - cp -a {{.ANDROID_NDK_HOME}}/toolchains/llvm/prebuilt/{{.OS_NAME}}-x86_64/sysroot/usr/lib/arm-linux-androideabi/libc++_shared.so libs/gl-sdk-android/lib/src/androidMain/jniLibs/armeabi-v7a/ - cp -a {{.ANDROID_NDK_HOME}}/toolchains/llvm/prebuilt/{{.OS_NAME}}-x86_64/sysroot/usr/lib/i686-linux-android/libc++_shared.so libs/gl-sdk-android/lib/src/androidMain/jniLibs/x86/ @@ -46,12 +52,12 @@ tasks: ios: deps: - ios-apple-aarch64 - - ios-apple-x86_64 +# - ios-apple-x86_64 ios-sim: deps: - ios-sim-apple-aarch64 - + ios-apple-*: vars: ARCH: '{{ index .MATCH 0 }}' diff --git a/gitlab/deploy-maven.yml b/gitlab/deploy-maven.yml index 72fa143a..541806d9 100644 --- a/gitlab/deploy-maven.yml +++ b/gitlab/deploy-maven.yml @@ -28,6 +28,7 @@ publish_snapshot_to_maven: rules: - if: '$CI_COMMIT_BRANCH == "main"' when: on_success + - when: manual script: - cd libs/gl-sdk-android - RAW_VERSION=$(grep '^libraryVersion=' gradle.properties | cut -d'=' -f2) @@ -42,11 +43,4 @@ publish_snapshot_to_maven: - SNAPSHOT_VERSION="${NEXT_VERSION}-SNAPSHOT" - echo "Publishing snapshot version ${SNAPSHOT_VERSION} (base=${BASE_VERSION})" - ./gradlew -PlibraryVersion=${SNAPSHOT_VERSION} publish --no-daemon - artifacts: - paths: - - libs/gl-sdk-android/lib/build/libs - - libs/gl-sdk-android/lib/build/outputs - - libs/gl-sdk-android/lib/build/publications - when: always - expire_in: 7 days allow_failure: true diff --git a/libs/gl-sdk-android/.gitignore b/libs/gl-sdk-android/.gitignore index ae71f3a0..590ab7fd 100644 --- a/libs/gl-sdk-android/.gitignore +++ b/libs/gl-sdk-android/.gitignore @@ -59,13 +59,16 @@ gen-external-apklibs *.zip *.tar.gz *.rar +*.a # virtual machine crash logs, see http://www.java.com/en/download/help/error_hotspot.xml hs_err_pid* replay_pid* +.kotlin/ + glsdk.h glsdk.common.kt glsdk.android.kt glsdk.jvm.kt -glsdk.native.kt \ No newline at end of file +glsdk.native.kt diff --git a/libs/gl-sdk-android/lib/build.gradle.kts b/libs/gl-sdk-android/lib/build.gradle.kts index 3fd7a458..e86a0b24 100644 --- a/libs/gl-sdk-android/lib/build.gradle.kts +++ b/libs/gl-sdk-android/lib/build.gradle.kts @@ -21,34 +21,36 @@ kotlin { jvm() */ - /* - val xcf = XCFramework() + val xcf = XCFramework() - listOf( - iosArm64(), - iosSimulatorArm64() - ).forEach { + listOf( + iosArm64(), + iosSimulatorArm64() + ).forEach { - it.binaries.framework { - baseName = "glsdk" - xcf.add(this) - } + it.binaries.framework { + baseName = "glsdk" + xcf.add(this) + } - val platform = when (it.targetName) { - "iosSimulatorArm64" -> "ios_simulator_arm64" - "iosArm64" -> "ios_arm64" - else -> error("Unsupported target $name") - } + val platform = when (it.targetName) { + "iosSimulatorArm64" -> "ios_simulator_arm64" + "iosArm64" -> "ios_arm64" + else -> error("Unsupported target $name") + } - it.compilations["main"].cinterops { - create("glsdkCInterop") { - defFile(project.file("src/nativeInterop/cinterop/glsdk.def")) - includeDirs(project.file("src/nativeInterop/cinterop/headers/glsdk/"), project.file("src/libs/$platform")) - } + it.compilations["main"].cinterops { + create("glsdkCInterop") { + defFile(project.file("src/nativeInterop/cinterop/glsdk.def")) + includeDirs( + project.file("src/nativeInterop/cinterop/headers/glsdk/"), + project.file("src/libs/$platform") + ) } } - */ + } + compilerOptions.freeCompilerArgs.add("-Xexpect-actual-classes") sourceSets { @@ -67,9 +69,11 @@ kotlin { artifact { type = "aar" } } } + /* jvmMain.dependencies { implementation(libs.jna) } + */ androidUnitTest.dependencies { implementation(libs.junit) } diff --git a/libs/gl-sdk-android/lib/src/commonTest/kotlin/com/blockstream/glsdk/CommonTest.kt b/libs/gl-sdk-android/lib/src/commonTest/kotlin/com/blockstream/glsdk/CommonTest.kt new file mode 100644 index 00000000..eb532c52 --- /dev/null +++ b/libs/gl-sdk-android/lib/src/commonTest/kotlin/com/blockstream/glsdk/CommonTest.kt @@ -0,0 +1,13 @@ +package com.blockstream.glsdk + +import kotlin.test.Test + +class CommonTest { + + @Test + fun test_signer() { + val mnemonic = "abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon about" + val signer = Signer(mnemonic) + signer.start() + } +} diff --git a/libs/gl-sdk-android/lib/src/nativeInterop/cinterop/glsdk.def b/libs/gl-sdk-android/lib/src/nativeInterop/cinterop/glsdk.def index cc86d328..7bfa94ca 100644 --- a/libs/gl-sdk-android/lib/src/nativeInterop/cinterop/glsdk.def +++ b/libs/gl-sdk-android/lib/src/nativeInterop/cinterop/glsdk.def @@ -3,5 +3,7 @@ package = glsdk.cinterop staticLibraries = libglsdk.a -libraryPaths.ios_arm64 = src/libs/ios-arm64 -libraryPaths.ios_simulator_arm64 = src/libs/ios-simulator-arm64 +libraryPaths.ios_arm64 = src/lib/ios-arm64 +libraryPaths.ios_simulator_arm64 = src/lib/ios-simulator-arm64 + +linkerOpts = -framework Security \ No newline at end of file