builds, installs, fails to run yet
[andemo] / Makefile.android
index 0df3c95..0d3fa8b 100644 (file)
@@ -1,19 +1,45 @@
+SDK ?= /usr/lib/android-sdk
 NDK ?= /usr/lib/android-ndk
 CCSYSROOT = $(NDK)/sysroot
 ISYS = $(CCSYSROOT)/usr/include/aarch64-linux-android
-LDSYSROOT = $(NDK)/platforms/anrdoid-21/arch-arm64
+LDSYSROOT = $(NDK)/platforms/android-23/arch-arm64
+PLATFORM_JAR = $(SDK)/platforms/android-23/android.jar
 TCPATH = $(NDK)/toolchains/llvm/prebuilt/linux-$(shell uname -m)/bin
-TC = $(TCPATH)/aarch64-linux-android21-
+TC = $(TCPATH)/aarch64-linux-android23-
 
 src = $(wildcard src/*.c) $(wildcard src/android/*.c)
 obj = $(src:.c=.arm64.o)
 dep = $(src:.c=.d)
-lib_so = libandemo.so
+name = andemo
+lib_so = lib$(name).so
+
+pkgprefix = com.mutantstargoat
+pkg = $(pkgprefix).$(name)
+act = android.app.NativeActivity
+
+warn = -pedantic -Wall
+dbg = -g
+opt = -O3 -ffast-math -fno-strict-aliasing
+incdir = -Isrc
 
 CC = $(TC)clang
 CFLAGS = --sysroot=$(CCSYSROOT) -isystem=$(ISYS) $(warn) $(dbg) $(opt) $(def) $(incdir) -fPIC -fcommon -MMD
 LDFLAGS = --sysroot=$(LDSYSROOT) -lEGL -lGLESv2
 
+$(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 $@ $<
+
+keystore.jks:
+       keytool -genkeypair -keystore $@ -alias androidkey -validity 10000 -keyalg RSA -keysize 2048 -storepass android -keypass android
+
+$(name).aligned.apk: $(name).unsigned.apk
+       zipalign -f -p 4 $< $@
+
+$(name).unsigned.apk: $(lib_so) AndroidManifest.xml
+       mkdir -p apkbuild/lib/arm64-v8a
+       cp $(lib_so) apkbuild/lib/arm64-v8a
+       aapt package -f -v -F $@ -I $(PLATFORM_JAR) -M AndroidManifest.xml apkbuild
+
 $(lib_so): $(obj)
        $(CC) -o $@ -shared $(obj) $(LDFLAGS)
 
@@ -29,3 +55,19 @@ clean:
 .PHONY: cleandep
 cleandep:
        rm -f $(dep)
+
+.PHONY: install
+install: $(name).apk
+       adb install -r $(name).apk
+
+.PHONY: uninstall
+uninstall:
+       adb uninstall $(pkg)
+
+.PHONY: run
+run:
+       adb shell am start -n $(pkg)/$(act)
+
+.PHONY: stop
+stop:
+       adb shell am force-stop $(pkg)