ROOT = $(shell pwd)
GAMES_TO_COPY = minetest_game
+MODS_TO_COPY =
+
+
+VERSION_MAJOR := $(shell cat $(ROOT)/../../CMakeLists.txt | \
+ grep ^set\(VERSION_MAJOR\ | sed 's/)/ /' | cut -f2 -d' ')
+VERSION_MINOR := $(shell cat $(ROOT)/../../CMakeLists.txt | \
+ grep ^set\(VERSION_MINOR\ | sed 's/)/ /' | cut -f2 -d' ')
+VERSION_PATCH := $(shell cat $(ROOT)/../../CMakeLists.txt | \
+ grep ^set\(VERSION_PATCH\ | sed 's/)/ /' | cut -f2 -d' ')
################################################################################
# Android Version code
# Increase for each build!
################################################################################
# Play Store actual version (16/03/15): 11
-ANDROID_VERSION_CODE = 12
+ANDROID_VERSION_CODE = 13
################################################################################
# toolchain config for arm old processors
# toolchain config for arm new processors
################################################################################
TARGET_HOST = arm-linux
-TARGET_ABI = armeabi-v7a-hard
+TARGET_ABI = armeabi-v7a
TARGET_LIBDIR = armeabi-v7a
TARGET_TOOLCHAIN = arm-linux-androideabi-
-TARGET_CFLAGS_ADDON = -mfpu=vfpv3-d16 -D_NDK_MATH_NO_SOFTFP=1 \
- -mfloat-abi=hard -march=armv7-a
+TARGET_CFLAGS_ADDON = -mfloat-abi=softfp -mfpu=vfpv3
TARGET_CXXFLAGS_ADDON = $(TARGET_CFLAGS_ADDON)
-TARGET_LDFLAGS_ADDON = -Wl,--no-warn-mismatch -lm_hard
TARGET_ARCH = armv7
CROSS_PREFIX = arm-linux-androideabi-
COMPILER_VERSION = 4.8
LEVELDB_LIB = $(LEVELDB_DIR)libleveldb.a
LEVELDB_TIMESTAMP = $(LEVELDB_DIR)/timestamp
LEVELDB_TIMESTAMP_INT = $(ROOT)/deps/leveldb_timestamp
-LEVELDB_URL_GIT = https://code.google.com/p/leveldb/
+LEVELDB_URL_GIT = https://github.com/google/leveldb
OPENAL_DIR = $(ROOT)/deps/openal-soft/
OPENAL_LIB = $(OPENAL_DIR)libs/$(TARGET_ABI)/libopenal.so
FREETYPE_TIMESTAMP_INT = $(ROOT)/deps/freetype_timestamp
FREETYPE_URL_GIT = https://github.com/cdave1/freetype2-android
+ICONV_VERSION = 1.14
+ICONV_DIR = $(ROOT)/deps/libiconv/
+ICONV_LIB = $(ICONV_DIR)/lib/.libs/libiconv.so
+ICONV_TIMESTAMP = $(ICONV_DIR)timestamp
+ICONV_TIMESTAMP_INT = $(ROOT)/deps/iconv_timestamp
+ICONV_URL_HTTP = http://ftp.gnu.org/pub/gnu/libiconv/libiconv-$(ICONV_VERSION).tar.gz
+
SQLITE3_FOLDER = sqlite-amalgamation-3080704
SQLITE3_URL = http://www.sqlite.org/2014/$(SQLITE3_FOLDER).zip
$(OPENAL_TIMESTAMP) $(OGG_TIMESTAMP) \
$(IRRLICHT_TIMESTAMP) $(CURL_TIMESTAMP) \
$(OPENSSL_TIMESTAMP) curl_binary \
- $(ROOT)/jni/src/android_version.h
+ $(ROOT)/jni/src/android_version.h \
+ $(ROOT)/jni/src/android_version_githash.h
debug : $(PATHCFGFILE)
export NDEBUG=; \
echo "changed timestamp for openal detected building..."; \
cd ${OPENAL_DIR}; \
ndk-build NDEBUG=${NDEBUG} NDK_MODULE_PATH=${NDK_MODULE_PATH} \
- APP_ABI=${TARGET_ABI} APP_PLATFORM=${APP_PLATFORM} \
- TARGET_CFLAGS+="${TARGET_CFLAGS_ADDON}" \
+ APP_ABI=${TARGET_ABI} TARGET_ARCH_ABI=${TARGET_ABI} \
+ APP_PLATFORM=${APP_PLATFORM} TARGET_CFLAGS+="${TARGET_CFLAGS_ADDON}" \
TARGET_LDFLAGS+="${TARGET_LDFLAGS_ADDON}" \
TARGET_CXXFLAGS+="${TARGET_CXXFLAGS_ADDON}" || exit 1; \
touch ${OPENAL_TIMESTAMP}; \
git clone ${OGG_URL_GIT}|| exit 1; \
cd libvorbis-libogg-android ; \
patch -p1 < ../../libvorbis-libogg-fpu.patch || exit 1; \
+ sed -i 's-:-?-' jni/Application.mk; \
fi
ogg : $(OGG_LIB)
git clone ${FREETYPE_URL_GIT} || exit 1; \
fi
-$(IRRLICHT_TIMESTAMP) : irrlicht_download
- @LAST_MODIF=$$(find ${IRRLICHT_DIR} -type f -printf '%T@ %p\n' | sort -n | tail -1 | cut -f2- -d" "); \
- if [ $$(basename $$LAST_MODIF) != "timestamp" ] ; then \
- touch ${IRRLICHT_TIMESTAMP}; \
- fi
-
freetype : $(FREETYPE_LIB)
$(FREETYPE_LIB) : $(FREETYPE_TIMESTAMP)
clean_freetype :
$(RM) -rf ${FREETYPE_DIR}
+$(ICONV_TIMESTAMP) : iconv_download
+ @LAST_MODIF=$$(find ${ICONV_DIR} -type f -printf '%T@ %p\n' | sort -n | tail -1 | cut -f2- -d" "); \
+ if [ $$(basename $$LAST_MODIF) != "timestamp" ] ; then \
+ touch ${ICONV_TIMESTAMP}; \
+ fi
+
+iconv_download :
+ @if [ ! -d ${ICONV_DIR} ] ; then \
+ echo "iconv sources missing, downloading..."; \
+ mkdir -p ${ROOT}/deps; \
+ cd ${ROOT}/deps; \
+ wget ${ICONV_URL_HTTP} || exit 1; \
+ tar -xzf libiconv-${ICONV_VERSION}.tar.gz || exit 1; \
+ rm libiconv-${ICONV_VERSION}.tar.gz; \
+ ln -s libiconv-${ICONV_VERSION} libiconv; \
+ cd ${ICONV_DIR}; \
+ patch -p1 < ${ROOT}/libiconv_android.patch; \
+ patch -p1 < ${ROOT}/libiconv_stdio.patch; \
+ fi
+
+iconv : $(ICONV_LIB)
+
+$(ICONV_LIB) : $(ICONV_TIMESTAMP)
+ @REFRESH=0; \
+ if [ ! -e ${ICONV_TIMESTAMP_INT} ] ; then \
+ REFRESH=1; \
+ fi; \
+ if [ ! -e ${ICONV_LIB} ] ; then \
+ REFRESH=1; \
+ fi; \
+ if [ ${ICONV_TIMESTAMP} -nt ${ICONV_TIMESTAMP_INT} ] ; then \
+ REFRESH=1; \
+ fi; \
+ if [ $$REFRESH -ne 0 ] ; then \
+ mkdir -p ${ICONV_DIR}; \
+ export PATH=$$PATH:${SDKFOLDER}/platform-tools:${ANDROID_NDK}; \
+ echo "changed timestamp for iconv detected building..."; \
+ cd ${ICONV_DIR}; \
+ \
+ export TOOLCHAIN=/tmp/ndk-${TARGET_HOST}-iconv; \
+ ${ANDROID_NDK}/build/tools/make-standalone-toolchain.sh \
+ --toolchain=${TARGET_TOOLCHAIN}${COMPILER_VERSION} \
+ --install-dir=$${TOOLCHAIN}; \
+ export PATH="$${TOOLCHAIN}/bin:$${PATH}"; \
+ export CC=${CROSS_PREFIX}gcc; \
+ export CXX=${CROSS_PREFIX}g++; \
+ export TARGET_OS=OS_ANDROID_CROSSCOMPILE; \
+ ./configure --host=${TARGET_HOST} || exit 1; \
+ sed -i 's/LIBICONV_VERSION_INFO) /LIBICONV_VERSION_INFO) -avoid-version /g' lib/Makefile; \
+ grep "iconv_LDFLAGS" src/Makefile; \
+ $(MAKE) -s || exit 1; \
+ touch ${ICONV_TIMESTAMP}; \
+ touch ${ICONV_TIMESTAMP_INT}; \
+ rm -rf ${TOOLCHAIN}; \
+ else \
+ echo "nothing to be done for iconv"; \
+ fi
+
+clean_iconv :
+ $(RM) -rf ${ICONV_DIR}
+
#Note: Texturehack patch is required for gpu's not supporting color format
# correctly. Known bad GPU:
# -geforce on emulator
patch -p1 < ../../irrlicht-texturehack.patch || exit 1; \
fi
+$(IRRLICHT_TIMESTAMP) : irrlicht_download
+ @LAST_MODIF=$$(find ${IRRLICHT_DIR} -type f -printf '%T@ %p\n' | sort -n | tail -1 | cut -f2- -d" "); \
+ if [ $$(basename $$LAST_MODIF) != "timestamp" ] ; then \
+ touch ${IRRLICHT_TIMESTAMP}; \
+ fi
+
irrlicht : $(IRRLICHT_LIB)
$(IRRLICHT_LIB): $(IRRLICHT_TIMESTAMP) $(FREETYPE_LIB)
curl_binary:
@if [ ! -d "deps/curl-${CURL_VERSION_BINARY}" ] ; then \
- echo "curl sources missing, downloading..."; \
+ echo "curl binary missing, downloading..."; \
mkdir -p ${ROOT}/deps; \
cd deps; \
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;\
$(ASSETS_TIMESTAMP) : $(IRRLICHT_LIB)
@mkdir -p ${ROOT}/deps; \
- LAST_MODIF=$$(find ${ROOT}/../../builtin -type f -printf '%T@ %p\n' | sort -n | tail -1 | cut -f2- -d" "); \
- if [ $$(basename $$LAST_MODIF) != "timestamp" ] ; then \
- touch ${ROOT}/../../builtin/timestamp; \
- touch ${ASSETS_TIMESTAMP}; \
- echo builtin changed $$LAST_MODIF; \
- fi; \
- LAST_MODIF=$$(find ${ROOT}/../../client -type f -printf '%T@ %p\n' | sort -n | tail -1 | cut -f2- -d" "); \
- if [ $$(basename $$LAST_MODIF) != "timestamp" ] ; then \
- touch ${ROOT}/../../client/timestamp; \
- touch ${ASSETS_TIMESTAMP}; \
- fi; \
- LAST_MODIF=$$(find ${ROOT}/../../doc -type f -printf '%T@ %p\n' | sort -n | tail -1 | cut -f2- -d" "); \
- if [ $$(basename $$LAST_MODIF) != "timestamp" ] ; then \
- touch ${ROOT}/../../doc/timestamp; \
- touch ${ASSETS_TIMESTAMP}; \
- fi; \
- LAST_MODIF=$$(find ${ROOT}/../../fonts -type f -printf '%T@ %p\n' | sort -n | tail -1 | cut -f2- -d" "); \
- if [ $$(basename $$LAST_MODIF) != "timestamp" ] ; then \
- touch ${ROOT}/../../fonts/timestamp; \
- touch ${ASSETS_TIMESTAMP}; \
- fi; \
- LAST_MODIF=$$(find ${ROOT}/../../games -type f -printf '%T@ %p\n' | sort -n | tail -1 | cut -f2- -d" "); \
- if [ $$(basename $$LAST_MODIF) != "timestamp" ] ; then \
- touch ${ROOT}/../../games/timestamp; \
- touch ${ASSETS_TIMESTAMP}; \
- fi; \
- LAST_MODIF=$$(find ${ROOT}/../../mods -type f -printf '%T@ %p\n' | sort -n | tail -1 | cut -f2- -d" "); \
- if [ $$(basename $$LAST_MODIF) != "timestamp" ] ; then \
- touch ${ROOT}/../../mods/timestamp; \
- touch ${ASSETS_TIMESTAMP}; \
- fi; \
- LAST_MODIF=$$(find ${ROOT}/../../po -type f -printf '%T@ %p\n' | sort -n | tail -1 | cut -f2- -d" "); \
- if [ $$(basename $$LAST_MODIF) != "timestamp" ] ; then \
- touch ${ROOT}/../../po/timestamp; \
- touch ${ASSETS_TIMESTAMP}; \
- fi; \
- LAST_MODIF=$$(find ${ROOT}/../../textures -type f -printf '%T@ %p\n' | sort -n | tail -1 | cut -f2- -d" "); \
- if [ $$(basename $$LAST_MODIF) != "timestamp" ] ; then \
- touch ${ROOT}/../../textures/timestamp; \
- touch ${ASSETS_TIMESTAMP}; \
- fi; \
+ for DIRNAME in {builtin,client,doc,fonts,games,mods,po,textures}; do \
+ LAST_MODIF=$$(find ${ROOT}/../../${DIRNAME} -type f -printf '%T@ %p\n' | sort -n | tail -1 | cut -f2- -d" "); \
+ if [ $$(basename $$LAST_MODIF) != "timestamp" ]; then \
+ touch ${ROOT}/../../${DIRNAME}/timestamp; \
+ touch ${ASSETS_TIMESTAMP}; \
+ echo ${DIRNAME} changed $$LAST_MODIF; \
+ fi; \
+ done; \
LAST_MODIF=$$(find ${IRRLICHT_DIR}/media -type f -printf '%T@ %p\n' | sort -n | tail -1 | cut -f2- -d" "); \
if [ $$(basename $$LAST_MODIF) != "timestamp" ] ; then \
touch ${IRRLICHT_DIR}/media/timestamp; \
cp -r ${ROOT}/../../doc ${ROOT}/assets/Minetest; \
cp -r ${ROOT}/../../fonts ${ROOT}/assets/Minetest; \
mkdir ${ROOT}/assets/Minetest/games; \
- for game in ${GAMES_TO_COPY}; \
- do \
+ for game in ${GAMES_TO_COPY}; do \
cp -r ${ROOT}/../../games/$$game ${ROOT}/assets/Minetest/games/; \
done; \
- cp -r ${ROOT}/../../mods ${ROOT}/assets/Minetest; \
+ mkdir ${ROOT}/assets/Minetest/mods; \
+ for mod in ${MODS_TO_COPY}; do \
+ cp -r ${ROOT}/../../mods/$$mod ${ROOT}/assets/Minetest/mods/; \
+ done; \
cp -r ${ROOT}/../../po ${ROOT}/assets/Minetest; \
cp -r ${ROOT}/../../textures ${ROOT}/assets/Minetest; \
mkdir -p ${ROOT}/assets/Minetest/media; \
clean_assets :
@$(RM) -r assets
-apk: $(PATHCFGFILE) assets $(IRRLICHT_LIB) $(CURL_LIB) $(GMP_LIB) $(LEVELDB_TARGET) \
+apk: $(PATHCFGFILE) assets $(ICONV_LIB) $(IRRLICHT_LIB) $(CURL_LIB) $(GMP_LIB) $(LEVELDB_TARGET) \
$(OPENAL_LIB) $(OGG_LIB) prep_srcdir $(ROOT)/jni/src/android_version.h \
- sqlite3_download
+ $(ROOT)/jni/src/android_version_githash.h sqlite3_download
@export NDEBUG=$$NDEBUG; $(MAKE) manifest; \
export PATH=$$PATH:${SDKFOLDER}/platform-tools:${ANDROID_NDK}; \
export ANDROID_HOME=${SDKFOLDER}; \
echo "You can install it with \`adb install -r bin/Minetest-$$BUILD_TYPE.apk\`"
prep_srcdir :
- @rm ${ROOT}/jni/src; \
- ln -s ${ROOT}/../../src ${ROOT}/jni/src
+ @if [ ! -e ${ROOT}/jni/src ]; then \
+ ln -s ${ROOT}/../../src ${ROOT}/jni/src; \
+ fi
clean_apk : manifest
@export PATH=$$PATH:${SDKFOLDER}platform-tools:${ANDROID_NDK}; \
clean_all :
@$(MAKE) clean_apk; \
- $(MAKE) clean_assets clean_irrlicht clean_leveldb clean_curl clean_openssl \
+ $(MAKE) clean_assets clean_iconv clean_irrlicht clean_leveldb clean_curl clean_openssl \
clean_openal clean_ogg clean_gmp clean_manifest; \
sleep 1; \
$(RM) -r gen libs obj deps bin Debug and_env
-$(ROOT)/jni/src/android_version.h :
- @echo "#ifndef ANDROID_MT_VERSION_H" \
- >${ROOT}/jni/src/android_version.h; \
- echo "#define ANDROID_MT_VERSION_H" \
- >> ${ROOT}/jni/src/android_version.h; \
- echo "#define VERSION_MAJOR $$(cat ${ROOT}/../../CMakeLists.txt | \
- grep ^set\(VERSION_MAJOR\ | sed 's/)/ /' | awk '{print $$2;}')" \
- >> ${ROOT}/jni/src/android_version.h; \
- echo "#define VERSION_MINOR $$(cat ${ROOT}/../../CMakeLists.txt | \
- grep ^set\(VERSION_MINOR\ | sed 's/)/ /' | awk '{print $$2;}')" \
- >> ${ROOT}/jni/src/android_version.h; \
- echo "#define VERSION_PATCH $$(cat ${ROOT}/../../CMakeLists.txt | \
- grep ^set\(VERSION_PATCH\ | sed 's/)/ /' | awk '{print $$2;}')" \
- >> ${ROOT}/jni/src/android_version.h; \
+$(ROOT)/jni/src/android_version_githash.h : prep_srcdir
+ @export VERSION_FILE=${ROOT}/jni/src/android_version_githash.h; \
+ export VERSION_FILE_NEW=$${VERSION_FILE}.new; \
+ { \
+ echo "#ifndef ANDROID_MT_VERSION_GITHASH_H"; \
+ echo "#define ANDROID_MT_VERSION_GITHASH_H"; \
export GITHASH=$$(git rev-parse --short=8 HEAD); \
- export GITTAG=$$(git describe --abbrev=0 --tags); \
- echo "#define VERSION_GITHASH \"$$GITTAG-$$GITHASH-Android\"" \
- >> ${ROOT}/jni/src/android_version.h; \
+ export VERSION_STR="${VERSION_MAJOR}.${VERSION_MINOR}.${VERSION_PATCH}"; \
+ echo "#define VERSION_GITHASH \"$$VERSION_STR-$$GITHASH-Android\""; \
+ echo "#endif"; \
+ } > "$${VERSION_FILE_NEW}"; \
+ if ! cmp -s $${VERSION_FILE} $${VERSION_FILE_NEW}; then \
+ echo "android_version_githash.h changed, updating..."; \
+ mv "$${VERSION_FILE_NEW}" "$${VERSION_FILE}"; \
+ else \
+ rm "$${VERSION_FILE_NEW}"; \
+ fi
+
+
+$(ROOT)/jni/src/android_version.h : prep_srcdir
+ @export VERSION_FILE=${ROOT}/jni/src/android_version.h; \
+ export VERSION_FILE_NEW=$${VERSION_FILE}.new; \
+ { \
+ echo "#ifndef ANDROID_MT_VERSION_H"; \
+ echo "#define ANDROID_MT_VERSION_H"; \
+ echo "#define VERSION_MAJOR ${VERSION_MAJOR}"; \
+ echo "#define VERSION_MINOR ${VERSION_MINOR}"; \
+ echo "#define VERSION_PATCH ${VERSION_PATCH}"; \
echo "#define VERSION_STRING STR(VERSION_MAJOR)\".\"STR(VERSION_MINOR)\
- \".\"STR(VERSION_PATCH)" \
- >> ${ROOT}/jni/src/android_version.h; \
- echo "#endif" \
- >> ${ROOT}/jni/src/android_version.h;
+ \".\"STR(VERSION_PATCH)"; \
+ echo "#endif"; \
+ } > $${VERSION_FILE_NEW}; \
+ if ! cmp -s $${VERSION_FILE} $${VERSION_FILE_NEW}; then \
+ echo "android_version.h changed, updating..."; \
+ mv "$${VERSION_FILE_NEW}" "$${VERSION_FILE}"; \
+ else \
+ rm "$${VERSION_FILE_NEW}"; \
+ fi
manifest :
- @VERS_MAJOR=$$(cat ${ROOT}/../../CMakeLists.txt | \
- grep ^set\(VERSION_MAJOR\ | sed 's/)/ /' | awk '{print $$2;}'); \
- VERS_MINOR=$$(cat ${ROOT}/../../CMakeLists.txt | \
- grep ^set\(VERSION_MINOR\ | sed 's/)/ /' | awk '{print $$2;}'); \
- VERS_PATCH=$$(cat ${ROOT}/../../CMakeLists.txt | \
- grep ^set\(VERSION_PATCH\ | sed 's/)/ /' | awk '{print $$2;}'); \
- BASE_VERSION="$$VERS_MAJOR.$$VERS_MINOR.$$VERS_PATCH"; \
+ @BASE_VERSION="${VERSION_MAJOR}.${VERSION_MINOR}.${VERSION_PATCH}"; \
if [ "${NDEBUG}x" != "x" ] ; then \
DBG=''; \
DBG_FLAG="android:debuggable=\"false\""; \
DBG_FLAG="android:debuggable=\"true\""; \
fi; \
cat ${ROOT}/AndroidManifest.xml.template | \
- sed s/###ANDROID_VERSION###/${ANDROID_VERSION_CODE}/g | \
- sed s/###BASE_VERSION###/$$BASE_VERSION/g | \
+ sed "s/###ANDROID_VERSION###/${ANDROID_VERSION_CODE}/g" | \
+ sed "s/###BASE_VERSION###/$$BASE_VERSION/g" | \
sed -e "s@###DEBUG_BUILD###@$$DBG@g" | \
sed -e "s@###DEBUG_FLAG###@$$DBG_FLAG@g" >${ROOT}/AndroidManifest.xml