Difference between revisions of "Compiling Luanti"

From Minetest Developer Wiki
Jump to navigation Jump to search
(Gettext parameter added to compile information)
(→‎GNU/Linux: rename to Luanti)
 
(43 intermediate revisions by 17 users not shown)
Line 1: Line 1:
[[Category:Core]]
+
This page is about how to compile Luanti yourself.
==Compiling on GNU/Linux==
 
  
Install dependencies. Here's an example for Debian/Ubuntu/Mint:
+
== Official compilation instructions ==
<pre>
 
$ apt-get install build-essential libirrlicht-dev cmake libbz2-dev \
 
libpng12-dev libjpeg8-dev libxxf86vm-dev libgl1-mesa-dev libsqlite3-dev \
 
libogg-dev libvorbis-dev libopenal-dev
 
</pre>
 
  
(If you want to use Minetest on languages other than English, you have to install ''gettext'' package and it's dependencies too.)
+
We strongly recommend you read the [https://github.com/minetest/minetest#compiling Luanti README file]. It covers most of the important platforms.
  
Download source, extract (this is the URL to the latest of source repository, which might not work at all times):
+
== Unofficial compilation instructions ==
  
(''Note'': It is recommended to use [[Git]] to get the source)
+
The community has written several unofficial guides to compile Luanti on unusual or rare platforms. Proceed only if the README was not enough.
<pre>
 
$ wget https://github.com/minetest/minetest/tarball/master -O master.tar.gz
 
$ tar xf master.tar.gz
 
$ cd minetest-minetest-286edd4 (or similar)
 
</pre>
 
  
Download the "common" pseudo-game (minetest_game uses this)
+
'''Tread carefully from this point on.'''
<pre>
 
$ cd games/
 
$ wget https://github.com/minetest/common/tarball/master -O master.tar.gz
 
$ tar xf master.tar.gz
 
$ mv minetest-common-* common
 
$ cd ..
 
</pre>
 
  
Download minetest_game (otherwise only the "Minimal development test" game is available)
+
=== GNU/Linux ===
<pre>
 
$ cd games/
 
$ wget https://github.com/minetest/minetest_game/tarball/master -O master.tar.gz
 
$ tar xf master.tar.gz
 
$ mv minetest-minetest_game-* minetest_game
 
$ cd ..
 
</pre>
 
You may want to do the same for the "survival" and "build" games, if you wish to have them, as well as for any other games.
 
  
Build a version that runs directly from the source directory:
+
[http://forum.minetest.net/viewtopic.php?f=3&t=3837 One-line script for installing/compiling Luanti Git, for Debian / Ubuntu / Mint]
<pre>
 
$ cmake . -DRUN_IN_PLACE=1
 
$ make -j2
 
</pre>
 
  
Run it:
+
=== Windows ===
<pre>
+
For compiling Luanti on Windows using MSYS2, see [https://wiki.voxelmanip.se/Compiling_on_Windows_using_MSYS2 Compiling on Windows using MSYS2].
$ cd bin
 
$ ./minetest
 
</pre>
 
  
* Use cmake . -LH to see all CMake options and their current state
+
For compiling Luanti on Windows using MSVC, see the [https://github.com/minetest/minetest#compiling-on-windows-using-msvc Luanti README].
* If you want to place user data in ~/.minetest, install it system-wide (or are making a distribution package), you will want to use -DRUN_IN_PLACE=0
 
* You can build a bare server or a bare client by specifying -DBUILD_CLIENT=0 or -DBUILD_SERVER=0
 
* If you want to use others languages than English, add -DENABLE_GETTEXT=1 as a ''cmake'' parameter.
 
* You can select between Release and Debug build by -DCMAKE_BUILD_TYPE=<Debug or Release>
 
:* Debug build is slower, but gives much more useful output in a debugger
 
  
===Building without Irrlicht/X dependency===
+
=== Cross-compilation ===
You can build the Minetest server without library dependencies to Irrlicht or any graphical stuff. You still need the Irrlicht headers for this, so first, download the irrlicht source to somewhere.
+
To compile a win32 version of Luanti in Linux with [https://en.wikipedia.org/wiki/MinGW MinGW] you can use the build script in <code>[https://github.com/minetest/minetest/blob/master/util/buildbot/buildwin32.sh utils/buildbot/buildwin32.sh]</code>.
  
When invoking cmake, use <code>-DBUILD_CLIENT=0 -DIRRLICHT_SOURCE_DIR=/wherever/you/unzipped/the/source</code>.
+
To compile a win64 version of Luanti in Linux with [https://en.wikipedia.org/wiki/MinGW MinGW] you can use the build script in <code>[https://github.com/minetest/minetest/blob/master/util/buildbot/buildwin32.sh utils/buildbot/buildwin64.sh]</code>.
  
==Compiling on Windows==
+
If you have errors during cross compilation related to std::thread and std::mutex, this is due to mingw-w64 being incorrectly configured for cross compilation.  
<pre>
 
- This section is outdated. In addition to what is described here:
 
  - In addition to minetest, you need to download minetest_game.
 
  - If you wish to have sound support, you need libogg, libvorbis and libopenal
 
  
- You need:
+
To fix the errors, use the command:
* CMake:
 
http://www.cmake.org/cmake/resources/software.html
 
* MinGW or Visual Studio
 
http://www.mingw.org/
 
http://msdn.microsoft.com/en-us/vstudio/default
 
* Irrlicht SDK 1.7:
 
http://irrlicht.sourceforge.net/downloads.html
 
* Zlib headers (zlib125.zip)
 
http://www.winimage.com/zLibDll/index.html
 
* Zlib library (zlibwapi.lib and zlibwapi.dll from zlib125dll.zip):
 
http://www.winimage.com/zLibDll/index.html
 
* Optional: gettext bibrary and tools:
 
http://gnuwin32.sourceforge.net/downlinks/gettext.php
 
- This is used for other UI languages. Feel free to leave it out.
 
* And, of course, Minetest:
 
http://minetest.net/download.php
 
- Steps:
 
- Select a directory called DIR hereafter in which you will operate.
 
- Make sure you have CMake and a compiler installed.
 
- Download all the other stuff to DIR and extract them into there.
 
  ("extract here", not "extract to packagename/")
 
  NOTE: zlib125dll.zip needs to be extracted into zlib125dll
 
- All those packages contain a nice base directory in them, which
 
  should end up being the direct subdirectories of DIR.
 
- You will end up with a directory structure like this (+=dir, -=file):
 
-----------------
 
+ DIR
 
- zlib-1.2.5.tar.gz
 
- zlib125dll.zip
 
- irrlicht-1.7.1.zip
 
- 110214175330.zip (or whatever, this is the minetest source)
 
+ zlib-1.2.5
 
- zlib.h
 
+ win32
 
...
 
+ zlib125dll
 
- readme.txt
 
+ dll32
 
...
 
+ irrlicht-1.7.1
 
+ lib
 
+ include
 
...
 
+ gettext (optional)
 
+bin
 
+include
 
+lib
 
+ minetest
 
+ src
 
+ doc
 
- CMakeLists.txt
 
...
 
-----------------
 
- Start up the CMake GUI
 
- Select "Browse Source..." and select DIR/minetest
 
- Now, if using MSVC:
 
- Select "Browse Build..." and select DIR/minetest-build
 
- Else if using MinGW:
 
- Select "Browse Build..." and select DIR/minetest
 
- Select "Configure"
 
- Select your compiler
 
- It will warn about missing stuff, ignore that at this point. (later don't)
 
- Make sure the configuration is as follows
 
  (note that the versions may differ for you):
 
-----------------
 
BUILD_CLIENT            [X]
 
BUILD_SERVER            [ ]
 
CMAKE_BUILD_TYPE        Release
 
CMAKE_INSTALL_PREFIX    DIR/minetest-install
 
IRRLICHT_SOURCE_DIR      DIR/irrlicht-1.7.1
 
RUN_IN_PLACE            [X]
 
WARN_ALL                [ ]
 
ZLIB_DLL                DIR/zlib125dll/dll32/zlibwapi.dll
 
ZLIB_INCLUDE_DIR        DIR/zlib-1.2.5
 
ZLIB_LIBRARIES          DIR/zlib125dll/dll32/zlibwapi.lib
 
GETTEXT_BIN_DIR          DIR/gettext/bin
 
GETTEXT_INCLUDE_DIR      DIR/gettext/include
 
GETTEXT_LIBRARIES        DIR/gettext/lib/intl.lib
 
GETTEXT_MSGFMT          DIR/gettext/bin/msgfmt
 
-----------------
 
- Hit "Configure"
 
- Hit "Configure" once again 8)
 
- If something is still coloured red, you have a problem.
 
- Hit "Generate"
 
If using MSVC:
 
- Open the generated minetest.sln
 
- The project defaults to the "Debug" configuration. Make very sure to
 
  select "Release", unless you want to debug some stuff (it's slower
 
  and might not even work at all)
 
- Build the ALL_BUILD project
 
- Build the INSTALL project
 
- You should now have a working game with the executable in
 
DIR/minetest-install/bin/minetest.exe
 
- Additionally you may create a zip package by building the PACKAGE
 
  project.
 
If using MinGW:
 
- Using the command line, browse to the build directory and run 'make'
 
  (or mingw32-make or whatever it happens to be)
 
- You may need to copy some of the downloaded DLLs into bin/, see what
 
  running the produced executable tells you it doesn't have.
 
- You should now have a working game with the executable in
 
DIR/minetest/bin/minetest.exe
 
</pre>
 
  
== Cross compile ==
+
For 64-bit builds: <code> sudo update-alternatives --config x86_64-w64-mingw32-g++ </code>
To compile a win32 version of Minetest in Linux with [https://en.wikipedia.org/wiki/MinGW MinGW] you can use the build script in <code>[https://github.com/minetest/minetest/blob/master/util/buildbot/buildwin32.sh utils/buildbot/buildwin32.sh]</code>.
+
 
 +
For 32-bit Ubuntu Builds: <code> sudo update-alternatives --config i686-w64-mingw32-g++ </code>
 +
 
 +
For 32-bit Debian Builds: <code> sudo update-alternatives --config i586-w64-mingw32-g++ </code>
 +
 
 +
When provided with a prompt for which version to select, please choose "posix". Then retry the buildwin32.sh or buildwin64.sh
 +
 
 +
[[Category:Core Engine]]
 +
[[Category:Compiling Luanti]]

Latest revision as of 17:55, 28 October 2024

This page is about how to compile Luanti yourself.

Official compilation instructions

We strongly recommend you read the Luanti README file. It covers most of the important platforms.

Unofficial compilation instructions

The community has written several unofficial guides to compile Luanti on unusual or rare platforms. Proceed only if the README was not enough.

Tread carefully from this point on.

GNU/Linux

One-line script for installing/compiling Luanti Git, for Debian / Ubuntu / Mint

Windows

For compiling Luanti on Windows using MSYS2, see Compiling on Windows using MSYS2.

For compiling Luanti on Windows using MSVC, see the Luanti README.

Cross-compilation

To compile a win32 version of Luanti in Linux with MinGW you can use the build script in utils/buildbot/buildwin32.sh.

To compile a win64 version of Luanti in Linux with MinGW you can use the build script in utils/buildbot/buildwin64.sh.

If you have errors during cross compilation related to std::thread and std::mutex, this is due to mingw-w64 being incorrectly configured for cross compilation.

To fix the errors, use the command:

For 64-bit builds: sudo update-alternatives --config x86_64-w64-mingw32-g++

For 32-bit Ubuntu Builds: sudo update-alternatives --config i686-w64-mingw32-g++

For 32-bit Debian Builds: sudo update-alternatives --config i586-w64-mingw32-g++

When provided with a prompt for which version to select, please choose "posix". Then retry the buildwin32.sh or buildwin64.sh