- android fullscreen & "immersive mode"
[andemo] / Makefile.android
1 SDK ?= /usr/lib/android-sdk
2 NDK ?= /usr/lib/android-ndk
3 AVER ?= 23
4 CCSYSROOT = --sysroot=$(NDK)/sysroot
5 LDSYSROOT = --sysroot=$(NDK)/platforms/android-$(AVER)/arch-arm64
6 PLATFORM_JAR = $(SDK)/platforms/android-$(AVER)/android.jar
7 TCPATH = $(NDK)/toolchains/llvm/prebuilt/linux-$(shell uname -m)/bin
8 TC = $(TCPATH)/aarch64-linux-android$(AVER)-
9
10 src = $(wildcard src/*.c) $(wildcard src/scr/*.c) $(wildcard src/android/*.c)
11 obj = $(src:.c=.arm64.o)
12 dep = $(src:.c=.d)
13 name = andemo
14 lib_so = lib$(name).so
15
16 pkgprefix = com.mutantstargoat
17 pkg = $(pkgprefix).$(name)
18 act = android.app.NativeActivity
19
20 warn = -pedantic -Wall
21 dbg = -g
22 opt = -O3 -ffast-math -fno-strict-aliasing
23 def = -DGLDEF
24 incdir = -Isrc -Ilibs -Ilibs/imago/src -Ilibs/treestore
25 libdir = -Llibs/android
26
27 libs = libs/android/libimago.a libs/android/libtreestore.a libs/android/libanim.a \
28            libs/android/libpsys.a
29
30 CC = $(TC)clang
31 CFLAGS = $(CCSYSROOT) $(ISYS) $(warn) $(dbg) $(opt) $(def) $(incdir) -fPIC -fcommon -MMD
32 LDFLAGS = $(LDSYSROOT) $(libdir) -lm -landroid -llog -lEGL -lGLESv2 -limago -lpsys -lanim -ltreestore
33
34 $(name).apk: $(name).aligned.apk keystore.jks
35         apksigner sign --ks keystore.jks --ks-key-alias androidkey --ks-pass pass:android --key-pass pass:android --out $@ $<
36
37 keystore.jks:
38         keytool -genkeypair -keystore $@ -alias androidkey -validity 10000 -keyalg RSA -keysize 2048 -storepass android -keypass android
39
40 $(name).aligned.apk: $(name).unsigned.apk
41         zipalign -f -p 4 $< $@
42
43 $(name).unsigned.apk: $(lib_so) AndroidManifest.xml $(icons)
44         mkdir -p apkbuild/lib/arm64-v8a
45         cp $(lib_so) apkbuild/lib/arm64-v8a
46         mkdir -p apkbuild/assets/data
47         cp -r data/* apkbuild/assets/data
48         cp -r sdr apkbuild/assets
49         mkdir -p apkbuild/res/drawable-xhdpi apkbuild/res/drawable-hdpi apkbuild/res/drawable-mdpi apkbuild/res/drawable-ldpi
50         cp data/icon96.png apkbuild/res/drawable-xhdpi/ic_launcher.png
51         cp data/icon72.png apkbuild/res/drawable-hdpi/ic_launcher.png
52         cp data/icon48.png apkbuild/res/drawable-mdpi/ic_launcher.png
53         cp data/icon36.png apkbuild/res/drawable-ldpi/ic_launcher.png
54         aapt package -f -F $@ -I $(PLATFORM_JAR) -M AndroidManifest.xml -S apkbuild/res apkbuild
55
56 $(lib_so): $(obj) Makefile.android $(libs)
57         $(CC) -o $@ -shared -Wl,-soname,$(lib_so) $(obj) $(LDFLAGS)
58
59 -include $(dep)
60
61 %.arm64.o: %.c
62         $(CC) -o $@ $(CFLAGS) -c $<
63
64 .PHONY: clean
65 clean:
66         rm -f $(obj) $(lib_so)
67
68 .PHONY: cleandep
69 cleandep:
70         rm -f $(dep)
71
72 .PHONY: libs
73 libs:
74         $(MAKE) CC=$(CC) sys=android-arm64 -C libs
75
76 .PHONY: clean-libs
77 clean-libs:
78         $(MAKE) sys=android-arm64 -C libs clean
79
80
81 .PHONY: install
82 install: $(name).apk
83         adb install -r $(name).apk
84
85 .PHONY: uninstall
86 uninstall:
87         adb uninstall $(pkg)
88
89 .PHONY: run
90 run:
91         adb shell am start -n $(pkg)/$(act)
92
93 .PHONY: stop
94 stop:
95         adb shell am force-stop $(pkg)
96
97 .PHONY: logcat
98 logcat:
99         adb logcat $(name):V AndroidRuntime:V DEBUG:V '*:S'