CURRENT_DIR := $(shell pwd) SOURCES=$(sort $(wildcard ./src/*.rs ./src/**/*.rs)) SHELL := /bin/bash OS_NAME=$(shell uname | tr '[:upper:]' '[:lower:]') TARGET ?= aarch64-unknown-linux-gnu .PHONY: init init: rustup target add aarch64-apple-ios x86_64-apple-ios rustup target add aarch64-apple-darwin x86_64-apple-darwin rustup target add aarch64-apple-ios-sim rustup target add aarch64-linux-android armv7-linux-androideabi i686-linux-android x86_64-linux-android rustup target add aarch64-unknown-linux-gnu x86_64-unknown-linux-gnu @if [ $$(uname) == "Darwin" ] ; then cargo install cargo-lipo ; fi cargo install cbindgen cargo install cargo-ndk .PHONY: ndk-home ndk-home: @if [ ! -d "${ANDROID_NDK_HOME}" ] ; then \ echo "Error: Please, set the ANDROID_NDK_HOME env variable to point to your NDK folder" ; \ exit 1 ; \ fi .PHONY: clean clean: cargo clean rm -rf ffi rm -rf kmp .PHONY: test test: cargo test all: bindings-swift bindings-android python-darwin react-native ## Android android: aarch64-linux-android armv7-linux-androideabi i686-linux-android x86_64-linux-android cargo run --features=uniffi/cli --bin uniffi-bindgen generate src/breez_liquid_sdk.udl --no-format --language kotlin -o ffi/kotlin aarch64-linux-android: $(SOURCES) ndk-home cargo ndk -t aarch64-linux-android -o ffi/kotlin/jniLibs build --release cp -a $(ANDROID_NDK_HOME)/toolchains/llvm/prebuilt/$(OS_NAME)-x86_64/sysroot/usr/lib/aarch64-linux-android/libc++_shared.so ffi/kotlin/jniLibs/arm64-v8a/ armv7-linux-androideabi: $(SOURCES) ndk-home cargo ndk -t armv7-linux-androideabi -o ffi/kotlin/jniLibs build --release cp -a $(ANDROID_NDK_HOME)/toolchains/llvm/prebuilt/$(OS_NAME)-x86_64/sysroot/usr/lib/arm-linux-androideabi/libc++_shared.so ffi/kotlin/jniLibs/armeabi-v7a/ i686-linux-android: $(SOURCES) ndk-home cargo ndk -t i686-linux-android -o ffi/kotlin/jniLibs build --release cp -a $(ANDROID_NDK_HOME)/toolchains/llvm/prebuilt/$(OS_NAME)-x86_64/sysroot/usr/lib/i686-linux-android/libc++_shared.so ffi/kotlin/jniLibs/x86/ x86_64-linux-android: $(SOURCES) ndk-home cargo ndk -t x86_64-linux-android -o ffi/kotlin/jniLibs build --release cp -a $(ANDROID_NDK_HOME)/toolchains/llvm/prebuilt/$(OS_NAME)-x86_64/sysroot/usr/lib/x86_64-linux-android/libc++_shared.so ffi/kotlin/jniLibs/x86_64/ bindings-android: android cp -r ffi/kotlin/jniLibs bindings-android/lib/src/main cp -r ffi/kotlin/breez_liquid_sdk bindings-android/lib/src/main/kotlin/ cd bindings-android && ./gradlew assemble mkdir -p ffi/android cp bindings-android/lib/build/outputs/aar/lib-release.aar ffi/android ## Kotlin kotlin: $(SOURCES) cargo build --release --target $(TARGET) cargo run --features=uniffi/cli --bin uniffi-bindgen generate src/breez_liquid_sdk.udl --no-format --language kotlin -o ffi/kotlin bindings-kotlin-multiplatform: ios-universal android mkdir -p bindings-kotlin-multiplatform/breez-liquid-sdk-kmp/src/androidMain cp -r ffi/kotlin/jniLibs/ bindings-kotlin-multiplatform/breez-liquid-sdk-kmp/src/androidMain/jniLibs/ cp -r ffi/kmp/* bindings-kotlin-multiplatform/breez-liquid-sdk-kmp/src/ cp -r bindings-kotlin-multiplatform/breez-liquid-sdk-kmp/src/jvmMain/kotlin bindings-kotlin-multiplatform/breez-liquid-sdk-kmp/src/androidMain/ mkdir -p bindings-kotlin-multiplatform/breez-liquid-sdk-kmp/src/libs/ios-arm64/ mkdir -p bindings-kotlin-multiplatform/breez-liquid-sdk-kmp/src/libs/ios-simulator-arm64/ mkdir -p bindings-kotlin-multiplatform/breez-liquid-sdk-kmp/src/libs/ios-simulator-x64/ cp ../target/aarch64-apple-ios/release/libbreez_liquid_sdk_bindings.a bindings-kotlin-multiplatform/breez-liquid-sdk-kmp/src/libs/ios-arm64/ cp ../target/aarch64-apple-ios-sim/release/libbreez_liquid_sdk_bindings.a bindings-kotlin-multiplatform/breez-liquid-sdk-kmp/src/libs/ios-simulator-arm64/ cp ../target/x86_64-apple-ios/release/libbreez_liquid_sdk_bindings.a bindings-kotlin-multiplatform/breez-liquid-sdk-kmp/src/libs/ios-simulator-x64/ cd bindings-kotlin-multiplatform && ./gradlew :breez-liquid-sdk-kmp:assemble ## Apple ios-universal: $(SOURCES) mkdir -p ../target/ios-universal/release mkdir -p ../target/ios-universal-sim/release cargo build --release --target aarch64-apple-ios ;\ cargo build --release --target x86_64-apple-ios ;\ cargo build --release --target aarch64-apple-ios-sim ;\ # build universal lib for arm device and x86 sim lipo -create -output ../target/ios-universal/release/libbreez_liquid_sdk_bindings.a ../target/aarch64-apple-ios/release/libbreez_liquid_sdk_bindings.a ../target/x86_64-apple-ios/release/libbreez_liquid_sdk_bindings.a # build universal lib for arm sim and x86 sim lipo -create -output ../target/ios-universal-sim/release/libbreez_liquid_sdk_bindings.a ../target/aarch64-apple-ios-sim/release/libbreez_liquid_sdk_bindings.a ../target/x86_64-apple-ios/release/libbreez_liquid_sdk_bindings.a darwin-universal: $(SOURCES) mkdir -p ../target/darwin-universal/release cargo lipo --release --targets aarch64-apple-darwin cargo lipo --release --targets x86_64-apple-darwin lipo -create -output ../target/darwin-universal/release/libbreez_liquid_sdk_bindings.dylib ../target/aarch64-apple-darwin/release/libbreez_liquid_sdk_bindings.dylib ../target/x86_64-apple-darwin/release/libbreez_liquid_sdk_bindings.dylib lipo -create -output ../target/darwin-universal/release/libbreez_liquid_sdk_bindings.a ../target/aarch64-apple-darwin/release/libbreez_liquid_sdk_bindings.a ../target/x86_64-apple-darwin/release/libbreez_liquid_sdk_bindings.a ## Swift swift-ios: ios-universal cargo run --features=uniffi/cli --bin uniffi-bindgen generate src/breez_liquid_sdk.udl -l swift -o ffi/swift-ios cp ../target/ios-universal/release/libbreez_liquid_sdk_bindings.a ffi/swift-ios cd ffi/swift-ios && "swiftc" "-emit-module" "-module-name" "breez_liquid_sdk_bindings" "-Xcc" "-fmodule-map-file=$(CURRENT_DIR)/ffi/swift-ios/breez_liquid_sdkFFI.modulemap" "-I" "." "-L" "." "-lbreez_liquid_sdk_bindings" breez_liquid_sdk.swift swift-darwin: darwin-universal cargo run --features=uniffi/cli --bin uniffi-bindgen generate src/breez_liquid_sdk.udl -l swift -o ffi/swift-darwin cp ../target/darwin-universal/release/libbreez_liquid_sdk_bindings.dylib ffi/swift-darwin cd ffi/swift-darwin && "swiftc" "-emit-module" "-module-name" "breez_liquid_sdk_bindings" "-Xcc" "-fmodule-map-file=$(CURRENT_DIR)/ffi/swift-darwin/breez_liquid_sdkFFI.modulemap" "-I" "." "-L" "." "-lbreez_liquid_sdk_bindings" breez_liquid_sdk.swift bindings-swift: ios-universal darwin-universal mkdir -p bindings-swift/Sources/BreezLiquidSDK cargo run --features=uniffi/cli --bin uniffi-bindgen generate src/breez_liquid_sdk.udl --no-format --language swift -o bindings-swift/Sources/BreezLiquidSDK mv bindings-swift/Sources/BreezLiquidSDK/breez_liquid_sdk.swift bindings-swift/Sources/BreezLiquidSDK/BreezLiquidSDK.swift cp bindings-swift/Sources/BreezLiquidSDK/breez_liquid_sdkFFI.h bindings-swift/breez_liquid_sdkFFI.xcframework/ios-arm64/breez_liquid_sdkFFI.framework/Headers cp bindings-swift/Sources/BreezLiquidSDK/breez_liquid_sdkFFI.h bindings-swift/breez_liquid_sdkFFI.xcframework/ios-arm64_x86_64-simulator/breez_liquid_sdkFFI.framework/Headers cp bindings-swift/Sources/BreezLiquidSDK/breez_liquid_sdkFFI.h bindings-swift/breez_liquid_sdkFFI.xcframework/macos-arm64_x86_64/breez_liquid_sdkFFI.framework/Headers cp ../target/aarch64-apple-ios/release/libbreez_liquid_sdk_bindings.a bindings-swift/breez_liquid_sdkFFI.xcframework/ios-arm64/breez_liquid_sdkFFI.framework/breez_liquid_sdkFFI cp ../target/ios-universal-sim/release/libbreez_liquid_sdk_bindings.a bindings-swift/breez_liquid_sdkFFI.xcframework/ios-arm64_x86_64-simulator/breez_liquid_sdkFFI.framework/breez_liquid_sdkFFI cp ../target/darwin-universal/release/libbreez_liquid_sdk_bindings.a bindings-swift/breez_liquid_sdkFFI.xcframework/macos-arm64_x86_64/breez_liquid_sdkFFI.framework/breez_liquid_sdkFFI rm bindings-swift/Sources/BreezLiquidSDK/breez_liquid_sdkFFI.h rm bindings-swift/Sources/BreezLiquidSDK/breez_liquid_sdkFFI.modulemap ## Python python-linux: $(SOURCES) cargo build --release --target $(TARGET) cargo run --features=uniffi/cli --bin uniffi-bindgen generate src/breez_liquid_sdk.udl --no-format --language python -o ffi/python cp ../target/$(TARGET)/release/libbreez_liquid_sdk_bindings.so ffi/python python-darwin: darwin-universal cargo run --features=uniffi/cli --bin uniffi-bindgen generate src/breez_liquid_sdk.udl --no-format --language python -o ffi/python cp ../target/darwin-universal/release/libbreez_liquid_sdk_bindings.dylib ffi/python ## React Native react-native: make -C bindings-react-native codegen