Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
7 changes: 5 additions & 2 deletions .github/workflows/kotlin/action.yml
Original file line number Diff line number Diff line change
Expand Up @@ -27,6 +27,10 @@ runs:
shell: bash
run: sudo snap install --classic kotlin

- name: Installing ktlint
shell: bash
run: sudo snap install ktlint --edge --devmode

- name: Configure Android NDK
shell: bash
run: |
Expand Down Expand Up @@ -61,8 +65,7 @@ runs:
export ANDROID_NDK=$ANDROID_SDK_ROOT/ndk-bundle
ln -sfn $ANDROID_SDK_ROOT/ndk/25.2.9519653 $ANDROID_NDK

make
make android
make release RELEASE=1

chmod +x gradlew
./gradlew test
Expand Down
75 changes: 44 additions & 31 deletions wrappers/kotlin/Makefile
Original file line number Diff line number Diff line change
@@ -1,10 +1,19 @@
RELEASE ?= 0
ifeq ($(RELEASE), 0)
BUILD_PROFILE = debug
else
BUILD_PROFILE = release
RELEASE_FLAG = --release
endif

ROOT = ../..

LIB_NAME = devolutions_crypto_uniffi
LIB_NAME_DASHES = devolutions-crypto-uniffi

DEBUG_DIR = $(ROOT)/target/debug
DEBUG_DLL = $(DEBUG_DIR)/lib$(LIB_NAME).so
LINUX_DEBUG_DIR = $(ROOT)/target/debug
LINUX_DIR = $(ROOT)/target/$(BUILD_PROFILE)
LINUX_DLL = $(LINUX_DIR)/lib$(LIB_NAME).so

