Makefile 47 KB

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