5ef4a0d043180814913e1f04cdb334adbea98ff2
[andemo] / Makefile.android
1 SDK ?= /usr/lib/android-sdk
2 NDK ?= /usr/lib/android-ndk
3 CCSYSROOT = --sysroot=$(NDK)/sysroot
4 ISYS = --isystem=$(CCSYSROOT)/usr/include/aarch64-linux-android
5 LDSYSROOT = --sysroot=$(NDK)/platforms/android-23/arch-arm64
6 PLATFORM_JAR = $(SDK)/platforms/android-23/android.jar
7 TCPATH = $(NDK)/toolchains/llvm/prebuilt/linux-$(shell uname -m)/bin
8 TC = $(TCPATH)/aarch64-linux-android23-
9
10 src = $(wildcard src/*.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 incdir = -Isrc
24
25 CC = $(TC)clang
26 CFLAGS = $(CCSYSROOT) $(ISYS) $(warn) $(dbg) $(opt) $(def) $(incdir) -fPIC -fcommon -MMD
27 LDFLAGS = $(LDSYSROOT) -landroid -llog -lEGL -lGLESv2
28
29 $(name).apk: $(name).aligned.apk keystore.jks
30         apksigner sign --ks keystore.jks --ks-key-alias androidkey --ks-pass pass:android --key-pass pass:android --out $@ $<
31
32 keystore.jks:
33         keytool -genkeypair -keystore $@ -alias androidkey -validity 10000 -keyalg RSA -keysize 2048 -storepass android -keypass android
34
35 $(name).aligned.apk: $(name).unsigned.apk
36         zipalign -f -p 4 $< $@
37
38 $(name).unsigned.apk: $(lib_so) AndroidManifest.xml
39         mkdir -p apkbuild/lib/arm64-v8a
40         cp $(lib_so) apkbuild/lib/arm64-v8a
41         aapt package -f -v -F $@ -I $(PLATFORM_JAR) -M AndroidManifest.xml apkbuild
42
43 $(lib_so): $(obj)
44         $(CC) -o $@ -shared $(obj) $(LDFLAGS)
45
46 -include $(dep)
47
48 %.arm64.o: %.c
49         $(CC) -o $@ $(CFLAGS) -c $<
50
51 .PHONY: clean
52 clean:
53         rm -f $(obj) $(lib_so)
54
55 .PHONY: cleandep
56 cleandep:
57         rm -f $(dep)
58
59 .PHONY: install
60 install: $(name).apk
61         adb install -r $(name).apk
62
63 .PHONY: uninstall
64 uninstall:
65         adb uninstall $(pkg)
66
67 .PHONY: run
68 run:
69         adb shell am start -n $(pkg)/$(act)
70
71 .PHONY: stop
72 stop:
73         adb shell am force-stop $(pkg)