X-Git-Url: https://git.distorted.org.uk/~mdw/tripe-android/blobdiff_plain/9190adc66f814b8b9add2d2df2ff65b43175104b..HEAD:/Makefile diff --git a/Makefile b/Makefile index 0675cd4..d077faf 100644 --- a/Makefile +++ b/Makefile @@ -53,7 +53,7 @@ CCACHE := $(shell \ ## Where to put the object files. OUTDIR = out -CONFIGDIR = $(OUTDIR)/config +CONFIGDIR = $(OUTDIR)/config-$(hostcpu) ## The Java runtime, for some reason, hardcodes its default for ## `java.io.tmpdir', inviting security problems. If the user has defined a @@ -97,13 +97,13 @@ CFLAGS = -O2 -g -Wall LDFLAGS = -Wl,-z,defs ## Host toolchain. -FLAVOURS += host -ENV.host = -CC.host = gcc -CFLAGS.host = $(CFLAGS) -fPIC -LD.host = $(CC.host) -LDFLAGS.host = $(LDFLAGS) -CONFIG.host = +FLAVOURS += host-$(hostcpu) +ENV.host-$(hostcpu) = +CC.host-$(hostcpu) = gcc +CFLAGS.host-$(hostcpu) = $(CFLAGS) -fPIC +LD.host-$(hostcpu) = $(CC.host-$(hostcpu)) +LDFLAGS.host-$(hostcpu) = $(LDFLAGS) +CONFIG.host-$(hostcpu) = ## Host JNI machinery. $(CONFIGDIR)/jdkdir.mk: @@ -119,7 +119,7 @@ JDKPLAT := $(shell \ (darwin) echo macosx ;; \ (*) echo $(hostos) ;; \ esac) -CFLAGS.host += -I$(JDKDIR)/include -I$(JDKDIR)/include/$(JDKPLAT) +CFLAGS.host-$(hostcpu) += -I$(JDKDIR)/include -I$(JDKDIR)/include/$(JDKPLAT) ## Android SDK location. ANDROID_SDKDIR = /usr/local/android/sdk @@ -127,18 +127,14 @@ MINAPI = 15 TARGETAPI = 23 TOOLVERSION = 4.9 -## Android ABI definitions. +## Android ABI definitions. We don't bother with `armeabi-v7a': we'll use +## fancy CPU features if we detect that they're available at runtime anyway. ANDROID_ABIS += armeabi GNUARCH.armeabi = arm-linux-androideabi PLATARCH.armeabi = arm CFLAGS.ndk-armeabi = -ANDROID_ABIS.inhibit += armeabi-v7a -GNUARCH.armeabi-v7a = arm-linux-androideabi -PLATARCH.armeabi-v7a = arm -CFLAGS.ndk-armeabi-v7a = - -ANDROID_ABIS.inhibit += arm64-v8a +ANDROID_ABIS += arm64-v8a GNUARCH.arm64-v8a = aarch64-linux-android PLATARCH.arm64-v8a = arm64 MINAPI.arm64-v8a = 21 @@ -148,7 +144,7 @@ TOOLCHAINDIR.x86 = x86 GNUARCH.x86 = i686-linux-android PLATARCH.x86 = x86 -ANDROID_ABIS.inhibit += x86_64 +ANDROID_ABIS += x86_64 TOOLCHAINDIR.x86_64 = x86_64 GNUARCH.x86_64 = x86_64-linux-android PLATARCH.x86_64 = x86_64 @@ -159,7 +155,7 @@ FLAVOURS += $(ANDROID_ABIS) ## Build variants. VARIANTS += debug AAPTFLAGS.debug = --debug-mode \ - --rename-manifest-package uk.org.distorted.tripe-debug + --rename-manifest-package uk.org.distorted.tripe.debug KEYSTORE.debug = debug.keystore JARSIGNERFLAGS.debug = -storepass public -keypass public @@ -179,8 +175,8 @@ ndk-toolchain-bin = \ ENV.ndk = env PATH=$(call ndk-toolchain-bin,$1):$$PATH CC.ndk = $(GNUARCH.$1)-gcc LD.ndk = $(CC.ndk) -CFLAGS.ndk = $(CFLAGS) -fPIC -D__ANDROID_API__=$(MINAPI) \ - $(CFLAGS.ndk-$1) \ +CFLAGS.ndk = $(CFLAGS) -fPIC $(CFLAGS.ndk-$1) \ + -D__ANDROID_API__=$(call defaulting,MINAPI.$1,$(MINAPI)) \ --sysroot=$(call ndk-sysroot,$1) \ -isystem $(ANDROID_NDKDIR)/sysroot/usr/include \ -isystem $(ANDROID_NDKDIR)/sysroot/usr/include/$(GNUARCH.$1) @@ -283,6 +279,9 @@ ext-stamp-builddir = \ ext-stamp-absprefix = $(call ext-absprefix,$(call stamp-type,$1)) ext-stamp-tool = $(call tool,$(call stamp-type,$1),$2) +$(foreach e,$(EXTERNALS),\ + $(eval $e_VERSION := $$(shell cd $$(call ext-srcdir,$e) && $$(abs_srcdir)/auto-version))) + EXTSTAMPS = $(call ext-stamps,$(EXTERNALS),$(FLAVOURS)) $(EXTSTAMPS): \ @@ -315,6 +314,7 @@ $(foreach f,$(FLAVOURS),$(foreach e,$(EXTERNALS),clean-$e.$f)): clean-%: rm -f $(STAMPDIR)/$*-stamp rm -rf $(call ext-stamp-builddir,$*) .PHONY: $(foreach f,$(FLAVOURS),$(foreach e,$(EXTERNALS),clean-$e.$f)) +$(foreach e,$(EXTERNALS),clean-$e): clean-%: $(foreach f,$(FLAVOURS),clean-%.$f) $(foreach f,$(FLAVOURS),clean-inst.$f): clean-inst.%: rm -rf $(call ext-prefix,$*) .PHONY: $(foreach f,$(FLAVOURS),clean-inst.$f) @@ -354,7 +354,8 @@ libtripe.so_LIBS = $(call ext-builddir,$1,tripe)/server/libtripe.a \ $(call ext-builddir,$1,tripe)/common/libcommon.a \ -L$(call ext-prefix,$1)/lib \ $(call pkg-config,$1,catacomb,LIBS) \ - $(call pkg-config,$1,mLib,LIBS) + $(call pkg-config,$1,mLib,LIBS) \ + -ladns ## Machinery for compiling. objdir = $(OUTDIR)/obj.$1 @@ -386,7 +387,7 @@ $(foreach a,$(APKLIBS), $(eval $(call obj-rule,$a))) CLEANFILES += $(OUTDIR)/obj.*/*.o $(OUTDIR)/obj.*/*.d ## Machinery for linking. -JNIDIR.host = $(OUTDIR) +JNIDIR.host-$(hostcpu) = $(OUTDIR)/lib.host-$(hostcpu) JNIDIR.ndk = $(OUTDIR)/pkg/lib/$1 define apklib-rule @@ -404,7 +405,37 @@ $(foreach f,$(FLAVOURS), \ $(foreach a,$(APKLIBS), \ $(eval $(call apklib-rule,$f,$a)))) -CLEANFILES += $(OUTDIR)/pkg/lib/*/lib*.so $(OUTDIR)/lib*.so +CLEANFILES += $(OUTDIR)/pkg/lib/*/lib*.so +CLEANFILES += $(OUTDIR)/lib.host-$(hostcpu)/lib*.so + +###-------------------------------------------------------------------------- +### Android string resource generation. + +GENSTRINGS += package=PACKAGE +GENSTRINGS += version=VERSION +GENSTRINGS += vsn=VSN + +$(foreach e,$(EXTERNALS),\ + $(eval GENSTRINGS += $e_version=$e_VERSION)) + +BUILD := $(shell uuid -v4) +GENSTRINGS += build_uuid=BUILD + +genstring-name = $(firstword $(subst =, ,$1)) +genstring-value = $($(word 2,$(subst =, ,$1))) + +define gen-strings + $(V_AT)mkdir -p $(dir $1) + $(call v_tag,GEN)set -e; rm -f $1.new; exec >$1.new; \ + echo ""; \ + echo ""; \ + $(foreach g,$(GENSTRINGS), \ + echo " $(call genstring-value,$g)";) \ + echo "" + $(V_AT)mv $1.new $1 +endef +$(OUTDIR)/res.dummy/values/auto.xml: Makefile + $(call gen-strings,$@) ###-------------------------------------------------------------------------- ### Java and Scala building. @@ -439,11 +470,13 @@ CLASSES += util CLASSES += sys:util CLASSES += admin:sys,util CLASSES += tar:util +CLASSES += dep:util CLASSES += progress:sys,util CLASSES += keys:progress,tar,sys,util CLASSES += terminal:progress,sys,util CLASSES += R -CLASSES += toy-activity:R +CLASSES += app:R +CLASSES += toy-activity:app,R ## Building class files. $(STAMPDIR)/%.class-stamp: %.java @@ -485,12 +518,13 @@ CLEANFILES += $(OUTDIR)/*.apk AAPTFLAGS = \ --min-sdk-version $(MINAPI) --target-sdk-version $(TARGETAPI) \ - --version-name "$(VERSION)" --version-code $(VSN) + --version-name "$(VERSION)" --version-code $(VSN) --auto-add-overlay -$(OUTDIR)/src/R.java: AndroidManifest.xml +$(OUTDIR)/src/R.java: AndroidManifest.xml $(OUTDIR)/res.dummy/values/auto.xml $(V_AT)mkdir -p $(dir $@) $(call v_tag,AAPT)aapt package $(AAPTFLAGS) \ - -M AndroidManifest.xml -S res/ -I $(ANDROID_JAR) \ + -M AndroidManifest.xml -S res/ -S $(OUTDIR)/res.dummy/ \ + -I $(ANDROID_JAR) \ -J $(dir $@) --generate-dependencies CLEANFILES += $(OUTDIR)/src/R.java $(OUTDIR)/src/R.java.d -include $(OUTDIR)/src/R.java.d @@ -503,7 +537,7 @@ $$(OUTDIR)/pkg/assets/bin/$1/$2: $$$$(call ext-stamps,$$$$(EXTERNALS),$1) $$(V_AT)mkdir -p $$(dir $$@) $$(call v_tag,CP)cp $$(call ext-prefix,$1)/bin/$2 $$@ endef -$(foreach f,$(FLAVOURS), \ +$(foreach f,$(ANDROID_ABIS), \ $(foreach b,$(BINS), \ $(eval $(call bin-rule,$f,$b)))) @@ -520,11 +554,14 @@ $(OUTDIR)/pkg/classes.dex: $(CLASSSTAMPS) $(DEXJARS) $(V_AT)mkdir -p $(dir $@) $(call v_tag,DX)dx --dex --output=$@ $(CLASSDIR) $(JARDIR) +$(OUTDIR)/res.volatile/values/auto.xml: $(INSTFILES) + $(call gen-strings,$@) + $(foreach v,$(VARIANTS),$(OUTDIR)/tripe-$v.unsigned.apk): \ -$(OUTDIR)/tripe-%.unsigned.apk: $(INSTFILES) +$(OUTDIR)/tripe-%.unsigned.apk: $(INSTFILES) $(OUTDIR)/res.volatile/values/auto.xml $(call v_tag,AAPT)aapt package -f $(AAPTFLAGS) $(AAPTFLAGS.$*) \ - -M AndroidManifest.xml -S res/ -I $(ANDROID_JAR) \ - -F $@ $(OUTDIR)/pkg/ + -M AndroidManifest.xml -S res/ -S $(OUTDIR)/res.volatile/ \ + -I $(ANDROID_JAR) -F $@ $(OUTDIR)/pkg/ $(foreach v,$(VARIANTS),$(OUTDIR)/tripe-$v.signed.apk): \ $(OUTDIR)/tripe-%.signed.apk: $(OUTDIR)/tripe-%.unsigned.apk $$(KEYSTORE.$$*) @@ -547,6 +584,10 @@ all:: debug clean::; rm -f $(CLEANFILES) realclean::; rm -f $(REALCLEANFILES) +repl: $(CLASSSTAMPS) $(foreach a,$(APKLIBS),$(JNIDIR.host-$(hostcpu))/$a) + $(SCALA) -cp $(CLASSDIR) -Yno-load-impl-class \ + -Djava.library.path=$(JNIDIR.host-$(hostcpu)) \ + t:; : $(show) .PHONY: t