From 18d1c1d6d6be3277229912f9a79c59f9839e5e52 Mon Sep 17 00:00:00 2001 From: alexanderwiederin Date: Fri, 17 Nov 2023 16:25:07 +0100 Subject: [PATCH 1/4] Fix openssl-sys error when building android bindings locally --- .../uniffi_bindgen_generate_kotlin_android.sh | 27 ++++++++++++++++--- 1 file changed, 24 insertions(+), 3 deletions(-) diff --git a/scripts/uniffi_bindgen_generate_kotlin_android.sh b/scripts/uniffi_bindgen_generate_kotlin_android.sh index 557ffd43e..77effd96d 100755 --- a/scripts/uniffi_bindgen_generate_kotlin_android.sh +++ b/scripts/uniffi_bindgen_generate_kotlin_android.sh @@ -1,4 +1,5 @@ #!/bin/bash + BINDINGS_DIR="bindings/kotlin" TARGET_DIR="target" PROJECT_DIR="ldk-node-android" @@ -8,10 +9,30 @@ ANDROID_NDK_ROOT="/opt/homebrew/share/android-ndk" LLVM_ARCH_PATH="darwin-x86_64" PATH="$ANDROID_NDK_ROOT/toolchains/llvm/prebuilt/$LLVM_ARCH_PATH/bin:$PATH" +# The `export`s are required to make the variables available to subprocesses. +export CFLAGS="-D__ANDROID_MIN_SDK_VERSION__=21" +export AR=llvm-ar + +# TODO: Remove setting OPENSSL_DIR after BDK upgrade. Depends on: https://github.com/lightningdevkit/ldk-node/issues/195 +# The OPENSSL_DIR configuration is currently necessary due to default features being enabled in our esplora-client. +if [ -z "$OPENSSL_DIR" ]; then + case "$(uname -s)" in + Darwin) + # macOS + export OPENSSL_DIR="/opt/homebrew/Cellar/openssl@3/3.1.4" + ;; + Linux) + # Linux + export OPENSSL_DIR="/usr/local/openssl" + ;; + *) + esac +fi + rustup target add x86_64-linux-android aarch64-linux-android armv7-linux-androideabi -CFLAGS="-D__ANDROID_MIN_SDK_VERSION__=21" AR=llvm-ar CARGO_TARGET_X86_64_LINUX_ANDROID_LINKER="x86_64-linux-android21-clang" CC="x86_64-linux-android21-clang" cargo build --profile release-smaller --features uniffi --target x86_64-linux-android || exit 1 -CFLAGS="-D__ANDROID_MIN_SDK_VERSION__=21" AR=llvm-ar CARGO_TARGET_ARMV7_LINUX_ANDROIDEABI_LINKER="armv7a-linux-androideabi21-clang" CC="armv7a-linux-androideabi21-clang" cargo build --profile release-smaller --features uniffi --target armv7-linux-androideabi || exit 1 -CFLAGS="-D__ANDROID_MIN_SDK_VERSION__=21" AR=llvm-ar CARGO_TARGET_AARCH64_LINUX_ANDROID_LINKER="aarch64-linux-android21-clang" CC="aarch64-linux-android21-clang" cargo build --profile release-smaller --features uniffi --target aarch64-linux-android || exit 1 +CARGO_TARGET_X86_64_LINUX_ANDROID_LINKER="x86_64-linux-android21-clang" CC="x86_64-linux-android21-clang" cargo build --profile release-smaller --features uniffi --target x86_64-linux-android || exit 1 +CARGO_TARGET_ARMV7_LINUX_ANDROIDEABI_LINKER="armv7a-linux-androideabi21-clang" CC="armv7a-linux-androideabi21-clang" cargo build --profile release-smaller --features uniffi --target armv7-linux-androideabi || exit 1 +CARGO_TARGET_AARCH64_LINUX_ANDROID_LINKER="aarch64-linux-android21-clang" CC="aarch64-linux-android21-clang" cargo build --profile release-smaller --features uniffi --target aarch64-linux-android || exit 1 $UNIFFI_BINDGEN_BIN generate bindings/ldk_node.udl --language kotlin -o "$BINDINGS_DIR"/"$PROJECT_DIR"/lib/src/main/kotlin || exit 1 JNI_LIB_DIR="$BINDINGS_DIR"/"$PROJECT_DIR"/lib/src/main/jniLibs/ From d0beb8e25792560f32ca12c79d8eb2510368765d Mon Sep 17 00:00:00 2001 From: alexanderwiederin Date: Sun, 19 Nov 2023 23:24:10 +0100 Subject: [PATCH 2/4] set `ANDROID_NDK_ROOT` and `LLVM_ARCH_PATH` depending on OS --- .../uniffi_bindgen_generate_kotlin_android.sh | 40 +++++++++++++++++-- 1 file changed, 36 insertions(+), 4 deletions(-) diff --git a/scripts/uniffi_bindgen_generate_kotlin_android.sh b/scripts/uniffi_bindgen_generate_kotlin_android.sh index 77effd96d..07f57e754 100755 --- a/scripts/uniffi_bindgen_generate_kotlin_android.sh +++ b/scripts/uniffi_bindgen_generate_kotlin_android.sh @@ -5,18 +5,18 @@ TARGET_DIR="target" PROJECT_DIR="ldk-node-android" PACKAGE_DIR="org/lightningdevkit/ldknode" UNIFFI_BINDGEN_BIN="cargo run --manifest-path bindings/uniffi-bindgen/Cargo.toml" -ANDROID_NDK_ROOT="/opt/homebrew/share/android-ndk" -LLVM_ARCH_PATH="darwin-x86_64" -PATH="$ANDROID_NDK_ROOT/toolchains/llvm/prebuilt/$LLVM_ARCH_PATH/bin:$PATH" # The `export`s are required to make the variables available to subprocesses. export CFLAGS="-D__ANDROID_MIN_SDK_VERSION__=21" export AR=llvm-ar +OS=$(uname -s) + # TODO: Remove setting OPENSSL_DIR after BDK upgrade. Depends on: https://github.com/lightningdevkit/ldk-node/issues/195 # The OPENSSL_DIR configuration is currently necessary due to default features being enabled in our esplora-client. +# Check and set OPENSSL_DIR if [ -z "$OPENSSL_DIR" ]; then - case "$(uname -s)" in + case "$OS" in Darwin) # macOS export OPENSSL_DIR="/opt/homebrew/Cellar/openssl@3/3.1.4" @@ -29,6 +29,38 @@ if [ -z "$OPENSSL_DIR" ]; then esac fi +# Check and set ANDROID_NDK_ROOT +if [ -z "$ANDROID_NDK_ROOT" ]; then + case "$OS" in + Darwin) + # macOS + export ANDROID_NDK_ROOT="/opt/homebrew/share/android-ndk" + ;; + Linux) + # Linux + export ANDROID_NDK_ROOT="/opt/android-ndk" + ;; + *) + esac +fi + +# Check and set LLVM_ARCH_PATH +if [ -z "$LLVM_ARCH_PATH" ]; then + case "$OS" in + Darwin) + # macOS + export LLVM_ARCH_PATH="darwin-x86_64" + ;; + Linux) + # Linux + export LLVM_ARCH_PATH="linux-x86_64" + ;; + *) + esac +fi + +PATH="$ANDROID_NDK_ROOT/toolchains/llvm/prebuilt/$LLVM_ARCH_PATH/bin:$PATH" + rustup target add x86_64-linux-android aarch64-linux-android armv7-linux-androideabi CARGO_TARGET_X86_64_LINUX_ANDROID_LINKER="x86_64-linux-android21-clang" CC="x86_64-linux-android21-clang" cargo build --profile release-smaller --features uniffi --target x86_64-linux-android || exit 1 CARGO_TARGET_ARMV7_LINUX_ANDROIDEABI_LINKER="armv7a-linux-androideabi21-clang" CC="armv7a-linux-androideabi21-clang" cargo build --profile release-smaller --features uniffi --target armv7-linux-androideabi || exit 1 From 59f6f217f20caccaf7025502a85d707443cdc601 Mon Sep 17 00:00:00 2001 From: alexanderwiederin Date: Mon, 20 Nov 2023 11:45:35 +0100 Subject: [PATCH 3/4] Refactor for readability --- .../uniffi_bindgen_generate_kotlin_android.sh | 74 +++++++------------ 1 file changed, 26 insertions(+), 48 deletions(-) diff --git a/scripts/uniffi_bindgen_generate_kotlin_android.sh b/scripts/uniffi_bindgen_generate_kotlin_android.sh index 07f57e754..45d832e07 100755 --- a/scripts/uniffi_bindgen_generate_kotlin_android.sh +++ b/scripts/uniffi_bindgen_generate_kotlin_android.sh @@ -6,58 +6,36 @@ PROJECT_DIR="ldk-node-android" PACKAGE_DIR="org/lightningdevkit/ldknode" UNIFFI_BINDGEN_BIN="cargo run --manifest-path bindings/uniffi-bindgen/Cargo.toml" -# The `export`s are required to make the variables available to subprocesses. -export CFLAGS="-D__ANDROID_MIN_SDK_VERSION__=21" -export AR=llvm-ar - -OS=$(uname -s) +export_variable_if_not_present() { + local name="$1" + local value="$2" + + # Check if the variable is already set + if [ -z "${!name}" ]; then + export "$name=$value" + echo "Exported $name=$value" + else + echo "$name is already set to ${!name}, not exporting." + fi +} # TODO: Remove setting OPENSSL_DIR after BDK upgrade. Depends on: https://github.com/lightningdevkit/ldk-node/issues/195 # The OPENSSL_DIR configuration is currently necessary due to default features being enabled in our esplora-client. -# Check and set OPENSSL_DIR -if [ -z "$OPENSSL_DIR" ]; then - case "$OS" in - Darwin) - # macOS - export OPENSSL_DIR="/opt/homebrew/Cellar/openssl@3/3.1.4" - ;; - Linux) - # Linux - export OPENSSL_DIR="/usr/local/openssl" - ;; - *) - esac -fi - -# Check and set ANDROID_NDK_ROOT -if [ -z "$ANDROID_NDK_ROOT" ]; then - case "$OS" in - Darwin) - # macOS - export ANDROID_NDK_ROOT="/opt/homebrew/share/android-ndk" - ;; - Linux) - # Linux - export ANDROID_NDK_ROOT="/opt/android-ndk" - ;; - *) - esac -fi - -# Check and set LLVM_ARCH_PATH -if [ -z "$LLVM_ARCH_PATH" ]; then - case "$OS" in - Darwin) - # macOS - export LLVM_ARCH_PATH="darwin-x86_64" - ;; - Linux) - # Linux - export LLVM_ARCH_PATH="linux-x86_64" - ;; - *) +case "$OSTYPE" in + linux-gnu) + export_variable_if_not_present "OPENSSL_DIR" "/usr/local/openssl" + export_variable_if_not_present "ANDROID_NDK_ROOT" "/opt/android-ndk" + export_variable_if_not_present "LLVM_ARCH_PATH" "linux-x86_64" + ;; + darwin*) + export_variable_if_not_present "OPENSSL_DIR" "/opt/homebrew/Cellar/openssl@3/3.1.4" + export_variable_if_not_present "ANDROID_NDK_ROOT" "/opt/homebrew/share/android-ndk" + export_variable_if_not_present "LLVM_ARCH_PATH" "darwin-x86_64" + ;; + *) + echo "Unknown operating system: $OSTYPE" + ;; esac -fi PATH="$ANDROID_NDK_ROOT/toolchains/llvm/prebuilt/$LLVM_ARCH_PATH/bin:$PATH" From 5a1242a606e66bad09c0399104b3019d9db69cb7 Mon Sep 17 00:00:00 2001 From: alexanderwiederin Date: Mon, 20 Nov 2023 11:46:09 +0100 Subject: [PATCH 4/4] Remove export flags for `CFLAGS` and `AR` --- scripts/uniffi_bindgen_generate_kotlin_android.sh | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/scripts/uniffi_bindgen_generate_kotlin_android.sh b/scripts/uniffi_bindgen_generate_kotlin_android.sh index 45d832e07..5c81412a9 100755 --- a/scripts/uniffi_bindgen_generate_kotlin_android.sh +++ b/scripts/uniffi_bindgen_generate_kotlin_android.sh @@ -40,9 +40,9 @@ case "$OSTYPE" in PATH="$ANDROID_NDK_ROOT/toolchains/llvm/prebuilt/$LLVM_ARCH_PATH/bin:$PATH" rustup target add x86_64-linux-android aarch64-linux-android armv7-linux-androideabi -CARGO_TARGET_X86_64_LINUX_ANDROID_LINKER="x86_64-linux-android21-clang" CC="x86_64-linux-android21-clang" cargo build --profile release-smaller --features uniffi --target x86_64-linux-android || exit 1 -CARGO_TARGET_ARMV7_LINUX_ANDROIDEABI_LINKER="armv7a-linux-androideabi21-clang" CC="armv7a-linux-androideabi21-clang" cargo build --profile release-smaller --features uniffi --target armv7-linux-androideabi || exit 1 -CARGO_TARGET_AARCH64_LINUX_ANDROID_LINKER="aarch64-linux-android21-clang" CC="aarch64-linux-android21-clang" cargo build --profile release-smaller --features uniffi --target aarch64-linux-android || exit 1 +CFLAGS="-D__ANDROID_MIN_SDK_VERSION__=21" AR=llvm-ar CARGO_TARGET_X86_64_LINUX_ANDROID_LINKER="x86_64-linux-android21-clang" CC="x86_64-linux-android21-clang" cargo build --profile release-smaller --features uniffi --target x86_64-linux-android || exit 1 +CFLAGS="-D__ANDROID_MIN_SDK_VERSION__=21" AR=llvm-ar CARGO_TARGET_ARMV7_LINUX_ANDROIDEABI_LINKER="armv7a-linux-androideabi21-clang" CC="armv7a-linux-androideabi21-clang" cargo build --profile release-smaller --features uniffi --target armv7-linux-androideabi || exit 1 +CFLAGS="-D__ANDROID_MIN_SDK_VERSION__=21" AR=llvm-ar CARGO_TARGET_AARCH64_LINUX_ANDROID_LINKER="aarch64-linux-android21-clang" CC="aarch64-linux-android21-clang" cargo build --profile release-smaller --features uniffi --target aarch64-linux-android || exit 1 $UNIFFI_BINDGEN_BIN generate bindings/ldk_node.udl --language kotlin -o "$BINDINGS_DIR"/"$PROJECT_DIR"/lib/src/main/kotlin || exit 1 JNI_LIB_DIR="$BINDINGS_DIR"/"$PROJECT_DIR"/lib/src/main/jniLibs/