5 #automaticaly set number of jobs
7 PARALLEL := $(shell grep -c ^processor /proc/cpuinfo)
15 # build for build platform
16 APP_PLATFORM = android-9
18 # paths used for timestaps, dependencys, tree config and libs
19 PATHCFGFILE = path.cfg
23 ################################################################################
24 # Android Version code
25 # Increase for each build!
26 ################################################################################
27 ANDROID_VERSION_CODE = 4
29 ################################################################################
30 # toolchain config for arm old processors
31 ################################################################################
32 TARGET_HOST = arm-linux
34 TARGET_LIBDIR = armeabi
35 TARGET_TOOLCHAIN = arm-linux-androideabi-
36 TARGET_CFLAGS_ADDON = -mfloat-abi=softfp -mfpu=vfp
37 CROSS_PREFIX = arm-linux-androideabi-
38 COMPILER_VERSION = 4.8
40 ################################################################################
41 # toolchain config for arm new processors
42 ################################################################################
43 #TARGET_HOST = arm-linux
44 #TARGET_ABI = armeabi-v7a-hard
45 #TARGET_LIBDIR = armeabi-v7a
46 #TARGET_TOOLCHAIN = arm-linux-androideabi-
47 #TARGET_CFLAGS_ADDON = -mfpu=vfpv3-d16 -D_NDK_MATH_NO_SOFTFP=1 \
48 # -mfloat-abi=hard -march=armv7-a
49 #TARGET_CXXFLAGS_ADDON = $(TARGET_CFLAGS_ADDON)
50 #TARGET_LDFLAGS_ADDON = -Wl,--no-warn-mismatch -lm_hard
51 #CROSS_PREFIX = arm-linux-androideabi-
52 #COMPILER_VERSION = 4.8
54 ################################################################################
55 # toolchain config for little endian mips
56 ################################################################################
57 #TARGET_HOST = mipsel-linux
60 #TARGET_TOOLCHAIN = mipsel-linux-android-
61 #CROSS_PREFIX = mipsel-linux-android-
62 #COMPILER_VERSION = 4.8
64 ################################################################################
65 # toolchain config for x86
66 ################################################################################
67 #TARGET_HOST = x86-linux
70 #TARGET_TOOLCHAIN = x86-
71 #CROSS_PREFIX = i686-linux-android-
72 #COMPILER_VERSION = 4.8
74 ################################################################################
75 ASSETS_TIMESTAMP = deps/assets_timestamp
77 LEVELDB_DIR = $(ROOT)/deps/leveldb/
78 LEVELDB_LIB = $(LEVELDB_DIR)libleveldb.a
79 LEVELDB_TIMESTAMP = $(LEVELDB_DIR)/timestamp
80 LEVELDB_TIMESTAMP_INT = $(ROOT)/deps/leveldb_timestamp
81 LEVELDB_URL_GIT = https://code.google.com/p/leveldb/
83 OPENAL_DIR = $(ROOT)/deps/openal-soft/
84 OPENAL_LIB = $(OPENAL_DIR)libs/$(TARGET_ABI)/libopenal.so
85 OPENAL_TIMESTAMP = $(OPENAL_DIR)/timestamp
86 OPENAL_TIMESTAMP_INT = $(ROOT)/deps/openal_timestamp
87 OPENAL_URL_GIT = https://github.com/apportable/openal-soft
89 OGG_DIR = $(ROOT)/deps/libvorbis-libogg-android/
90 OGG_LIB = $(OGG_DIR)libs/$(TARGET_ABI)/libogg.so
91 VORBIS_LIB = $(OGG_DIR)libs/$(TARGET_ABI)/libogg.so
92 OGG_TIMESTAMP = $(OGG_DIR)timestamp
93 OGG_TIMESTAMP_INT = $(ROOT)/deps/ogg_timestamp
94 OGG_URL_GIT = https://github.com/vincentjames501/libvorbis-libogg-android
96 IRRLICHT_DIR = $(ROOT)/deps/irrlicht/
97 IRRLICHT_LIB = $(IRRLICHT_DIR)lib/Android/libIrrlicht.a
98 IRRLICHT_TIMESTAMP = $(IRRLICHT_DIR)timestamp
99 IRRLICHT_TIMESTAMP_INT = $(ROOT)/deps/irrlicht_timestamp
100 IRRLICHT_URL_SVN = http://svn.code.sf.net/p/irrlicht/code/branches/ogl-es/
102 OPENSSL_BASEDIR = openssl-android
103 OPENSSL_DIR = $(ROOT)/deps/$(OPENSSL_BASEDIR)/
104 OPENSSL_LIB = $(OPENSSL_DIR)libs/$(TARGET_ABI)/libopenssl.so
105 OPENSSL_TIMESTAMP = $(OPENSSL_DIR)timestamp
106 OPENSSL_TIMESTAMP_INT = $(ROOT)/deps/openssl_timestamp
107 OPENSSL_URL_GIT = https://github.com/wobbals/openssl-android
109 CURL_VERSION = 7.35.0
110 CURL_DIR = $(ROOT)/deps/curl-$(CURL_VERSION)
111 CURL_LIB = $(CURL_DIR)/lib/.libs/libcurl.a
112 CURL_TIMESTAMP = $(CURL_DIR)/timestamp
113 CURL_TIMESTAMP_INT = $(ROOT)/deps/curl_timestamp
114 CURL_URL_HTTP = http://curl.haxx.se/download/curl-${CURL_VERSION}.tar.bz2
116 FREETYPE_DIR = $(ROOT)/deps/freetype2-android/
117 FREETYPE_LIB = $(FREETYPE_DIR)/Android/obj/local/$(TARGER_ABI)/libfreetype2-static.a
118 FREETYPE_TIMESTAMP = $(FREETYPE_DIR)timestamp
119 FREETYPE_TIMESTAMP_INT = $(ROOT)/deps/freetype_timestamp
120 FREETYPE_URL_GIT = https://github.com/cdave1/freetype2-android
122 -include $(PATHCFGFILE)
124 .PHONY : debug release reconfig delconfig \
125 leveldb_download clean_leveldb leveldb\
126 irrlicht_download clean_irrlicht irrlicht \
127 clean_assets assets \
128 freetype_download clean_freetype freetype \
130 clean_all clean prep_srcdir \
131 install_debug install envpaths all \
132 manifest clean_manifest\
133 $(ASSETS_TIMESTAMP) $(LEVELDB_TIMESTAMP) \
134 $(OPENAL_TIMESTAMP) $(OGG_TIMESTAMP) \
135 $(IRRLICHT_TIMESTAMP) $(CURL_TIMESTAMP) \
136 $(OPENSSL_TIMESTAMP) curl_binary \
137 $(ROOT)/jni/src/android_version.h
139 debug : $(PATHCFGFILE)
141 export BUILD_TYPE=debug; \
142 $(MAKE) -j${PARALLEL} apk
146 release : $(PATHCFGFILE)
148 export BUILD_TYPE=release; \
149 $(MAKE) -j${PARALLEL} apk
152 @$(MAKE) -j${PARALLEL} $(PATHCFGFILE)
158 @echo "Please specify path of ANDROID NDK"; \
159 echo "e.g. /home/user/android-ndk-r9c/"; \
161 if [ ! -d $$ANDROID_NDK ] ; then \
162 echo "$$ANDROID_NDK is not a valid folder"; \
165 echo "ANDROID_NDK = $$ANDROID_NDK" > ${PATHCFGFILE}; \
166 echo "NDK_MODULE_PATH = $$ANDROID_NDK/tools" >> ${PATHCFGFILE}; \
167 echo "+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++";\
168 echo "+ Note: NDK_MODULE_PATH is set to $$ANDROID_NDK/tools"; \
169 echo "+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++";\
170 echo "Please specify path of ANDROID SDK"; \
171 echo "e.g. /home/user/adt-bundle-linux-x86_64-20131030/sdk/"; \
173 if [ ! -d $$SDKFLDR ] ; then \
174 echo "$$SDKFLDR is not a valid folder"; \
177 echo "SDKFOLDER = $$SDKFLDR" >> ${PATHCFGFILE};
179 $(OPENAL_TIMESTAMP) : openal_download
180 @LAST_MODIF=$$(find ${OPENAL_DIR} -type f -printf '%T@ %p\n' | sort -n | tail -1 | cut -f2- -d" "); \
181 if [ $$(basename $$LAST_MODIF) != "timestamp" ] ; then \
182 touch ${OPENAL_TIMESTAMP}; \
186 @if [ ! -d ${OPENAL_DIR} ] ; then \
187 echo "openal sources missing, downloading..."; \
188 mkdir -p ${ROOT}/deps; \
190 git clone ${OPENAL_URL_GIT} || exit 1; \
193 openal : $(OPENAL_LIB)
195 $(OPENAL_LIB): $(OPENAL_TIMESTAMP)
197 if [ ! -e ${OPENAL_TIMESTAMP_INT} ] ; then \
200 if [ ${OPENAL_TIMESTAMP} -nt ${OPENAL_TIMESTAMP_INT} ] ; then \
203 if [ $$REFRESH -ne 0 ] ; then \
204 export PATH=$$PATH:${SDKFOLDER}/platform-tools:${ANDROID_NDK}; \
205 echo "changed timestamp for openal detected building..."; \
207 ndk-build NDEBUG=${NDEBUG} NDK_MODULE_PATH=${NDK_MODULE_PATH} \
208 APP_ABI=${TARGET_ABI} APP_PLATFORM=${APP_PLATFORM} -j${PARALLEL} \
209 TARGET_CFLAGS+="${TARGET_CFLAGS_ADDON}" \
210 TARGET_LDFLAGS+="${TARGET_LDFLAGS_ADDON}" \
211 TARGET_CXXFLAGS+="${TARGET_CXXFLAGS_ADDON}" || exit 1; \
212 touch ${OPENAL_TIMESTAMP}; \
213 touch ${OPENAL_TIMESTAMP_INT}; \
215 echo "nothing to be done for openal"; \
219 $(RM) -rf ${OPENAL_DIR}
221 $(OGG_TIMESTAMP) : ogg_download
222 @LAST_MODIF=$$(find ${OGG_DIR} -type f -printf '%T@ %p\n' | sort -n | tail -1 | cut -f2- -d" "); \
223 if [ $$(basename $$LAST_MODIF) != "timestamp" ] ; then \
224 touch ${OGG_TIMESTAMP}; \
228 @if [ ! -d ${OGG_DIR} ] ; then \
229 echo "ogg sources missing, downloading..."; \
230 mkdir -p ${ROOT}/deps; \
232 git clone ${OGG_URL_GIT}|| exit 1; \
233 cd libvorbis-libogg-android ; \
234 patch -p1 < ../../libvorbis-libogg-fpu.patch || exit 1; \
239 $(OGG_LIB): $(OGG_TIMESTAMP)
241 if [ ! -e ${OGG_TIMESTAMP_INT} ] ; then \
242 echo "${OGG_TIMESTAMP_INT} doesn't exist"; \
245 if [ ${OGG_TIMESTAMP} -nt ${OGG_TIMESTAMP_INT} ] ; then \
248 if [ $$REFRESH -ne 0 ] ; then \
249 export PATH=$$PATH:${SDKFOLDER}/platform-tools:${ANDROID_NDK}; \
250 echo "changed timestamp for ogg detected building..."; \
252 ndk-build NDEBUG=${NDEBUG} NDK_MODULE_PATH=${NDK_MODULE_PATH} \
253 APP_ABI=${TARGET_ABI} APP_PLATFORM=${APP_PLATFORM} -j${PARALLEL} \
254 TARGET_CFLAGS+="${TARGET_CFLAGS_ADDON}" \
255 TARGET_LDFLAGS+="${TARGET_LDFLAGS_ADDON}" \
256 TARGET_CXXFLAGS+="${TARGET_CXXFLAGS_ADDON}" || exit 1; \
257 touch ${OGG_TIMESTAMP}; \
258 touch ${OGG_TIMESTAMP_INT}; \
260 echo "nothing to be done for libogg/libvorbis"; \
266 $(OPENSSL_TIMESTAMP) : openssl_download
267 @LAST_MODIF=$$(find ${OPENSSL_DIR} -type f -printf '%T@ %p\n' | sort -n | tail -1 | cut -f2- -d" "); \
268 if [ $$(basename $$LAST_MODIF) != "timestamp" ] ; then \
269 touch ${OPENSSL_TIMESTAMP}; \
273 @if [ ! -d ${OPENSSL_DIR} ] ; then \
274 echo "openssl sources missing, downloading..."; \
275 mkdir -p ${ROOT}/deps; \
277 git clone ${OPENSSL_URL_GIT} || exit 1; \
280 openssl : $(OPENSSL_LIB)
282 $(OPENSSL_LIB): $(OPENSSL_TIMESTAMP)
284 if [ ! -e ${OPENSSL_TIMESTAMP_INT} ] ; then \
285 echo "${OPENSSL_TIMESTAMP_INT} doesn't exist"; \
288 if [ ${OPENSSL_TIMESTAMP} -nt ${OPENSSL_TIMESTAMP_INT} ] ; then \
291 if [ $$REFRESH -ne 0 ] ; then \
292 export PATH=$$PATH:${SDKFOLDER}/platform-tools:${ANDROID_NDK}; \
293 echo "changed timestamp for openssl detected building..."; \
295 cat jni/Application.mk | grep -v NDK_TOOLCHAIN_VERSION >jni/Application.mk.new;\
296 mv jni/Application.mk.new jni/Application.mk; \
297 ndk-build NDEBUG=${NDEBUG} NDK_MODULE_PATH=${NDK_MODULE_PATH} \
298 APP_ABI=${TARGET_ABI} APP_PLATFORM=${APP_PLATFORM} -j${PARALLEL} \
299 TARGET_CFLAGS+="${TARGET_CFLAGS_ADDON}" \
300 TARGET_LDFLAGS+="${TARGET_LDFLAGS_ADDON}" \
301 TARGET_CXXFLAGS+="${TARGET_CXXFLAGS_ADDON}" || exit 1; \
302 touch ${OPENSSL_TIMESTAMP}; \
303 touch ${OPENSSL_TIMESTAMP_INT}; \
305 echo "nothing to be done for openssl"; \
309 $(RM) -rf ${OPENSSL_DIR}
311 $(LEVELDB_TIMESTAMP) : leveldb_download
312 @LAST_MODIF=$$(find ${LEVELDB_DIR} -type f -printf '%T@ %p\n' | sort -n | tail -1 | cut -f2- -d" "); \
313 if [ $$(basename $$LAST_MODIF) != "timestamp" ] ; then \
314 touch ${LEVELDB_TIMESTAMP}; \
318 @if [ ! -d ${LEVELDB_DIR} ] ; then \
319 echo "leveldb sources missing, downloading..."; \
320 mkdir -p ${ROOT}/deps; \
322 git clone ${LEVELDB_URL_GIT} || exit 1; \
325 leveldb : $(LEVELDB_LIB)
327 $(LEVELDB_LIB): $(LEVELDB_TIMESTAMP)
329 if [ ! -e ${LEVELDB_TIMESTAMP_INT} ] ; then \
332 if [ ${LEVELDB_TIMESTAMP} -nt ${LEVELDB_TIMESTAMP_INT} ] ; then \
335 if [ $$REFRESH -ne 0 ] ; then \
336 export PATH=$${PATH}:${SDKFOLDER}/platform-tools:${ANDROID_NDK}; \
337 echo "changed timestamp for leveldb detected building..."; \
339 export CROSS_PREFIX=${CROSS_PREFIX}; \
340 export TOOLCHAIN=/tmp/ndk-arm; \
341 ${ANDROID_NDK}/build/tools/make-standalone-toolchain.sh \
342 --toolchain=${TARGET_TOOLCHAIN}${COMPILER_VERSION} \
343 --install-dir=$${TOOLCHAIN} --system=linux-x86_64; \
344 export PATH="$${TOOLCHAIN}/bin:$${PATH}"; \
345 export CC=${CROSS_PREFIX}gcc; \
346 export CXX=${CROSS_PREFIX}g++; \
347 export CFLAGS="$${CFLAGS} ${TARGET_CFLAGS_ADDON}"; \
348 export CPPFLAGS="$${CPPFLAGS} ${TARGET_CFLAGS_ADDON}"; \
349 export LDFLAGS="$${LDFLAGS} ${TARGET_LDFLAGS_ADDON}"; \
350 export TARGET_OS=OS_ANDROID_CROSSCOMPILE; \
351 $(MAKE) -j${PARALLEL} -s || exit 1; \
352 touch ${LEVELDB_TIMESTAMP}; \
353 touch ${LEVELDB_TIMESTAMP_INT}; \
355 echo "nothing to be done for leveldb"; \
359 $(RM) -rf deps/leveldb
361 $(FREETYPE_TIMESTAMP) : freetype_download
362 @LAST_MODIF=$$(find ${FREETYPE_DIR} -type f -printf '%T@ %p\n' | sort -n | tail -1 | cut -f2- -d" "); \
363 if [ $$(basename $$LAST_MODIF) != "timestamp" ] ; then \
364 touch ${FREETYPE_TIMESTAMP}; \
368 @if [ ! -d ${FREETYPE_DIR} ] ; then \
369 echo "freetype sources missing, downloading..."; \
370 mkdir -p ${ROOT}/deps; \
372 git clone ${FREETYPE_URL_GIT} || exit 1; \
375 $(IRRLICHT_TIMESTAMP) : irrlicht_download
376 @LAST_MODIF=$$(find ${IRRLICHT_DIR} -type f -printf '%T@ %p\n' | sort -n | tail -1 | cut -f2- -d" "); \
377 if [ $$(basename $$LAST_MODIF) != "timestamp" ] ; then \
378 touch ${IRRLICHT_TIMESTAMP}; \
381 freetype : $(FREETYPE_LIB)
383 $(FREETYPE_LIB) : $(FREETYPE_TIMESTAMP)
385 if [ ! -e ${FREETYPE_TIMESTAMP_INT} ] ; then \
388 if [ ! -e ${FREETYPE_LIB} ] ; then \
391 if [ ${FREETYPE_TIMESTAMP} -nt ${FREETYPE_TIMESTAMP_INT} ] ; then \
394 if [ $$REFRESH -ne 0 ] ; then \
395 mkdir -p ${FREETYPE_DIR}; \
396 export PATH=$$PATH:${SDKFOLDER}/platform-tools:${ANDROID_NDK}; \
397 echo "changed timestamp for freetype detected building..."; \
398 cd ${FREETYPE_DIR}/Android/jni; \
399 ndk-build NDEBUG=${NDEBUG} NDK_MODULE_PATH=${NDK_MODULE_PATH} \
400 APP_PLATFORM=${APP_PLATFORM} APP_ABI=${TARGET_ABI} -j${PARALLEL} \
401 TARGET_CFLAGS+="${TARGET_CFLAGS_ADDON}" \
402 TARGET_LDFLAGS+="${TARGET_LDFLAGS_ADDON}" \
403 TARGET_CXXFLAGS+="${TARGET_CXXFLAGS_ADDON}" || exit 1; \
404 touch ${FREETYPE_TIMESTAMP}; \
405 touch ${FREETYPE_TIMESTAMP_INT}; \
407 echo "nothing to be done for freetype"; \
411 $(RM) -rf ${FREETYPE_DIR}
413 #Note: Texturehack patch is required for gpu's not supporting color format
414 # correctly. Known bad GPU:
415 # -geforce on emulator
416 # -Vivante Corporation GC1000 core (e.g. Galaxy Tab 3)
419 @if [ ! -d "deps/irrlicht" ] ; then \
420 echo "irrlicht sources missing, downloading..."; \
421 mkdir -p ${ROOT}/deps; \
423 svn co ${IRRLICHT_URL_SVN} irrlicht || exit 1; \
425 patch -p1 < ../../irrlicht-touchcount.patch || exit 1; \
426 patch -p1 < ../../irrlicht-back_button.patch || exit 1; \
427 patch -p1 < ../../irrlicht-texturehack.patch || exit 1; \
430 irrlicht : $(IRRLICHT_LIB)
432 $(IRRLICHT_LIB): $(IRRLICHT_TIMESTAMP) $(FREETYPE_LIB)
434 if [ ! -e ${IRRLICHT_TIMESTAMP_INT} ] ; then \
437 if [ ! -e ${IRRLICHT_LIB} ] ; then \
440 if [ ${IRRLICHT_TIMESTAMP} -nt ${IRRLICHT_TIMESTAMP_INT} ] ; then \
443 if [ $$REFRESH -ne 0 ] ; then \
444 mkdir -p ${IRRLICHT_DIR}; \
445 export PATH=$$PATH:${SDKFOLDER}/platform-tools:${ANDROID_NDK}; \
446 echo "changed timestamp for irrlicht detected building..."; \
447 cd deps/irrlicht/source/Irrlicht/Android; \
448 ndk-build NDEBUG=${NDEBUG} NDK_MODULE_PATH=${NDK_MODULE_PATH} \
449 APP_ABI=${TARGET_ABI} APP_PLATFORM=${APP_PLATFORM} -j${PARALLEL} \
450 TARGET_CFLAGS+="${TARGET_CFLAGS_ADDON}" \
451 TARGET_LDFLAGS+="${TARGET_LDFLAGS_ADDON}" \
452 TARGET_CXXFLAGS+="${TARGET_CXXFLAGS_ADDON}" || exit 1; \
453 touch ${IRRLICHT_TIMESTAMP}; \
454 touch ${IRRLICHT_TIMESTAMP_INT}; \
456 echo "nothing to be done for irrlicht"; \
460 $(RM) -rf deps/irrlicht
462 $(CURL_TIMESTAMP) : curl_download
463 @LAST_MODIF=$$(find ${CURL_DIR} -type f -printf '%T@ %p\n' | sort -n | tail -1 | cut -f2- -d" "); \
464 if [ $$(basename $$LAST_MODIF) != "timestamp" ] ; then \
465 touch ${CURL_TIMESTAMP}; \
469 @if [ ! -d "deps/curl-${CURL_VERSION}" ] ; then \
470 echo "curl sources missing, downloading..."; \
471 mkdir -p ${ROOT}/deps; \
473 wget ${CURL_URL_HTTP} || exit 1; \
474 tar -xjf curl-${CURL_VERSION}.tar.bz2 || exit 1; \
475 rm curl-${CURL_VERSION}.tar.bz2; \
480 $(CURL_LIB): $(CURL_TIMESTAMP) $(OPENSSL_LIB)
482 if [ ! -e ${CURL_TIMESTAMP_INT} ] ; then \
485 if [ ! -e ${CURL_LIB} ] ; then \
488 if [ ${CURL_TIMESTAMP} -nt ${CURL_TIMESTAMP_INT} ] ; then \
491 if [ $$REFRESH -ne 0 ] ; then \
492 mkdir -p ${CURL_DIR}; \
493 export PATH="$${PATH}:${SDKFOLDER}/platform-tools:${ANDROID_NDK}"; \
494 echo "changed timestamp for curl detected building..."; \
495 cd deps/curl-${CURL_VERSION}; \
496 export CROSS_PREFIX=${CROSS_PREFIX}; \
497 export TOOLCHAIN=/tmp/ndk-arm; \
498 ${ANDROID_NDK}/build/tools/make-standalone-toolchain.sh \
499 --toolchain=${TARGET_TOOLCHAIN}${COMPILER_VERSION} \
500 --install-dir=$${TOOLCHAIN} --system=linux-x86_64; \
501 export PATH="$${TOOLCHAIN}/bin:$${PATH}"; \
502 export CC=${CROSS_PREFIX}gcc; \
503 export CXX=${CROSS_PREFIX}g++; \
504 export TARGET_OS=OS_ANDROID_CROSSCOMPILE; \
505 export CPPFLAGS="$${CPPFLAGS} -I${OPENSSL_DIR}/include \
506 -L${OPENSSL_DIR}/libs/${TARGET_ABI}/ ${TARGET_CFLAGS_ADDON}"; \
507 export CFLAGS="$${CFLAGS} ${TARGET_CFLAGS_ADDON}"; \
508 export LDFLAGS="$${LDFLAGS} -L${OPENSSL_DIR}/libs/${TARGET_ABI}/ \
509 ${TARGET_LDFLAGS_ADDON}"; \
510 ./configure --host=${TARGET_HOST} --disable-shared --enable-static --with-ssl; \
511 $(MAKE) -j${PARALLEL} -s || exit 1; \
512 touch ${CURL_TIMESTAMP}; \
513 touch ${CURL_TIMESTAMP_INT}; \
515 echo "nothing to be done for curl"; \
519 $(RM) -rf deps/curl-${CURL_VERSION}
523 @if [ ! -d "deps/curl-${CURL_VERSION_BINARY}" ] ; then \
524 echo "curl sources missing, downloading..."; \
525 mkdir -p ${ROOT}/deps; \
527 wget http://curl.haxx.se/gknw.net/7.34.0/dist-android/curl-7.34.0-rtmp-ssh2-ssl-zlib-static-bin-android.tar.gz || exit 1;\
528 tar -xzf curl-7.34.0-rtmp-ssh2-ssl-zlib-static-bin-android.tar.gz || exit 1;\
529 mv curl-7.34.0-rtmp-ssh2-ssl-zlib-static-bin-android curl-${CURL_VERSION_BINARY};\
530 rm curl-7.34.0-rtmp-ssh2-ssl-zlib-static-bin-android.tar.gz; \
533 $(ASSETS_TIMESTAMP) : $(IRRLICHT_LIB)
534 @mkdir -p ${ROOT}/deps; \
535 LAST_MODIF=$$(find ${ROOT}/../../builtin -type f -printf '%T@ %p\n' | sort -n | tail -1 | cut -f2- -d" "); \
536 if [ $$(basename $$LAST_MODIF) != "timestamp" ] ; then \
537 touch ${ROOT}/../../builtin/timestamp; \
538 touch ${ASSETS_TIMESTAMP}; \
539 echo builtin changed $$LAST_MODIF; \
541 LAST_MODIF=$$(find ${ROOT}/../../client -type f -printf '%T@ %p\n' | sort -n | tail -1 | cut -f2- -d" "); \
542 if [ $$(basename $$LAST_MODIF) != "timestamp" ] ; then \
543 touch ${ROOT}/../../client/timestamp; \
544 touch ${ASSETS_TIMESTAMP}; \
546 LAST_MODIF=$$(find ${ROOT}/../../doc -type f -printf '%T@ %p\n' | sort -n | tail -1 | cut -f2- -d" "); \
547 if [ $$(basename $$LAST_MODIF) != "timestamp" ] ; then \
548 touch ${ROOT}/../../doc/timestamp; \
549 touch ${ASSETS_TIMESTAMP}; \
551 LAST_MODIF=$$(find ${ROOT}/../../fonts -type f -printf '%T@ %p\n' | sort -n | tail -1 | cut -f2- -d" "); \
552 if [ $$(basename $$LAST_MODIF) != "timestamp" ] ; then \
553 touch ${ROOT}/../../fonts/timestamp; \
554 touch ${ASSETS_TIMESTAMP}; \
556 LAST_MODIF=$$(find ${ROOT}/../../games -type f -printf '%T@ %p\n' | sort -n | tail -1 | cut -f2- -d" "); \
557 if [ $$(basename $$LAST_MODIF) != "timestamp" ] ; then \
558 touch ${ROOT}/../../games/timestamp; \
559 touch ${ASSETS_TIMESTAMP}; \
561 LAST_MODIF=$$(find ${ROOT}/../../mods -type f -printf '%T@ %p\n' | sort -n | tail -1 | cut -f2- -d" "); \
562 if [ $$(basename $$LAST_MODIF) != "timestamp" ] ; then \
563 touch ${ROOT}/../../mods/timestamp; \
564 touch ${ASSETS_TIMESTAMP}; \
566 LAST_MODIF=$$(find ${ROOT}/../../po -type f -printf '%T@ %p\n' | sort -n | tail -1 | cut -f2- -d" "); \
567 if [ $$(basename $$LAST_MODIF) != "timestamp" ] ; then \
568 touch ${ROOT}/../../po/timestamp; \
569 touch ${ASSETS_TIMESTAMP}; \
571 LAST_MODIF=$$(find ${ROOT}/../../textures -type f -printf '%T@ %p\n' | sort -n | tail -1 | cut -f2- -d" "); \
572 if [ $$(basename $$LAST_MODIF) != "timestamp" ] ; then \
573 touch ${ROOT}/../../textures/timestamp; \
574 touch ${ASSETS_TIMESTAMP}; \
576 LAST_MODIF=$$(find ${IRRLICHT_DIR}/media -type f -printf '%T@ %p\n' | sort -n | tail -1 | cut -f2- -d" "); \
577 if [ $$(basename $$LAST_MODIF) != "timestamp" ] ; then \
578 touch ${IRRLICHT_DIR}/media/timestamp; \
579 touch ${ASSETS_TIMESTAMP}; \
581 if [ ${ROOT}/../../minetest.conf.example -nt ${ASSETS_TIMESTAMP} ] ; then \
582 echo "conf changed"; \
583 touch ${ASSETS_TIMESTAMP}; \
585 if [ ${ROOT}/../../README.txt -nt ${ASSETS_TIMESTAMP} ] ; then \
586 touch ${ASSETS_TIMESTAMP}; \
588 if [ ! -e $(ASSETS_TIMESTAMP) ] ; then \
589 touch $(ASSETS_TIMESTAMP); \
592 assets : $(ASSETS_TIMESTAMP)
594 if [ ! -e ${ASSETS_TIMESTAMP}.old ] ; then \
597 if [ ${ASSETS_TIMESTAMP} -nt ${ASSETS_TIMESTAMP}.old ] ; then \
600 if [ ! -d ${ROOT}/assets ] ; then \
603 if [ $$REFRESH -ne 0 ] ; then \
604 echo "assets changed, refreshing..."; \
605 $(MAKE) -j${PARALLEL} clean_assets; \
606 mkdir -p ${ROOT}/assets/Minetest; \
607 cp ${ROOT}/../../minetest.conf.example ${ROOT}/assets/Minetest; \
608 cp ${ROOT}/../../README.txt ${ROOT}/assets/Minetest; \
609 cp -r ${ROOT}/../../builtin ${ROOT}/assets/Minetest; \
610 cp -r ${ROOT}/../../client ${ROOT}/assets/Minetest; \
611 cp -r ${ROOT}/../../doc ${ROOT}/assets/Minetest; \
612 cp -r ${ROOT}/../../fonts ${ROOT}/assets/Minetest; \
613 cp -r ${ROOT}/../../games ${ROOT}/assets/Minetest; \
614 cp -r ${ROOT}/../../mods ${ROOT}/assets/Minetest; \
615 cp -r ${ROOT}/../../po ${ROOT}/assets/Minetest; \
616 cp -r ${ROOT}/../../textures ${ROOT}/assets/Minetest; \
617 mkdir -p ${ROOT}/assets/Minetest/media; \
618 cp -r ${IRRLICHT_DIR}/media/Shaders ${ROOT}/assets/Minetest/media; \
620 find . -name "timestamp" -exec rm {} \; ; \
621 find . -name "*.blend" -exec rm {} \; ; \
622 ls -R | grep ":$$" | sed -e 's/:$$//' -e 's/\.//' -e 's/^\///' > "index.txt"; \
623 cp ${ROOT}/${ASSETS_TIMESTAMP} ${ROOT}/${ASSETS_TIMESTAMP}.old; \
625 echo "nothing to be done for assets"; \
631 apk: $(PATHCFGFILE) assets $(IRRLICHT_LIB) $(CURL_LIB) $(LEVELDB_LIB) \
632 $(OPENAL_LIB) $(OGG_LIB) prep_srcdir $(ROOT)/jni/src/android_version.h
633 @export NDEBUG=$$NDEBUG; $(MAKE) -j${PARALLEL} manifest; \
634 export PATH=$$PATH:${SDKFOLDER}/platform-tools:${ANDROID_NDK}; \
635 export ANDROID_HOME=${SDKFOLDER}; \
636 mkdir -p ${ROOT}/src; \
637 ndk-build NDK_MODULE_PATH=${NDK_MODULE_PATH} -j${PARALLEL} \
638 GPROF=${GPROF} APP_ABI=${TARGET_ABI} \
639 APP_PLATFORM=${APP_PLATFORM} \
640 TARGET_LIBDIR=${TARGET_LIBDIR} \
641 TARGET_CFLAGS+="${TARGET_CFLAGS_ADDON}" \
642 TARGET_LDFLAGS+="${TARGET_LDFLAGS_ADDON}" \
643 TARGET_CXXFLAGS+="${TARGET_CXXFLAGS_ADDON}" && \
644 ant $$BUILD_TYPE && \
645 echo "++ Success!" && \
646 echo "APK: bin/Minetest-$$BUILD_TYPE.apk" && \
647 echo "You can install it with \`adb install -r bin/Minetest-$$BUILD_TYPE.apk\`"
650 @rm ${ROOT}/jni/src; \
651 ln -s ${ROOT}/../../src ${ROOT}/jni/src
654 @export PATH=$$PATH:${SDKFOLDER}platform-tools:${ANDROID_NDK}; \
655 export ANDROID_HOME=${SDKFOLDER}; \
659 @export PATH=$$PATH:${SDKFOLDER}platform-tools:${ANDROID_NDK}; \
660 adb install -r ${ROOT}/bin/Minetest-debug.apk
663 @export PATH=$$PATH:${SDKFOLDER}platform-tools:${ANDROID_NDK}; \
664 adb install -r ${ROOT}/bin/Minetest-release.apk
667 @echo "export PATH=$$PATH:${SDKFOLDER}platform-tools:${ANDROID_NDK}" > and_env;\
668 echo "export ANDROID_HOME=${SDKFOLDER}" >> and_env;
671 @$(MAKE) -j${PARALLEL} clean_apk; \
672 $(MAKE) clean_assets clean_irrlicht clean_leveldb clean_curl clean_openssl \
673 clean_openal clean_ogg clean_manifest; \
675 $(RM) -r gen libs obj deps bin Debug and_env
677 $(ROOT)/jni/src/android_version.h :
678 @echo "#define STR_HELPER(x) #x" \
679 >${ROOT}/jni/src/android_version.h; \
680 echo "#define STR(x) STR_HELPER(x)" \
681 >> ${ROOT}/jni/src/android_version.h; \
682 echo "#define VERSION_MAJOR $$(cat ${ROOT}/../../CMakeLists.txt | \
683 grep ^set\(VERSION_MAJOR\ | sed 's/)/ /' | awk '{print $$2;}')" \
684 >> ${ROOT}/jni/src/android_version.h; \
685 echo "#define VERSION_MINOR $$(cat ${ROOT}/../../CMakeLists.txt | \
686 grep ^set\(VERSION_MINOR\ | sed 's/)/ /' | awk '{print $$2;}')" \
687 >> ${ROOT}/jni/src/android_version.h; \
688 echo "#define VERSION_PATCH $$(cat ${ROOT}/../../CMakeLists.txt | \
689 grep ^set\(VERSION_PATCH\ | sed 's/)/ /' | awk '{print $$2;}')" \
690 >> ${ROOT}/jni/src/android_version.h; \
691 echo "#define VERSION_PATCH_ORIG $$(cat ${ROOT}/../../CMakeLists.txt | \
692 grep ^set\(VERSION_PATCH\ | sed 's/)/ /' | awk '{print $$2;}')" \
693 >> ${ROOT}/jni/src/android_version.h; \
694 echo "#define CMAKE_VERSION_GITHASH \"$$(git rev-parse --short=8 HEAD)\"" \
695 >> ${ROOT}/jni/src/android_version.h; \
696 echo "#define CMAKE_VERSION_STRING STR(VERSION_MAJOR)\".\"STR(VERSION_MINOR)\
697 \".\"STR(VERSION_PATCH)" \
698 >> ${ROOT}/jni/src/android_version.h;
701 @VERS_MAJOR=$$(cat ${ROOT}/../../CMakeLists.txt | \
702 grep ^set\(VERSION_MAJOR\ | sed 's/)/ /' | awk '{print $$2;}'); \
703 VERS_MINOR=$$(cat ${ROOT}/../../CMakeLists.txt | \
704 grep ^set\(VERSION_MINOR\ | sed 's/)/ /' | awk '{print $$2;}'); \
705 VERS_PATCH=$$(cat ${ROOT}/../../CMakeLists.txt | \
706 grep ^set\(VERSION_PATCH\ | sed 's/)/ /' | awk '{print $$2;}'); \
707 BASE_VERSION="$$VERS_MAJOR.$$VERS_MINOR.$$VERS_PATCH"; \
708 if [ "${NDEBUG}x" != "x" ] ; then \
710 DBG_FLAG="android:debuggable=\"false\""; \
712 DBG="<uses-permission android:name=\"android.permission.SET_DEBUG_APP\" />"; \
713 DBG_FLAG="android:debuggable=\"true\""; \
715 cat ${ROOT}/AndroidManifest.xml.template | \
716 sed s/###ANDROID_VERSION###/${ANDROID_VERSION_CODE}/g | \
717 sed s/###BASE_VERSION###/$$BASE_VERSION/g | \
718 sed -e "s@###DEBUG_BUILD###@$$DBG@g" | \
719 sed -e "s@###DEBUG_FLAG###@$$DBG_FLAG@g" >${ROOT}/AndroidManifest.xml
722 rm -rf ${ROOT}/AndroidManifest.xml
724 clean : clean_apk clean_assets