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