KOTLIN_WRAPPER = ./lib/src/main/kotlin
KOTLIN_WRAPPER_FILE = $(KOTLIN_WRAPPER)/org/devolutions/crypto/devolutions_crypto.kt
Expand All @@ -13,60 +22,64 @@ UNIFFI_PATH = $(ROOT)/uniffi
UNIFFI_BINDGEN = $(UNIFFI_PATH)/uniffi-bindgen
DC_UNIFFI = $(UNIFFI_PATH)/$(LIB_NAME_DASHES)
DC_UNIFFI_SOURCES = $(wildcard $(ROOT)/src/*) $(ROOT)/Cargo.toml $(wildcard $(DC_UNIFFI)/src/*) $(DC_UNIFFI)/Cargo.toml
UNIFFI_BINDGEN_EXE = $(DEBUG_DIR)/uniffi-bindgen
UNIFFI_BINDGEN_EXE = $(LINUX_DEBUG_DIR)/uniffi-bindgen

RUST_ARCHS = aarch64-linux-android armv7-linux-androideabi i686-linux-android x86_64-linux-android
ANDROID_ARCHS = android-arm64-v8a android-armeabi-v7a android-x86 android-x86-64

KT_DEBUG_PATH = ./lib/src/main/resources/linux-x86-64/lib$(LIB_NAME).so
KT_RELEASE_PATH = $(foreach var,$(ANDROID_ARCHS),./lib/src/main/resources/$(var)/lib$(LIB_NAME).so)
KT_LINUX_PATH = ./lib/src/main/resources/linux-x86-64/lib$(LIB_NAME).so
KT_ANDROID_PATH = $(foreach var,$(ANDROID_ARCHS),./lib/src/main/resources/$(var)/lib$(LIB_NAME).so)

.PHONY: android clean
.PHONY: all release linux android clean

all: $(KOTLIN_WRAPPER_FILE) $(KT_DEBUG_PATH)
all: linux

android: $(KOTLIN_WRAPPER_FILE) $(KT_RELEASE_PATH)
release: linux android

# Build the library in debug
$(DEBUG_DLL): $(DC_UNIFFI_SOURCES)
cargo build -p "$(LIB_NAME_DASHES)"
linux: $(KOTLIN_WRAPPER_FILE) $(KT_LINUX_PATH)
android: $(KOTLIN_WRAPPER_FILE) $(KT_ANDROID_PATH)

# Build the release android libraries
$(ROOT)/target/%/release/lib$(LIB_NAME).so: $(DC_UNIFFI_SOURCES)
cargo build --release --target=$* -p "$(LIB_NAME_DASHES)"
# Build the library in debug
$(LINUX_DLL): $(DC_UNIFFI_SOURCES)
cargo build $(RELEASE_FLAG) -p "$(LIB_NAME_DASHES)"

# Copy the libraries to KT directory
# TODO: Can we loop this?
$(KT_DEBUG_PATH): $(DEBUG_DLL)
$(KT_LINUX_PATH): $(LINUX_DLL)
mkdir -p $(@D)
cp $< $@

./lib/src/main/resources/android-arm64-v8a/lib$(LIB_NAME).so: $(ROOT)/target/aarch64-linux-android/release/lib$(LIB_NAME).so
define compile_android
cargo build $(RELEASE_FLAG) --target=$(ARCH) -p "$(LIB_NAME_DASHES)"
mkdir -p $(@D)
cp $< $@
cp $(ROOT)/target/$(ARCH)/$(BUILD_PROFILE)/lib$(LIB_NAME).so $@
endef

./lib/src/main/resources/android-armeabi-v7a/lib$(LIB_NAME).so: $(ROOT)/target/armv7-linux-androideabi/release/lib$(LIB_NAME).so
mkdir -p $(@D)
cp $< $@
./lib/src/main/resources/android-arm64-v8a/lib$(LIB_NAME).so: $(DC_UNIFFI_SOURCES)
$(eval ARCH=aarch64-linux-android)
@$(call compile_android)

./lib/src/main/resources/android-x86/lib$(LIB_NAME).so: $(ROOT)/target/i686-linux-android/release/lib$(LIB_NAME).so
mkdir -p $(@D)
cp $< $@
./lib/src/main/resources/android-armeabi-v7a/lib$(LIB_NAME).so: $(DC_UNIFFI_SOURCES)
$(eval ARCH=armv7-linux-androideabi)
@$(call compile_android)

./lib/src/main/resources/android-x86-64/lib$(LIB_NAME).so: $(ROOT)/target/x86_64-linux-android/release/lib$(LIB_NAME).so
mkdir -p $(@D)
cp $< $@
./lib/src/main/resources/android-x86/lib$(LIB_NAME).so: $(DC_UNIFFI_SOURCES)
$(eval ARCH=i686-linux-android)
@$(call compile_android)

./lib/src/main/resources/android-x86-64/lib$(LIB_NAME).so: $(DC_UNIFFI_SOURCES)
$(eval ARCH=x86_64-linux-android)
@$(call compile_android)

# Build uniffi-bindgen
$(UNIFFI_BINDGEN_EXE): $(wildcard $(UNIFFI_BINDGEN)/src/*) $(UNIFFI_BINDGEN)/Cargo.toml
cargo build -p "uniffi-bindgen"

# Generate the wrapper file
$(KOTLIN_WRAPPER_FILE): $(DEBUG_DLL) $(UNIFFI_BINDGEN_EXE)
$(UNIFFI_BINDGEN_EXE) generate --library "$(DEBUG_DLL)" --language kotlin -o $(KOTLIN_WRAPPER)
$(KOTLIN_WRAPPER_FILE): $(LINUX_DLL) $(UNIFFI_BINDGEN_EXE)
$(UNIFFI_BINDGEN_EXE) generate --library "$(LINUX_DLL)" --language kotlin -o $(KOTLIN_WRAPPER)

clean:
cargo clean
rm -f $(KOTLIN_WRAPPER_FILE)
rm -f $(KT_RELEASE_PATH)
rm -f $(KT_DEBUG_PATH)
rm -f $(KT_ANDROID_PATH)
rm -f $(KT_LINUX_PATH)
Loading