SDK ?= /usr/lib/android-sdk NDK ?= /usr/lib/android-ndk CCSYSROOT = $(NDK)/sysroot ISYS = $(CCSYSROOT)/usr/include/aarch64-linux-android 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-android23- src = $(wildcard src/*.c) $(wildcard src/android/*.c) obj = $(src:.c=.arm64.o) dep = $(src:.c=.d) 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) -include $(dep) %.arm64.o: %.c $(CC) -o $@ $(CFLAGS) -c $< .PHONY: clean clean: rm -f $(obj) $(lib_so) .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)