Improving Build Times

This page contains useful tips for improving build times when compiling Minetest. This is useful when you are repeatedly building Minetest for testing or if you want to make incremental builds as quick as possible.

The instructions assume you are on Linux, as that's where you can usually expect the best compile times in general.

Use Clang

Minetest supports building with the Clang compiler, which generally compiles somewhat faster compared to GCC. You should be able to install Clang from your Linux distribution's package manager and then make CMake build with Clang instead of GCC with the following build options:

-DCMAKE_C_COMPILER=/usr/bin/clang -DCMAKE_CXX_COMPILER=/usr/bin/clang++

Use mold

mold is a linker that runs much faster than the standard ld or even the lld linker.

-DCMAKE_EXE_LINKER_FLAGS="-fuse-ld=mold" -DCMAKE_SHARED_LINKER_FLAGS="-fuse-ld=mold"

Use ninja

Ninja is a build system that aims to have less overhead than regular Makefiles, which should make it slightly faster. CMake supports generating Ninja build files by using -G Ninja when first generating a build directory. You cannot change the generator in an already created build folder.

Do note that Ninja will automatically detect your processor count and set the amount of jobs if you don't manually set anything. This might be an issue if you want to do something while compiling in the background. You can check what is the default with ninja --help and manually pass the job count like one would do with make: ninja -j4.

Android: Disabling unused ABIs

When building Minetest for Android by default it will build for all four supported ABIs, meaning it will build Minetest four times over. If you are doing testing and know the device you are using you can save build times by limiting it to only building a single ABI that works on the device.

You can change the ABI filter abiFilters in android/native/build.gradle. Below is an explanation of each ABI listed:

ABI ID ABI name Where you may need it
armeabi-v7a 32-bit ARM Very old phones
arm64-v8a 64-bit ARM Modern phones (likely the one you have)
x86 32-bit x86 Android SDK emulator (x86 images)
x86_64 64-bit x86 Android SDK emulator (x86_64 images)

Minetest compile option tweaks

These may reduce build times further, but at cost of some functionality being missing.

  • -DENABLE_LTO=OFF to disable LTO which may make linking take longer than expected. This is disabled by default in Debug builds.
  • -DBUILD_UNITTESTS=OFF which may save some time when doing full rebuilds. May not be useful if you want to actually run the unit tests.
  • -ENABLE_GETTEXT=OFF disables PO->MO compilation, if this takes a while to finish. Translations will be disabled in the resulting build.

When in a hurry

Once you have cloned the Minetest repository:

mkdir build; cd build
cmake .. -DCMAKE_C_COMPILER=/usr/bin/clang -DCMAKE_CXX_COMPILER=/usr/bin/clang++ -DCMAKE_EXE_LINKER_FLAGS="-fuse-ld=mold" -DCMAKE_SHARED_LINKER_FLAGS="-fuse-ld=mold" -G Ninja
ninja