From 9c90358912a26076f4c217e97d8cea7e9196d6a7 Mon Sep 17 00:00:00 2001 From: rubenwardy Date: Tue, 25 Apr 2023 21:02:02 +0100 Subject: [PATCH] Split compilation instructions from README.md (#13457) --- README.md | 322 +-------------------------------------- doc/compiling/README.md | 88 +++++++++++ doc/compiling/linux.md | 114 ++++++++++++++ doc/compiling/macos.md | 55 +++++++ doc/compiling/windows.md | 72 +++++++++ 5 files changed, 332 insertions(+), 319 deletions(-) create mode 100644 doc/compiling/README.md create mode 100644 doc/compiling/linux.md create mode 100644 doc/compiling/macos.md create mode 100644 doc/compiling/windows.md diff --git a/README.md b/README.md index d73a485d2..def448d00 100644 --- a/README.md +++ b/README.md @@ -124,326 +124,10 @@ Command-line options Compiling --------- -### Compiling on GNU/Linux -#### Dependencies - -| Dependency | Version | Commentary | -|------------|---------|------------| -| GCC | 5.1+ | or Clang 3.5+ | -| CMake | 3.5+ | | -| IrrlichtMt | - | Custom version of Irrlicht, see https://github.com/minetest/irrlicht | -| Freetype | 2.0+ | | -| SQLite3 | 3+ | | -| Zstd | 1.0+ | | -| LuaJIT | 2.0+ | Bundled Lua 5.1 is used if not present | -| GMP | 5.0.0+ | Bundled mini-GMP is used if not present | -| JsonCPP | 1.0.0+ | Bundled JsonCPP is used if not present | - -For Debian/Ubuntu users: - - sudo apt install g++ make libc6-dev cmake libpng-dev libjpeg-dev libxi-dev libgl1-mesa-dev libsqlite3-dev libogg-dev libvorbis-dev libopenal-dev libcurl4-gnutls-dev libfreetype6-dev zlib1g-dev libgmp-dev libjsoncpp-dev libzstd-dev libluajit-5.1-dev - -For Fedora users: - - sudo dnf install make automake gcc gcc-c++ kernel-devel cmake libcurl-devel openal-soft-devel libpng-devel libjpeg-devel libvorbis-devel libXi-devel libogg-devel freetype-devel mesa-libGL-devel zlib-devel jsoncpp-devel gmp-devel sqlite-devel luajit-devel leveldb-devel ncurses-devel spatialindex-devel libzstd-devel - -For Arch users: - - sudo pacman -S base-devel libcurl-gnutls cmake libxi libpng sqlite libogg libvorbis openal freetype2 jsoncpp gmp luajit leveldb ncurses zstd - -For Alpine users: - - sudo apk add build-base cmake libpng-dev jpeg-dev libxi-dev mesa-dev sqlite-dev libogg-dev libvorbis-dev openal-soft-dev curl-dev freetype-dev zlib-dev gmp-dev jsoncpp-dev luajit-dev zstd-dev - -#### Download - -You can install Git for easily keeping your copy up to date. -If you don’t want Git, read below on how to get the source without Git. -This is an example for installing Git on Debian/Ubuntu: - - sudo apt install git - -For Fedora users: - - sudo dnf install git - -For Arch users: - - sudo pacman -S git - -For Alpine users: - - sudo apk add git - -Download source (this is the URL to the latest of source repository, which might not work at all times) using Git: - - git clone --depth 1 https://github.com/minetest/minetest.git - cd minetest - -Download Minetest Game (otherwise only the "Development Test" game is available) using Git: - - git clone --depth 1 https://github.com/minetest/minetest_game.git games/minetest_game - -Download IrrlichtMt to `lib/irrlichtmt`, it will be used to satisfy the IrrlichtMt dependency that way: - - git clone --depth 1 https://github.com/minetest/irrlicht.git lib/irrlichtmt - -Download source, without using Git: - - wget https://github.com/minetest/minetest/archive/master.tar.gz - tar xf master.tar.gz - cd minetest-master - -Download Minetest Game, without using Git: - - cd games/ - wget https://github.com/minetest/minetest_game/archive/master.tar.gz - tar xf master.tar.gz - mv minetest_game-master minetest_game - cd .. - -Download IrrlichtMt, without using Git: - - cd lib/ - wget https://github.com/minetest/irrlicht/archive/master.tar.gz - tar xf master.tar.gz - mv irrlicht-master irrlichtmt - cd .. - -#### Build - -Build a version that runs directly from the source directory: - - cmake . -DRUN_IN_PLACE=TRUE - make -j$(nproc) - -Run it: - - ./bin/minetest - -- Use `cmake . -LH` to see all CMake options and their current state. -- If you want to install it system-wide (or are making a distribution package), - you will want to use `-DRUN_IN_PLACE=FALSE`. -- You can build a bare server by specifying `-DBUILD_SERVER=TRUE`. -- You can disable the client build by specifying `-DBUILD_CLIENT=FALSE`. -- You can select between Release and Debug build by `-DCMAKE_BUILD_TYPE=`. - - Debug build is slower, but gives much more useful output in a debugger. -- If you build a bare server you don't need to compile IrrlichtMt, just the headers suffice. - - In that case use `-DIRRLICHT_INCLUDE_DIR=/some/where/irrlichtmt/include`. - -- Minetest will use the IrrlichtMt package that is found first, given by the following order: - 1. Specified `IRRLICHTMT_BUILD_DIR` CMake variable - 2. `${PROJECT_SOURCE_DIR}/lib/irrlichtmt` (if existent) - 3. Installation of IrrlichtMt in the system-specific library paths - 4. For server builds with disabled `BUILD_CLIENT` variable, the headers from `IRRLICHT_INCLUDE_DIR` will be used. - - NOTE: Changing the IrrlichtMt build directory (includes system installs) requires regenerating the CMake cache (`rm CMakeCache.txt`) - -### CMake options - -General options and their default values: - - BUILD_CLIENT=TRUE - Build Minetest client - BUILD_SERVER=FALSE - Build Minetest server - BUILD_UNITTESTS=TRUE - Build unittest sources - BUILD_BENCHMARKS=FALSE - Build benchmark sources - CMAKE_BUILD_TYPE=Release - Type of build (Release vs. Debug) - Release - Release build - Debug - Debug build - SemiDebug - Partially optimized debug build - RelWithDebInfo - Release build with debug information - MinSizeRel - Release build with -Os passed to compiler to make executable as small as possible - ENABLE_CURL=ON - Build with cURL; Enables use of online mod repo, public serverlist and remote media fetching via http - ENABLE_CURSES=ON - Build with (n)curses; Enables a server side terminal (command line option: --terminal) - ENABLE_GETTEXT=ON - Build with Gettext; Allows using translations - ENABLE_LEVELDB=ON - Build with LevelDB; Enables use of LevelDB map backend - ENABLE_POSTGRESQL=ON - Build with libpq; Enables use of PostgreSQL map backend (PostgreSQL 9.5 or greater recommended) - ENABLE_REDIS=ON - Build with libhiredis; Enables use of Redis map backend - ENABLE_SPATIAL=ON - Build with LibSpatial; Speeds up AreaStores - ENABLE_SOUND=ON - Build with OpenAL, libogg & libvorbis; in-game sounds - ENABLE_LUAJIT=ON - Build with LuaJIT (much faster than non-JIT Lua) - ENABLE_PROMETHEUS=OFF - Build with Prometheus metrics exporter (listens on tcp/30000 by default) - ENABLE_SYSTEM_GMP=ON - Use GMP from system (much faster than bundled mini-gmp) - ENABLE_SYSTEM_JSONCPP=ON - Use JsonCPP from system - RUN_IN_PLACE=FALSE - Create a portable install (worlds, settings etc. in current directory) - ENABLE_UPDATE_CHECKER=TRUE - Whether to enable update checks by default - INSTALL_DEVTEST=FALSE - Whether the Development Test game should be installed alongside Minetest - USE_GPROF=FALSE - Enable profiling using GProf - VERSION_EXTRA= - Text to append to version (e.g. VERSION_EXTRA=foobar -> Minetest 0.4.9-foobar) - ENABLE_TOUCH=FALSE - Enable Touchscreen support (requires support by IrrlichtMt) - -Library specific options: - - CURL_DLL - Only if building with cURL on Windows; path to libcurl.dll - CURL_INCLUDE_DIR - Only if building with cURL; directory where curl.h is located - CURL_LIBRARY - Only if building with cURL; path to libcurl.a/libcurl.so/libcurl.lib - EGL_INCLUDE_DIR - Only if building with GLES; directory that contains egl.h - EGL_LIBRARY - Only if building with GLES; path to libEGL.a/libEGL.so - EXTRA_DLL - Only on Windows; optional paths to additional DLLs that should be packaged - FREETYPE_INCLUDE_DIR_freetype2 - Directory that contains files such as ftimage.h - FREETYPE_INCLUDE_DIR_ft2build - Directory that contains ft2build.h - FREETYPE_LIBRARY - Path to libfreetype.a/libfreetype.so/freetype.lib - FREETYPE_DLL - Only on Windows; path to libfreetype-6.dll - GETTEXT_DLL - Only when building with gettext on Windows; paths to libintl + libiconv DLLs - GETTEXT_INCLUDE_DIR - Only when building with gettext; directory that contains libintl.h - GETTEXT_LIBRARY - Optional/platform-dependent with gettext; path to libintl.so/libintl.dll.a - GETTEXT_MSGFMT - Only when building with gettext; path to msgfmt/msgfmt.exe - ICONV_LIBRARY - Optional/platform-dependent; path to libiconv.so/libiconv.dylib - IRRLICHT_DLL - Only on Windows; path to IrrlichtMt.dll - IRRLICHT_INCLUDE_DIR - Directory that contains IrrCompileConfig.h (usable for server build only) - LEVELDB_INCLUDE_DIR - Only when building with LevelDB; directory that contains db.h - LEVELDB_LIBRARY - Only when building with LevelDB; path to libleveldb.a/libleveldb.so/libleveldb.dll.a - LEVELDB_DLL - Only when building with LevelDB on Windows; path to libleveldb.dll - PostgreSQL_INCLUDE_DIR - Only when building with PostgreSQL; directory that contains libpq-fe.h - PostgreSQL_LIBRARY - Only when building with PostgreSQL; path to libpq.a/libpq.so/libpq.lib - REDIS_INCLUDE_DIR - Only when building with Redis; directory that contains hiredis.h - REDIS_LIBRARY - Only when building with Redis; path to libhiredis.a/libhiredis.so - SPATIAL_INCLUDE_DIR - Only when building with LibSpatial; directory that contains spatialindex/SpatialIndex.h - SPATIAL_LIBRARY - Only when building with LibSpatial; path to libspatialindex.so/spatialindex-32.lib - LUA_INCLUDE_DIR - Only if you want to use LuaJIT; directory where luajit.h is located - LUA_LIBRARY - Only if you want to use LuaJIT; path to libluajit.a/libluajit.so - OGG_DLL - Only if building with sound on Windows; path to libogg.dll - OGG_INCLUDE_DIR - Only if building with sound; directory that contains an ogg directory which contains ogg.h - OGG_LIBRARY - Only if building with sound; path to libogg.a/libogg.so/libogg.dll.a - OPENAL_DLL - Only if building with sound on Windows; path to OpenAL32.dll - OPENAL_INCLUDE_DIR - Only if building with sound; directory where al.h is located - OPENAL_LIBRARY - Only if building with sound; path to libopenal.a/libopenal.so/OpenAL32.lib - SQLITE3_INCLUDE_DIR - Directory that contains sqlite3.h - SQLITE3_LIBRARY - Path to libsqlite3.a/libsqlite3.so/sqlite3.lib - VORBISFILE_LIBRARY - Only if building with sound; path to libvorbisfile.a/libvorbisfile.so/libvorbisfile.dll.a - VORBIS_DLL - Only if building with sound on Windows; paths to vorbis DLLs - VORBIS_INCLUDE_DIR - Only if building with sound; directory that contains a directory vorbis with vorbisenc.h inside - VORBIS_LIBRARY - Only if building with sound; path to libvorbis.a/libvorbis.so/libvorbis.dll.a - ZLIB_DLL - Only on Windows; path to zlib1.dll - ZLIB_INCLUDE_DIR - Directory that contains zlib.h - ZLIB_LIBRARY - Path to libz.a/libz.so/zlib.lib - ZSTD_DLL - Only on Windows; path to libzstd.dll - ZSTD_INCLUDE_DIR - Directory that contains zstd.h - ZSTD_LIBRARY - Path to libzstd.a/libzstd.so/ztd.lib - -### Compiling on Windows using MSVC - -### Requirements - -- [Visual Studio 2015 or newer](https://visualstudio.microsoft.com) -- [CMake](https://cmake.org/download/) -- [vcpkg](https://github.com/Microsoft/vcpkg) -- [Git](https://git-scm.com/downloads) - -### Compiling and installing the dependencies - -It is highly recommended to use vcpkg as package manager. - -After you successfully built vcpkg you can easily install the required libraries: -```powershell -vcpkg install zlib zstd curl[winssl] openal-soft libvorbis libogg libjpeg-turbo sqlite3 freetype luajit gmp jsoncpp opengl-registry --triplet x64-windows -``` - -- **Don't forget about IrrlichtMt.** The easiest way is to clone it to `lib/irrlichtmt` as described in the Linux section. -- `curl` is optional, but required to read the serverlist, `curl[winssl]` is required to use the content store. -- `openal-soft`, `libvorbis` and `libogg` are optional, but required to use sound. -- `luajit` is optional, it replaces the integrated Lua interpreter with a faster just-in-time interpreter. -- `gmp` and `jsoncpp` are optional, otherwise the bundled versions will be compiled - -There are other optional libraries, but they are not tested if they can build and link correctly. - -Use `--triplet` to specify the target triplet, e.g. `x64-windows` or `x86-windows`. - -### Compile Minetest - -#### a) Using the vcpkg toolchain and CMake GUI -1. Start up the CMake GUI -2. Select **Browse Source...** and select DIR/minetest -3. Select **Browse Build...** and select DIR/minetest-build -4. Select **Configure** -5. Choose the right visual Studio version and target platform. It has to match the version of the installed dependencies -6. Choose **Specify toolchain file for cross-compiling** -7. Click **Next** -8. Select the vcpkg toolchain file e.g. `D:/vcpkg/scripts/buildsystems/vcpkg.cmake` -9. Click Finish -10. Wait until cmake have generated the cash file -11. If there are any errors, solve them and hit **Configure** -12. Click **Generate** -13. Click **Open Project** -14. Compile Minetest inside Visual studio. - -#### b) Using the vcpkg toolchain and the commandline - -Run the following script in PowerShell: - -```powershell -cmake . -G"Visual Studio 15 2017 Win64" -DCMAKE_TOOLCHAIN_FILE=D:/vcpkg/scripts/buildsystems/vcpkg.cmake -DCMAKE_BUILD_TYPE=Release -DENABLE_GETTEXT=OFF -DENABLE_CURSES=OFF -cmake --build . --config Release -``` -Make sure that the right compiler is selected and the path to the vcpkg toolchain is correct. - -### Windows Installer using WiX Toolset - -Requirements: -* [Visual Studio 2017](https://visualstudio.microsoft.com/) -* [WiX Toolset](https://wixtoolset.org/) - -In the Visual Studio 2017 Installer select **Optional Features -> WiX Toolset**. - -Build the binaries as described above, but make sure you unselect `RUN_IN_PLACE`. - -Open the generated project file with Visual Studio. Right-click **Package** and choose **Generate**. -It may take some minutes to generate the installer. - -### Compiling on MacOS - -#### Requirements -- [Homebrew](https://brew.sh/) -- [Git](https://git-scm.com/downloads) - -Install dependencies with homebrew: - -``` -brew install cmake freetype gettext gmp hiredis jpeg jsoncpp leveldb libogg libpng libvorbis luajit zstd -``` - -#### Download - -Download source (this is the URL to the latest of source repository, which might not work at all times) using Git: - -```bash -git clone --depth 1 https://github.com/minetest/minetest.git -cd minetest -``` - -Download Minetest Game (otherwise only the "Development Test" game is available) using Git: - -``` -git clone --depth 1 https://github.com/minetest/minetest_game.git games/minetest_game -``` - -Download Minetest's fork of Irrlicht: - -``` -git clone --depth 1 https://github.com/minetest/irrlicht.git lib/irrlichtmt -``` - -#### Build - -```bash -mkdir build -cd build - -cmake .. \ - -DCMAKE_OSX_DEPLOYMENT_TARGET=10.14 \ - -DCMAKE_FIND_FRAMEWORK=LAST \ - -DCMAKE_INSTALL_PREFIX=../build/macos/ \ - -DRUN_IN_PLACE=FALSE -DENABLE_GETTEXT=TRUE - -make -j$(sysctl -n hw.logicalcpu) -make install -``` - -#### Run - -``` -open ./build/macos/minetest.app -``` +- [Compiling on GNU/Linux](doc/compiling/linux.md) +- [Compiling on Windows](doc/compiling/windows.md) +- [Compiling on MacOS](doc/compiling/macos.md) Docker ------ diff --git a/doc/compiling/README.md b/doc/compiling/README.md new file mode 100644 index 000000000..005147cdc --- /dev/null +++ b/doc/compiling/README.md @@ -0,0 +1,88 @@ +# Compiling Minetest + +- [Compiling on GNU/Linux](linux.md) +- [Compiling on Windows](windows.md) +- [Compiling on MacOS](macos.md) + + +## CMake options + +General options and their default values: + + BUILD_CLIENT=TRUE - Build Minetest client + BUILD_SERVER=FALSE - Build Minetest server + BUILD_UNITTESTS=TRUE - Build unittest sources + BUILD_BENCHMARKS=FALSE - Build benchmark sources + CMAKE_BUILD_TYPE=Release - Type of build (Release vs. Debug) + Release - Release build + Debug - Debug build + SemiDebug - Partially optimized debug build + RelWithDebInfo - Release build with debug information + MinSizeRel - Release build with -Os passed to compiler to make executable as small as possible + ENABLE_CURL=ON - Build with cURL; Enables use of online mod repo, public serverlist and remote media fetching via http + ENABLE_CURSES=ON - Build with (n)curses; Enables a server side terminal (command line option: --terminal) + ENABLE_GETTEXT=ON - Build with Gettext; Allows using translations + ENABLE_LEVELDB=ON - Build with LevelDB; Enables use of LevelDB map backend + ENABLE_POSTGRESQL=ON - Build with libpq; Enables use of PostgreSQL map backend (PostgreSQL 9.5 or greater recommended) + ENABLE_REDIS=ON - Build with libhiredis; Enables use of Redis map backend + ENABLE_SPATIAL=ON - Build with LibSpatial; Speeds up AreaStores + ENABLE_SOUND=ON - Build with OpenAL, libogg & libvorbis; in-game sounds + ENABLE_LUAJIT=ON - Build with LuaJIT (much faster than non-JIT Lua) + ENABLE_PROMETHEUS=OFF - Build with Prometheus metrics exporter (listens on tcp/30000 by default) + ENABLE_SYSTEM_GMP=ON - Use GMP from system (much faster than bundled mini-gmp) + ENABLE_SYSTEM_JSONCPP=ON - Use JsonCPP from system + RUN_IN_PLACE=FALSE - Create a portable install (worlds, settings etc. in current directory) + ENABLE_UPDATE_CHECKER=TRUE - Whether to enable update checks by default + INSTALL_DEVTEST=FALSE - Whether the Development Test game should be installed alongside Minetest + USE_GPROF=FALSE - Enable profiling using GProf + VERSION_EXTRA= - Text to append to version (e.g. VERSION_EXTRA=foobar -> Minetest 0.4.9-foobar) + ENABLE_TOUCH=FALSE - Enable Touchscreen support (requires support by IrrlichtMt) + +Library specific options: + + CURL_DLL - Only if building with cURL on Windows; path to libcurl.dll + CURL_INCLUDE_DIR - Only if building with cURL; directory where curl.h is located + CURL_LIBRARY - Only if building with cURL; path to libcurl.a/libcurl.so/libcurl.lib + EGL_INCLUDE_DIR - Only if building with GLES; directory that contains egl.h + EGL_LIBRARY - Only if building with GLES; path to libEGL.a/libEGL.so + EXTRA_DLL - Only on Windows; optional paths to additional DLLs that should be packaged + FREETYPE_INCLUDE_DIR_freetype2 - Directory that contains files such as ftimage.h + FREETYPE_INCLUDE_DIR_ft2build - Directory that contains ft2build.h + FREETYPE_LIBRARY - Path to libfreetype.a/libfreetype.so/freetype.lib + FREETYPE_DLL - Only on Windows; path to libfreetype-6.dll + GETTEXT_DLL - Only when building with gettext on Windows; paths to libintl + libiconv DLLs + GETTEXT_INCLUDE_DIR - Only when building with gettext; directory that contains libintl.h + GETTEXT_LIBRARY - Optional/platform-dependent with gettext; path to libintl.so/libintl.dll.a + GETTEXT_MSGFMT - Only when building with gettext; path to msgfmt/msgfmt.exe + ICONV_LIBRARY - Optional/platform-dependent; path to libiconv.so/libiconv.dylib + IRRLICHT_DLL - Only on Windows; path to IrrlichtMt.dll + IRRLICHT_INCLUDE_DIR - Directory that contains IrrCompileConfig.h (usable for server build only) + LEVELDB_INCLUDE_DIR - Only when building with LevelDB; directory that contains db.h + LEVELDB_LIBRARY - Only when building with LevelDB; path to libleveldb.a/libleveldb.so/libleveldb.dll.a + LEVELDB_DLL - Only when building with LevelDB on Windows; path to libleveldb.dll + PostgreSQL_INCLUDE_DIR - Only when building with PostgreSQL; directory that contains libpq-fe.h + PostgreSQL_LIBRARY - Only when building with PostgreSQL; path to libpq.a/libpq.so/libpq.lib + REDIS_INCLUDE_DIR - Only when building with Redis; directory that contains hiredis.h + REDIS_LIBRARY - Only when building with Redis; path to libhiredis.a/libhiredis.so + SPATIAL_INCLUDE_DIR - Only when building with LibSpatial; directory that contains spatialindex/SpatialIndex.h + SPATIAL_LIBRARY - Only when building with LibSpatial; path to libspatialindex.so/spatialindex-32.lib + LUA_INCLUDE_DIR - Only if you want to use LuaJIT; directory where luajit.h is located + LUA_LIBRARY - Only if you want to use LuaJIT; path to libluajit.a/libluajit.so + OGG_DLL - Only if building with sound on Windows; path to libogg.dll + OGG_INCLUDE_DIR - Only if building with sound; directory that contains an ogg directory which contains ogg.h + OGG_LIBRARY - Only if building with sound; path to libogg.a/libogg.so/libogg.dll.a + OPENAL_DLL - Only if building with sound on Windows; path to OpenAL32.dll + OPENAL_INCLUDE_DIR - Only if building with sound; directory where al.h is located + OPENAL_LIBRARY - Only if building with sound; path to libopenal.a/libopenal.so/OpenAL32.lib + SQLITE3_INCLUDE_DIR - Directory that contains sqlite3.h + SQLITE3_LIBRARY - Path to libsqlite3.a/libsqlite3.so/sqlite3.lib + VORBISFILE_LIBRARY - Only if building with sound; path to libvorbisfile.a/libvorbisfile.so/libvorbisfile.dll.a + VORBIS_DLL - Only if building with sound on Windows; paths to vorbis DLLs + VORBIS_INCLUDE_DIR - Only if building with sound; directory that contains a directory vorbis with vorbisenc.h inside + VORBIS_LIBRARY - Only if building with sound; path to libvorbis.a/libvorbis.so/libvorbis.dll.a + ZLIB_DLL - Only on Windows; path to zlib1.dll + ZLIB_INCLUDE_DIR - Directory that contains zlib.h + ZLIB_LIBRARY - Path to libz.a/libz.so/zlib.lib + ZSTD_DLL - Only on Windows; path to libzstd.dll + ZSTD_INCLUDE_DIR - Directory that contains zstd.h + ZSTD_LIBRARY - Path to libzstd.a/libzstd.so/ztd.lib diff --git a/doc/compiling/linux.md b/doc/compiling/linux.md new file mode 100644 index 000000000..32d5d3550 --- /dev/null +++ b/doc/compiling/linux.md @@ -0,0 +1,114 @@ +# Compiling on GNU/Linux + +## Dependencies + +| Dependency | Version | Commentary | +|------------|---------|------------| +| GCC | 5.1+ | or Clang 3.5+ | +| CMake | 3.5+ | | +| IrrlichtMt | - | Custom version of Irrlicht, see https://github.com/minetest/irrlicht | +| Freetype | 2.0+ | | +| SQLite3 | 3+ | | +| Zstd | 1.0+ | | +| LuaJIT | 2.0+ | Bundled Lua 5.1 is used if not present | +| GMP | 5.0.0+ | Bundled mini-GMP is used if not present | +| JsonCPP | 1.0.0+ | Bundled JsonCPP is used if not present | + +For Debian/Ubuntu users: + + sudo apt install g++ make libc6-dev cmake libpng-dev libjpeg-dev libxi-dev libgl1-mesa-dev libsqlite3-dev libogg-dev libvorbis-dev libopenal-dev libcurl4-gnutls-dev libfreetype6-dev zlib1g-dev libgmp-dev libjsoncpp-dev libzstd-dev libluajit-5.1-dev + +For Fedora users: + + sudo dnf install make automake gcc gcc-c++ kernel-devel cmake libcurl-devel openal-soft-devel libpng-devel libjpeg-devel libvorbis-devel libXi-devel libogg-devel freetype-devel mesa-libGL-devel zlib-devel jsoncpp-devel gmp-devel sqlite-devel luajit-devel leveldb-devel ncurses-devel spatialindex-devel libzstd-devel + +For Arch users: + + sudo pacman -S base-devel libcurl-gnutls cmake libxi libpng sqlite libogg libvorbis openal freetype2 jsoncpp gmp luajit leveldb ncurses zstd + +For Alpine users: + + sudo apk add build-base cmake libpng-dev jpeg-dev libxi-dev mesa-dev sqlite-dev libogg-dev libvorbis-dev openal-soft-dev curl-dev freetype-dev zlib-dev gmp-dev jsoncpp-dev luajit-dev zstd-dev + +## Download + +You can install Git for easily keeping your copy up to date. +If you don’t want Git, read below on how to get the source without Git. +This is an example for installing Git on Debian/Ubuntu: + + sudo apt install git + +For Fedora users: + + sudo dnf install git + +For Arch users: + + sudo pacman -S git + +For Alpine users: + + sudo apk add git + +Download source (this is the URL to the latest of source repository, which might not work at all times) using Git: + + git clone --depth 1 https://github.com/minetest/minetest.git + cd minetest + +Download Minetest Game (otherwise only the "Development Test" game is available) using Git: + + git clone --depth 1 https://github.com/minetest/minetest_game.git games/minetest_game + +Download IrrlichtMt to `lib/irrlichtmt`, it will be used to satisfy the IrrlichtMt dependency that way: + + git clone --depth 1 https://github.com/minetest/irrlicht.git lib/irrlichtmt + +Download source, without using Git: + + wget https://github.com/minetest/minetest/archive/master.tar.gz + tar xf master.tar.gz + cd minetest-master + +Download Minetest Game, without using Git: + + cd games/ + wget https://github.com/minetest/minetest_game/archive/master.tar.gz + tar xf master.tar.gz + mv minetest_game-master minetest_game + cd .. + +Download IrrlichtMt, without using Git: + + cd lib/ + wget https://github.com/minetest/irrlicht/archive/master.tar.gz + tar xf master.tar.gz + mv irrlicht-master irrlichtmt + cd .. + +## Build + +Build a version that runs directly from the source directory: + + cmake . -DRUN_IN_PLACE=TRUE + make -j$(nproc) + +Run it: + + ./bin/minetest + +- Use `cmake . -LH` to see all CMake options and their current state. +- If you want to install it system-wide (or are making a distribution package), + you will want to use `-DRUN_IN_PLACE=FALSE`. +- You can build a bare server by specifying `-DBUILD_SERVER=TRUE`. +- You can disable the client build by specifying `-DBUILD_CLIENT=FALSE`. +- You can select between Release and Debug build by `-DCMAKE_BUILD_TYPE=`. + - Debug build is slower, but gives much more useful output in a debugger. +- If you build a bare server you don't need to compile IrrlichtMt, just the headers suffice. + - In that case use `-DIRRLICHT_INCLUDE_DIR=/some/where/irrlichtmt/include`. + +- Minetest will use the IrrlichtMt package that is found first, given by the following order: + 1. Specified `IRRLICHTMT_BUILD_DIR` CMake variable + 2. `${PROJECT_SOURCE_DIR}/lib/irrlichtmt` (if existent) + 3. Installation of IrrlichtMt in the system-specific library paths + 4. For server builds with disabled `BUILD_CLIENT` variable, the headers from `IRRLICHT_INCLUDE_DIR` will be used. + - NOTE: Changing the IrrlichtMt build directory (includes system installs) requires regenerating the CMake cache (`rm CMakeCache.txt`) diff --git a/doc/compiling/macos.md b/doc/compiling/macos.md new file mode 100644 index 000000000..dd9a818e4 --- /dev/null +++ b/doc/compiling/macos.md @@ -0,0 +1,55 @@ +# Compiling on MacOS + +## Requirements + +- [Homebrew](https://brew.sh/) +- [Git](https://git-scm.com/downloads) + +Install dependencies with homebrew: + +``` +brew install cmake freetype gettext gmp hiredis jpeg jsoncpp leveldb libogg libpng libvorbis luajit zstd +``` + +## Download + +Download source (this is the URL to the latest of source repository, which might not work at all times) using Git: + +```bash +git clone --depth 1 https://github.com/minetest/minetest.git +cd minetest +``` + +Download Minetest Game (otherwise only the "Development Test" game is available) using Git: + +``` +git clone --depth 1 https://github.com/minetest/minetest_game.git games/minetest_game +``` + +Download Minetest's fork of Irrlicht: + +``` +git clone --depth 1 https://github.com/minetest/irrlicht.git lib/irrlichtmt +``` + +## Build + +```bash +mkdir build +cd build + +cmake .. \ + -DCMAKE_OSX_DEPLOYMENT_TARGET=10.14 \ + -DCMAKE_FIND_FRAMEWORK=LAST \ + -DCMAKE_INSTALL_PREFIX=../build/macos/ \ + -DRUN_IN_PLACE=FALSE -DENABLE_GETTEXT=TRUE + +make -j$(sysctl -n hw.logicalcpu) +make install +``` + +## Run + +``` +open ./build/macos/minetest.app +``` diff --git a/doc/compiling/windows.md b/doc/compiling/windows.md new file mode 100644 index 000000000..cc68ff491 --- /dev/null +++ b/doc/compiling/windows.md @@ -0,0 +1,72 @@ +# Compiling on Windows using MSVC + +## Requirements + +- [Visual Studio 2015 or newer](https://visualstudio.microsoft.com) +- [CMake](https://cmake.org/download/) +- [vcpkg](https://github.com/Microsoft/vcpkg) +- [Git](https://git-scm.com/downloads) + + +## Compiling and installing the dependencies + +It is highly recommended to use vcpkg as package manager. + +After you successfully built vcpkg you can easily install the required libraries: +```powershell +vcpkg install zlib zstd curl[winssl] openal-soft libvorbis libogg libjpeg-turbo sqlite3 freetype luajit gmp jsoncpp opengl-registry --triplet x64-windows +``` + +- **Don't forget about IrrlichtMt.** The easiest way is to clone it to `lib/irrlichtmt` as described in the Linux section. +- `curl` is optional, but required to read the serverlist, `curl[winssl]` is required to use the content store. +- `openal-soft`, `libvorbis` and `libogg` are optional, but required to use sound. +- `luajit` is optional, it replaces the integrated Lua interpreter with a faster just-in-time interpreter. +- `gmp` and `jsoncpp` are optional, otherwise the bundled versions will be compiled + +There are other optional libraries, but they are not tested if they can build and link correctly. + +Use `--triplet` to specify the target triplet, e.g. `x64-windows` or `x86-windows`. + + +## Compile Minetest + +### a) Using the vcpkg toolchain and CMake GUI + +1. Start up the CMake GUI +2. Select **Browse Source...** and select DIR/minetest +3. Select **Browse Build...** and select DIR/minetest-build +4. Select **Configure** +5. Choose the right visual Studio version and target platform. It has to match the version of the installed dependencies +6. Choose **Specify toolchain file for cross-compiling** +7. Click **Next** +8. Select the vcpkg toolchain file e.g. `D:/vcpkg/scripts/buildsystems/vcpkg.cmake` +9. Click Finish +10. Wait until cmake have generated the cash file +11. If there are any errors, solve them and hit **Configure** +12. Click **Generate** +13. Click **Open Project** +14. Compile Minetest inside Visual studio. + +### b) Using the vcpkg toolchain and the commandline + +Run the following script in PowerShell: + +```powershell +cmake . -G"Visual Studio 15 2017 Win64" -DCMAKE_TOOLCHAIN_FILE=D:/vcpkg/scripts/buildsystems/vcpkg.cmake -DCMAKE_BUILD_TYPE=Release -DENABLE_GETTEXT=OFF -DENABLE_CURSES=OFF +cmake --build . --config Release +``` +Make sure that the right compiler is selected and the path to the vcpkg toolchain is correct. + + +## Windows Installer using WiX Toolset + +Requirements: +* [Visual Studio 2017](https://visualstudio.microsoft.com/) +* [WiX Toolset](https://wixtoolset.org/) + +In the Visual Studio 2017 Installer select **Optional Features -> WiX Toolset**. + +Build the binaries as described above, but make sure you unselect `RUN_IN_PLACE`. + +Open the generated project file with Visual Studio. Right-click **Package** and choose **Generate**. +It may take some minutes to generate the installer.