diff --git a/.swiftformat b/.swiftformat new file mode 100644 index 000000000..e9622a4b7 --- /dev/null +++ b/.swiftformat @@ -0,0 +1,12 @@ +--swiftversion 5.5 +--indent 4 +--disable blankLineAfterImports +--disable redundantReturn +--disable opaqueGenericParameters +--binary-grouping none +--decimal-grouping none +--hex-grouping none +--octal-grouping none +--semicolons never +--wrapparameters before-first + diff --git a/CHANGELOG.md b/CHANGELOG.md index 6371c427d..492d092d5 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,6 +1,8 @@ -# Unreleased +# 0.7.0-rc.65 (Synonym Fork) -- The Android AAR now ships targeted R8 consumer keep rules for the UniFFI/JNA FFI surface. +## Bug Fixes + +- Add keep consumer rules for JNA types UniFFI needs under R8. # 0.7.0-rc.64 (Synonym Fork) diff --git a/Cargo.toml b/Cargo.toml index 703aecd76..6880c298a 100755 --- a/Cargo.toml +++ b/Cargo.toml @@ -4,7 +4,7 @@ exclude = ["bindings/uniffi-bindgen"] [package] name = "ldk-node" -version = "0.7.0-rc.64" +version = "0.7.0-rc.65" authors = ["Elias Rohrer "] homepage = "https://lightningdevkit.org/" license = "MIT OR Apache-2.0" diff --git a/Package.swift b/Package.swift index a95a0d9ea..9a5fab81a 100644 --- a/Package.swift +++ b/Package.swift @@ -3,8 +3,8 @@ import PackageDescription -let tag = "v0.7.0-rc.64" -let checksum = "8890d1b91f2b3e0a33ffd2854e1a4e9721e99706e8378177d30fbc435cd2db49" +let tag = "v0.7.0-rc.65" +let checksum = "c9e1b4fd124434a955f75a41044f5d3f2efbd14b1bb49276cc64bc174a43daee" let url = "https://github.com/synonymdev/ldk-node/releases/download/\(tag)/LDKNodeFFI.xcframework.zip" let package = Package( diff --git a/bindgen.sh b/bindgen.sh index 4af5bde6e..8324d6f8b 100755 --- a/bindgen.sh +++ b/bindgen.sh @@ -1,11 +1,7 @@ #!/usr/bin/env bash set -euo pipefail -# Install gobley-uniffi-bindgen once for all Kotlin scripts -echo "Installing gobley-uniffi-bindgen fork..." -cargo install --git https://github.com/ovitrif/gobley.git \ - --branch fix-v0.2.0 gobley-uniffi-bindgen --force -export BINDGEN_GOBLEY_INSTALLED=1 +source ./scripts/install_gobley_bindgen.sh # Standardize on release-smaller for all targets export BINDGEN_PROFILE="release-smaller" diff --git a/bindings/kotlin/ldk-node-android/gradle.properties b/bindings/kotlin/ldk-node-android/gradle.properties index 97ae0fb7b..3011072e1 100644 --- a/bindings/kotlin/ldk-node-android/gradle.properties +++ b/bindings/kotlin/ldk-node-android/gradle.properties @@ -3,4 +3,4 @@ android.useAndroidX=true android.enableJetifier=true kotlin.code.style=official group=com.synonym -version=0.7.0-rc.64 +version=0.7.0-rc.65 diff --git a/bindings/kotlin/ldk-node-android/lib/consumer-rules.pro b/bindings/kotlin/ldk-node-android/lib/consumer-rules.pro index a54d6b4c0..5d3400a09 100644 --- a/bindings/kotlin/ldk-node-android/lib/consumer-rules.pro +++ b/bindings/kotlin/ldk-node-android/lib/consumer-rules.pro @@ -13,13 +13,29 @@ ; } -# UniFFI 0.28 loads UniffiLib via Native.load; JNA looks up interface methods by name. --keep,includedescriptorclasses interface org.lightningdevkit.ldknode.UniffiLib { - ; +# Native.register maps remaining native methods by exact C symbol name. +-keepclasseswithmembers,allowshrinking,includedescriptorclasses class org.lightningdevkit.ldknode.UniffiLib { + native ; +} +-keepclasseswithmembers,allowshrinking,includedescriptorclasses class org.lightningdevkit.ldknode.IntegrityCheckingUniffiLib { + native ; } -# @Structure.FieldOrder is read at runtime. +# JNA reads Structure.FieldOrder at runtime. R8 full mode strips that +# annotation unless the annotation type and annotated classes are kept. -keepattributes RuntimeVisibleAnnotations +-keep,allowshrinking,allowoptimization class com.sun.jna.Structure$FieldOrder +-keep,allowshrinking,allowoptimization,allowobfuscation @com.sun.jna.Structure$FieldOrder class org.lightningdevkit.ldknode.** { + ; + (...); +} + +# libjnidispatch looks up Native/Structure/CallbackReference members by JNI name. +# Subclasses such as com.sun.jna.ptr.IntByReference are kept by the extends rules. +# See https://github.com/java-native-access/jna/blob/master/www/FrequentlyAskedQuestions.md#jna-on-android +-keep class com.sun.jna.* { *; } +-keep class * extends com.sun.jna.* { *; } +-keepclassmembers class * extends com.sun.jna.* { public *; } # JNA's AAR references desktop AWT types that are absent on Android. -dontwarn java.awt.Component diff --git a/bindings/kotlin/ldk-node-android/lib/src/main/jniLibs/arm64-v8a/libldk_node.so b/bindings/kotlin/ldk-node-android/lib/src/main/jniLibs/arm64-v8a/libldk_node.so index 3237476e7..73d8879c2 100755 Binary files a/bindings/kotlin/ldk-node-android/lib/src/main/jniLibs/arm64-v8a/libldk_node.so and b/bindings/kotlin/ldk-node-android/lib/src/main/jniLibs/arm64-v8a/libldk_node.so differ diff --git a/bindings/kotlin/ldk-node-android/lib/src/main/jniLibs/armeabi-v7a/libldk_node.so b/bindings/kotlin/ldk-node-android/lib/src/main/jniLibs/armeabi-v7a/libldk_node.so index d8e9aee40..d692ff405 100755 Binary files a/bindings/kotlin/ldk-node-android/lib/src/main/jniLibs/armeabi-v7a/libldk_node.so and b/bindings/kotlin/ldk-node-android/lib/src/main/jniLibs/armeabi-v7a/libldk_node.so differ diff --git a/bindings/kotlin/ldk-node-android/lib/src/main/jniLibs/x86_64/libldk_node.so b/bindings/kotlin/ldk-node-android/lib/src/main/jniLibs/x86_64/libldk_node.so index d7cd64468..5497e06e7 100755 Binary files a/bindings/kotlin/ldk-node-android/lib/src/main/jniLibs/x86_64/libldk_node.so and b/bindings/kotlin/ldk-node-android/lib/src/main/jniLibs/x86_64/libldk_node.so differ diff --git a/bindings/kotlin/ldk-node-jvm/gradle.properties b/bindings/kotlin/ldk-node-jvm/gradle.properties index 9ceb23cd6..7f5aaf74d 100644 --- a/bindings/kotlin/ldk-node-jvm/gradle.properties +++ b/bindings/kotlin/ldk-node-jvm/gradle.properties @@ -1,4 +1,4 @@ org.gradle.jvmargs=-Xmx1536m kotlin.code.style=official group=com.synonym -version=0.7.0-rc.64 +version=0.7.0-rc.65 diff --git a/bindings/kotlin/ldk-node-jvm/lib/src/main/resources/darwin-aarch64/libldk_node.dylib b/bindings/kotlin/ldk-node-jvm/lib/src/main/resources/darwin-aarch64/libldk_node.dylib index 1c41a7d0c..ec9ac932b 100644 Binary files a/bindings/kotlin/ldk-node-jvm/lib/src/main/resources/darwin-aarch64/libldk_node.dylib and b/bindings/kotlin/ldk-node-jvm/lib/src/main/resources/darwin-aarch64/libldk_node.dylib differ diff --git a/bindings/kotlin/ldk-node-jvm/lib/src/main/resources/darwin-x86-64/libldk_node.dylib b/bindings/kotlin/ldk-node-jvm/lib/src/main/resources/darwin-x86-64/libldk_node.dylib index 3d39962c9..209af5947 100644 Binary files a/bindings/kotlin/ldk-node-jvm/lib/src/main/resources/darwin-x86-64/libldk_node.dylib and b/bindings/kotlin/ldk-node-jvm/lib/src/main/resources/darwin-x86-64/libldk_node.dylib differ diff --git a/bindings/python/pyproject.toml b/bindings/python/pyproject.toml index 7eddf4fe5..bdef977da 100644 --- a/bindings/python/pyproject.toml +++ b/bindings/python/pyproject.toml @@ -1,6 +1,6 @@ [project] name = "ldk_node" -version = "0.7.0-rc.64" +version = "0.7.0-rc.65" authors = [ { name="Elias Rohrer", email="dev@tnull.de" }, ] diff --git a/scripts/install_gobley_bindgen.sh b/scripts/install_gobley_bindgen.sh new file mode 100755 index 000000000..30241b20d --- /dev/null +++ b/scripts/install_gobley_bindgen.sh @@ -0,0 +1,15 @@ +#!/usr/bin/env bash +# Pin gobley-uniffi-bindgen under target/ so other repos cannot overwrite ~/.cargo/bin. + +GOBLEY_REV="36730a4219b2e8d06aa2c073936d6fc6a7f60e0f" +GOBLEY_ROOT="${PWD}/target/gobley-bindgen" +STAMP="${GOBLEY_ROOT}/rev" + +if [ ! -x "${GOBLEY_ROOT}/bin/gobley-uniffi-bindgen" ] || [ "$(cat "${STAMP}" 2>/dev/null || true)" != "${GOBLEY_REV}" ]; then + echo "Installing gobley-uniffi-bindgen ${GOBLEY_REV} into ${GOBLEY_ROOT}..." + cargo install --git https://github.com/ovitrif/gobley.git --rev "${GOBLEY_REV}" --root "${GOBLEY_ROOT}" gobley-uniffi-bindgen --force + echo "${GOBLEY_REV}" > "${STAMP}" +fi + +export PATH="${GOBLEY_ROOT}/bin:${PATH}" +export BINDGEN_GOBLEY_INSTALLED=1 diff --git a/scripts/uniffi_bindgen_generate_kotlin.sh b/scripts/uniffi_bindgen_generate_kotlin.sh index ac5213795..578be981c 100755 --- a/scripts/uniffi_bindgen_generate_kotlin.sh +++ b/scripts/uniffi_bindgen_generate_kotlin.sh @@ -5,11 +5,7 @@ TARGET_DIR="target" PROJECT_DIR="ldk-node-jvm" JVM_LIB_DIR="$BINDINGS_DIR/$PROJECT_DIR" -# Install gobley-uniffi-bindgen from fork (skip if orchestrator already installed it) -if [ -z "${BINDGEN_GOBLEY_INSTALLED:-}" ]; then - echo "Installing gobley-uniffi-bindgen fork..." - cargo install --git https://github.com/ovitrif/gobley.git --branch fix-v0.2.0 gobley-uniffi-bindgen --force -fi +source "$(dirname "${BASH_SOURCE[0]}")/install_gobley_bindgen.sh" UNIFFI_BINDGEN_BIN="gobley-uniffi-bindgen" if [[ "$OSTYPE" == "linux-gnu"* ]]; then diff --git a/scripts/uniffi_bindgen_generate_kotlin_android.sh b/scripts/uniffi_bindgen_generate_kotlin_android.sh index 36543fca1..7f78d5a12 100755 --- a/scripts/uniffi_bindgen_generate_kotlin_android.sh +++ b/scripts/uniffi_bindgen_generate_kotlin_android.sh @@ -8,12 +8,7 @@ PROJECT_DIR="ldk-node-android" ANDROID_LIB_DIR="$BINDINGS_DIR/$PROJECT_DIR" NATIVE_DEBUG_SYMBOLS_ZIP="$ANDROID_LIB_DIR/native-debug-symbols.zip" -# Install gobley-uniffi-bindgen from fork (skip if orchestrator already installed it) -if [ -z "${BINDGEN_GOBLEY_INSTALLED:-}" ]; then - echo "Installing gobley-uniffi-bindgen fork..." - GOBLEY_REV="36730a4219b2e8d06aa2c073936d6fc6a7f60e0f" - cargo install --git https://github.com/ovitrif/gobley.git --rev "$GOBLEY_REV" gobley-uniffi-bindgen --force -fi +source "$(dirname "${BASH_SOURCE[0]}")/install_gobley_bindgen.sh" UNIFFI_BINDGEN_BIN="gobley-uniffi-bindgen" export_variable_if_not_present() {