From 43edd90553b46fa752f7d71d293f50d33d88f475 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Philippe=20Dugr=C3=A9?= Date: Mon, 25 Nov 2024 16:08:07 -0500 Subject: [PATCH] Modify kotlin Makefile to better support release and debug builds --- .github/workflows/kotlin/action.yml | 7 ++- wrappers/kotlin/Makefile | 75 +++++++++++++++++------------ 2 files changed, 49 insertions(+), 33 deletions(-) diff --git a/.github/workflows/kotlin/action.yml b/.github/workflows/kotlin/action.yml index 352b85139..61be311a9 100644 --- a/.github/workflows/kotlin/action.yml +++ b/.github/workflows/kotlin/action.yml @@ -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: | @@ -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 diff --git a/wrappers/kotlin/Makefile b/wrappers/kotlin/Makefile index 8ff4e7593..790d1b089 100644 --- a/wrappers/kotlin/Makefile +++ b/wrappers/kotlin/Makefile @@ -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 @@ -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)