make: improve android update

- out-of-tree luajit-launcher build: no leftovers after `make clean`
- use the luajit library compiled by base: no point wasting time
  building a second (different, possibly incompatible) version
This commit is contained in:
Benoit Pierre
2024-08-08 22:07:52 +02:00
committed by Frans de Jonge
parent ede4ca8b36
commit bd4a651fbf
5 changed files with 49 additions and 31 deletions

View File

@@ -167,9 +167,6 @@ endif
clean: base-clean
rm -rf $(INSTALL_DIR)
ifeq ($(TARGET), android)
$(MAKE) -C $(CURDIR)/platform/android/luajit-launcher clean
endif
distclean: clean base-distclean
$(MAKE) -C doc clean

2
base

Submodule base updated: 720df9dfc4...3c3f18f27a

2
kodev
View File

@@ -21,7 +21,7 @@ fi
ANDROID_ARCH="${ANDROID_ARCH:-arm}"
# Default android flavor
ANDROID_FLAVOR="${ANDROID_FLAVOR:-rocks}"
ANDROID_FLAVOR="${ANDROID_FLAVOR:-Rocks}"
export ANDROID_FLAVOR
function assert_ret_zero() {

View File

@@ -1,11 +1,18 @@
# Use the git commit count as the (integer) Android version code
ANDROID_VERSION ?= $(shell git rev-list --count HEAD)
ANDROID_NAME ?= $(VERSION)
ANDROID_APK = koreader-android-$(ANDROID_ARCH)$(KODEDUG_SUFFIX)-$(VERSION).apk
ANDROID_DIR = $(PLATFORM_DIR)/android
ANDROID_LAUNCHER_DIR = $(ANDROID_DIR)/luajit-launcher
ANDROID_ASSETS = $(ANDROID_LAUNCHER_DIR)/assets/module
ANDROID_LIBS_ROOT = $(ANDROID_LAUNCHER_DIR)/libs
ANDROID_LIBS_ABI = $(ANDROID_LIBS_ROOT)/$(ANDROID_ABI)
ANDROID_LAUNCHER_BUILD = $(INSTALL_DIR)/luajit-launcher
ANDROID_ASSETS = $(ANDROID_LAUNCHER_BUILD)/assets
ANDROID_LIBS = $(ANDROID_LAUNCHER_BUILD)/libs/$(ANDROID_ABI)
ANDROID_FLAVOR ?= Rocks
ifneq (,$(CI))
GRADLE_FLAGS ?= --console=plain --no-daemon -x lintVitalArmRocksRelease
endif
GRADLE_FLAGS += $(PARALLEL_JOBS:%=--max-workers=%)
ifeq ($(ANDROID_ARCH), arm64)
ANDROID_ABI ?= arm64-v8a
@@ -24,22 +31,24 @@ androiddev: update
update: all
# Note: do not remove the module directory so there's no need
# for `mk7z.sh` to always recreate `assets.7z` from scratch.
rm -rfv $(ANDROID_LIBS_ROOT)
mkdir -p $(ANDROID_ASSETS) $(ANDROID_LIBS_ABI)
rm -rfv $(ANDROID_LIBS)
# APK version
echo $(VERSION) > $(ANDROID_ASSETS)/version.txt
# shared libraries are stored as raw assets
cp -pLR $(INSTALL_DIR)/koreader/libs $(ANDROID_LAUNCHER_DIR)/assets
# in runtime luajit-launcher's libluajit.so will be loaded
rm -vf $(ANDROID_LAUNCHER_DIR)/assets/libs/libluajit.so
mkdir -p $(ANDROID_ASSETS)/module $(ANDROID_LIBS)
# We need strip the version, or versioned
# libraries won't be included in the APK.
for src in $(INSTALL_DIR)/koreader/libs/*; do \
dst="$${src##*/}"; \
dst="$${dst%%.[0-9]*}"; \
llvm-strip --strip-unneeded "$$src" -o $(ANDROID_LIBS)/"$$dst"; \
done
# binaries are stored as shared libraries to prevent W^X exception on Android 10+
# https://developer.android.com/about/versions/10/behavior-changes-10#execute-permission
cp -pLR $(INSTALL_DIR)/koreader/sdcv $(ANDROID_LIBS_ABI)/libsdcv.so
echo "sdcv libsdcv.so" > $(ANDROID_ASSETS)/map.txt
llvm-strip --strip-unneeded $(INSTALL_DIR)/koreader/sdcv -o $(ANDROID_LIBS)/libsdcv.so
printf '%s\n' 'libs .' 'sdcv libsdcv.so' >$(ANDROID_ASSETS)/module/map.txt
# assets are compressed manually and stored inside the APK.
cd $(INSTALL_DIR)/koreader && \
./tools/mk7z.sh \
../../$(ANDROID_ASSETS)/koreader.7z \
$(abspath $(ANDROID_ASSETS)/module/koreader.7z) \
"$$(git show -s --format='%ci')" \
-m0=lzma2 -mx=9 \
-- . \
@@ -65,17 +74,29 @@ update: all
'-xr!NOTICE' \
'-xr!README.md' \
;
# make the android APK
# Note: filter out the `--debug=…` make flag
# so the old crummy version provided by the
# NDK does not blow a gasket.
MAKEFLAGS='$(filter-out --debug=%,$(MAKEFLAGS))' \
$(MAKE) -C $(ANDROID_LAUNCHER_DIR) $(if $(KODEBUG), debug, release) \
ANDROID_APPNAME=KOReader \
ANDROID_VERSION=$(ANDROID_VERSION) \
ANDROID_NAME=$(ANDROID_NAME) \
ANDROID_FLAVOR=$(ANDROID_FLAVOR)
cp $(ANDROID_LAUNCHER_DIR)/bin/NativeActivity.apk \
koreader-android-$(ANDROID_ARCH)$(KODEDUG_SUFFIX)-$(VERSION).apk
# Note: we filter out the `--debug=…` make flag so the old
# crummy version provided by the NDK does not blow a gasket.
env \
ANDROID_ARCH='$(ANDROID_ARCH)' \
ANDROID_ABI='$(ANDROID_ABI)' \
ANDROID_FULL_ARCH='$(ANDROID_ABI)' \
LUAJIT_INC='$(abspath $(STAGING_DIR)/include/luajit-2.1)' \
LUAJIT_LIB='$(abspath $(ANDROID_LIBS)/libluajit.so)' \
MAKEFLAGS='$(filter-out --debug=%,$(MAKEFLAGS))' \
NDK=$(ANDROID_NDK_ROOT) \
SDK=$(ANDROID_SDK_ROOT) \
$(ANDROID_LAUNCHER_DIR)/gradlew \
--project-dir='$(abspath $(ANDROID_LAUNCHER_DIR))' \
--project-cache-dir='$(abspath $(ANDROID_LAUNCHER_BUILD)/gradle)' \
-PassetsPath='$(abspath $(ANDROID_ASSETS))' \
-PbuildDir='$(abspath $(ANDROID_LAUNCHER_BUILD))' \
-PlibsPath='$(abspath $(dir $(ANDROID_LIBS)))' \
-PndkCustomPath='$(ANDROID_NDK_ROOT)' \
-PprojectName='KOReader' \
-PversCode='$(ANDROID_VERSION)' \
-PversName='$(ANDROID_NAME)' \
$(GRADLE_FLAGS) \
'app:assemble$(ANDROID_ARCH)$(ANDROID_FLAVOR)$(if $(KODEBUG),Debug,Release)'
cp $(ANDROID_LAUNCHER_BUILD)/outputs/apk/$(ANDROID_ARCH)$(ANDROID_FLAVOR)/$(if $(KODEBUG),debug,release)/NativeActivity.apk $(ANDROID_APK)
PHONY += androiddev update