android builds now include both 64 and 32bit in the APK
authorJohn Tsiombikas <nuclear@member.fsf.org>
Wed, 29 Dec 2021 11:48:53 +0000 (13:48 +0200)
committerJohn Tsiombikas <nuclear@member.fsf.org>
Wed, 29 Dec 2021 11:48:53 +0000 (13:48 +0200)
Makefile.android
libs/android/keepdir [deleted file]
libs/android32/keepdir [new file with mode: 0644]
libs/android64/keepdir [new file with mode: 0644]
libs/anim/Makefile
libs/imago/Makefile
libs/psys/Makefile
libs/psys/pattr.c
libs/treestore/Makefile
src/android/main.c

index 0849060..8bc3714 100644 (file)
@@ -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 (file)
index e69de29..0000000
diff --git a/libs/android32/keepdir b/libs/android32/keepdir
new file mode 100644 (file)
index 0000000..e69de29
diff --git a/libs/android64/keepdir b/libs/android64/keepdir
new file mode 100644 (file)
index 0000000..e69de29
index 3260d3c..6f34ca3 100644 (file)
@@ -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 $<
 
index dd951db..f9c1757 100644 (file)
@@ -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 $<
 
index 9d434ac..8cc39cb 100644 (file)
@@ -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 $<
 
index 9f0f9ad..8046e02 100644 (file)
@@ -30,7 +30,6 @@ along with this program.  If not, see <http://www.gnu.org/licenses/>.
 #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)
index cb9f7b3..c489fff 100644 (file)
@@ -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 $<
 
index cf195f9..dd9a2cf 100644 (file)
@@ -5,8 +5,9 @@
 #include <sys/time.h>
 #include <EGL/egl.h>
 #include <GLES2/gl2.h>
-#include "demo.h"
+#include <android/window.h>
 #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);
                }