3 ### Build script for the TrIPE Android app
5 ### (c) 2018 Straylight/Edgeware
8 ###----- Licensing notice ---------------------------------------------------
10 ### This file is part of the Trivial IP Encryption (TrIPE) Android app.
12 ### TrIPE is free software: you can redistribute it and/or modify it under
13 ### the terms of the GNU General Public License as published by the Free
14 ### Software Foundation; either version 3 of the License, or (at your
15 ### option) any later version.
17 ### TrIPE is distributed in the hope that it will be useful, but WITHOUT
18 ### ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
19 ### FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
22 ### You should have received a copy of the GNU General Public License
23 ### along with TrIPE. If not, see <https://www.gnu.org/licenses/>.
25 PACKAGE
= tripe-android
26 VERSION
:= $(shell .
/auto-version
)
29 .SECONDEXPANSION
: #sorry
31 ###--------------------------------------------------------------------------
32 ### Preliminary magic.
35 space
= $(empty
) $(empty
)
38 definedp
= $(filter-out undefined
,$(origin $1))
39 defaulting
= $(if
$(call definedp
,$1),$($1),$2)
43 ###--------------------------------------------------------------------------
46 abs_srcdir
:= $(abspath .
)
47 hostos
:= $(shell uname
-s | tr A-Z a-z
)
48 hostcpu
:= $(shell uname
-m | tr A-Z a-z
)
50 ## Of course we have `ccache'.
52 if ccache
--version
>/dev
/null
2>&1; then echo ccache
; fi
)
54 ## Where to put the object files.
56 CONFIGDIR
= $(OUTDIR
)/config-
$(hostcpu
)
58 ## The Java runtime, for some reason, hardcodes its default for
59 ## `java.io.tmpdir', inviting security problems. If the user has defined a
60 ## `TMPDIR', then persuade Java to use it.
61 explicit-tmpdir-p
= $(if
$(call definedp
,TMPDIR
),t
,nil
)
62 ifeq ($(explicit-tmpdir-p
), t
)
63 JAVADEFS
+= -Djava.io.tmpdir
=$(TMPDIR
)
67 JAVAC
= javac
$(addprefix -J
,$(JAVADEFS
))
68 JAVAFLAGS
= -source
1.6 -target
1.6
72 ## Unfortunately, `fsc' is a total security disaster. On the other hand,
73 ## `scalac' is rather slow. If we're running with a custom `TMPDIR', and the
74 ## `noip' wrapper <https://git.distorted.org.uk/~mdw/preload-hacks/> is
75 ## available, then we can tame `fsc' enough that it's probably safe to run;
76 ## otherwise, it's too risky to enable by default.
77 noip-available-p
:= $(shell noip echo t
2>/dev
/null || echo nil
)
78 ifeq ($(noip-available-p
), t
)
81 ifeq "$(explicit-tmpdir-p),$(noip-available-p)" "t,t"
82 SCALAC
= noip fsc
$(JAVADEFS
)
83 SCALA
= noip scala
$(JAVADEFS
)
84 SCALAC_RESET
= $(SCALAC
) -reset
86 SCALAC
= scalac
$(JAVADEFS
)
87 SCALA
= scala
$(JAVADEFS
) -nc
90 SCALAFLAGS
= -optimise
-feature
-deprecation
-Xfatal-warnings \
91 -Xlint
-Xlint
:-package-object-classes \
92 -Yinline-warnings
:false
-target
:jvm-1.6 \
95 ## Basic C toolchain flags.
100 FLAVOURS
+= host-
$(hostcpu
)
101 ENV.host-
$(hostcpu
) =
102 CC.host-
$(hostcpu
) = gcc
103 CFLAGS.host-
$(hostcpu
) = $(CFLAGS
) -fPIC
104 LD.host-
$(hostcpu
) = $(CC.host-
$(hostcpu
))
105 LDFLAGS.host-
$(hostcpu
) = $(LDFLAGS
)
106 CONFIG.host-
$(hostcpu
) =
108 ## Host JNI machinery.
109 $(CONFIGDIR
)/jdkdir.mk
:
110 $(V_AT
)mkdir
-p
$(dir $@
)
111 $(call v_tag
,CONFIG
)java
-XshowSettings
:properties
2>&1 | \
112 sed
-n
's:^ *java\.home *= *\(.*\)/jre$$:JDKDIR = \1:p' >$@.new
114 REALCLEANFILES
+= $(CONFIGDIR
)/jdkdir.mk
115 include $(CONFIGDIR
)/jdkdir.mk
119 (darwin
) echo macosx
;; \
120 (*) echo
$(hostos
) ;; \
122 CFLAGS.host-
$(hostcpu
) += -I
$(JDKDIR
)/include -I
$(JDKDIR
)/include/$(JDKPLAT
)
124 ## Android SDK location.
125 ANDROID_SDKDIR
= /usr
/local
/android
/sdk
130 ## Android ABI definitions. We don't bother with `armeabi-v7a': we'll use
131 ## fancy CPU features if we detect that they're available at runtime anyway.
132 ANDROID_ABIS
+= armeabi
133 GNUARCH.armeabi
= arm-linux-androideabi
134 PLATARCH.armeabi
= arm
137 ANDROID_ABIS
+= arm64-v8a
138 GNUARCH.arm64-v8a
= aarch64-linux-android
139 PLATARCH.arm64-v8a
= arm64
140 MINAPI.arm64-v8a
= 21
143 TOOLCHAINDIR.x86
= x86
144 GNUARCH.x86
= i686-linux-android
147 ANDROID_ABIS
+= x86_64
148 TOOLCHAINDIR.x86_64
= x86_64
149 GNUARCH.x86_64
= x86_64-linux-android
150 PLATARCH.x86_64
= x86_64
153 FLAVOURS
+= $(ANDROID_ABIS
)
157 AAPTFLAGS.debug
= --debug-mode \
158 --rename-manifest-package uk.org.distorted.tripe.debug
159 KEYSTORE.debug
= debug.keystore
160 JARSIGNERFLAGS.debug
= -storepass public
-keypass public
163 KEYSTORE.release
= release.keystore
164 JARSIGNERFLAGS.release
=
166 ## Android NDK location.
167 ANDROID_NDKDIR
= $(ANDROID_SDKDIR
)/ndk-bundle
168 NDK_HOSTARCH
= $(hostos
)-$(hostcpu
)
170 ## Android NDK toolchains.
172 $(ANDROID_NDKDIR
)/platforms
/android-
$(call defaulting
,MINAPI.
$1,$(MINAPI
))/arch-
$(PLATARCH.
$1)
173 ndk-toolchain-bin
= \
174 $(ANDROID_NDKDIR
)/toolchains
/$(call defaulting
,TOOLCHAINDIR.
$1,$(GNUARCH.
$1))-$(TOOLVERSION
)/prebuilt
/$(NDK_HOSTARCH
)/bin
175 ENV.ndk
= env PATH
=$(call ndk-toolchain-bin
,$1):$$PATH
176 CC.ndk
= $(GNUARCH.
$1)-gcc
178 CFLAGS.ndk
= $(CFLAGS
) -fPIC
$(CFLAGS.ndk-
$1) \
179 -D__ANDROID_API__
=$(call defaulting
,MINAPI.
$1,$(MINAPI
)) \
180 --sysroot
=$(call ndk-sysroot
,$1) \
181 -isystem
$(ANDROID_NDKDIR
)/sysroot
/usr
/include \
182 -isystem
$(ANDROID_NDKDIR
)/sysroot
/usr
/include/$(GNUARCH.
$1)
183 LDFLAGS.ndk
= $(LDFLAGS
) -pie \
184 --sysroot
=$(call ndk-sysroot
,$1)
185 CONFIG.ndk
= --host
=$(GNUARCH.
$1)
188 tool
= $(call defaulting
,$2.
$1,$(call
$2.ndk
,$1))
190 ## Subject name for debug key.
191 DEBUGDN
= CN
=Straylight
/Edgeware
, L
=Cambridge
, C
=GB
193 ## Android libraries.
195 $(ANDROID_SDKDIR
)/platforms
/android-
$(MINAPI
)/android.jar
198 $(CONFIGDIR
)/scaladir.mk
:
199 $(V_AT
)mkdir
-p
$(dir $@
)
200 $(call v_tag
,CONFIG
)$(SCALA
) -J-XshowSettings
:properties
-help
2>&1 | \
201 sed
-n
's:^ *scala\.home *= *:SCALADIR = :p' >$@.new
203 include $(CONFIGDIR
)/scaladir.mk
204 REALCLEANFILES
+= $(CONFIGDIR
)/scaladir.mk
205 SCALA_LIB
= $(SCALADIR
)/lib
/scala-library.jar
207 ## Silent-rules is on by default.
210 ## Allow local overrides at this point.
213 ###--------------------------------------------------------------------------
214 ### Silent-rules machinery.
216 v_tag
= $(call v_tag_
$V,$1)
217 v_tag_0
= @printf
" %-8s %s\n" "$1" "$@";
222 ###--------------------------------------------------------------------------
223 ### Other handy functions.
225 join-paths
= $(if
$(filter /%,$2),$2,$1/$2)
228 STAMPDIR
= $(OUTDIR
)/stamp
229 stamps
= $(patsubst %,$(STAMPDIR
)/%.
$1-stamp
,$2)
230 stamp-base
= $(patsubst $(STAMPDIR
)/%-stamp
,%,$1)
231 stamp-name
= $(basename $(call stamp-base
,$1))
232 stamp-type
= $(patsubst .
%,%,$(suffix $(call stamp-base
,$1)))
234 ###--------------------------------------------------------------------------
235 ### And now we can start building things.
246 distclean:: realclean
249 ###--------------------------------------------------------------------------
250 ### External native packages.
254 adns_CONFIG
= --disable-dynamic
258 mLib_CONFIG
= --enable-static
--disable-shared
--with-adns
260 EXTERNALS
+= catacomb
262 catacomb_CONFIG
= --enable-static
--disable-shared
265 tripe_DEPS
= mLib catacomb
266 tripe_CONFIG
= --without-wireshark
--with-adns
--with-tunnel
=slip
269 ext-stamps
= $(foreach f
,$2,$(call stamps
,$f,$1))
271 ext-srcdir
= $(call defaulting
,$1_SRCDIR,..
/$1)
272 ext-builddir
= $(OUTDIR
)/build.
$1/$2
273 ext-prefix
= $(OUTDIR
)/inst.
$1
274 ext-absprefix
= $(abs_srcdir
)/$(call ext-prefix
,$1)
276 ext-stamp-srcdir
= $(call ext-srcdir
,$(call stamp-name
,$1))
277 ext-stamp-builddir
= \
278 $(call ext-builddir
,$(call stamp-type
,$1),$(call stamp-name
,$1))
279 ext-stamp-absprefix
= $(call ext-absprefix
,$(call stamp-type
,$1))
280 ext-stamp-tool
= $(call tool
,$(call stamp-type
,$1),$2)
282 $(foreach e
,$(EXTERNALS
),\
283 $(eval
$e_VERSION := $$(shell cd
$$(call ext-srcdir
,$e) && $$(abs_srcdir
)/auto-version
)))
285 EXTSTAMPS
= $(call ext-stamps
,$(EXTERNALS
),$(FLAVOURS
))
288 $(STAMPDIR
)/%-stamp
: \
289 $$(call ext-stamps
, \
290 $$($$(call stamp-name
,$$@
)_DEPS
), \
291 $$(call stamp-type
,$$@
))
292 $(V_AT
)mkdir
-p
$(STAMPDIR
)
293 $(V_AT
)rm -rf
$(call ext-stamp-builddir
,$@
)
294 $(V_AT
)mkdir
-p
$(call ext-stamp-builddir
,$@
)
295 cd
$(call ext-stamp-builddir
,$@
) && \
296 $(call ext-stamp-tool
,$@
,ENV
) \
297 $(call join-paths
,..
/..
/..
,$(call ext-stamp-srcdir
,$@
))/configure \
298 --prefix=$(call ext-stamp-absprefix
,$@
) \
299 $(call ext-stamp-tool
,$@
,CONFIG
) \
300 $($(call stamp-name
,$@
)_CONFIG
) \
301 CC
="$(CCACHE) $(call ext-stamp-tool,$@,CC)" \
302 CFLAGS
="$(call ext-stamp-tool,$@,CFLAGS) -I$(call ext-stamp-absprefix,$@)/include" \
303 LD
="$(call ext-stamp-tool,$@,LD)" \
304 LDFLAGS
="$(call ext-stamp-tool,$@,LDFLAGS) -L$(call ext-stamp-absprefix,$@)/lib" \
305 PKG_CONFIG
="pkg-config --static" \
306 PKG_CONFIG_LIBDIR
=$(call ext-stamp-absprefix
,$@
)/lib
/pkgconfig
307 $(call ext-stamp-tool
,$@
,ENV
) \
308 $(MAKE
) -C
$(call ext-stamp-builddir
,$@
)
309 $(call ext-stamp-tool
,$@
,ENV
) \
310 $(MAKE
) -C
$(call ext-stamp-builddir
,$@
) install
313 $(foreach f
,$(FLAVOURS
),$(foreach e
,$(EXTERNALS
),clean-
$e.
$f)): clean-
%:
314 rm -f
$(STAMPDIR
)/$*-stamp
315 rm -rf
$(call ext-stamp-builddir
,$*)
316 .PHONY
: $(foreach f
,$(FLAVOURS
),$(foreach e
,$(EXTERNALS
),clean-
$e.
$f))
317 $(foreach e
,$(EXTERNALS
),clean-
$e): clean-
%: $(foreach f
,$(FLAVOURS
),clean-
%.
$f)
318 $(foreach f
,$(FLAVOURS
),clean-inst.
$f): clean-inst.
%:
319 rm -rf
$(call ext-prefix
,$*)
320 .PHONY
: $(foreach f
,$(FLAVOURS
),clean-inst.
$f)
322 $(foreach f
,$(FLAVOURS
),realclean-
$f): realclean-
%: \
323 $$(foreach e
,$$(EXTERNALS
),clean-
$$e.
$$*) \
325 realclean:: $(foreach f
,$(FLAVOURS
),realclean-
$f)
327 ###--------------------------------------------------------------------------
328 ### Our own native programs.
330 ## Fetching package configuration.
331 PKG_CONFIG
= pkg-config
--static
334 PCOPT.CFLAGS
= --cflags
337 pkg-config
= $(shell \
338 env PKG_CONFIG_LIBDIR
=$(call ext-prefix
,$1)/lib
/pkgconfig \
339 $(PKG_CONFIG
) $(PCOPT.
$3) $2)
342 APKLIBS
+= libtripe.so
343 libtripe.so_SRCS
= jni.c
344 libtripe.so_EXTS
= mLib catacomb tripe
345 libtripe.so_CFLAGS
= -I
$(call ext-prefix
,$1)/include \
346 -I
$(call ext-srcdir
,tripe
)/common \
347 -I
$(call ext-srcdir
,tripe
)/priv \
348 -I
$(call ext-srcdir
,tripe
)/server \
349 -I
$(call ext-builddir
,$1,tripe
)/config \
350 $(call pkg-config
,$1,mLib
,CFLAGS
) \
351 $(call pkg-config
,$1,catacomb
,CFLAGS
)
352 libtripe.so_LIBS
= $(call ext-builddir
,$1,tripe
)/server
/libtripe.a \
353 $(call ext-builddir
,$1,tripe
)/priv
/libpriv.a \
354 $(call ext-builddir
,$1,tripe
)/common
/libcommon.a \
355 -L
$(call ext-prefix
,$1)/lib \
356 $(call pkg-config
,$1,catacomb
,LIBS
) \
357 $(call pkg-config
,$1,mLib
,LIBS
) \
360 ## Machinery for compiling.
361 objdir
= $(OUTDIR
)/obj.
$1
362 objects
= $(patsubst %.c
,$(call objdir
,$1)/%$3,$2)
364 apklib-objects
= $(call objects
,$1,$($2_SRCS),$3)
365 obj-base
= $(patsubst $(OUTDIR
)/obj.
%.o
,%,$1)
366 obj-type
= $(patsubst %/,%,$(dir $(call obj-base
,$1)))
367 obj-name
= $(notdir $(call obj-base
,$1))
368 obj-tool
= $(call tool
,$(call obj-type
,$1),$2)
371 $1_OBJS := $$(foreach f
,$$(FLAVOURS
),\
372 $$(call objects
,$$f,$$($1_SRCS),.o
))
373 DEPFILES
+= $$(foreach f
,$$(FLAVOURS
),\
374 $$(call objects
,$$f,$$($1_SRCS),.d
))
375 $$($1_OBJS): $$(OUTDIR
)/obj.
%.o
: \
376 $$$$(call obj-name
,$$$$@
).c \
377 $$$$(call stamps
,$$$$(call obj-type
,$$$$@
),$$$$($1_EXTS))
378 $$(V_AT
)mkdir
-p
$$(dir $$@
)
379 $$(call v_tag
,CC
)$$(call obj-tool
,$$@
,ENV
) \
380 $$(call obj-tool
,$$@
,CC
) -c
-o
$$@
-MD \
381 $$(call obj-tool
,$$@
,CFLAGS
) \
382 $$(call
$1_CFLAGS,$$(call obj-type
,$$@
)) \
385 $(foreach a
,$(APKLIBS
), $(eval
$(call obj-rule
,$a)))
387 CLEANFILES
+= $(OUTDIR
)/obj.
*/*.o
$(OUTDIR
)/obj.
*/*.d
389 ## Machinery for linking.
390 JNIDIR.host-
$(hostcpu
) = $(OUTDIR
)/lib.host-
$(hostcpu
)
391 JNIDIR.ndk
= $(OUTDIR
)/pkg
/lib
/$1
394 INSTFILES
+= $$(call tool
,$1,JNIDIR
)/$2
395 $$(call tool
,$1,JNIDIR
)/$2: $$(call objects
,$$f,$$($2_SRCS),.o
)
396 $$(V_AT
)mkdir
-p
$$(dir $$@
)
397 $$(call v_tag
,LD
)$$(call tool
,$1,ENV
) \
398 $$(call tool
,$1,LD
) -o
$$@ \
399 $$(call tool
,$1,LDFLAGS
) -shared \
404 $(foreach f
,$(FLAVOURS
), \
405 $(foreach a
,$(APKLIBS
), \
406 $(eval
$(call apklib-rule
,$f,$a))))
408 CLEANFILES
+= $(OUTDIR
)/pkg
/lib
/*/lib
*.so
409 CLEANFILES
+= $(OUTDIR
)/lib.host-
$(hostcpu
)/lib
*.so
411 ###--------------------------------------------------------------------------
412 ### Android string resource generation.
414 GENSTRINGS
+= package
=PACKAGE
415 GENSTRINGS
+= version
=VERSION
416 GENSTRINGS
+= vsn
=VSN
418 $(foreach e
,$(EXTERNALS
),\
419 $(eval GENSTRINGS
+= $e_version=$e_VERSION))
421 BUILD
:= $(shell uuid
-v4
)
422 GENSTRINGS
+= build_uuid
=BUILD
424 genstring-name
= $(firstword $(subst =, ,$1))
425 genstring-value
= $($(word 2,$(subst =, ,$1)))
428 $(V_AT
)mkdir
-p
$(dir $1)
429 $(call v_tag
,GEN
)set
-e
; rm -f
$1.new
; exec
>$1.new
; \
430 echo
"<?xml version=\"1.0\" encoding=\"utf-8\"?>"; \
431 echo
"<resources>"; \
432 $(foreach g
,$(GENSTRINGS
), \
433 echo
" <string name=\"auto_$(call genstring-name,$g)\">$(call genstring-value,$g)</string>";) \
437 $(OUTDIR
)/res.dummy
/values
/auto.xml
: Makefile
438 $(call gen-strings
,$@
)
440 ###--------------------------------------------------------------------------
441 ### Java and Scala building.
443 JARDIR
= $(OUTDIR
)/jar
444 CLASSDIR
= $(OUTDIR
)/cls
446 ## External libraries we need to adopt. Grab them and feed them to `dx'
447 ## separately, because they take aaaaages and we don't want to have to do
448 ## this on every incremental build.
453 DEXJARS
+= $$(JARDIR
)/$$(notdir $1)
454 $$(JARDIR
)/$$(notdir $1): $1
455 $$(V_AT
)mkdir
-p
$$(JARDIR
)/
456 $$(V_AT
)rm -f
$$@
$$(basename $$@
)-new.jar
457 $$(call v_tag
,DX
)dx
--dex
--output
=$$(basename $$@
)-new.jar
$1
458 $$(V_AT
)mv
$$(basename $$@
)-new.jar
$$@
460 $(foreach j
,$(JARS
), $(eval
$(call jar-rule
,$j)))
462 REALCLEANFILES
+= $(JARDIR
)/*.jar
464 ## Writing things out longhand is tedious. `CLASSES' is a list of entries of
465 ## the form `SRC[:DEP,...]', saying that `SRC.ext', being a source file
466 ## capable of being built into `.class' files and setting `SRC.class-stamp',
467 ## should be so built, and that it depends on other similar sources named DEP
468 ## having been so built.
471 CLASSES
+= admin
:sys
,util
474 CLASSES
+= progress
:sys
,util
475 CLASSES
+= keys
:progress
,tar,sys
,util
476 CLASSES
+= terminal
:progress
,sys
,util
479 CLASSES
+= toy-activity
:app
,R
481 ## Building class files.
482 $(STAMPDIR
)/%.class-stamp
: %.java
483 $(V_AT
)mkdir
-p
$(CLASSDIR
)/
484 $(call v_tag
,JAVAC
)$(JAVAC
) $(JAVAFLAGS
) \
485 -bootclasspath
$(ANDROID_JAR
) \
486 -d
$(CLASSDIR
) -cp
$(CLASSDIR
) \
488 $(V_AT
)$(SCALAC_RESET
)
490 $(STAMPDIR
)/%.class-stamp
: %.scala
491 $(V_AT
)mkdir
-p
$(CLASSDIR
)/
492 $(call v_tag
,SCALAC
)$(SCALAC
) $(SCALAFLAGS
) \
493 -javabootclasspath
$(ANDROID_JAR
) \
494 -bootclasspath
$(SCALA_LIB
) \
495 -d
$(CLASSDIR
) -cp
$(CLASSDIR
) \
499 ## Machinery for parsing the `CLASSES' list.
500 class-name
= $(firstword $(subst :, ,$1))
501 class-deps
= $(subst $(comma
), ,$(word 2,$(subst :, ,$1)))
503 CLASSNAMES
= $(foreach c
,$(CLASSES
),$(call class-name
,$c))
504 CLASSSTAMPS
= $(call stamps
,class
,$(CLASSNAMES
))
506 $(foreach c
,$(CLASSES
), \
507 $(eval
$(call stamps
,class
,$(call class-name
,$c)): \
508 $(call stamps
,class
,$(call class-deps
,$c))))
510 CLEANFILES
+= $(CLASSSTAMPS
)
511 clean::; rm -rf
$(OUTDIR
)/cls
513 ###--------------------------------------------------------------------------
514 ### Android building machinery.
516 VPATH
+= $(OUTDIR
)/src
517 CLEANFILES
+= $(OUTDIR
)/*.apk
520 --min-sdk-version
$(MINAPI
) --target-sdk-version
$(TARGETAPI
) \
521 --version-name
"$(VERSION)" --version-code
$(VSN
) --auto-add-overlay
523 $(OUTDIR
)/src
/R.java
: AndroidManifest.xml
$(OUTDIR
)/res.dummy
/values
/auto.xml
524 $(V_AT
)mkdir
-p
$(dir $@
)
525 $(call v_tag
,AAPT
)aapt package
$(AAPTFLAGS
) \
526 -M AndroidManifest.xml
-S res
/ -S
$(OUTDIR
)/res.dummy
/ \
528 -J
$(dir $@
) --generate-dependencies
529 CLEANFILES
+= $(OUTDIR
)/src
/R.java
$(OUTDIR
)/src
/R.java.d
530 -include $(OUTDIR
)/src
/R.java.d
532 BINS
= catsign key pathmtu
533 CLEANFILES
+= $(INSTFILES
)
535 INSTFILES
+= $$(OUTDIR
)/pkg
/assets
/bin
/$1/$2
536 $$(OUTDIR
)/pkg
/assets
/bin
/$1/$2: $$$$(call ext-stamps
,$$$$(EXTERNALS
),$1)
537 $$(V_AT
)mkdir
-p
$$(dir $$@
)
538 $$(call v_tag
,CP
)cp
$$(call ext-prefix
,$1)/bin
/$2 $$@
540 $(foreach f
,$(ANDROID_ABIS
), \
541 $(foreach b
,$(BINS
), \
542 $(eval
$(call bin-rule
,$f,$b))))
544 DISTCLEANFILES
+= debug.keystore
546 $(call v_tag
,KEYTOOL
)keytool
-genkeypair
-alias debug \
547 -keyalg RSA
-keysize
3072 \
548 -dname
"$(DEBUGDN)" -validity
10000 \
549 -keystore
$@
-storetype PKCS12 \
550 -storepass public
-keypass public
552 INSTFILES
+= $(OUTDIR
)/pkg
/classes.dex
553 $(OUTDIR
)/pkg
/classes.dex
: $(CLASSSTAMPS
) $(DEXJARS
)
554 $(V_AT
)mkdir
-p
$(dir $@
)
555 $(call v_tag
,DX
)dx
--dex
--output
=$@
$(CLASSDIR
) $(JARDIR
)
557 $(OUTDIR
)/res.volatile
/values
/auto.xml
: $(INSTFILES
)
558 $(call gen-strings
,$@
)
560 $(foreach v
,$(VARIANTS
),$(OUTDIR
)/tripe-
$v.unsigned.apk
): \
561 $(OUTDIR
)/tripe-
%.unsigned.apk
: $(INSTFILES
) $(OUTDIR
)/res.volatile
/values
/auto.xml
562 $(call v_tag
,AAPT
)aapt package
-f
$(AAPTFLAGS
) $(AAPTFLAGS.
$*) \
563 -M AndroidManifest.xml
-S res
/ -S
$(OUTDIR
)/res.volatile
/ \
564 -I
$(ANDROID_JAR
) -F
$@
$(OUTDIR
)/pkg
/
566 $(foreach v
,$(VARIANTS
),$(OUTDIR
)/tripe-
$v.signed.apk
): \
567 $(OUTDIR
)/tripe-
%.signed.apk
: $(OUTDIR
)/tripe-
%.unsigned.apk
$$(KEYSTORE.
$$*)
568 $(call v_tag
,JARSIGN
)jarsigner
-keystore
$(KEYSTORE.
$*) \
569 $(JARSIGNERFLAGS.
$*) \
570 -signedjar
$@
$< $(call defaulting
,KEYALIAS.
$*,$*)
572 $(foreach v
,$(VARIANTS
),$(OUTDIR
)/tripe-
$v.apk
): \
573 $(OUTDIR
)/tripe-
%.apk
: $(OUTDIR
)/tripe-
%.signed.apk
574 $(call v_tag
,ZIPALGN
)zipalign
$(ZIPALIGNFLAGS.
$*) -f
4 $< $@
576 $(VARIANTS
): %: $(OUTDIR
)/tripe-
%.apk
579 ###--------------------------------------------------------------------------
580 ### Finishing touches.
584 clean::; rm -f
$(CLEANFILES
)
585 realclean::; rm -f
$(REALCLEANFILES
)
587 repl
: $(CLASSSTAMPS
) $(foreach a
,$(APKLIBS
),$(JNIDIR.host-
$(hostcpu
))/$a)
588 $(SCALA
) -cp
$(CLASSDIR
) -Yno-load-impl-class \
589 -Djava.library.path
=$(JNIDIR.host-
$(hostcpu
)) \
596 ###----- That's all, folks --------------------------------------------------