NO_AUDIO option
[shapestoy] / Makefile.android
1 # ---- set these as environment variables if different ----
2 SDK ?= /usr/lib/android-sdk
3 NDK ?= /usr/lib/android-ndk
4 AVER ?= 23
5 # ---------------------------------------------------------
6
7 sys = $(shell uname -s | sed 's/MINGW.*/mingw/')
8 ifeq ($(sys), Linux)
9         host = linux-x86_64
10 endif
11 ifeq ($(sys), mingw)
12         host = windows-x86_64
13 endif
14
15 CCSYSROOT = --sysroot=$(NDK)/sysroot
16 LDSYSROOT64 = --sysroot=$(NDK)/platforms/android-$(AVER)/arch-arm64
17 LDSYSROOT32 = --sysroot=$(NDK)/platforms/android-$(AVER)/arch-arm
18 PLATFORM_JAR = $(SDK)/platforms/android-$(AVER)/android.jar
19 TCPATH = $(NDK)/toolchains/llvm/prebuilt/$(host)/bin
20 TC64 = $(TCPATH)/aarch64-linux-android$(AVER)-
21 TC32 = $(TCPATH)/armv7a-linux-androideabi$(AVER)-
22
23 src = $(wildcard src/*.c) $(wildcard src/scr/*.c) $(wildcard src/android/*.c)
24 obj64 = $(src:.c=.arm64.o)
25 obj32 = $(src:.c=.arm32.o)
26 dep = $(src:.c=.d)
27 name = shapestoy
28 lib_so = lib$(name).so
29 so64 = lib$(name)64.so
30 so32 = lib$(name)32.so
31
32 pkgprefix = com.mutantstargoat
33 pkg = $(pkgprefix).$(name)
34 act = android.app.NativeActivity
35
36 warn = -pedantic -Wall
37 dbg = -g
38 opt = -O3 -ffast-math -fno-strict-aliasing
39 def = -DGLDEF
40 incdir = -Isrc -Ilibs -Ilibs/imago/src -Ilibs/treestore
41 libdir64 = -Llibs/android64
42 libdir32 = -Llibs/android32
43
44 CFLAGS = $(CCSYSROOT) $(ISYS) $(warn) $(dbg) $(opt) $(def) $(incdir) -fPIC -fcommon -MMD
45 LDFLAGS = $(LDSYSROOT) -pthread -lm -landroid -llog -lEGL -lGLESv2 -limago -lpsys \
46                   -lanim -ltreestore -lminiaudio -landroid
47
48 $(name).apk: $(name).aligned.apk keystore.jks
49         apksigner sign --ks keystore.jks --ks-key-alias androidkey --ks-pass pass:android --key-pass pass:android --out $@ $<
50
51 keystore.jks:
52         keytool -genkeypair -keystore $@ -alias androidkey -validity 10000 \
53                 -keyalg RSA -keysize 2048 -storepass android -keypass android \
54                 -dname "cn=John Tsiombikas, o=Mindlapse, c=GR"
55
56 $(name).aligned.apk: $(name).unsigned.apk
57         zipalign -f 4 $< $@
58
59 $(name).unsigned.apk: $(so64) $(so32) AndroidManifest.xml $(icons)
60         rm -f apkbuild/lib/arm64-v8a/* apkbuild/lib/armeabi-v7a/* apkbuild/lib/armeabi/*
61         rm -f apkbuild/assets/data/* apkbuild/assets/sdr/*
62         mkdir -p apkbuild/lib/arm64-v8a apkbuild/lib/armeabi-v7a apkbuild/lib/armeabi
63         cp $(so64) apkbuild/lib/arm64-v8a/$(lib_so)
64         cp $(so32) apkbuild/lib/armeabi-v7a/$(lib_so)
65         cp $(so32) apkbuild/lib/armeabi/$(lib_so)
66         cp $(NDK)/prebuilt/android-arm64/gdbserver/gdbserver apkbuild/lib/arm64-v8a/gdbserver
67         cp $(NDK)/prebuilt/android-arm/gdbserver/gdbserver apkbuild/lib/armeabi-v7a/gdbserver
68         cp $(NDK)/prebuilt/android-arm/gdbserver/gdbserver apkbuild/lib/armeabi/gdbserver
69         mkdir -p apkbuild/assets/data apkbuild/assets/sdr
70         cp -r data/* apkbuild/assets/data
71         cp -r sdr/* apkbuild/assets/sdr
72         [ -f demo.cfg ] && cp demo.cfg apkbuild/assets || rm -f apkbuild/assets/demo.cfg
73         mkdir -p apkbuild/res/drawable-xxhdpi apkbuild/res/drawable-xxxhdpi
74         mkdir -p apkbuild/res/drawable-xhdpi apkbuild/res/drawable-hdpi
75         mkdir -p apkbuild/res/drawable-mdpi apkbuild/res/drawable-ldpi
76         cp data/icon192.png apkbuild/res/drawable-xxxhdpi/ic_launcher.png
77         cp data/icon144.png apkbuild/res/drawable-xxhdpi/ic_launcher.png
78         cp data/icon96.png apkbuild/res/drawable-xhdpi/ic_launcher.png
79         cp data/icon72.png apkbuild/res/drawable-hdpi/ic_launcher.png
80         cp data/icon48.png apkbuild/res/drawable-mdpi/ic_launcher.png
81         cp data/icon36.png apkbuild/res/drawable-ldpi/ic_launcher.png
82         aapt package -f -F $@ -I $(PLATFORM_JAR) -M AndroidManifest.xml -S apkbuild/res apkbuild
83
84 $(so64): $(obj64) Makefile.android libs
85         $(TC64)clang -o $@ -shared -Wl,-soname,$(lib_so) $(obj64) $(libdir64) $(LDFLAGS)
86
87 $(so32): $(obj32) Makefile.android libs
88         $(TC32)clang -o $@ -shared -Wl,-soname,$(lib_so) $(obj32) $(libdir32) $(LDFLAGS)
89
90 -include $(dep)
91
92 %.arm64.o: %.c
93         $(TC64)clang -o $@ $(CFLAGS) -c $<
94
95 %.arm32.o: %.c
96         $(TC32)clang -o $@ $(CFLAGS) -c $<
97
98 .PHONY: clean
99 clean:
100         rm -f $(obj64) $(obj32) $(lib_so)
101
102 .PHONY: cleandep
103 cleandep:
104         rm -f $(dep)
105
106 .PHONY: libs
107 libs: libs64 libs32
108
109 .PHONY: libs64
110 libs64:
111         $(MAKE) CC=$(TC64)clang sys=android-arm64 -C libs
112
113 .PHONY: libs32
114 libs32:
115         $(MAKE) CC=$(TC32)clang sys=android-arm32 -C libs
116
117 .PHONY: clean-libs
118 clean-libs: clean-libs64 clean-libs32
119
120 .PHONY: clean-libs64
121 clean-libs64:
122         $(MAKE) sys=android-arm64 -C libs clean
123
124 .PHONY: clean-libs32
125 clean-libs32:
126         $(MAKE) sys=android-arm32 -C libs clean
127
128 .PHONY: install
129 install: $(name).apk
130         adb install -r $(name).apk
131
132 .PHONY: uninstall
133 uninstall:
134         adb uninstall $(pkg)
135
136 .PHONY: run
137 run:
138         adb shell am start -n $(pkg)/$(act)
139
140 .PHONY: stop
141 stop:
142         adb shell am force-stop $(pkg)
143
144 .PHONY: logcat
145 logcat:
146         adb logcat $(name):V AndroidRuntime:V DEBUG:V '*:S'