From 40b8c9565fdfeaa75070a557e79d18b00ae51ca6 Mon Sep 17 00:00:00 2001 From: John Tsiombikas Date: Wed, 29 Dec 2021 13:48:53 +0200 Subject: [PATCH] android builds now include both 64 and 32bit in the APK --- Makefile.android | 80 ++++++++++++++++++++++++++++++++++------------- libs/anim/Makefile | 13 ++++++-- libs/imago/Makefile | 13 ++++++-- libs/psys/Makefile | 13 ++++++-- libs/psys/pattr.c | 5 ++- libs/treestore/Makefile | 13 ++++++-- src/android/main.c | 4 ++- 7 files changed, 107 insertions(+), 34 deletions(-) delete mode 100644 libs/android/keepdir create mode 100644 libs/android32/keepdir create mode 100644 libs/android64/keepdir diff --git a/Makefile.android b/Makefile.android index 0849060..8bc3714 100644 --- a/Makefile.android +++ b/Makefile.android @@ -1,17 +1,33 @@ +# ---- set these as environment variables if different ---- SDK ?= /usr/lib/android-sdk NDK ?= /usr/lib/android-ndk AVER ?= 23 +# --------------------------------------------------------- + +sys = $(shell uname -s | sed 's/MINGW.*/mingw/') +ifeq ($(sys), Linux) + host = linux-x86_64 +endif +ifeq ($(sys), mingw) + host = windows-x86_64 +endif + CCSYSROOT = --sysroot=$(NDK)/sysroot -LDSYSROOT = --sysroot=$(NDK)/platforms/android-$(AVER)/arch-arm64 +LDSYSROOT64 = --sysroot=$(NDK)/platforms/android-$(AVER)/arch-arm64 +LDSYSROOT32 = --sysroot=$(NDK)/platforms/android-$(AVER)/arch-arm PLATFORM_JAR = $(SDK)/platforms/android-$(AVER)/android.jar -TCPATH = $(NDK)/toolchains/llvm/prebuilt/linux-$(shell uname -m)/bin -TC = $(TCPATH)/aarch64-linux-android$(AVER)- +TCPATH = $(NDK)/toolchains/llvm/prebuilt/$(host)/bin +TC64 = $(TCPATH)/aarch64-linux-android$(AVER)- +TC32 = $(TCPATH)/armv7a-linux-androideabi$(AVER)- src = $(wildcard src/*.c) $(wildcard src/scr/*.c) $(wildcard src/android/*.c) -obj = $(src:.c=.arm64.o) +obj64 = $(src:.c=.arm64.o) +obj32 = $(src:.c=.arm32.o) dep = $(src:.c=.d) name = andemo lib_so = lib$(name).so +so64 = lib$(name)64.so +so32 = lib$(name)32.so pkgprefix = com.mutantstargoat pkg = $(pkgprefix).$(name) @@ -22,14 +38,11 @@ dbg = -g opt = -O3 -ffast-math -fno-strict-aliasing def = -DGLDEF incdir = -Isrc -Ilibs -Ilibs/imago/src -Ilibs/treestore -libdir = -Llibs/android +libdir64 = -Llibs/android64 +libdir32 = -Llibs/android32 -libs = libs/android/libimago.a libs/android/libtreestore.a libs/android/libanim.a \ - libs/android/libpsys.a - -CC = $(TC)clang CFLAGS = $(CCSYSROOT) $(ISYS) $(warn) $(dbg) $(opt) $(def) $(incdir) -fPIC -fcommon -MMD -LDFLAGS = $(LDSYSROOT) $(libdir) -lm -landroid -llog -lEGL -lGLESv2 -limago -lpsys -lanim -ltreestore +LDFLAGS = $(LDSYSROOT) -lm -landroid -llog -lEGL -lGLESv2 -limago -lpsys -lanim -ltreestore $(name).apk: $(name).aligned.apk keystore.jks apksigner sign --ks keystore.jks --ks-key-alias androidkey --ks-pass pass:android --key-pass pass:android --out $@ $< @@ -40,12 +53,16 @@ keystore.jks: $(name).aligned.apk: $(name).unsigned.apk zipalign -f -p 4 $< $@ -$(name).unsigned.apk: $(lib_so) AndroidManifest.xml $(icons) - mkdir -p apkbuild/lib/arm64-v8a - cp $(lib_so) apkbuild/lib/arm64-v8a - mkdir -p apkbuild/assets/data +$(name).unsigned.apk: $(so64) $(so32) AndroidManifest.xml $(icons) + rm -f apkbuild/lib/arm64-v8a/* apkbuild/lib/armeabi-v7a/* apkbuild/lib/armeabi/* + rm -f apkbuild/assets/data/* apkbuild/assets/sdr/* + mkdir -p apkbuild/lib/arm64-v8a apkbuild/lib/armeabi-v7a apkbuild/lib/armeabi + cp $(so64) apkbuild/lib/arm64-v8a/$(lib_so) + cp $(so32) apkbuild/lib/armeabi-v7a/$(lib_so) + cp $(so32) apkbuild/lib/armeabi/$(lib_so) + mkdir -p apkbuild/assets/data apkbuild/assets/sdr cp -r data/* apkbuild/assets/data - cp -r sdr apkbuild/assets + cp -r sdr/* apkbuild/assets/sdr mkdir -p apkbuild/res/drawable-xhdpi apkbuild/res/drawable-hdpi apkbuild/res/drawable-mdpi apkbuild/res/drawable-ldpi cp data/icon96.png apkbuild/res/drawable-xhdpi/ic_launcher.png cp data/icon72.png apkbuild/res/drawable-hdpi/ic_launcher.png @@ -53,30 +70,49 @@ $(name).unsigned.apk: $(lib_so) AndroidManifest.xml $(icons) cp data/icon36.png apkbuild/res/drawable-ldpi/ic_launcher.png aapt package -f -F $@ -I $(PLATFORM_JAR) -M AndroidManifest.xml -S apkbuild/res apkbuild -$(lib_so): $(obj) Makefile.android $(libs) - $(CC) -o $@ -shared -Wl,-soname,$(lib_so) $(obj) $(LDFLAGS) +$(so64): $(obj64) Makefile.android libs + $(TC64)clang -o $@ -shared -Wl,-soname,$(lib_so) $(obj64) $(libdir64) $(LDFLAGS) + +$(so32): $(obj32) Makefile.android libs + $(TC32)clang -o $@ -shared -Wl,-soname,$(lib_so) $(obj32) $(libdir32) $(LDFLAGS) -include $(dep) %.arm64.o: %.c - $(CC) -o $@ $(CFLAGS) -c $< + $(TC64)clang -o $@ $(CFLAGS) -c $< + +%.arm32.o: %.c + $(TC32)clang -o $@ $(CFLAGS) -c $< .PHONY: clean clean: - rm -f $(obj) $(lib_so) + rm -f $(obj64) $(obj32) $(lib_so) .PHONY: cleandep cleandep: rm -f $(dep) .PHONY: libs -libs: - $(MAKE) CC=$(CC) sys=android-arm64 -C libs +libs: libs64 libs32 + +.PHONY: libs64 +libs64: + $(MAKE) CC=$(TC64)clang sys=android-arm64 -C libs + +.PHONY: libs32 +libs32: + $(MAKE) CC=$(TC32)clang sys=android-arm32 -C libs .PHONY: clean-libs -clean-libs: +clean-libs: clean-libs64 clean-libs32 + +.PHONY: clean-libs64 +clean-libs64: $(MAKE) sys=android-arm64 -C libs clean +.PHONY: clean-libs32 +clean-libs32: + $(MAKE) sys=android-arm32 -C libs clean .PHONY: install install: $(name).apk diff --git a/libs/android/keepdir b/libs/android/keepdir deleted file mode 100644 index e69de29..0000000 diff --git a/libs/android32/keepdir b/libs/android32/keepdir new file mode 100644 index 0000000..e69de29 diff --git a/libs/android64/keepdir b/libs/android64/keepdir new file mode 100644 index 0000000..e69de29 diff --git a/libs/anim/Makefile b/libs/anim/Makefile index 3260d3c..6f34ca3 100644 --- a/libs/anim/Makefile +++ b/libs/anim/Makefile @@ -8,10 +8,16 @@ ifeq ($(sys), mingw) endif ifeq ($(sys), android-arm64) obj = anim.arm64.o track.arm64.o dynarr.arm64.o - lib = ../android/libanim.a + lib = ../android64/libanim.a + pic = -fPIC +endif +ifeq ($(sys), android-arm32) + obj = anim.arm32.o track.arm32.o dynarr.arm32.o + lib = ../android32/libanim.a + pic = -fPIC endif -CFLAGS = -g -ffast-math -fno-strict-aliasing -I.. +CFLAGS = -g -ffast-math -fno-strict-aliasing $(pic) -I.. $(lib): $(obj) @@ -21,6 +27,9 @@ $(lib): $(obj) %.arm64.o: %.c $(CC) -o $@ $(CFLAGS) -c $< +%.arm32.o: %.c + $(CC) -o $@ $(CFLAGS) -c $< + %.w32.o: %.c $(CC) -o $@ $(CFLAGS) -c $< diff --git a/libs/imago/Makefile b/libs/imago/Makefile index dd951db..f9c1757 100644 --- a/libs/imago/Makefile +++ b/libs/imago/Makefile @@ -12,10 +12,16 @@ ifeq ($(sys), mingw) endif ifeq ($(sys), android-arm64) obj = $(src:.c=.arm64.o) - alib = ../android/libimago.a + alib = ../android64/libimago.a + pic = -fPIC +endif +ifeq ($(sys), android-arm32) + obj = $(src:.c=.arm32.o) + alib = ../android32/libimago.a + pic = -fPIC endif -CFLAGS = -O3 -Izlib -Ilibpng -Ijpeglib +CFLAGS = -O3 -Izlib -Ilibpng -Ijpeglib $(pic) $(alib): $(obj) $(AR) rcs $@ $(obj) @@ -23,6 +29,9 @@ $(alib): $(obj) %.arm64.o: %.c $(CC) -o $@ $(CFLAGS) -c $< +%.arm32.o: %.c + $(CC) -o $@ $(CFLAGS) -c $< + %.w32.o: %.c $(CC) -o $@ $(CFLAGS) -c $< diff --git a/libs/psys/Makefile b/libs/psys/Makefile index 9d434ac..8cc39cb 100644 --- a/libs/psys/Makefile +++ b/libs/psys/Makefile @@ -9,10 +9,16 @@ ifeq ($(sys), mingw) endif ifeq ($(sys), android-arm64) obj = $(src:.c=.arm64.o) - alib = ../android/libpsys.a + alib = ../android64/libpsys.a + pic = -fPIC +endif +ifeq ($(sys), android-arm32) + obj = $(src:.c=.arm32.o) + alib = ../android32/libpsys.a + pic = -fPIC endif -CFLAGS = -O3 -ffast-math -fno-strict-aliasing -I.. +CFLAGS = -O3 -ffast-math -fno-strict-aliasing $(pic) -I.. $(alib): $(obj) $(AR) rcs $@ $(obj) @@ -20,6 +26,9 @@ $(alib): $(obj) %.arm64.o: %.c $(CC) -o $@ $(CFLAGS) -c $< +%.arm32.o: %.c + $(CC) -o $@ $(CFLAGS) -c $< + %.w32.o: %.c $(CC) -o $@ $(CFLAGS) -c $< diff --git a/libs/psys/pattr.c b/libs/psys/pattr.c index 9f0f9ad..8046e02 100644 --- a/libs/psys/pattr.c +++ b/libs/psys/pattr.c @@ -30,7 +30,6 @@ along with this program. If not, see . #endif #include "pattr.h" -#include "psys_gl.h" enum { OPT_STR, @@ -55,8 +54,8 @@ static void release_cfg_opt(struct cfgopt *opt); static char *stripspace(char *str); static void *tex_cls; -static unsigned int (*load_texture)(const char*, void*) = psys_gl_load_texture; -static void (*unload_texture)(unsigned int, void*) = psys_gl_unload_texture; +static unsigned int (*load_texture)(const char*, void*); +static void (*unload_texture)(unsigned int, void*); void psys_texture_loader(unsigned int (*load)(const char*, void*), void (*unload)(unsigned int, void*), void *cls) diff --git a/libs/treestore/Makefile b/libs/treestore/Makefile index cb9f7b3..c489fff 100644 --- a/libs/treestore/Makefile +++ b/libs/treestore/Makefile @@ -8,10 +8,16 @@ ifeq ($(sys), mingw) endif ifeq ($(sys), android-arm64) obj = treestore.arm64.o text.arm64.o dynarr.arm64.o - lib = ../android/libtreestore.a + lib = ../android64/libtreestore.a + pic = -fPIC +endif +ifeq ($(sys), android-arm32) + obj = treestore.arm32.o text.arm32.o dynarr.arm32.o + lib = ../android32/libtreestore.a + pic = -fPIC endif -CFLAGS = -O3 +CFLAGS = -O3 $(pic) $(lib): $(obj) $(AR) rcs $@ $(obj) @@ -19,6 +25,9 @@ $(lib): $(obj) %.arm64.o: %.c $(CC) -o $@ $(CFLAGS) -c $< +%.arm32.o: %.c + $(CC) -o $@ $(CFLAGS) -c $< + %.w32.o: %.c $(CC) -o $@ $(CFLAGS) -c $< diff --git a/src/android/main.c b/src/android/main.c index cf195f9..dd9a2cf 100644 --- a/src/android/main.c +++ b/src/android/main.c @@ -5,8 +5,9 @@ #include #include #include -#include "demo.h" +#include #include "android_native_app_glue.h" +#include "demo.h" #include "logger.h" #include "demosys.h" @@ -82,6 +83,7 @@ static void handle_command(struct android_app *app, int32_t cmd) break; case APP_CMD_INIT_WINDOW: + ANativeActivity_setWindowFlags(app->activity, AWINDOW_FLAG_KEEP_SCREEN_ON, 0); if(init_gl() == -1) { exit(1); } -- 1.7.10.4