Skip to content

Commit 181f7ba

Browse files
committed
Add LibGMP
Uses system provided libgmp if found, if not it falls back to mini-gmp.
1 parent 58eae43 commit 181f7ba

File tree

11 files changed

+4537
-43
lines changed

11 files changed

+4537
-43
lines changed

.gitignore

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -60,6 +60,8 @@ src/cguittfont/CMakeFiles/
6060
src/cguittfont/libcguittfont.a
6161
src/cguittfont/cmake_install.cmake
6262
src/cguittfont/Makefile
63+
src/gmp/CMakeFiles/
64+
src/gmp/libgmp.a
6365
src/json/CMakeFiles/
6466
src/json/libjsoncpp.a
6567
src/sqlite/CMakeFiles/*

README.txt

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -103,7 +103,7 @@ Compiling on GNU/Linux:
103103
-----------------------
104104

105105
Install dependencies. Here's an example for Debian/Ubuntu:
106-
$ sudo apt-get install build-essential libirrlicht-dev cmake libbz2-dev libpng12-dev libjpeg-dev libxxf86vm-dev libgl1-mesa-dev libsqlite3-dev libogg-dev libvorbis-dev libopenal-dev libcurl4-gnutls-dev libfreetype6-dev zlib1g-dev libjsoncpp-dev
106+
$ sudo apt-get install build-essential libirrlicht-dev cmake libbz2-dev libpng12-dev libjpeg-dev libxxf86vm-dev libgl1-mesa-dev libsqlite3-dev libogg-dev libvorbis-dev libopenal-dev libcurl4-gnutls-dev libfreetype6-dev zlib1g-dev libgmp-dev libjsoncpp-dev
107107

108108
You can install git for easily keeping your copy up to date.
109109
If you dont want git, read below on how to get the source without git.
@@ -166,6 +166,7 @@ ENABLE_LEVELDB - Build with LevelDB; Enables use of LevelDB map backend (fa
166166
ENABLE_REDIS - Build with libhiredis; Enables use of Redis map backend
167167
ENABLE_SOUND - Build with OpenAL, libogg & libvorbis; in-game Sounds
168168
ENABLE_LUAJIT - Build with LuaJIT (much faster than non-JIT Lua)
169+
ENABLE_SYSTEM_GMP - Use GMP from system (much faster than bundled mini-gmp)
169170
RUN_IN_PLACE - Create a portable install (worlds, settings etc. in current directory)
170171
USE_GPROF - Enable profiling using GProf
171172
VERSION_EXTRA - Text to append to version (e.g. VERSION_EXTRA=foobar -> Minetest 0.4.9-foobar)

build/android/Makefile

Lines changed: 101 additions & 38 deletions
Original file line numberDiff line numberDiff line change
@@ -118,6 +118,13 @@ CURL_TIMESTAMP = $(CURL_DIR)/timestamp
118118
CURL_TIMESTAMP_INT = $(ROOT)/deps/curl_timestamp
119119
CURL_URL_HTTP = http://curl.haxx.se/download/curl-${CURL_VERSION}.tar.bz2
120120

121+
GMP_VERSION = 6.0.0
122+
GMP_DIR = $(ROOT)/deps/gmp-$(GMP_VERSION)
123+
GMP_LIB = $(GMP_DIR)/usr/lib/libgmp.la
124+
GMP_TIMESTAMP = $(GMP_DIR)/timestamp
125+
GMP_TIMESTAMP_INT = $(ROOT)/deps/gmp_timestamp
126+
GMP_URL_HTTP = https://gmplib.org/download/gmp/gmp-$(GMP_VERSION).tar.bz2
127+
121128
FREETYPE_DIR = $(ROOT)/deps/freetype2-android/
122129
FREETYPE_LIB = $(FREETYPE_DIR)/Android/obj/local/$(TARGET_ABI)/libfreetype2-static.a
123130
FREETYPE_TIMESTAMP = $(FREETYPE_DIR)timestamp
@@ -148,14 +155,14 @@ endif
148155
$(IRRLICHT_TIMESTAMP) $(CURL_TIMESTAMP) \
149156
$(OPENSSL_TIMESTAMP) curl_binary \
150157
$(ROOT)/jni/src/android_version.h
151-
158+
152159
debug : $(PATHCFGFILE)
153160
export NDEBUG=; \
154161
export BUILD_TYPE=debug; \
155162
$(MAKE) apk
156-
163+
157164
all : debug release
158-
165+
159166
release : $(PATHCFGFILE)
160167
@export NDEBUG=1; \
161168
export BUILD_TYPE=release; \
@@ -194,15 +201,15 @@ $(OPENAL_TIMESTAMP) : openal_download
194201
if [ $$(basename $$LAST_MODIF) != "timestamp" ] ; then \
195202
touch ${OPENAL_TIMESTAMP}; \
196203
fi
197-
204+
198205
openal_download :
199206
@if [ ! -d ${OPENAL_DIR} ] ; then \
200207
echo "openal sources missing, downloading..."; \
201208
mkdir -p ${ROOT}/deps; \
202209
cd ${ROOT}/deps ; \
203210
git clone ${OPENAL_URL_GIT} || exit 1; \
204211
fi
205-
212+
206213
openal : $(OPENAL_LIB)
207214

208215
$(OPENAL_LIB): $(OPENAL_TIMESTAMP)
@@ -227,16 +234,16 @@ $(OPENAL_LIB): $(OPENAL_TIMESTAMP)
227234
else \
228235
echo "nothing to be done for openal"; \
229236
fi
230-
237+
231238
clean_openal :
232239
$(RM) -rf ${OPENAL_DIR}
233-
240+
234241
$(OGG_TIMESTAMP) : ogg_download
235242
@LAST_MODIF=$$(find ${OGG_DIR} -type f -printf '%T@ %p\n' | sort -n | tail -1 | cut -f2- -d" "); \
236243
if [ $$(basename $$LAST_MODIF) != "timestamp" ] ; then \
237244
touch ${OGG_TIMESTAMP}; \
238245
fi
239-
246+
240247
ogg_download :
241248
@if [ ! -d ${OGG_DIR} ] ; then \
242249
echo "ogg sources missing, downloading..."; \
@@ -246,7 +253,7 @@ ogg_download :
246253
cd libvorbis-libogg-android ; \
247254
patch -p1 < ../../libvorbis-libogg-fpu.patch || exit 1; \
248255
fi
249-
256+
250257
ogg : $(OGG_LIB)
251258

252259
$(OGG_LIB): $(OGG_TIMESTAMP)
@@ -275,13 +282,13 @@ $(OGG_LIB): $(OGG_TIMESTAMP)
275282

276283
clean_ogg :
277284
$(RM) -rf ${OGG_DIR}
278-
285+
279286
$(OPENSSL_TIMESTAMP) : openssl_download
280287
@LAST_MODIF=$$(find ${OPENSSL_DIR} -type f -printf '%T@ %p\n' | sort -n | tail -1 | cut -f2- -d" "); \
281288
if [ $$(basename $$LAST_MODIF) != "timestamp" ] ; then \
282289
touch ${OPENSSL_TIMESTAMP}; \
283290
fi
284-
291+
285292
openssl_download :
286293
@if [ ! -d ${OPENSSL_DIR} ] ; then \
287294
echo "openssl sources missing, downloading..."; \
@@ -292,7 +299,7 @@ openssl_download :
292299
cd ${OPENSSL_BASEDIR}; \
293300
patch -p1 < ../../openssl_arch.patch; \
294301
fi
295-
302+
296303
openssl : $(OPENSSL_LIB)
297304

298305
$(OPENSSL_LIB): $(OPENSSL_TIMESTAMP)
@@ -340,7 +347,7 @@ leveldb_download :
340347
cd ${ROOT}/deps ; \
341348
git clone ${LEVELDB_URL_GIT} || exit 1; \
342349
fi
343-
350+
344351
leveldb : $(LEVELDB_LIB)
345352

346353
$(LEVELDB_LIB): $(LEVELDB_TIMESTAMP)
@@ -374,10 +381,10 @@ $(LEVELDB_LIB): $(LEVELDB_TIMESTAMP)
374381
else \
375382
echo "nothing to be done for leveldb"; \
376383
fi
377-
384+
378385
clean_leveldb :
379386
$(RM) -rf deps/leveldb
380-
387+
381388
$(FREETYPE_TIMESTAMP) : freetype_download
382389
@LAST_MODIF=$$(find ${FREETYPE_DIR} -type f -printf '%T@ %p\n' | sort -n | tail -1 | cut -f2- -d" "); \
383390
if [ $$(basename $$LAST_MODIF) != "timestamp" ] ; then \
@@ -391,13 +398,13 @@ freetype_download :
391398
cd deps; \
392399
git clone ${FREETYPE_URL_GIT} || exit 1; \
393400
fi
394-
401+
395402
$(IRRLICHT_TIMESTAMP) : irrlicht_download
396403
@LAST_MODIF=$$(find ${IRRLICHT_DIR} -type f -printf '%T@ %p\n' | sort -n | tail -1 | cut -f2- -d" "); \
397404
if [ $$(basename $$LAST_MODIF) != "timestamp" ] ; then \
398405
touch ${IRRLICHT_TIMESTAMP}; \
399406
fi
400-
407+
401408
freetype : $(FREETYPE_LIB)
402409

403410
$(FREETYPE_LIB) : $(FREETYPE_TIMESTAMP)
@@ -426,7 +433,7 @@ $(FREETYPE_LIB) : $(FREETYPE_TIMESTAMP)
426433
else \
427434
echo "nothing to be done for freetype"; \
428435
fi
429-
436+
430437
clean_freetype :
431438
$(RM) -rf ${FREETYPE_DIR}
432439

@@ -475,10 +482,10 @@ $(IRRLICHT_LIB): $(IRRLICHT_TIMESTAMP) $(FREETYPE_LIB)
475482
else \
476483
echo "nothing to be done for irrlicht"; \
477484
fi
478-
485+
479486
clean_irrlicht :
480487
$(RM) -rf deps/irrlicht
481-
488+
482489
$(CURL_TIMESTAMP) : curl_download
483490
@LAST_MODIF=$$(find ${CURL_DIR} -type f -printf '%T@ %p\n' | sort -n | tail -1 | cut -f2- -d" "); \
484491
if [ $$(basename $$LAST_MODIF) != "timestamp" ] ; then \
@@ -535,13 +542,13 @@ $(CURL_LIB): $(CURL_TIMESTAMP) $(OPENSSL_LIB)
535542
else \
536543
echo "nothing to be done for curl"; \
537544
fi
538-
545+
539546
clean_curl :
540547
$(RM) -rf deps/curl-${CURL_VERSION} \
541548
$(RM) -f deps/curl
542-
543-
544-
curl_binary:
549+
550+
551+
curl_binary:
545552
@if [ ! -d "deps/curl-${CURL_VERSION_BINARY}" ] ; then \
546553
echo "curl sources missing, downloading..."; \
547554
mkdir -p ${ROOT}/deps; \
@@ -552,14 +559,70 @@ curl_binary:
552559
rm curl-7.34.0-rtmp-ssh2-ssl-zlib-static-bin-android.tar.gz; \
553560
fi
554561

562+
$(GMP_TIMESTAMP) : gmp_download
563+
@LAST_MODIF=$$(find ${GMP_DIR} -type f -printf '%T@ %p\n' | sort -n | tail -1 | cut -f2- -d" "); \
564+
if [ $$(basename $$LAST_MODIF) != "timestamp" ] ; then \
565+
touch ${GMP_TIMESTAMP}; \
566+
fi
567+
568+
gmp_download :
569+
@if [ ! -d "${GMP_DIR}" ] ; then \
570+
echo "gmp sources missing, downloading..."; \
571+
mkdir -p ${ROOT}/deps; \
572+
cd deps; \
573+
wget ${GMP_URL_HTTP} || exit 1; \
574+
tar -xjf gmp-${GMP_VERSION}.tar.bz2 || exit 1; \
575+
rm gmp-${GMP_VERSION}.tar.bz2; \
576+
ln -s gmp-${GMP_VERSION} gmp; \
577+
fi
578+
579+
gmp : $(GMP_LIB)
580+
581+
$(GMP_LIB): $(GMP_TIMESTAMP)
582+
@REFRESH=0; \
583+
if [ ! -e ${GMP_TIMESTAMP_INT} ] ; then \
584+
REFRESH=1; \
585+
fi; \
586+
if [ ! -e ${GMP_LIB} ] ; then \
587+
REFRESH=1; \
588+
fi; \
589+
if [ ${GMP_TIMESTAMP} -nt ${GMP_TIMESTAMP_INT} ] ; then \
590+
REFRESH=1; \
591+
fi; \
592+
if [ $$REFRESH -ne 0 ] ; then \
593+
mkdir -p ${GMP_DIR}; \
594+
export PATH="$${PATH}:${SDKFOLDER}/platform-tools:${ANDROID_NDK}"; \
595+
echo "changed timestamp for gmp detected building..."; \
596+
cd deps/gmp-${GMP_VERSION}; \
597+
export CROSS_PREFIX=${CROSS_PREFIX}; \
598+
export TOOLCHAIN=/tmp/ndk-${TARGET_HOST}-gmp; \
599+
${ANDROID_NDK}/build/tools/make-standalone-toolchain.sh \
600+
--toolchain=${TARGET_TOOLCHAIN}${COMPILER_VERSION} \
601+
--install-dir=$${TOOLCHAIN}; \
602+
export PATH="$${TOOLCHAIN}/bin:$${PATH}"; \
603+
export CC=${CROSS_PREFIX}gcc; \
604+
export CXX=${CROSS_PREFIX}g++; \
605+
./configure --disable-static --host=${TARGET_HOST} --prefix=/usr; \
606+
$(MAKE) install DESTDIR=/${GMP_DIR} || exit 1; \
607+
touch ${GMP_TIMESTAMP}; \
608+
touch ${GMP_TIMESTAMP_INT}; \
609+
$(RM) -rf $${TOOLCHAIN}; \
610+
else \
611+
echo "nothing to be done for gmp"; \
612+
fi
613+
614+
clean_gmp:
615+
$(RM) -rf deps/gmp-${GMP_VERSION} \
616+
$(RM) -f deps/gmp
617+
555618
sqlite3_download: deps/${SQLITE3_FOLDER}/sqlite3.c
556619

557620
deps/${SQLITE3_FOLDER}/sqlite3.c :
558621
cd deps; \
559622
wget ${SQLITE3_URL}; \
560623
unzip ${SQLITE3_FOLDER}.zip; \
561624
ln -s ${SQLITE3_FOLDER} sqlite
562-
625+
563626
clean_sqlite3:
564627
cd deps && $(RM) -rf ${SQLITE3_FOLDER} && $(RM) -f ${SQLITE3_FOLDER}.zip && \
565628
$(RM) -f sqlite
@@ -622,7 +685,7 @@ $(ASSETS_TIMESTAMP) : $(IRRLICHT_LIB)
622685
if [ ! -e $(ASSETS_TIMESTAMP) ] ; then \
623686
touch $(ASSETS_TIMESTAMP); \
624687
fi
625-
688+
626689
assets : $(ASSETS_TIMESTAMP)
627690
@REFRESH=0; \
628691
if [ ! -e ${ASSETS_TIMESTAMP}.old ] ; then \
@@ -670,8 +733,8 @@ assets : $(ASSETS_TIMESTAMP)
670733

671734
clean_assets :
672735
@$(RM) -r assets
673-
674-
apk: $(PATHCFGFILE) assets $(IRRLICHT_LIB) $(CURL_LIB) $(LEVELDB_TARGET) \
736+
737+
apk: $(PATHCFGFILE) assets $(IRRLICHT_LIB) $(CURL_LIB) $(GMP_LIB) $(LEVELDB_TARGET) \
675738
$(OPENAL_LIB) $(OGG_LIB) prep_srcdir $(ROOT)/jni/src/android_version.h \
676739
sqlite3_download
677740
@export NDEBUG=$$NDEBUG; $(MAKE) manifest; \
@@ -689,32 +752,32 @@ apk: $(PATHCFGFILE) assets $(IRRLICHT_LIB) $(CURL_LIB) $(LEVELDB_TARGET) \
689752
echo "++ Success!" && \
690753
echo "APK: bin/Minetest-$$BUILD_TYPE.apk" && \
691754
echo "You can install it with \`adb install -r bin/Minetest-$$BUILD_TYPE.apk\`"
692-
755+
693756
prep_srcdir :
694757
@rm ${ROOT}/jni/src; \
695758
ln -s ${ROOT}/../../src ${ROOT}/jni/src
696-
759+
697760
clean_apk : manifest
698761
@export PATH=$$PATH:${SDKFOLDER}platform-tools:${ANDROID_NDK}; \
699762
export ANDROID_HOME=${SDKFOLDER}; \
700763
ant clean
701-
702-
install_debug :
764+
765+
install_debug :
703766
@export PATH=$$PATH:${SDKFOLDER}platform-tools:${ANDROID_NDK}; \
704767
adb install -r ${ROOT}/bin/Minetest-debug.apk
705-
768+
706769
install :
707770
@export PATH=$$PATH:${SDKFOLDER}platform-tools:${ANDROID_NDK}; \
708771
adb install -r ${ROOT}/bin/Minetest-release.apk
709-
772+
710773
envpaths :
711774
@echo "export PATH=$$PATH:${SDKFOLDER}platform-tools:${ANDROID_NDK}" > and_env;\
712775
echo "export ANDROID_HOME=${SDKFOLDER}" >> and_env;
713-
714-
clean_all :
776+
777+
clean_all :
715778
@$(MAKE) clean_apk; \
716779
$(MAKE) clean_assets clean_irrlicht clean_leveldb clean_curl clean_openssl \
717-
clean_openal clean_ogg clean_manifest; \
780+
clean_openal clean_ogg clean_gmp clean_manifest; \
718781
sleep 1; \
719782
$(RM) -r gen libs obj deps bin Debug and_env
720783

@@ -762,7 +825,7 @@ manifest :
762825
sed s/###BASE_VERSION###/$$BASE_VERSION/g | \
763826
sed -e "s@###DEBUG_BUILD###@$$DBG@g" | \
764827
sed -e "s@###DEBUG_FLAG###@$$DBG_FLAG@g" >${ROOT}/AndroidManifest.xml
765-
828+
766829
clean_manifest :
767830
rm -rf ${ROOT}/AndroidManifest.xml
768831

build/android/jni/Android.mk

Lines changed: 8 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -39,6 +39,11 @@ LOCAL_MODULE := vorbis
3939
LOCAL_SRC_FILES := deps/libvorbis-libogg-android/libs/$(TARGET_LIBDIR)/libvorbis.so
4040
include $(PREBUILT_SHARED_LIBRARY)
4141

42+
include $(CLEAR_VARS)
43+
LOCAL_MODULE := gmp
44+
LOCAL_SRC_FILES := deps/gmp/usr/lib/libgmp.so
45+
include $(PREBUILT_SHARED_LIBRARY)
46+
4247
include $(CLEAR_VARS)
4348
LOCAL_MODULE := ssl
4449
LOCAL_SRC_FILES := deps/openssl/libssl.a
@@ -49,7 +54,6 @@ LOCAL_MODULE := crypto
4954
LOCAL_SRC_FILES := deps/openssl/libcrypto.a
5055
include $(PREBUILT_STATIC_LIBRARY)
5156

52-
5357
include $(CLEAR_VARS)
5458
LOCAL_MODULE := minetest
5559

@@ -97,6 +101,7 @@ LOCAL_C_INCLUDES := \
97101
deps/curl/include \
98102
deps/openal-soft/jni/OpenAL/include \
99103
deps/libvorbis-libogg-android/jni/include \
104+
deps/gmp/usr/include \
100105
deps/leveldb/include \
101106
deps/sqlite/
102107

@@ -283,7 +288,7 @@ LOCAL_SRC_FILES += \
283288
jni/src/script/lua_api/l_vmanip.cpp \
284289
jni/src/script/scripting_game.cpp \
285290
jni/src/script/scripting_mainmenu.cpp
286-
291+
287292
#freetype2 support
288293
LOCAL_SRC_FILES += \
289294
jni/src/cguittfont/xCGUITTFont.cpp
@@ -334,7 +339,7 @@ LOCAL_SRC_FILES += \
334339
# json
335340
LOCAL_SRC_FILES += jni/src/json/jsoncpp.cpp
336341

337-
LOCAL_SHARED_LIBRARIES := openal ogg vorbis
342+
LOCAL_SHARED_LIBRARIES := openal ogg vorbis gmp
338343
LOCAL_STATIC_LIBRARIES := Irrlicht freetype curl ssl crypto android_native_app_glue $(PROFILER_LIBS)
339344

340345
ifeq ($(HAVE_LEVELDB), 1)

0 commit comments

Comments
 (0)