Fix Android build since 2818d3f2244d2146a5cdb61cd41f6561c514f97c
[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 = 0
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 = 0
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 ifeq ($(HAVE_LEVELDB),1)
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 endif
388
389 clean_leveldb :
390         $(RM) -rf deps/leveldb
391
392 $(FREETYPE_TIMESTAMP) : freetype_download
393         @LAST_MODIF=$$(find ${FREETYPE_DIR} -type f -printf '%T@ %p\n' | sort -n | tail -1 | cut -f2- -d" "); \
394         if [ $$(basename $$LAST_MODIF) != "timestamp" ] ; then                     \
395                 touch ${FREETYPE_TIMESTAMP};                                           \
396         fi
397
398 freetype_download :
399         @if [ ! -d ${FREETYPE_DIR} ] ; then                                        \
400                 echo "freetype sources missing, downloading...";                       \
401                 mkdir -p ${ANDR_ROOT}/deps;                                            \
402                 cd deps;                                                               \
403                 git clone ${FREETYPE_URL_GIT} || exit 1;                               \
404         fi
405
406 freetype : $(FREETYPE_LIB)
407
408 $(FREETYPE_LIB) : $(FREETYPE_TIMESTAMP)
409         + @REFRESH=0;                                                                \
410         if [ ! -e ${FREETYPE_TIMESTAMP_INT} ] ; then                               \
411                 REFRESH=1;                                                             \
412         fi;                                                                        \
413         if [ ! -e ${FREETYPE_LIB} ] ; then                                         \
414                 REFRESH=1;                                                             \
415         fi;                                                                        \
416         if [ ${FREETYPE_TIMESTAMP} -nt ${FREETYPE_TIMESTAMP_INT} ] ; then          \
417                 REFRESH=1;                                                             \
418         fi;                                                                        \
419         if [ $$REFRESH -ne 0 ] ; then                                              \
420         mkdir -p ${FREETYPE_DIR};                                                  \
421         echo "changed timestamp for freetype detected building...";                \
422         cd ${FREETYPE_DIR}/Android/jni;                                            \
423         ${ANDROID_NDK}/ndk-build NDEBUG=${NDEBUG}                                  \
424                 NDK_MODULE_PATH=${NDK_MODULE_PATH}                                     \
425                 APP_PLATFORM=${APP_PLATFORM} APP_ABI=${TARGET_ABI}                     \
426                 PRIVATE_CC=${NDK_MODULE_PATH}/${TARGET_TOOLCHAIN}${COMPILER_VERSION}/prebuilt/linux-x86_64/bin/${TARGET_TOOLCHAIN}gcc \
427                 PRIVATE_CXX=${NDK_MODULE_PATH}/${TARGET_TOOLCHAIN}${COMPILER_VERSION}/prebuilt/linux-x86_64/bin/${TARGET_TOOLCHAIN}g++ \
428                 TARGET_CFLAGS+="${TARGET_CFLAGS_ADDON}"                                \
429                 TARGET_LDFLAGS+="${TARGET_LDFLAGS_ADDON}"                              \
430                 TARGET_CXXFLAGS+="${TARGET_CXXFLAGS_ADDON}" || exit 1;                 \
431         touch ${FREETYPE_TIMESTAMP};                                               \
432         touch ${FREETYPE_TIMESTAMP_INT};                                           \
433         else                                                                       \
434                 echo "nothing to be done for freetype";                                \
435         fi
436
437 clean_freetype :
438         $(RM) -rf ${FREETYPE_DIR}
439
440 $(ICONV_TIMESTAMP) : iconv_download
441         @LAST_MODIF=$$(find ${ICONV_DIR} -type f -printf '%T@ %p\n' | sort -n | tail -1 | cut -f2- -d" "); \
442         if [ $$(basename $$LAST_MODIF) != "timestamp" ] ; then                     \
443                 touch ${ICONV_TIMESTAMP};                                           \
444         fi
445
446 iconv_download :
447         @if [ ! -d ${ICONV_DIR} ] ; then                                           \
448                 echo "iconv sources missing, downloading...";                      \
449                 mkdir -p ${ANDR_ROOT}/deps;                                        \
450                 cd ${ANDR_ROOT}/deps;                                              \
451                 wget ${ICONV_URL_HTTP} || exit 1;                                  \
452                 tar -xzf libiconv-${ICONV_VERSION}.tar.gz || exit 1;               \
453                 rm libiconv-${ICONV_VERSION}.tar.gz;                               \
454                 ln -s libiconv-${ICONV_VERSION} libiconv;                          \
455                 cd ${ICONV_DIR};                                                   \
456                 patch -p1 < ${ANDR_ROOT}/patches/libiconv_android.patch;           \
457                 patch -p1 < ${ANDR_ROOT}/patches/libiconv_stdio.patch;             \
458         fi
459
460 iconv : $(ICONV_LIB)
461
462 $(ICONV_LIB) : $(ICONV_TIMESTAMP)
463         @REFRESH=0;                                                                \
464         if [ ! -e ${ICONV_TIMESTAMP_INT} ] ; then                                  \
465                 REFRESH=1;                                                         \
466         fi;                                                                        \
467         if [ ! -e ${ICONV_LIB} ] ; then                                            \
468                 REFRESH=1;                                                         \
469         fi;                                                                        \
470         if [ ${ICONV_TIMESTAMP} -nt ${ICONV_TIMESTAMP_INT} ] ; then                \
471                 REFRESH=1;                                                         \
472         fi;                                                                        \
473         if [ $$REFRESH -ne 0 ] ; then                                              \
474         mkdir -p ${ICONV_DIR};                                                     \
475         echo "changed timestamp for iconv detected building...";                   \
476         cd ${ICONV_DIR};                                                           \
477         \
478         export TOOLCHAIN=/tmp/ndk-${TARGET_HOST}-iconv;                            \
479         ${ANDROID_NDK}/build/tools/make-standalone-toolchain.sh                    \
480                 --toolchain=${TARGET_TOOLCHAIN}${COMPILER_VERSION}                     \
481                 --platform=android-9                                                   \
482                 --install-dir=$${TOOLCHAIN};                                           \
483         export PATH="$${TOOLCHAIN}/bin:$${PATH}";                                  \
484         export CC=${CROSS_PREFIX}gcc;                                              \
485         export CXX=${CROSS_PREFIX}g++;                                             \
486         export TARGET_OS=OS_ANDROID_CROSSCOMPILE;                                  \
487         ./configure --host=${TARGET_HOST} || exit 1;                               \
488         sed -i 's/LIBICONV_VERSION_INFO) /LIBICONV_VERSION_INFO) -avoid-version /g' lib/Makefile; \
489         grep "iconv_LDFLAGS" src/Makefile;                                         \
490         $(MAKE) -s || exit 1;                                                      \
491         touch ${ICONV_TIMESTAMP};                                                  \
492         touch ${ICONV_TIMESTAMP_INT};                                              \
493         rm -rf ${TOOLCHAIN};                                                       \
494         else                                                                       \
495                 echo "nothing to be done for iconv";                               \
496         fi
497
498 clean_iconv :
499         $(RM) -rf ${ICONV_DIR}
500
501 #Note: Texturehack patch is required for gpu's not supporting color format
502 #      correctly. Known bad GPU:
503 #      -geforce on emulator
504 #      -Vivante Corporation GC1000 core (e.g. Galaxy Tab 3)
505
506 irrlicht_download :
507         @if [ ! -d "deps/irrlicht" ] ; then                                        \
508                 echo "irrlicht sources missing, downloading...";                       \
509                 mkdir -p ${ANDR_ROOT}/deps;                                            \
510                 cd deps;                                                               \
511                 svn co ${IRRLICHT_URL_SVN} irrlicht || exit 1;                         \
512                 cd irrlicht;                                                           \
513                 patch -p1 < ${ANDR_ROOT}/patches/irrlicht-touchcount.patch || exit 1;  \
514                 patch -p1 < ${ANDR_ROOT}/patches/irrlicht-back_button.patch || exit 1; \
515                 patch -p1 < ${ANDR_ROOT}/patches/irrlicht-texturehack.patch || exit 1; \
516         fi
517
518 $(IRRLICHT_TIMESTAMP) : irrlicht_download
519         @LAST_MODIF=$$(find ${IRRLICHT_DIR} -type f -printf '%T@ %p\n' | sort -n | tail -1 | cut -f2- -d" "); \
520         if [ $$(basename $$LAST_MODIF) != "timestamp" ] ; then                     \
521                 touch ${IRRLICHT_TIMESTAMP};                                           \
522         fi
523
524 irrlicht : $(IRRLICHT_LIB)
525
526 $(IRRLICHT_LIB): $(IRRLICHT_TIMESTAMP) $(FREETYPE_LIB)
527         + @REFRESH=0;                                                                \
528         if [ ! -e ${IRRLICHT_TIMESTAMP_INT} ] ; then                               \
529                 REFRESH=1;                                                             \
530         fi;                                                                        \
531         if [ ! -e ${IRRLICHT_LIB} ] ; then                                         \
532                 REFRESH=1;                                                             \
533         fi;                                                                        \
534         if [ ${IRRLICHT_TIMESTAMP} -nt ${IRRLICHT_TIMESTAMP_INT} ] ; then          \
535                 REFRESH=1;                                                             \
536         fi;                                                                        \
537         if [ $$REFRESH -ne 0 ] ; then                                              \
538         mkdir -p ${IRRLICHT_DIR};                                                  \
539         echo "changed timestamp for irrlicht detected building...";                \
540         cd deps/irrlicht/source/Irrlicht/Android;                                  \
541         ${ANDROID_NDK}/ndk-build NDEBUG=${NDEBUG}                                  \
542                 NDK_MODULE_PATH=${NDK_MODULE_PATH}                                     \
543                 APP_ABI=${TARGET_ABI} APP_PLATFORM=${APP_PLATFORM}                     \
544                 PRIVATE_CC=${NDK_MODULE_PATH}/${TARGET_TOOLCHAIN}${COMPILER_VERSION}/prebuilt/linux-x86_64/bin/${TARGET_TOOLCHAIN}gcc \
545                 PRIVATE_CXX=${NDK_MODULE_PATH}/${TARGET_TOOLCHAIN}${COMPILER_VERSION}/prebuilt/linux-x86_64/bin/${TARGET_TOOLCHAIN}g++ \
546                 TARGET_CFLAGS+="${TARGET_CFLAGS_ADDON}"                                \
547                 TARGET_LDFLAGS+="${TARGET_LDFLAGS_ADDON}"                              \
548                 TARGET_CXXFLAGS+="${TARGET_CXXFLAGS_ADDON}" || exit 1;                 \
549         touch ${IRRLICHT_TIMESTAMP};                                               \
550         touch ${IRRLICHT_TIMESTAMP_INT};                                           \
551         else                                                                       \
552                 echo "nothing to be done for irrlicht";                                \
553         fi
554
555 clean_irrlicht :
556         $(RM) -rf deps/irrlicht
557
558 $(CURL_TIMESTAMP) : curl_download
559         @LAST_MODIF=$$(find ${CURL_DIR} -type f -printf '%T@ %p\n' | sort -n | tail -1 | cut -f2- -d" "); \
560         if [ $$(basename $$LAST_MODIF) != "timestamp" ] ; then                     \
561                 touch ${CURL_TIMESTAMP};                                               \
562         fi
563
564 curl_download :
565         @if [ ! -d "deps/curl-${CURL_VERSION}" ] ; then                            \
566                 echo "curl sources missing, downloading...";                           \
567                 mkdir -p ${ANDR_ROOT}/deps;                                            \
568                 cd deps;                                                               \
569                 wget ${CURL_URL_HTTP} || exit 1;                                       \
570                 tar -xjf curl-${CURL_VERSION}.tar.bz2 || exit 1;                       \
571                 rm curl-${CURL_VERSION}.tar.bz2;                                       \
572                 ln -s curl-${CURL_VERSION} curl;                                       \
573         fi
574
575 curl : $(CURL_LIB)
576
577 $(CURL_LIB): $(CURL_TIMESTAMP) $(OPENSSL_LIB)
578         @REFRESH=0;                                                                \
579         if [ ! -e ${CURL_TIMESTAMP_INT} ] ; then                                   \
580                 REFRESH=1;                                                             \
581         fi;                                                                        \
582         if [ ! -e ${CURL_LIB} ] ; then                                             \
583                 REFRESH=1;                                                             \
584         fi;                                                                        \
585         if [ ${CURL_TIMESTAMP} -nt ${CURL_TIMESTAMP_INT} ] ; then                  \
586                 REFRESH=1;                                                             \
587         fi;                                                                        \
588         if [ $$REFRESH -ne 0 ] ; then                                              \
589         mkdir -p ${CURL_DIR};                                                      \
590         echo "changed timestamp for curl detected building...";                    \
591         cd deps/curl-${CURL_VERSION};                                              \
592         export CROSS_PREFIX=${CROSS_PREFIX};                                       \
593         export TOOLCHAIN=/tmp/ndk-${TARGET_HOST}-curl;                             \
594         ${ANDROID_NDK}/build/tools/make-standalone-toolchain.sh                    \
595                 --toolchain=${TARGET_TOOLCHAIN}${COMPILER_VERSION}                     \
596                 --platform=android-9                                                   \
597                 --install-dir=$${TOOLCHAIN};                                           \
598         export PATH="$${TOOLCHAIN}/bin:$${PATH}";                                  \
599         export CC=${CROSS_PREFIX}gcc;                                              \
600         export CXX=${CROSS_PREFIX}g++;                                             \
601         export TARGET_OS=OS_ANDROID_CROSSCOMPILE;                                  \
602         export CPPFLAGS="$${CPPFLAGS} -I${OPENSSL_DIR}/include ${TARGET_CFLAGS_ADDON}"; \
603         export CFLAGS="$${CFLAGS} ${TARGET_CFLAGS_ADDON}";                         \
604         export LDFLAGS="$${LDFLAGS} -L${OPENSSL_DIR} ${TARGET_LDFLAGS_ADDON}";     \
605         ./configure --host=${TARGET_HOST} --disable-shared --enable-static --with-ssl;  \
606         $(MAKE) -s || exit 1;                                                      \
607         touch ${CURL_TIMESTAMP};                                                   \
608         touch ${CURL_TIMESTAMP_INT};                                               \
609         $(RM) -rf $${TOOLCHAIN};                                                   \
610         else                                                                       \
611                 echo "nothing to be done for curl";                                    \
612         fi
613
614 clean_curl :
615         $(RM) -rf deps/curl-${CURL_VERSION}                                        \
616         $(RM) -f deps/curl
617
618 $(GMP_TIMESTAMP) : gmp_download
619         @LAST_MODIF=$$(find ${GMP_DIR} -type f -printf '%T@ %p\n' | sort -n | tail -1 | cut -f2- -d" "); \
620         if [ $$(basename $$LAST_MODIF) != "timestamp" ] ; then                     \
621                 touch ${GMP_TIMESTAMP};                                            \
622         fi
623
624 gmp_download :
625         @if [ ! -d "${GMP_DIR}" ] ; then                                           \
626                 echo "gmp sources missing, downloading...";                        \
627                 mkdir -p ${ANDR_ROOT}/deps;                                        \
628                 cd deps;                                                           \
629                 wget ${GMP_URL_HTTP} || exit 1;                                    \
630                 tar -xjf gmp-${GMP_VERSION}.tar.bz2 || exit 1;                     \
631                 rm gmp-${GMP_VERSION}.tar.bz2;                                     \
632                 ln -s gmp-${GMP_VERSION} gmp;                                      \
633         fi
634
635 gmp : $(GMP_LIB)
636
637 $(GMP_LIB): $(GMP_TIMESTAMP)
638         @REFRESH=0;                                                                \
639         if [ ! -e ${GMP_TIMESTAMP_INT} ] ; then                                    \
640                 REFRESH=1;                                                         \
641         fi;                                                                        \
642         if [ ! -e ${GMP_LIB} ] ; then                                              \
643                 REFRESH=1;                                                         \
644         fi;                                                                        \
645         if [ ${GMP_TIMESTAMP} -nt ${GMP_TIMESTAMP_INT} ] ; then                    \
646                 REFRESH=1;                                                         \
647         fi;                                                                        \
648         if [ $$REFRESH -ne 0 ] ; then                                              \
649         mkdir -p ${GMP_DIR};                                                       \
650         echo "changed timestamp for gmp detected building...";                     \
651         cd deps/gmp-${GMP_VERSION};                                                \
652         export CROSS_PREFIX=${CROSS_PREFIX};                                       \
653         export TOOLCHAIN=/tmp/ndk-${TARGET_HOST}-gmp;                              \
654         ${ANDROID_NDK}/build/tools/make-standalone-toolchain.sh                    \
655                 --toolchain=${TARGET_TOOLCHAIN}${COMPILER_VERSION}                     \
656                 --platform=android-9                                                   \
657                 --install-dir=$${TOOLCHAIN};                                           \
658         export PATH="$${TOOLCHAIN}/bin:$${PATH}";                                  \
659         export CC=${CROSS_PREFIX}gcc;                                              \
660         export CXX=${CROSS_PREFIX}g++;                                             \
661         export LIBGMP_LDFLAGS="-avoid-version";                                    \
662         export LIBGMPXX_LDFLAGS="-avoid-version";                                  \
663         ./configure --disable-static --host=${TARGET_HOST} --prefix=/usr;          \
664         $(MAKE) install DESTDIR=/${GMP_DIR} || exit 1;                             \
665         touch ${GMP_TIMESTAMP};                                                    \
666         touch ${GMP_TIMESTAMP_INT};                                                \
667         $(RM) -rf $${TOOLCHAIN};                                                   \
668         else                                                                       \
669                 echo "nothing to be done for gmp";                                 \
670         fi
671
672 clean_gmp:
673         $(RM) -rf deps/gmp-${GMP_VERSION}                                          \
674         $(RM) -f deps/gmp
675
676 sqlite3_download: deps/${SQLITE3_FOLDER}/sqlite3.c
677
678 deps/${SQLITE3_FOLDER}/sqlite3.c :
679         cd deps;                                                                    \
680         wget ${SQLITE3_URL};                                                        \
681         unzip ${SQLITE3_FOLDER}.zip;                                                \
682         ln -s ${SQLITE3_FOLDER} sqlite;                                             \
683         cd ${SQLITE3_FOLDER};                                                       \
684         patch sqlite3.c < ${ANDR_ROOT}/patches/sqlite3-readonly-fix.patch
685
686 clean_sqlite3:
687         cd deps && $(RM) -rf ${SQLITE3_FOLDER} && $(RM) -f ${SQLITE3_FOLDER}.zip && \
688         $(RM) -f sqlite
689
690 $(ASSETS_TIMESTAMP) : $(IRRLICHT_LIB)
691         @mkdir -p ${ANDR_ROOT}/deps;                                                \
692         for DIRNAME in {builtin,client,doc,fonts,games,mods,po,textures}; do        \
693                 LAST_MODIF=$$(find ${PROJ_ROOT}/${DIRNAME} -type f -printf '%T@ %p\n' | sort -n | tail -1 | cut -f2- -d" "); \
694                 if [ $$(basename $$LAST_MODIF) != "timestamp" ]; then               \
695                         touch ${PROJ_ROOT}/${DIRNAME}/timestamp;                   \
696                         touch ${ASSETS_TIMESTAMP};                                  \
697                         echo ${DIRNAME} changed $$LAST_MODIF;                       \
698                 fi;                                                                 \
699         done;                                                                       \
700         LAST_MODIF=$$(find ${IRRLICHT_DIR}/media -type f -printf '%T@ %p\n' | sort -n | tail -1 | cut -f2- -d" "); \
701         if [ $$(basename $$LAST_MODIF) != "timestamp" ] ; then                     \
702                 touch ${IRRLICHT_DIR}/media/timestamp;                                 \
703                 touch ${ASSETS_TIMESTAMP};                                             \
704         fi;                                                                        \
705         if [ ${PROJ_ROOT}/minetest.conf.example -nt ${ASSETS_TIMESTAMP} ] ; then   \
706                 echo "conf changed";                                                   \
707                 touch ${ASSETS_TIMESTAMP};                                             \
708         fi;                                                                        \
709         if [ ${PROJ_ROOT}/README.txt -nt ${ASSETS_TIMESTAMP} ] ; then              \
710                 touch ${ASSETS_TIMESTAMP};                                             \
711         fi;                                                                        \
712         if [ ! -e $(ASSETS_TIMESTAMP) ] ; then                                     \
713                 touch $(ASSETS_TIMESTAMP);                                             \
714         fi
715
716 assets : $(ASSETS_TIMESTAMP)
717         @REFRESH=0;                                                                \
718         if [ ! -e ${ASSETS_TIMESTAMP}.old ] ; then                                 \
719                 REFRESH=1;                                                             \
720         fi;                                                                        \
721         if [ ${ASSETS_TIMESTAMP} -nt ${ASSETS_TIMESTAMP}.old ] ; then              \
722                 REFRESH=1;                                                             \
723         fi;                                                                        \
724         if [ ! -d ${APP_ROOT}/assets ] ; then                                      \
725                 REFRESH=1;                                                             \
726         fi;                                                                        \
727         if [ $$REFRESH -ne 0 ] ; then                                              \
728         echo "assets changed, refreshing...";                                      \
729         $(MAKE) clean_assets;                                                      \
730         mkdir -p ${APP_ROOT}/assets/Minetest;                                      \
731         cp ${PROJ_ROOT}/minetest.conf.example ${APP_ROOT}/assets/Minetest;         \
732         cp ${PROJ_ROOT}/README.txt ${APP_ROOT}/assets/Minetest;                    \
733         cp -r ${PROJ_ROOT}/builtin ${APP_ROOT}/assets/Minetest;                    \
734         mkdir -p ${APP_ROOT}/assets/Minetest/client;                                  \
735         cp -r ${PROJ_ROOT}/client/shaders ${APP_ROOT}/assets/Minetest/client;      \
736         cp ${PROJ_ROOT}/doc/lgpl-2.1.txt ${APP_ROOT}/assets/Minetest/LICENSE.txt;  \
737         mkdir -p ${APP_ROOT}/assets/Minetest/fonts;                                   \
738         cp -r ${PROJ_ROOT}/fonts/*.ttf ${APP_ROOT}/assets/Minetest/fonts/;         \
739         mkdir -p ${APP_ROOT}/assets/Minetest/games;                                   \
740         for game in ${GAMES_TO_COPY}; do                                           \
741             cp -r ${PROJ_ROOT}/games/$$game ${APP_ROOT}/assets/Minetest/games/;    \
742         done;                                                                      \
743         mkdir -p ${APP_ROOT}/assets/Minetest/mods;                                    \
744         for mod in ${MODS_TO_COPY}; do                                             \
745             cp -r ${PROJ_ROOT}/mods/$$mod ${APP_ROOT}/assets/Minetest/mods/;       \
746         done;                                                                      \
747         cp -r ${PROJ_ROOT}/po ${APP_ROOT}/assets/Minetest;                         \
748         cp -r ${PROJ_ROOT}/textures ${APP_ROOT}/assets/Minetest;                   \
749         mkdir -p ${APP_ROOT}/assets/Minetest/media;                                \
750         cp -r ${IRRLICHT_DIR}/media/Shaders ${APP_ROOT}/assets/Minetest/media;     \
751         cd ${APP_ROOT}/assets ||  exit 1;                                          \
752         find . -name "timestamp" -exec rm {} \; ;                                  \
753         find . -name "*.blend" -exec rm {} \; ;                                    \
754         find . -name "*~" -exec rm {} \; ;                                         \
755         find . -type d -path "*.git" -exec rm -rf {} \; ;                          \
756         find . -type d -path "*.svn" -exec rm -rf {} \; ;                          \
757         find . -type f -path "*.gitignore" -exec rm -rf {} \; ;                    \
758         ls -R | grep ":$$" | sed -e 's/:$$//' -e 's/\.//' -e 's/^\///' > "index.txt"; \
759         find -L Minetest > filelist.txt;                                             \
760         cp ${ANDR_ROOT}/${ASSETS_TIMESTAMP} ${ANDR_ROOT}/${ASSETS_TIMESTAMP}.old;  \
761         else                                                                       \
762                 echo "nothing to be done for assets";                                  \
763         fi
764
765 clean_assets :
766         @$(RM) -r assets
767
768 apk: local.properties assets $(ICONV_LIB) $(IRRLICHT_LIB) $(CURL_LIB) $(GMP_LIB) $(LEVELDB_TARGET)       \
769         $(OPENAL_LIB) $(OGG_LIB) prep_srcdir $(ANDR_ROOT)/jni/src/android_version.h    \
770         $(ANDR_ROOT)/jni/src/android_version_githash.h sqlite3_download
771         + @${ANDROID_NDK}/ndk-build NDK_MODULE_PATH=${NDK_MODULE_PATH}             \
772                 GPROF=${GPROF} APP_ABI=${TARGET_ABI} HAVE_LEVELDB=${HAVE_LEVELDB}      \
773                 APP_PLATFORM=${APP_PLATFORM}                                           \
774                 PRIVATE_CC=${NDK_MODULE_PATH}/${TARGET_TOOLCHAIN}${COMPILER_VERSION}/prebuilt/linux-x86_64/bin/${TARGET_TOOLCHAIN}gcc \
775                 PRIVATE_CXX=${NDK_MODULE_PATH}/${TARGET_TOOLCHAIN}${COMPILER_VERSION}/prebuilt/linux-x86_64/bin/${TARGET_TOOLCHAIN}g++ \
776                 TARGET_LIBDIR=${TARGET_LIBDIR}                                         \
777                 TARGET_CFLAGS+="${TARGET_CFLAGS_ADDON}"                                \
778                 TARGET_LDFLAGS+="${TARGET_LDFLAGS_ADDON}"                              \
779                 TARGET_CXXFLAGS+="${TARGET_CXXFLAGS_ADDON}" || exit 1;                 \
780         if [ ! -e ${APP_ROOT}/jniLibs ]; then                                      \
781                 ln -s ${ANDR_ROOT}/libs ${APP_ROOT}/jniLibs || exit 1;                 \
782         fi;                                                                        \
783         export VERSION_STR="${VERSION_MAJOR}.${VERSION_MINOR}.${VERSION_PATCH}" && \
784         export BUILD_TYPE_C=$$(echo "$${BUILD_TYPE}" | sed 's/./\U&/') &&          \
785         ./gradlew assemble$$BUILD_TYPE_C &&                                           \
786         echo "APK stored at: build/outputs/apk/Minetest-$$BUILD_TYPE.apk" &&       \
787         echo "You can install it with \`make install_$$BUILD_TYPE\`"
788
789 # These Intentionally doesn't depend on their respective build steps,
790 # because it takes a while to verify that everything's up-to-date.
791 install_debug:
792         ${ANDROID_SDK}/platform-tools/adb install -r build/outputs/apk/Minetest-debug.apk
793
794 install_release:
795         ${ANDROID_SDK}/platform-tools/adb install -r build/outputs/apk/Minetest-release.apk
796
797 prep_srcdir :
798         @if [ ! -e ${ANDR_ROOT}/jni/src ]; then                                    \
799                 ln -s ${PROJ_ROOT}/src ${ANDR_ROOT}/jni/src;                       \
800         fi;                                                                        \
801         if [ ! -e ${ANDR_ROOT}/jni/lib ]; then                                     \
802                 ln -s ${PROJ_ROOT}/lib ${ANDR_ROOT}/jni/lib;                       \
803         fi
804
805 clean_apk :
806         ./gradlew clean
807
808 clean_all :
809         @$(MAKE) clean_apk;                                                        \
810         $(MAKE) clean_assets clean_iconv clean_irrlicht clean_leveldb clean_curl   \
811         clean_openssl clean_openal clean_ogg clean_gmp;                            \
812         sleep 1;                                                                   \
813         $(RM) -r gen libs obj deps bin Debug and_env
814
815 $(ANDR_ROOT)/jni/src/android_version_githash.h : prep_srcdir
816         @export VERSION_FILE=${ANDR_ROOT}/jni/src/android_version_githash.h;        \
817         export VERSION_FILE_NEW=$${VERSION_FILE}.new;                              \
818         {                                                                          \
819         echo "#ifndef ANDROID_MT_VERSION_GITHASH_H";                               \
820         echo "#define ANDROID_MT_VERSION_GITHASH_H";                               \
821         export GITHASH=$$(git rev-parse --short=8 HEAD);                           \
822         export VERSION_STR="${VERSION_MAJOR}.${VERSION_MINOR}.${VERSION_PATCH}";   \
823         echo "#define VERSION_GITHASH \"$$VERSION_STR-$$GITHASH-Android\"";        \
824         echo "#endif";                                                             \
825         } > "$${VERSION_FILE_NEW}";                                                \
826         if ! cmp -s $${VERSION_FILE} $${VERSION_FILE_NEW}; then                    \
827                 echo "android_version_githash.h changed, updating...";             \
828                 mv "$${VERSION_FILE_NEW}" "$${VERSION_FILE}";                      \
829         else                                                                       \
830                 rm "$${VERSION_FILE_NEW}";                                         \
831         fi
832
833
834 $(ANDR_ROOT)/jni/src/android_version.h : prep_srcdir
835         @export VERSION_FILE=${ANDR_ROOT}/jni/src/android_version.h;                \
836         export VERSION_FILE_NEW=$${VERSION_FILE}.new;                              \
837         {                                                                          \
838         echo "#ifndef ANDROID_MT_VERSION_H";                                       \
839         echo "#define ANDROID_MT_VERSION_H";                                       \
840         echo "#define VERSION_MAJOR ${VERSION_MAJOR}";                             \
841         echo "#define VERSION_MINOR ${VERSION_MINOR}";                             \
842         echo "#define VERSION_PATCH ${VERSION_PATCH}";                             \
843         echo "#define VERSION_STRING STR(VERSION_MAJOR) \".\" STR(VERSION_MINOR) \
844         \".\" STR(VERSION_PATCH)";                                                 \
845         echo "#endif";                                                             \
846         } > $${VERSION_FILE_NEW};                                                  \
847         if ! cmp -s $${VERSION_FILE} $${VERSION_FILE_NEW}; then                    \
848                 echo "android_version.h changed, updating...";                     \
849                 mv "$${VERSION_FILE_NEW}" "$${VERSION_FILE}";                      \
850         else                                                                       \
851                 rm "$${VERSION_FILE_NEW}";                                         \
852         fi
853
854 clean : clean_apk clean_assets