Add gradle wrapper (#4954)
[oweals/minetest.git] / build / android / Makefile
1 # build options
2
3 OS := $(shell uname)
4
5 # compile with GPROF
6 # GPROF = 1
7
8 # build for build platform
9 APP_PLATFORM = android-9
10
11 ANDR_ROOT = $(shell pwd)
12 PROJ_ROOT = $(shell realpath $(ANDR_ROOT)/../..)
13 APP_ROOT = $(ANDR_ROOT)/src/main
14
15 GAMES_TO_COPY = minetest_game
16 MODS_TO_COPY =
17
18
19 VERSION_MAJOR := $(shell cat $(PROJ_ROOT)/CMakeLists.txt | \
20         grep ^set\(VERSION_MAJOR\ | sed 's/)/ /' | cut -f2 -d' ')
21 VERSION_MINOR := $(shell cat $(PROJ_ROOT)/CMakeLists.txt | \
22         grep ^set\(VERSION_MINOR\ | sed 's/)/ /' | cut -f2 -d' ')
23 VERSION_PATCH := $(shell cat $(PROJ_ROOT)/CMakeLists.txt | \
24         grep ^set\(VERSION_PATCH\ | sed 's/)/ /' | cut -f2 -d' ')
25
26 ################################################################################
27 # toolchain config for arm new processors
28 ################################################################################
29 TARGET_HOST = arm-linux
30 TARGET_ABI = armeabi-v7a
31 TARGET_LIBDIR = armeabi-v7a
32 TARGET_TOOLCHAIN = arm-linux-androideabi-
33 TARGET_CFLAGS_ADDON = -mfloat-abi=softfp -mfpu=vfpv3 -O3
34 TARGET_CXXFLAGS_ADDON = $(TARGET_CFLAGS_ADDON)
35 TARGET_ARCH = armv7
36 CROSS_PREFIX = arm-linux-androideabi-
37 COMPILER_VERSION = 4.9
38 HAVE_LEVELDB = 1
39
40 ################################################################################
41 # toolchain config for little endian mips
42 ################################################################################
43 #TARGET_HOST = mipsel-linux
44 #TARGET_ABI = mips
45 #TARGET_LIBDIR = mips
46 #TARGET_TOOLCHAIN = mipsel-linux-android-
47 #TARGET_ARCH = mips32
48 #CROSS_PREFIX = mipsel-linux-android-
49 #COMPILER_VERSION = 4.9
50 #HAVE_LEVELDB = 0
51
52 ################################################################################
53 # toolchain config for x86
54 ################################################################################
55 #TARGET_HOST = x86-linux
56 #TARGET_ABI = x86
57 #TARGET_LIBDIR = x86
58 #TARGET_TOOLCHAIN = x86-
59 #CROSS_PREFIX = i686-linux-android-
60 #TARGET_ARCH = x86
61 #COMPILER_VERSION = 4.9
62 #HAVE_LEVELDB = 1
63
64 ################################################################################
65 ASSETS_TIMESTAMP = deps/assets_timestamp
66
67 LEVELDB_DIR = $(ANDR_ROOT)/deps/leveldb/
68 LEVELDB_LIB = $(LEVELDB_DIR)libleveldb.a
69 LEVELDB_TIMESTAMP = $(LEVELDB_DIR)/timestamp
70 LEVELDB_TIMESTAMP_INT = $(ANDR_ROOT)/deps/leveldb_timestamp
71 LEVELDB_URL_GIT = https://github.com/google/leveldb
72 LEVELDB_COMMIT = 2d0320a458d0e6a20fff46d5f80b18bfdcce7018
73
74 OPENAL_DIR = $(ANDR_ROOT)/deps/openal-soft/
75 OPENAL_LIB = $(OPENAL_DIR)libs/$(TARGET_ABI)/libopenal.so
76 OPENAL_TIMESTAMP = $(OPENAL_DIR)/timestamp
77 OPENAL_TIMESTAMP_INT = $(ANDR_ROOT)/deps/openal_timestamp
78 OPENAL_URL_GIT = https://github.com/apportable/openal-soft
79
80 OGG_DIR = $(ANDR_ROOT)/deps/libvorbis-libogg-android/
81 OGG_LIB = $(OGG_DIR)libs/$(TARGET_ABI)/libogg.so
82 VORBIS_LIB = $(OGG_DIR)libs/$(TARGET_ABI)/libogg.so
83 OGG_TIMESTAMP = $(OGG_DIR)timestamp
84 OGG_TIMESTAMP_INT = $(ANDR_ROOT)/deps/ogg_timestamp
85 OGG_URL_GIT = https://github.com/vincentjames501/libvorbis-libogg-android
86
87 IRRLICHT_REVISION = 5122
88 IRRLICHT_DIR = $(ANDR_ROOT)/deps/irrlicht/
89 IRRLICHT_LIB = $(IRRLICHT_DIR)lib/Android/libIrrlicht.a
90 IRRLICHT_TIMESTAMP = $(IRRLICHT_DIR)timestamp
91 IRRLICHT_TIMESTAMP_INT = $(ANDR_ROOT)/deps/irrlicht_timestamp
92 IRRLICHT_URL_SVN = https://svn.code.sf.net/p/irrlicht/code/branches/ogl-es@$(IRRLICHT_REVISION)
93
94 OPENSSL_VERSION = 1.0.2j
95 OPENSSL_BASEDIR = openssl-$(OPENSSL_VERSION)
96 OPENSSL_DIR = $(ANDR_ROOT)/deps/$(OPENSSL_BASEDIR)/
97 OPENSSL_LIB = $(OPENSSL_DIR)/libssl.so.1.0.0
98 OPENSSL_TIMESTAMP = $(OPENSSL_DIR)timestamp
99 OPENSSL_TIMESTAMP_INT = $(ANDR_ROOT)/deps/openssl_timestamp
100 OPENSSL_URL = https://www.openssl.org/source/openssl-$(OPENSSL_VERSION).tar.gz
101
102 CURL_VERSION = 7.52.0
103 CURL_DIR = $(ANDR_ROOT)/deps/curl-$(CURL_VERSION)
104 CURL_LIB = $(CURL_DIR)/lib/.libs/libcurl.a
105 CURL_TIMESTAMP = $(CURL_DIR)/timestamp
106 CURL_TIMESTAMP_INT = $(ANDR_ROOT)/deps/curl_timestamp
107 CURL_URL_HTTP = https://curl.haxx.se/download/curl-${CURL_VERSION}.tar.bz2
108
109 GMP_VERSION = 6.1.2
110 GMP_DIR = $(ANDR_ROOT)/deps/gmp-$(GMP_VERSION)
111 GMP_LIB = $(GMP_DIR)/usr/lib/libgmp.so
112 GMP_TIMESTAMP = $(GMP_DIR)/timestamp
113 GMP_TIMESTAMP_INT = $(ANDR_ROOT)/deps/gmp_timestamp
114 GMP_URL_HTTP = https://gmplib.org/download/gmp/gmp-$(GMP_VERSION).tar.bz2
115
116 FREETYPE_DIR = $(ANDR_ROOT)/deps/freetype2-android/
117 FREETYPE_LIB = $(FREETYPE_DIR)/Android/obj/local/$(TARGET_ABI)/libfreetype2-static.a
118 FREETYPE_TIMESTAMP = $(FREETYPE_DIR)timestamp
119 FREETYPE_TIMESTAMP_INT = $(ANDR_ROOT)/deps/freetype_timestamp
120 FREETYPE_URL_GIT = https://github.com/cdave1/freetype2-android
121
122 ICONV_VERSION = 1.14
123 ICONV_DIR = $(ANDR_ROOT)/deps/libiconv/
124 ICONV_LIB = $(ICONV_DIR)/lib/.libs/libiconv.so
125 ICONV_TIMESTAMP = $(ICONV_DIR)timestamp
126 ICONV_TIMESTAMP_INT = $(ANDR_ROOT)/deps/iconv_timestamp
127 ICONV_URL_HTTP = https://ftp.gnu.org/pub/gnu/libiconv/libiconv-$(ICONV_VERSION).tar.gz
128
129 SQLITE3_FOLDER = sqlite-amalgamation-3150200
130 SQLITE3_URL = https://www.sqlite.org/2016/$(SQLITE3_FOLDER).zip
131
132 ANDROID_SDK = $(shell grep '^sdk\.dir' local.properties | sed 's/^.*=[[:space:]]*//')
133 ANDROID_NDK = $(shell grep '^ndk\.dir' local.properties | sed 's/^.*=[[:space:]]*//')
134 NDK_MODULE_PATH = $(ANDROID_NDK)/toolchains
135
136 #use interim target variable to switch leveldb on or off
137 ifeq ($(HAVE_LEVELDB),1)
138         LEVELDB_TARGET = $(LEVELDB_LIB)
139 endif
140
141 .PHONY : debug release reconfig delconfig \
142         leveldb_download clean_leveldb leveldb\
143         irrlicht_download clean_irrlicht irrlicht \
144         clean_assets assets sqlite3_download \
145         freetype_download clean_freetype freetype \
146         apk clean_apk \
147         clean_all clean prep_srcdir \
148         install_debug install_release envpaths all \
149         $(ASSETS_TIMESTAMP) $(LEVELDB_TIMESTAMP) \
150         $(OPENAL_TIMESTAMP) $(OGG_TIMESTAMP) \
151         $(IRRLICHT_TIMESTAMP) $(CURL_TIMESTAMP) \
152         $(OPENSSL_TIMESTAMP) \
153         $(ANDR_ROOT)/jni/src/android_version.h \
154         $(ANDR_ROOT)/jni/src/android_version_githash.h
155
156 debug : local.properties
157         export NDEBUG=;                                                            \
158         export BUILD_TYPE=debug;                                                   \
159         $(MAKE) apk
160
161 all : debug release
162
163 release : local.properties
164         @export NDEBUG=1;                                                          \
165         export BUILD_TYPE=release;                                                 \
166         $(MAKE) apk
167
168 reconfig: delconfig
169         @$(MAKE) local.properties
170
171 delconfig:
172         $(RM) local.properties
173
174 local.properties:
175         @echo "Please specify path of ANDROID NDK";                                \
176         echo "e.g. $$HOME/Android/ndk-r11c/";                                  \
177         read ANDROID_NDK ;                                                         \
178         if [ ! -d $$ANDROID_NDK ] ; then                                           \
179                 echo "$$ANDROID_NDK is not a valid folder";                            \
180                 exit 1;                                                                \
181         fi;                                                                        \
182         echo "ndk.dir = $$ANDROID_NDK" > local.properties;                         \
183         echo "Please specify path of ANDROID SDK";                                 \
184         echo "e.g. $$HOME/Android/sdk/";                                       \
185         read SDKFLDR ;                                                             \
186         if [ ! -d $$SDKFLDR ] ; then                                               \
187                 echo "$$SDKFLDR is not a valid folder";                                \
188                 exit 1;                                                                \
189         fi;                                                                        \
190         echo "sdk.dir = $$SDKFLDR" >> local.properties;
191
192
193 $(OPENAL_TIMESTAMP) : openal_download
194         @LAST_MODIF=$$(find ${OPENAL_DIR} -type f -printf '%T@ %p\n' | sort -n | tail -1 | cut -f2- -d" "); \
195         if [ $$(basename $$LAST_MODIF) != "timestamp" ] ; then                     \
196                 touch ${OPENAL_TIMESTAMP};                                            \
197         fi
198
199 openal_download :
200         @if [ ! -d ${OPENAL_DIR} ] ; then                                          \
201                 echo "openal sources missing, downloading...";                         \
202                 mkdir -p ${ANDR_ROOT}/deps;                                            \
203                 cd ${ANDR_ROOT}/deps ;                                                 \
204                 git clone ${OPENAL_URL_GIT} || exit 1;                                 \
205         fi
206
207 openal : $(OPENAL_LIB)
208
209 $(OPENAL_LIB): $(OPENAL_TIMESTAMP)
210         + @REFRESH=0;                                                                \
211         if [ ! -e ${OPENAL_TIMESTAMP_INT} ] ; then                                 \
212                 REFRESH=1;                                                             \
213         fi;                                                                        \
214         if [ ${OPENAL_TIMESTAMP} -nt ${OPENAL_TIMESTAMP_INT} ] ; then              \
215                 REFRESH=1;                                                             \
216         fi;                                                                        \
217         if [ $$REFRESH -ne 0 ] ; then                                              \
218         echo "changed timestamp for openal detected building...";                  \
219         cd ${OPENAL_DIR};                                                          \
220         ${ANDROID_NDK}/ndk-build NDEBUG=${NDEBUG}                                  \
221                 NDK_MODULE_PATH=${NDK_MODULE_PATH} APP_ABI=${TARGET_ABI}               \
222                 TARGET_ARCH_ABI=${TARGET_ABI} APP_PLATFORM=${APP_PLATFORM}             \
223                 PRIVATE_CC=${NDK_MODULE_PATH}/${TARGET_TOOLCHAIN}${COMPILER_VERSION}/prebuilt/linux-x86_64/bin/${TARGET_TOOLCHAIN}gcc \
224                 PRIVATE_CXX=${NDK_MODULE_PATH}/${TARGET_TOOLCHAIN}${COMPILER_VERSION}/prebuilt/linux-x86_64/bin/${TARGET_TOOLCHAIN}g++ \
225                 TARGET_CFLAGS+="${TARGET_CFLAGS_ADDON}"                                \
226                 TARGET_LDFLAGS+="${TARGET_LDFLAGS_ADDON}"                              \
227                 TARGET_CXXFLAGS+="${TARGET_CXXFLAGS_ADDON}" || exit 1;                 \
228         touch ${OPENAL_TIMESTAMP};                                                 \
229         touch ${OPENAL_TIMESTAMP_INT};                                             \
230         else                                                                       \
231                 echo "nothing to be done for openal";                                  \
232         fi
233
234 clean_openal :
235         $(RM) -rf ${OPENAL_DIR}
236
237 $(OGG_TIMESTAMP) : ogg_download
238         @LAST_MODIF=$$(find ${OGG_DIR} -type f -printf '%T@ %p\n' | sort -n | tail -1 | cut -f2- -d" "); \
239         if [ $$(basename $$LAST_MODIF) != "timestamp" ] ; then                     \
240                 touch ${OGG_TIMESTAMP};                                                \
241         fi
242
243 ogg_download :
244         @if [ ! -d ${OGG_DIR} ] ; then                                             \
245                 echo "ogg sources missing, downloading...";                            \
246                 mkdir -p ${ANDR_ROOT}/deps;                                            \
247                 cd ${ANDR_ROOT}/deps ;                                                 \
248                 git clone ${OGG_URL_GIT}|| exit 1;                                     \
249                 cd libvorbis-libogg-android ;                                          \
250                 patch -p1 < ${ANDR_ROOT}/patches/libvorbis-libogg-fpu.patch || exit 1; \
251                 sed -i 's-:-?-' jni/Application.mk;                                    \
252         fi
253
254 ogg : $(OGG_LIB)
255
256 $(OGG_LIB): $(OGG_TIMESTAMP)
257         + @REFRESH=0;                                                                \
258         if [ ! -e ${OGG_TIMESTAMP_INT} ] ; then                                    \
259                 echo "${OGG_TIMESTAMP_INT} doesn't exist";                             \
260                 REFRESH=1;                                                             \
261         fi;                                                                        \
262         if [ ${OGG_TIMESTAMP} -nt ${OGG_TIMESTAMP_INT} ] ; then                    \
263                 REFRESH=1;                                                             \
264         fi;                                                                        \
265         if [ $$REFRESH -ne 0 ] ; then                                              \
266         echo "changed timestamp for ogg detected building...";                     \
267         cd ${OGG_DIR};                                                             \
268         ${ANDROID_NDK}/ndk-build NDEBUG=${NDEBUG}                                  \
269                 NDK_MODULE_PATH=${NDK_MODULE_PATH}                                     \
270                 APP_ABI=${TARGET_ABI} APP_PLATFORM=${APP_PLATFORM}                     \
271                 PRIVATE_CC=${NDK_MODULE_PATH}/${TARGET_TOOLCHAIN}${COMPILER_VERSION}/prebuilt/linux-x86_64/bin/${TARGET_TOOLCHAIN}gcc \
272                 PRIVATE_CXX=${NDK_MODULE_PATH}/${TARGET_TOOLCHAIN}${COMPILER_VERSION}/prebuilt/linux-x86_64/bin/${TARGET_TOOLCHAIN}g++ \
273                 TARGET_CFLAGS+="${TARGET_CFLAGS_ADDON}"                                \
274                 TARGET_LDFLAGS+="${TARGET_LDFLAGS_ADDON}"                              \
275                 TARGET_CXXFLAGS+="${TARGET_CXXFLAGS_ADDON}" || exit 1;                 \
276         touch ${OGG_TIMESTAMP};                                                    \
277         touch ${OGG_TIMESTAMP_INT};                                                \
278         else                                                                       \
279                 echo "nothing to be done for libogg/libvorbis";                        \
280         fi
281
282 clean_ogg :
283         $(RM) -rf ${OGG_DIR}
284
285 $(OPENSSL_TIMESTAMP) : openssl_download
286         @LAST_MODIF=$$(find ${OPENSSL_DIR} -type f -printf '%T@ %p\n' | sort -n | tail -1 | cut -f2- -d" "); \
287         if [ $$(basename $$LAST_MODIF) != "timestamp" ] ; then                     \
288                 touch ${OPENSSL_TIMESTAMP};                                            \
289         fi
290
291 openssl_download :
292         @if [ ! -d ${OPENSSL_DIR} ] ; then                                         \
293                 echo "openssl sources missing, downloading...";                        \
294                 mkdir -p ${ANDR_ROOT}/deps;                                            \
295                 cd ${ANDR_ROOT}/deps ;                                                 \
296                 wget ${OPENSSL_URL} || exit 1;                                         \
297                 tar -xzf ${OPENSSL_BASEDIR}.tar.gz;                                    \
298                 cd ${OPENSSL_BASEDIR};                                                 \
299                 patch -p1 < ${ANDR_ROOT}/patches/openssl_arch.patch;                   \
300         fi
301
302 openssl : $(OPENSSL_LIB)
303
304 $(OPENSSL_LIB): $(OPENSSL_TIMESTAMP) $(GMP_LIB)
305         @REFRESH=0;                                                                \
306         if [ ! -e ${OPENSSL_TIMESTAMP_INT} ] ; then                                \
307                 echo "${OPENSSL_TIMESTAMP_INT} doesn't exist";                         \
308                 REFRESH=1;                                                             \
309         fi;                                                                        \
310         if [ ${OPENSSL_TIMESTAMP} -nt ${OPENSSL_TIMESTAMP_INT} ] ; then            \
311                 REFRESH=1;                                                             \
312         fi;                                                                        \
313         if [ $$REFRESH -ne 0 ] ; then                                              \
314         echo "changed timestamp for openssl detected building...";                 \
315         cd ${OPENSSL_DIR};                                                         \
316         ln -s ${OPENSSL_DIR} ../openssl;                                           \
317         export TOOLCHAIN=/tmp/ndk-${TARGET_HOST}-openssl;                          \
318         ${ANDROID_NDK}/build/tools/make-standalone-toolchain.sh                    \
319                 --toolchain=${TARGET_TOOLCHAIN}${COMPILER_VERSION}                     \
320                 --platform=android-9                                                   \
321                 --install-dir=$${TOOLCHAIN};                                           \
322         export PATH="$${TOOLCHAIN}/bin:$${PATH}";                                  \
323         CC=${CROSS_PREFIX}gcc ./Configure enable-gmp -DL_ENDIAN -I${GMP_DIR} -L${GMP_DIR}/usr/lib android-${TARGET_ARCH};\
324         CC=${CROSS_PREFIX}gcc ANDROID_DEV=/tmp/ndk-${TARGET_HOST} make depend;     \
325         CC=${CROSS_PREFIX}gcc ANDROID_DEV=/tmp/ndk-${TARGET_HOST} make build_libs; \
326         touch ${OPENSSL_TIMESTAMP};                                                \
327         touch ${OPENSSL_TIMESTAMP_INT};                                            \
328         $(RM) -rf $${TOOLCHAIN};                                                   \
329         else                                                                       \
330                 echo "nothing to be done for openssl";                        \
331         fi
332
333 clean_openssl :
334         $(RM) -rf ${OPENSSL_DIR};                                                  \
335         $(RM) -rf $(ANDR_ROOT)/deps/${OPENSSL_BASEDIR}.tar.gz;                     \
336         $(RM) -rf $(ANDR_ROOT)/deps/openssl
337
338 $(LEVELDB_TIMESTAMP) : leveldb_download
339         @LAST_MODIF=$$(find ${LEVELDB_DIR} -type f -printf '%T@ %p\n' | sort -n | tail -1 | cut -f2- -d" "); \
340         if [ $$(basename $$LAST_MODIF) != "timestamp" ] ; then                     \
341                 touch ${LEVELDB_TIMESTAMP};                                            \
342         fi
343
344 leveldb_download :
345         @if [ ! -d ${LEVELDB_DIR} ] ; then                                         \
346                 echo "leveldb sources missing, downloading...";                        \
347                 mkdir -p ${ANDR_ROOT}/deps;                                            \
348                 cd ${ANDR_ROOT}/deps ;                                                 \
349                 git clone ${LEVELDB_URL_GIT} || exit 1;                                \
350                 cd ${LEVELDB_DIR} || exit 1;                                           \
351                 git checkout ${LEVELDB_COMMIT} || exit 1;                              \
352         fi
353
354 leveldb : $(LEVELDB_LIB)
355
356 $(LEVELDB_LIB): $(LEVELDB_TIMESTAMP)
357         @REFRESH=0;                                                                \
358         if [ ! -e ${LEVELDB_TIMESTAMP_INT} ] ; then                                \
359                 REFRESH=1;                                                             \
360         fi;                                                                        \
361         if [ ${LEVELDB_TIMESTAMP} -nt ${LEVELDB_TIMESTAMP_INT} ] ; then            \
362                 REFRESH=1;                                                             \
363         fi;                                                                        \
364         if [ $$REFRESH -ne 0 ] ; then                                              \
365         echo "changed timestamp for leveldb detected building...";                 \
366         cd deps/leveldb;                                                           \
367         export CROSS_PREFIX=${CROSS_PREFIX};                                       \
368         export TOOLCHAIN=/tmp/ndk-${TARGET_HOST}-leveldb;                          \
369         ${ANDROID_NDK}/build/tools/make-standalone-toolchain.sh                    \
370                 --toolchain=${TARGET_TOOLCHAIN}${COMPILER_VERSION}                     \
371                 --platform=android-9                                                   \
372                 --install-dir=$${TOOLCHAIN};                                           \
373         export PATH="$${TOOLCHAIN}/bin:$${PATH}";                                  \
374         export CC=${CROSS_PREFIX}gcc;                                              \
375         export CXX=${CROSS_PREFIX}g++;                                             \
376         export CFLAGS="$${CFLAGS} ${TARGET_CFLAGS_ADDON}";                         \
377         export CPPFLAGS="$${CPPFLAGS} ${TARGET_CXXFLAGS_ADDON}";                     \
378         export LDFLAGS="$${LDFLAGS} ${TARGET_LDFLAGS_ADDON}";                      \
379         export TARGET_OS=OS_ANDROID_CROSSCOMPILE;                                  \
380         $(MAKE) || exit 1;                                                      \
381         touch ${LEVELDB_TIMESTAMP};                                                \
382         touch ${LEVELDB_TIMESTAMP_INT};                                            \
383         $(RM) -rf $${TOOLCHAIN};                                                   \
384         else                                                                       \
385                 echo "nothing to be done for leveldb";                                 \
386         fi
387
388 clean_leveldb :
389         $(RM) -rf deps/leveldb
390
391 $(FREETYPE_TIMESTAMP) : freetype_download
392         @LAST_MODIF=$$(find ${FREETYPE_DIR} -type f -printf '%T@ %p\n' | sort -n | tail -1 | cut -f2- -d" "); \
393         if [ $$(basename $$LAST_MODIF) != "timestamp" ] ; then                     \
394                 touch ${FREETYPE_TIMESTAMP};                                           \
395         fi
396
397 freetype_download :
398         @if [ ! -d ${FREETYPE_DIR} ] ; then                                        \
399                 echo "freetype sources missing, downloading...";                       \
400                 mkdir -p ${ANDR_ROOT}/deps;                                            \
401                 cd deps;                                                               \
402                 git clone ${FREETYPE_URL_GIT} || exit 1;                               \
403         fi
404
405 freetype : $(FREETYPE_LIB)
406
407 $(FREETYPE_LIB) : $(FREETYPE_TIMESTAMP)
408         + @REFRESH=0;                                                                \
409         if [ ! -e ${FREETYPE_TIMESTAMP_INT} ] ; then                               \
410                 REFRESH=1;                                                             \
411         fi;                                                                        \
412         if [ ! -e ${FREETYPE_LIB} ] ; then                                         \
413                 REFRESH=1;                                                             \
414         fi;                                                                        \
415         if [ ${FREETYPE_TIMESTAMP} -nt ${FREETYPE_TIMESTAMP_INT} ] ; then          \
416                 REFRESH=1;                                                             \
417         fi;                                                                        \
418         if [ $$REFRESH -ne 0 ] ; then                                              \
419         mkdir -p ${FREETYPE_DIR};                                                  \
420         echo "changed timestamp for freetype detected building...";                \
421         cd ${FREETYPE_DIR}/Android/jni;                                            \
422         ${ANDROID_NDK}/ndk-build NDEBUG=${NDEBUG}                                  \
423                 NDK_MODULE_PATH=${NDK_MODULE_PATH}                                     \
424                 APP_PLATFORM=${APP_PLATFORM} APP_ABI=${TARGET_ABI}                     \
425                 PRIVATE_CC=${NDK_MODULE_PATH}/${TARGET_TOOLCHAIN}${COMPILER_VERSION}/prebuilt/linux-x86_64/bin/${TARGET_TOOLCHAIN}gcc \
426                 PRIVATE_CXX=${NDK_MODULE_PATH}/${TARGET_TOOLCHAIN}${COMPILER_VERSION}/prebuilt/linux-x86_64/bin/${TARGET_TOOLCHAIN}g++ \
427                 TARGET_CFLAGS+="${TARGET_CFLAGS_ADDON}"                                \
428                 TARGET_LDFLAGS+="${TARGET_LDFLAGS_ADDON}"                              \
429                 TARGET_CXXFLAGS+="${TARGET_CXXFLAGS_ADDON}" || exit 1;                 \
430         touch ${FREETYPE_TIMESTAMP};                                               \
431         touch ${FREETYPE_TIMESTAMP_INT};                                           \
432         else                                                                       \
433                 echo "nothing to be done for freetype";                                \
434         fi
435
436 clean_freetype :
437         $(RM) -rf ${FREETYPE_DIR}
438
439 $(ICONV_TIMESTAMP) : iconv_download
440         @LAST_MODIF=$$(find ${ICONV_DIR} -type f -printf '%T@ %p\n' | sort -n | tail -1 | cut -f2- -d" "); \
441         if [ $$(basename $$LAST_MODIF) != "timestamp" ] ; then                     \
442                 touch ${ICONV_TIMESTAMP};                                           \
443         fi
444
445 iconv_download :
446         @if [ ! -d ${ICONV_DIR} ] ; then                                           \
447                 echo "iconv sources missing, downloading...";                      \
448                 mkdir -p ${ANDR_ROOT}/deps;                                        \
449                 cd ${ANDR_ROOT}/deps;                                              \
450                 wget ${ICONV_URL_HTTP} || exit 1;                                  \
451                 tar -xzf libiconv-${ICONV_VERSION}.tar.gz || exit 1;               \
452                 rm libiconv-${ICONV_VERSION}.tar.gz;                               \
453                 ln -s libiconv-${ICONV_VERSION} libiconv;                          \
454                 cd ${ICONV_DIR};                                                   \
455                 patch -p1 < ${ANDR_ROOT}/patches/libiconv_android.patch;           \
456                 patch -p1 < ${ANDR_ROOT}/patches/libiconv_stdio.patch;             \
457         fi
458
459 iconv : $(ICONV_LIB)
460
461 $(ICONV_LIB) : $(ICONV_TIMESTAMP)
462         @REFRESH=0;                                                                \
463         if [ ! -e ${ICONV_TIMESTAMP_INT} ] ; then                                  \
464                 REFRESH=1;                                                         \
465         fi;                                                                        \
466         if [ ! -e ${ICONV_LIB} ] ; then                                            \
467                 REFRESH=1;                                                         \
468         fi;                                                                        \
469         if [ ${ICONV_TIMESTAMP} -nt ${ICONV_TIMESTAMP_INT} ] ; then                \
470                 REFRESH=1;                                                         \
471         fi;                                                                        \
472         if [ $$REFRESH -ne 0 ] ; then                                              \
473         mkdir -p ${ICONV_DIR};                                                     \
474         echo "changed timestamp for iconv detected building...";                   \
475         cd ${ICONV_DIR};                                                           \
476         \
477         export TOOLCHAIN=/tmp/ndk-${TARGET_HOST}-iconv;                            \
478         ${ANDROID_NDK}/build/tools/make-standalone-toolchain.sh                    \
479                 --toolchain=${TARGET_TOOLCHAIN}${COMPILER_VERSION}                     \
480                 --platform=android-9                                                   \
481                 --install-dir=$${TOOLCHAIN};                                           \
482         export PATH="$${TOOLCHAIN}/bin:$${PATH}";                                  \
483         export CC=${CROSS_PREFIX}gcc;                                              \
484         export CXX=${CROSS_PREFIX}g++;                                             \
485         export TARGET_OS=OS_ANDROID_CROSSCOMPILE;                                  \
486         ./configure --host=${TARGET_HOST} || exit 1;                               \
487         sed -i 's/LIBICONV_VERSION_INFO) /LIBICONV_VERSION_INFO) -avoid-version /g' lib/Makefile; \
488         grep "iconv_LDFLAGS" src/Makefile;                                         \
489         $(MAKE) -s || exit 1;                                                      \
490         touch ${ICONV_TIMESTAMP};                                                  \
491         touch ${ICONV_TIMESTAMP_INT};                                              \
492         rm -rf ${TOOLCHAIN};                                                       \
493         else                                                                       \
494                 echo "nothing to be done for iconv";                               \
495         fi
496
497 clean_iconv :
498         $(RM) -rf ${ICONV_DIR}
499
500 #Note: Texturehack patch is required for gpu's not supporting color format
501 #      correctly. Known bad GPU:
502 #      -geforce on emulator
503 #      -Vivante Corporation GC1000 core (e.g. Galaxy Tab 3)
504
505 irrlicht_download :
506         @if [ ! -d "deps/irrlicht" ] ; then                                        \
507                 echo "irrlicht sources missing, downloading...";                       \
508                 mkdir -p ${ANDR_ROOT}/deps;                                            \
509                 cd deps;                                                               \
510                 svn co ${IRRLICHT_URL_SVN} irrlicht || exit 1;                         \
511                 cd irrlicht;                                                           \
512                 patch -p1 < ${ANDR_ROOT}/patches/irrlicht-touchcount.patch || exit 1;  \
513                 patch -p1 < ${ANDR_ROOT}/patches/irrlicht-back_button.patch || exit 1; \
514                 patch -p1 < ${ANDR_ROOT}/patches/irrlicht-texturehack.patch || exit 1; \
515         fi
516
517 $(IRRLICHT_TIMESTAMP) : irrlicht_download
518         @LAST_MODIF=$$(find ${IRRLICHT_DIR} -type f -printf '%T@ %p\n' | sort -n | tail -1 | cut -f2- -d" "); \
519         if [ $$(basename $$LAST_MODIF) != "timestamp" ] ; then                     \
520                 touch ${IRRLICHT_TIMESTAMP};                                           \
521         fi
522
523 irrlicht : $(IRRLICHT_LIB)
524
525 $(IRRLICHT_LIB): $(IRRLICHT_TIMESTAMP) $(FREETYPE_LIB)
526         + @REFRESH=0;                                                                \
527         if [ ! -e ${IRRLICHT_TIMESTAMP_INT} ] ; then                               \
528                 REFRESH=1;                                                             \
529         fi;                                                                        \
530         if [ ! -e ${IRRLICHT_LIB} ] ; then                                         \
531                 REFRESH=1;                                                             \
532         fi;                                                                        \
533         if [ ${IRRLICHT_TIMESTAMP} -nt ${IRRLICHT_TIMESTAMP_INT} ] ; then          \
534                 REFRESH=1;                                                             \
535         fi;                                                                        \
536         if [ $$REFRESH -ne 0 ] ; then                                              \
537         mkdir -p ${IRRLICHT_DIR};                                                  \
538         echo "changed timestamp for irrlicht detected building...";                \
539         cd deps/irrlicht/source/Irrlicht/Android;                                  \
540         ${ANDROID_NDK}/ndk-build NDEBUG=${NDEBUG}                                  \
541                 NDK_MODULE_PATH=${NDK_MODULE_PATH}                                     \
542                 APP_ABI=${TARGET_ABI} APP_PLATFORM=${APP_PLATFORM}                     \
543                 PRIVATE_CC=${NDK_MODULE_PATH}/${TARGET_TOOLCHAIN}${COMPILER_VERSION}/prebuilt/linux-x86_64/bin/${TARGET_TOOLCHAIN}gcc \
544                 PRIVATE_CXX=${NDK_MODULE_PATH}/${TARGET_TOOLCHAIN}${COMPILER_VERSION}/prebuilt/linux-x86_64/bin/${TARGET_TOOLCHAIN}g++ \
545                 TARGET_CFLAGS+="${TARGET_CFLAGS_ADDON}"                                \
546                 TARGET_LDFLAGS+="${TARGET_LDFLAGS_ADDON}"                              \
547                 TARGET_CXXFLAGS+="${TARGET_CXXFLAGS_ADDON}" || exit 1;                 \
548         touch ${IRRLICHT_TIMESTAMP};                                               \
549         touch ${IRRLICHT_TIMESTAMP_INT};                                           \
550         else                                                                       \
551                 echo "nothing to be done for irrlicht";                                \
552         fi
553
554 clean_irrlicht :
555         $(RM) -rf deps/irrlicht
556
557 $(CURL_TIMESTAMP) : curl_download
558         @LAST_MODIF=$$(find ${CURL_DIR} -type f -printf '%T@ %p\n' | sort -n | tail -1 | cut -f2- -d" "); \
559         if [ $$(basename $$LAST_MODIF) != "timestamp" ] ; then                     \
560                 touch ${CURL_TIMESTAMP};                                               \
561         fi
562
563 curl_download :
564         @if [ ! -d "deps/curl-${CURL_VERSION}" ] ; then                            \
565                 echo "curl sources missing, downloading...";                           \
566                 mkdir -p ${ANDR_ROOT}/deps;                                            \
567                 cd deps;                                                               \
568                 wget ${CURL_URL_HTTP} || exit 1;                                       \
569                 tar -xjf curl-${CURL_VERSION}.tar.bz2 || exit 1;                       \
570                 rm curl-${CURL_VERSION}.tar.bz2;                                       \
571                 ln -s curl-${CURL_VERSION} curl;                                       \
572         fi
573
574 curl : $(CURL_LIB)
575
576 $(CURL_LIB): $(CURL_TIMESTAMP) $(OPENSSL_LIB)
577         @REFRESH=0;                                                                \
578         if [ ! -e ${CURL_TIMESTAMP_INT} ] ; then                                   \
579                 REFRESH=1;                                                             \
580         fi;                                                                        \
581         if [ ! -e ${CURL_LIB} ] ; then                                             \
582                 REFRESH=1;                                                             \
583         fi;                                                                        \
584         if [ ${CURL_TIMESTAMP} -nt ${CURL_TIMESTAMP_INT} ] ; then                  \
585                 REFRESH=1;                                                             \
586         fi;                                                                        \
587         if [ $$REFRESH -ne 0 ] ; then                                              \
588         mkdir -p ${CURL_DIR};                                                      \
589         echo "changed timestamp for curl detected building...";                    \
590         cd deps/curl-${CURL_VERSION};                                              \
591         export CROSS_PREFIX=${CROSS_PREFIX};                                       \
592         export TOOLCHAIN=/tmp/ndk-${TARGET_HOST}-curl;                             \
593         ${ANDROID_NDK}/build/tools/make-standalone-toolchain.sh                    \
594                 --toolchain=${TARGET_TOOLCHAIN}${COMPILER_VERSION}                     \
595                 --platform=android-9                                                   \
596                 --install-dir=$${TOOLCHAIN};                                           \
597         export PATH="$${TOOLCHAIN}/bin:$${PATH}";                                  \
598         export CC=${CROSS_PREFIX}gcc;                                              \
599         export CXX=${CROSS_PREFIX}g++;                                             \
600         export TARGET_OS=OS_ANDROID_CROSSCOMPILE;                                  \
601         export CPPFLAGS="$${CPPFLAGS} -I${OPENSSL_DIR}/include ${TARGET_CFLAGS_ADDON}"; \
602         export CFLAGS="$${CFLAGS} ${TARGET_CFLAGS_ADDON}";                         \
603         export LDFLAGS="$${LDFLAGS} -L${OPENSSL_DIR} ${TARGET_LDFLAGS_ADDON}";     \
604         ./configure --host=${TARGET_HOST} --disable-shared --enable-static --with-ssl;  \
605         $(MAKE) -s || exit 1;                                                      \
606         touch ${CURL_TIMESTAMP};                                                   \
607         touch ${CURL_TIMESTAMP_INT};                                               \
608         $(RM) -rf $${TOOLCHAIN};                                                   \
609         else                                                                       \
610                 echo "nothing to be done for curl";                                    \
611         fi
612
613 clean_curl :
614         $(RM) -rf deps/curl-${CURL_VERSION}                                        \
615         $(RM) -f deps/curl
616
617 $(GMP_TIMESTAMP) : gmp_download
618         @LAST_MODIF=$$(find ${GMP_DIR} -type f -printf '%T@ %p\n' | sort -n | tail -1 | cut -f2- -d" "); \
619         if [ $$(basename $$LAST_MODIF) != "timestamp" ] ; then                     \
620                 touch ${GMP_TIMESTAMP};                                            \
621         fi
622
623 gmp_download :
624         @if [ ! -d "${GMP_DIR}" ] ; then                                           \
625                 echo "gmp sources missing, downloading...";                        \
626                 mkdir -p ${ANDR_ROOT}/deps;                                        \
627                 cd deps;                                                           \
628                 wget ${GMP_URL_HTTP} || exit 1;                                    \
629                 tar -xjf gmp-${GMP_VERSION}.tar.bz2 || exit 1;                     \
630                 rm gmp-${GMP_VERSION}.tar.bz2;                                     \
631                 ln -s gmp-${GMP_VERSION} gmp;                                      \
632         fi
633
634 gmp : $(GMP_LIB)
635
636 $(GMP_LIB): $(GMP_TIMESTAMP)
637         @REFRESH=0;                                                                \
638         if [ ! -e ${GMP_TIMESTAMP_INT} ] ; then                                    \
639                 REFRESH=1;                                                         \
640         fi;                                                                        \
641         if [ ! -e ${GMP_LIB} ] ; then                                              \
642                 REFRESH=1;                                                         \
643         fi;                                                                        \
644         if [ ${GMP_TIMESTAMP} -nt ${GMP_TIMESTAMP_INT} ] ; then                    \
645                 REFRESH=1;                                                         \
646         fi;                                                                        \
647         if [ $$REFRESH -ne 0 ] ; then                                              \
648         mkdir -p ${GMP_DIR};                                                       \
649         echo "changed timestamp for gmp detected building...";                     \
650         cd deps/gmp-${GMP_VERSION};                                                \
651         export CROSS_PREFIX=${CROSS_PREFIX};                                       \
652         export TOOLCHAIN=/tmp/ndk-${TARGET_HOST}-gmp;                              \
653         ${ANDROID_NDK}/build/tools/make-standalone-toolchain.sh                    \
654                 --toolchain=${TARGET_TOOLCHAIN}${COMPILER_VERSION}                     \
655                 --platform=android-9                                                   \
656                 --install-dir=$${TOOLCHAIN};                                           \
657         export PATH="$${TOOLCHAIN}/bin:$${PATH}";                                  \
658         export CC=${CROSS_PREFIX}gcc;                                              \
659         export CXX=${CROSS_PREFIX}g++;                                             \
660         export LIBGMP_LDFLAGS="-avoid-version";                                    \
661         export LIBGMPXX_LDFLAGS="-avoid-version";                                  \
662         ./configure --disable-static --host=${TARGET_HOST} --prefix=/usr;          \
663         $(MAKE) install DESTDIR=/${GMP_DIR} || exit 1;                             \
664         touch ${GMP_TIMESTAMP};                                                    \
665         touch ${GMP_TIMESTAMP_INT};                                                \
666         $(RM) -rf $${TOOLCHAIN};                                                   \
667         else                                                                       \
668                 echo "nothing to be done for gmp";                                 \
669         fi
670
671 clean_gmp:
672         $(RM) -rf deps/gmp-${GMP_VERSION}                                          \
673         $(RM) -f deps/gmp
674
675 sqlite3_download: deps/${SQLITE3_FOLDER}/sqlite3.c
676
677 deps/${SQLITE3_FOLDER}/sqlite3.c :
678         cd deps;                                                                    \
679         wget ${SQLITE3_URL};                                                        \
680         unzip ${SQLITE3_FOLDER}.zip;                                                \
681         ln -s ${SQLITE3_FOLDER} sqlite;                                             \
682         cd ${SQLITE3_FOLDER};                                                       \
683         patch sqlite3.c < ${ANDR_ROOT}/patches/sqlite3-readonly-fix.patch
684
685 clean_sqlite3:
686         cd deps && $(RM) -rf ${SQLITE3_FOLDER} && $(RM) -f ${SQLITE3_FOLDER}.zip && \
687         $(RM) -f sqlite
688
689 $(ASSETS_TIMESTAMP) : $(IRRLICHT_LIB)
690         @mkdir -p ${ANDR_ROOT}/deps;                                                \
691         for DIRNAME in {builtin,client,doc,fonts,games,mods,po,textures}; do        \
692                 LAST_MODIF=$$(find ${PROJ_ROOT}/${DIRNAME} -type f -printf '%T@ %p\n' | sort -n | tail -1 | cut -f2- -d" "); \
693                 if [ $$(basename $$LAST_MODIF) != "timestamp" ]; then               \
694                         touch ${PROJ_ROOT}/${DIRNAME}/timestamp;                   \
695                         touch ${ASSETS_TIMESTAMP};                                  \
696                         echo ${DIRNAME} changed $$LAST_MODIF;                       \
697                 fi;                                                                 \
698         done;                                                                       \
699         LAST_MODIF=$$(find ${IRRLICHT_DIR}/media -type f -printf '%T@ %p\n' | sort -n | tail -1 | cut -f2- -d" "); \
700         if [ $$(basename $$LAST_MODIF) != "timestamp" ] ; then                     \
701                 touch ${IRRLICHT_DIR}/media/timestamp;                                 \
702                 touch ${ASSETS_TIMESTAMP};                                             \
703         fi;                                                                        \
704         if [ ${PROJ_ROOT}/minetest.conf.example -nt ${ASSETS_TIMESTAMP} ] ; then   \
705                 echo "conf changed";                                                   \
706                 touch ${ASSETS_TIMESTAMP};                                             \
707         fi;                                                                        \
708         if [ ${PROJ_ROOT}/README.txt -nt ${ASSETS_TIMESTAMP} ] ; then              \
709                 touch ${ASSETS_TIMESTAMP};                                             \
710         fi;                                                                        \
711         if [ ! -e $(ASSETS_TIMESTAMP) ] ; then                                     \
712                 touch $(ASSETS_TIMESTAMP);                                             \
713         fi
714
715 assets : $(ASSETS_TIMESTAMP)
716         @REFRESH=0;                                                                \
717         if [ ! -e ${ASSETS_TIMESTAMP}.old ] ; then                                 \
718                 REFRESH=1;                                                             \
719         fi;                                                                        \
720         if [ ${ASSETS_TIMESTAMP} -nt ${ASSETS_TIMESTAMP}.old ] ; then              \
721                 REFRESH=1;                                                             \
722         fi;                                                                        \
723         if [ ! -d ${APP_ROOT}/assets ] ; then                                      \
724                 REFRESH=1;                                                             \
725         fi;                                                                        \
726         if [ $$REFRESH -ne 0 ] ; then                                              \
727         echo "assets changed, refreshing...";                                      \
728         $(MAKE) clean_assets;                                                      \
729         mkdir -p ${APP_ROOT}/assets/Minetest;                                      \
730         cp ${PROJ_ROOT}/minetest.conf.example ${APP_ROOT}/assets/Minetest;         \
731         cp ${PROJ_ROOT}/README.txt ${APP_ROOT}/assets/Minetest;                    \
732         cp -r ${PROJ_ROOT}/builtin ${APP_ROOT}/assets/Minetest;                    \
733         mkdir -p ${APP_ROOT}/assets/Minetest/client;                                  \
734         cp -r ${PROJ_ROOT}/client/shaders ${APP_ROOT}/assets/Minetest/client;      \
735         cp ${PROJ_ROOT}/doc/lgpl-2.1.txt ${APP_ROOT}/assets/Minetest/LICENSE.txt;  \
736         mkdir -p ${APP_ROOT}/assets/Minetest/fonts;                                   \
737         cp -r ${PROJ_ROOT}/fonts/*.ttf ${APP_ROOT}/assets/Minetest/fonts/;         \
738         mkdir -p ${APP_ROOT}/assets/Minetest/games;                                   \
739         for game in ${GAMES_TO_COPY}; do                                           \
740             cp -r ${PROJ_ROOT}/games/$$game ${APP_ROOT}/assets/Minetest/games/;    \
741         done;                                                                      \
742         mkdir -p ${APP_ROOT}/assets/Minetest/mods;                                    \
743         for mod in ${MODS_TO_COPY}; do                                             \
744             cp -r ${PROJ_ROOT}/mods/$$mod ${APP_ROOT}/assets/Minetest/mods/;       \
745         done;                                                                      \
746         cp -r ${PROJ_ROOT}/po ${APP_ROOT}/assets/Minetest;                         \
747         cp -r ${PROJ_ROOT}/textures ${APP_ROOT}/assets/Minetest;                   \
748         mkdir -p ${APP_ROOT}/assets/Minetest/media;                                \
749         cp -r ${IRRLICHT_DIR}/media/Shaders ${APP_ROOT}/assets/Minetest/media;     \
750         cd ${APP_ROOT}/assets ||  exit 1;                                          \
751         find . -name "timestamp" -exec rm {} \; ;                                  \
752         find . -name "*.blend" -exec rm {} \; ;                                    \
753         find . -name "*~" -exec rm {} \; ;                                         \
754         find . -type d -path "*.git" -exec rm -rf {} \; ;                          \
755         find . -type d -path "*.svn" -exec rm -rf {} \; ;                          \
756         find . -type f -path "*.gitignore" -exec rm -rf {} \; ;                    \
757         ls -R | grep ":$$" | sed -e 's/:$$//' -e 's/\.//' -e 's/^\///' > "index.txt"; \
758         find -L Minetest > filelist.txt;                                             \
759         cp ${ANDR_ROOT}/${ASSETS_TIMESTAMP} ${ANDR_ROOT}/${ASSETS_TIMESTAMP}.old;  \
760         else                                                                       \
761                 echo "nothing to be done for assets";                                  \
762         fi
763
764 clean_assets :
765         @$(RM) -r assets
766
767 apk: local.properties assets $(ICONV_LIB) $(IRRLICHT_LIB) $(CURL_LIB) $(GMP_LIB) $(LEVELDB_TARGET)       \
768         $(OPENAL_LIB) $(OGG_LIB) prep_srcdir $(ANDR_ROOT)/jni/src/android_version.h    \
769         $(ANDR_ROOT)/jni/src/android_version_githash.h sqlite3_download
770         + @${ANDROID_NDK}/ndk-build NDK_MODULE_PATH=${NDK_MODULE_PATH}             \
771                 GPROF=${GPROF} APP_ABI=${TARGET_ABI} HAVE_LEVELDB=${HAVE_LEVELDB}      \
772                 APP_PLATFORM=${APP_PLATFORM}                                           \
773                 PRIVATE_CC=${NDK_MODULE_PATH}/${TARGET_TOOLCHAIN}${COMPILER_VERSION}/prebuilt/linux-x86_64/bin/${TARGET_TOOLCHAIN}gcc \
774                 PRIVATE_CXX=${NDK_MODULE_PATH}/${TARGET_TOOLCHAIN}${COMPILER_VERSION}/prebuilt/linux-x86_64/bin/${TARGET_TOOLCHAIN}g++ \
775                 TARGET_LIBDIR=${TARGET_LIBDIR}                                         \
776                 TARGET_CFLAGS+="${TARGET_CFLAGS_ADDON}"                                \
777                 TARGET_LDFLAGS+="${TARGET_LDFLAGS_ADDON}"                              \
778                 TARGET_CXXFLAGS+="${TARGET_CXXFLAGS_ADDON}" || exit 1;                 \
779         if [ ! -e ${APP_ROOT}/jniLibs ]; then                                      \
780                 ln -s ${ANDR_ROOT}/libs ${APP_ROOT}/jniLibs || exit 1;                 \
781         fi;                                                                        \
782         export VERSION_STR="${VERSION_MAJOR}.${VERSION_MINOR}.${VERSION_PATCH}" && \
783         export BUILD_TYPE_C=$$(echo "$${BUILD_TYPE}" | sed 's/./\U&/') &&          \
784         ./gradlew assemble$$BUILD_TYPE_C &&                                           \
785         echo "APK stored at: build/outputs/apk/Minetest-$$BUILD_TYPE.apk" &&       \
786         echo "You can install it with \`make install_$$BUILD_TYPE\`"
787
788 # These Intentionally doesn't depend on their respective build steps,
789 # because it takes a while to verify that everything's up-to-date.
790 install_debug:
791         ${ANDROID_SDK}/platform-tools/adb install -r build/outputs/apk/Minetest-debug.apk
792
793 install_release:
794         ${ANDROID_SDK}/platform-tools/adb install -r build/outputs/apk/Minetest-release.apk
795
796 prep_srcdir :
797         @if [ ! -e ${ANDR_ROOT}/jni/src ]; then                                    \
798                 ln -s ${PROJ_ROOT}/src ${ANDR_ROOT}/jni/src;                           \
799         fi
800
801 clean_apk :
802         ./gradlew clean
803
804 clean_all :
805         @$(MAKE) clean_apk;                                                        \
806         $(MAKE) clean_assets clean_iconv clean_irrlicht clean_leveldb clean_curl   \
807         clean_openssl clean_openal clean_ogg clean_gmp;                            \
808         sleep 1;                                                                   \
809         $(RM) -r gen libs obj deps bin Debug and_env
810
811 $(ANDR_ROOT)/jni/src/android_version_githash.h : prep_srcdir
812         @export VERSION_FILE=${ANDR_ROOT}/jni/src/android_version_githash.h;        \
813         export VERSION_FILE_NEW=$${VERSION_FILE}.new;                              \
814         {                                                                          \
815         echo "#ifndef ANDROID_MT_VERSION_GITHASH_H";                               \
816         echo "#define ANDROID_MT_VERSION_GITHASH_H";                               \
817         export GITHASH=$$(git rev-parse --short=8 HEAD);                           \
818         export VERSION_STR="${VERSION_MAJOR}.${VERSION_MINOR}.${VERSION_PATCH}";   \
819         echo "#define VERSION_GITHASH \"$$VERSION_STR-$$GITHASH-Android\"";        \
820         echo "#endif";                                                             \
821         } > "$${VERSION_FILE_NEW}";                                                \
822         if ! cmp -s $${VERSION_FILE} $${VERSION_FILE_NEW}; then                    \
823                 echo "android_version_githash.h changed, updating...";             \
824                 mv "$${VERSION_FILE_NEW}" "$${VERSION_FILE}";                      \
825         else                                                                       \
826                 rm "$${VERSION_FILE_NEW}";                                         \
827         fi
828
829
830 $(ANDR_ROOT)/jni/src/android_version.h : prep_srcdir
831         @export VERSION_FILE=${ANDR_ROOT}/jni/src/android_version.h;                \
832         export VERSION_FILE_NEW=$${VERSION_FILE}.new;                              \
833         {                                                                          \
834         echo "#ifndef ANDROID_MT_VERSION_H";                                       \
835         echo "#define ANDROID_MT_VERSION_H";                                       \
836         echo "#define VERSION_MAJOR ${VERSION_MAJOR}";                             \
837         echo "#define VERSION_MINOR ${VERSION_MINOR}";                             \
838         echo "#define VERSION_PATCH ${VERSION_PATCH}";                             \
839         echo "#define VERSION_STRING STR(VERSION_MAJOR) \".\" STR(VERSION_MINOR) \
840         \".\" STR(VERSION_PATCH)";                                                 \
841         echo "#endif";                                                             \
842         } > $${VERSION_FILE_NEW};                                                  \
843         if ! cmp -s $${VERSION_FILE} $${VERSION_FILE_NEW}; then                    \
844                 echo "android_version.h changed, updating...";                     \
845                 mv "$${VERSION_FILE_NEW}" "$${VERSION_FILE}";                      \
846         else                                                                       \
847                 rm "$${VERSION_FILE_NEW}";                                         \
848         fi
849
850 clean : clean_apk clean_assets