2023-01-12 20:49:14 +01:00
|
|
|
|
|
2022-03-18 17:46:08 +01:00
|
|
|
|
|
2023-04-06 23:50:19 +02:00
|
|
|
|
# Compiling for X11 (Linux, \*BSD)
|
2022-03-18 17:46:08 +01:00
|
|
|
|
|
2023-04-06 23:50:19 +02:00
|
|
|
|
This page describes how to compile Linux editor and export template binaries from source.
|
|
|
|
|
If you're looking to export your project to Linux instead, read `doc_exporting_for_linux`.
|
2022-03-18 17:46:08 +01:00
|
|
|
|
|
2023-04-06 23:50:19 +02:00
|
|
|
|
## Requirements
|
2023-01-12 20:55:57 +01:00
|
|
|
|
|
2023-04-06 23:50:19 +02:00
|
|
|
|
For compiling under Linux or other Unix variants, the following is required:
|
2022-03-18 17:46:08 +01:00
|
|
|
|
|
|
|
|
|
- GCC 7+ or Clang 6+.
|
|
|
|
|
- Python 3.5+.
|
|
|
|
|
- SCons 3.0+ build system. If your distribution uses Python 2 by default,
|
|
|
|
|
or you are using a version of SCons prior to 3.1.2, you will need to change
|
|
|
|
|
the version of Python that SCons uses by changing the shebang (the first line)
|
2023-01-12 19:43:03 +01:00
|
|
|
|
of the SCons script file to `#! /usr/bin/python3`.
|
|
|
|
|
Use the command `which scons` to find the location of the SCons script file.
|
2022-03-18 17:46:08 +01:00
|
|
|
|
- pkg-config (used to detect the dependencies below).
|
|
|
|
|
- X11, Xcursor, Xinerama, Xi and XRandR development libraries.
|
|
|
|
|
- MesaGL development libraries.
|
|
|
|
|
- ALSA development libraries.
|
|
|
|
|
- PulseAudio development libraries.
|
2023-01-12 19:43:03 +01:00
|
|
|
|
- *Optional* - libudev (build with `udev=yes`).
|
2022-03-18 17:46:08 +01:00
|
|
|
|
- *Optional* - yasm (for WebM SIMD optimizations).
|
|
|
|
|
|
2023-04-06 23:50:19 +02:00
|
|
|
|
To get the Godot source code for compiling, see `doc_getting_source`.
|
|
|
|
|
For a general overview of SCons usage for Godot, see `doc_introduction_to_the_buildsystem`.
|
|
|
|
|
|
|
|
|
|
### Distro-specific one-liners
|
|
|
|
|
|
|
|
|
|
**Alpine Linux**
|
|
|
|
|
|
|
|
|
|
```
|
|
|
|
|
apk add scons pkgconf gcc g++ libx11-dev libxcursor-dev libxinerama-dev libxi-dev libxrandr-dev \
|
|
|
|
|
mesa-dev libexecinfo-dev eudev-dev alsa-lib-dev pulseaudio-dev
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
**Arch Linux**
|
|
|
|
|
|
|
|
|
|
```
|
|
|
|
|
pacman -S --needed scons pkgconf gcc libxcursor libxinerama libxi libxrandr mesa glu libglvnd \
|
|
|
|
|
alsa-lib pulseaudio yasm
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
**Debian** / **Ubuntu**
|
|
|
|
|
|
|
|
|
|
```
|
|
|
|
|
sudo apt-get install build-essential scons pkg-config libx11-dev libxcursor-dev libxinerama-dev \
|
|
|
|
|
libgl1-mesa-dev libglu-dev libasound2-dev libpulse-dev libudev-dev libxi-dev libxrandr-dev yasm
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
**Fedora**
|
|
|
|
|
|
|
|
|
|
```
|
|
|
|
|
sudo dnf install scons pkgconfig libX11-devel libXcursor-devel libXrandr-devel libXinerama-devel \
|
|
|
|
|
libXi-devel mesa-libGL-devel mesa-libGLU-devel alsa-lib-devel pulseaudio-libs-devel \
|
|
|
|
|
libudev-devel yasm gcc-c++ libstdc++-static libatomic-static
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
**FreeBSD**
|
|
|
|
|
|
|
|
|
|
```
|
|
|
|
|
sudo pkg install py37-scons pkgconf xorg-libraries libXcursor libXrandr libXi xorgproto libGLU \
|
|
|
|
|
alsa-lib pulseaudio yasm
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
**Gentoo**
|
|
|
|
|
|
|
|
|
|
```
|
|
|
|
|
emerge -an dev-util/scons x11-libs/libX11 x11-libs/libXcursor x11-libs/libXinerama x11-libs/libXi \
|
|
|
|
|
media-libs/mesa media-libs/glu media-libs/alsa-lib media-sound/pulseaudio dev-lang/yasm
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
**Mageia**
|
|
|
|
|
|
|
|
|
|
```
|
|
|
|
|
urpmi scons task-c++-devel pkgconfig "pkgconfig(alsa)" "pkgconfig(glu)" "pkgconfig(libpulse)" \
|
|
|
|
|
"pkgconfig(udev)" "pkgconfig(x11)" "pkgconfig(xcursor)" "pkgconfig(xinerama)" "pkgconfig(xi)" \
|
|
|
|
|
"pkgconfig(xrandr)" yasm
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
**OpenBSD**
|
|
|
|
|
|
|
|
|
|
```
|
|
|
|
|
pkg_add python scons llvm yasm
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
**openSUSE**
|
|
|
|
|
|
|
|
|
|
```
|
|
|
|
|
sudo zypper install scons pkgconfig libX11-devel libXcursor-devel libXrandr-devel libXinerama-devel \
|
|
|
|
|
libXi-devel Mesa-libGL-devel alsa-devel libpulse-devel libudev-devel libGLU1 yasm
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
**NetBSD**
|
|
|
|
|
|
|
|
|
|
```
|
|
|
|
|
pkg_add pkg-config py37-scons yasm
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
For audio support, you can optionally install `pulseaudio`.
|
|
|
|
|
|
|
|
|
|
**Solus**
|
|
|
|
|
|
|
|
|
|
```
|
|
|
|
|
sudo eopkg install -c system.devel scons libxcursor-devel libxinerama-devel libxi-devel \
|
|
|
|
|
libxrandr-devel mesalib-devel libglu alsa-lib-devel pulseaudio-devel yasm
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
## Compiling
|
2022-03-18 17:46:08 +01:00
|
|
|
|
|
|
|
|
|
Start a terminal, go to the root dir of the engine source code and type:
|
|
|
|
|
|
2023-01-12 22:00:14 +01:00
|
|
|
|
```
|
2022-03-18 17:46:08 +01:00
|
|
|
|
scons -j8 platform=x11
|
2023-01-12 22:00:14 +01:00
|
|
|
|
```
|
2022-03-18 17:46:08 +01:00
|
|
|
|
|
2023-01-12 19:43:03 +01:00
|
|
|
|
A good rule of thumb for the `-j` (*jobs*) flag, is to have at least as many
|
2022-03-18 17:46:08 +01:00
|
|
|
|
threads compiling Godot as you have cores in your CPU, if not one or two more.
|
2023-01-12 19:43:03 +01:00
|
|
|
|
Feel free to add the `-j` option to any SCons command you see below.
|
2022-03-18 17:46:08 +01:00
|
|
|
|
|
|
|
|
|
If all goes well, the resulting binary executable will be placed in the
|
|
|
|
|
"bin" subdirectory. This executable file contains the whole engine and
|
|
|
|
|
runs without any dependencies. Executing it will bring up the project
|
|
|
|
|
manager.
|
|
|
|
|
|
2023-04-06 23:50:19 +02:00
|
|
|
|
Note: If you wish to compile using Clang rather than GCC, use this command:
|
2022-03-18 17:46:08 +01:00
|
|
|
|
|
2023-01-12 22:00:14 +01:00
|
|
|
|
```
|
2022-03-18 17:46:08 +01:00
|
|
|
|
scons platform=x11 use_llvm=yes
|
2023-01-12 22:00:14 +01:00
|
|
|
|
```
|
2022-03-18 17:46:08 +01:00
|
|
|
|
|
2023-04-06 23:50:19 +02:00
|
|
|
|
Using Clang appears to be a requirement for OpenBSD, otherwise fonts would not build.
|
2022-03-18 17:46:08 +01:00
|
|
|
|
|
2023-01-12 20:55:57 +01:00
|
|
|
|
Note:
|
2022-03-18 17:46:08 +01:00
|
|
|
|
|
2023-04-06 23:50:19 +02:00
|
|
|
|
If you are compiling Godot for production use, then you can make the final executable smaller
|
|
|
|
|
and faster by adding the SCons option `target=release_debug`.
|
|
|
|
|
|
|
|
|
|
If you are compiling Godot with GCC, you can make the binary even smaller and faster by adding the SCons
|
|
|
|
|
option `use_lto=yes`. As link-time optimization is a memory-intensive process, this will require about
|
|
|
|
|
7 GB of available RAM while compiling.
|
2022-03-18 17:46:08 +01:00
|
|
|
|
|
2023-01-12 20:55:57 +01:00
|
|
|
|
Note:
|
2022-03-18 17:46:08 +01:00
|
|
|
|
|
2023-04-06 23:50:19 +02:00
|
|
|
|
If you want to use separate editor settings for your own Godot builds and official releases,
|
|
|
|
|
you can enable `doc_data_paths_self_contained_mode` by creating a file called `._sc_` or `sc_` in the `bin/` folder.
|
|
|
|
|
|
|
|
|
|
## Compiling a headless/server build
|
2022-03-18 17:46:08 +01:00
|
|
|
|
|
|
|
|
|
To compile a *headless* build which provides editor functionality to export
|
2023-01-12 22:00:14 +01:00
|
|
|
|
projects in an automated manner, use:
|
2022-03-18 17:46:08 +01:00
|
|
|
|
|
2023-01-12 22:00:14 +01:00
|
|
|
|
```
|
2022-03-18 17:46:08 +01:00
|
|
|
|
scons -j8 platform=server tools=yes target=release_debug
|
2023-01-12 22:00:14 +01:00
|
|
|
|
```
|
2022-03-18 17:46:08 +01:00
|
|
|
|
|
2023-04-06 23:50:19 +02:00
|
|
|
|
To compile a debug *server* build which can be used with `remote debugging tools ( doc_command_line_tutorial )`, use:
|
2022-03-18 17:46:08 +01:00
|
|
|
|
|
2023-01-12 22:00:14 +01:00
|
|
|
|
```
|
2022-03-18 17:46:08 +01:00
|
|
|
|
scons -j8 platform=server tools=no target=release_debug
|
2023-01-12 22:00:14 +01:00
|
|
|
|
```
|
2022-03-18 17:46:08 +01:00
|
|
|
|
|
2023-04-06 23:50:19 +02:00
|
|
|
|
To compile a *server* build which is optimized to run dedicated game servers, use:
|
2022-03-18 17:46:08 +01:00
|
|
|
|
|
2023-01-12 22:00:14 +01:00
|
|
|
|
```
|
2022-03-18 17:46:08 +01:00
|
|
|
|
scons -j8 platform=server tools=no target=release
|
2023-01-12 22:00:14 +01:00
|
|
|
|
```
|
2022-03-18 17:46:08 +01:00
|
|
|
|
|
2023-04-06 23:50:19 +02:00
|
|
|
|
## Building export templates
|
2022-03-18 17:46:08 +01:00
|
|
|
|
|
2023-01-12 20:55:57 +01:00
|
|
|
|
Warning:
|
2022-03-18 17:46:08 +01:00
|
|
|
|
|
2023-04-06 23:50:19 +02:00
|
|
|
|
Linux binaries usually won't run on distributions that are older than the distribution they were built on.
|
|
|
|
|
If you wish to distribute binaries that work on most distributions, you should build them on an old distribution
|
|
|
|
|
such as Ubuntu 16.04. You can use a virtual machine or a container to set up a suitable build environment.
|
2022-03-18 17:46:08 +01:00
|
|
|
|
|
2023-04-06 23:50:19 +02:00
|
|
|
|
To build X11 (Linux, \*BSD) export templates, run the build system with the following parameters:
|
2022-03-18 17:46:08 +01:00
|
|
|
|
|
|
|
|
|
- (32 bits)
|
|
|
|
|
|
2023-01-12 22:00:14 +01:00
|
|
|
|
```
|
2022-03-18 17:46:08 +01:00
|
|
|
|
scons platform=x11 tools=no target=release bits=32
|
|
|
|
|
scons platform=x11 tools=no target=release_debug bits=32
|
2023-01-12 22:00:14 +01:00
|
|
|
|
```
|
2022-03-18 17:46:08 +01:00
|
|
|
|
|
|
|
|
|
- (64 bits)
|
|
|
|
|
|
2023-01-12 22:00:14 +01:00
|
|
|
|
```
|
2022-03-18 17:46:08 +01:00
|
|
|
|
scons platform=x11 tools=no target=release bits=64
|
|
|
|
|
scons platform=x11 tools=no target=release_debug bits=64
|
2023-01-12 22:00:14 +01:00
|
|
|
|
```
|
2022-03-18 17:46:08 +01:00
|
|
|
|
|
|
|
|
|
Note that cross-compiling for the opposite bits (64/32) as your host
|
|
|
|
|
platform is not always straight-forward and might need a chroot environment.
|
|
|
|
|
|
|
|
|
|
To create standard export templates, the resulting files must be copied to:
|
|
|
|
|
|
2023-01-12 22:00:14 +01:00
|
|
|
|
```
|
2022-03-18 17:46:08 +01:00
|
|
|
|
$HOME/.local/share/godot/templates/[gd-version]/
|
2023-01-12 22:00:14 +01:00
|
|
|
|
```
|
2022-03-18 17:46:08 +01:00
|
|
|
|
|
|
|
|
|
and named like this (even for \*BSD which is seen as "Linux X11" by Godot):
|
|
|
|
|
|
2023-01-12 22:00:14 +01:00
|
|
|
|
```
|
2022-03-18 17:46:08 +01:00
|
|
|
|
linux_x11_32_debug
|
|
|
|
|
linux_x11_32_release
|
|
|
|
|
linux_x11_64_debug
|
|
|
|
|
linux_x11_64_release
|
2023-01-12 22:00:14 +01:00
|
|
|
|
```
|
2022-03-18 17:46:08 +01:00
|
|
|
|
|
2023-04-06 23:50:19 +02:00
|
|
|
|
However, if you are writing your custom modules or custom C++ code, you might instead want to configure your
|
|
|
|
|
binaries as custom export templates here:
|
2022-03-18 17:46:08 +01:00
|
|
|
|
|
2023-01-12 20:16:00 +01:00
|
|
|
|
![](img/lintemplates.png)
|
2022-03-18 17:46:08 +01:00
|
|
|
|
|
2023-04-06 23:50:19 +02:00
|
|
|
|
You don't even need to copy them, you can just reference the resulting files in the `bin/` directory of your
|
|
|
|
|
Godot source folder, so the next time you build, you automatically have the custom templates referenced.
|
2022-03-18 17:46:08 +01:00
|
|
|
|
|
2023-04-06 23:50:19 +02:00
|
|
|
|
## Using Clang and LLD for faster development
|
2022-03-18 17:46:08 +01:00
|
|
|
|
|
2023-04-06 23:50:19 +02:00
|
|
|
|
You can also use Clang and LLD to build Godot. This has two upsides compared to the default GCC + GNU ld setup:
|
2022-03-18 17:46:08 +01:00
|
|
|
|
|
2023-04-06 23:50:19 +02:00
|
|
|
|
- LLD links Godot significantly faster compared to GNU ld or gold. This leads to faster iteration times.
|
2022-03-18 17:46:08 +01:00
|
|
|
|
- Clang tends to give more useful error messages compared to GCC.
|
|
|
|
|
|
2023-01-12 19:43:03 +01:00
|
|
|
|
To do so, install Clang and the `lld` package from your distribution's package manager
|
2023-01-12 22:00:14 +01:00
|
|
|
|
then use the following SCons command:
|
2022-03-18 17:46:08 +01:00
|
|
|
|
|
2023-01-12 22:00:14 +01:00
|
|
|
|
```
|
2022-03-18 17:46:08 +01:00
|
|
|
|
scons platform=x11 use_llvm=yes use_lld=yes
|
2023-01-12 22:00:14 +01:00
|
|
|
|
```
|
2022-03-18 17:46:08 +01:00
|
|
|
|
|
2023-04-06 23:50:19 +02:00
|
|
|
|
After the build is completed, a new binary with a `.llvm` suffix will be created in the `bin/` folder.
|
2022-03-18 17:46:08 +01:00
|
|
|
|
|
|
|
|
|
It's still recommended to use GCC for production builds as they can be compiled using
|
|
|
|
|
link-time optimization, making the resulting binaries smaller and faster.
|
|
|
|
|
|
|
|
|
|
Using Pyston for faster development
|
|
|
|
|
-----------------------------------
|
|
|
|
|
|
2023-01-12 20:39:50 +01:00
|
|
|
|
You can use `Pyston ( https://www.pyston.org/ )` to run SCons. Pyston is a JIT-enabled
|
2022-03-18 17:46:08 +01:00
|
|
|
|
implementation of the Python language (which SCons is written in). It is currently
|
|
|
|
|
only compatible with Linux. Pyston can speed up incremental builds significantly,
|
|
|
|
|
often by a factor between 1.5× and 2×. Pyston can be combined with Clang and LLD
|
|
|
|
|
to get even faster builds.
|
|
|
|
|
|
2023-01-12 20:39:50 +01:00
|
|
|
|
- Download the `latest portable Pyston release ( https://github.com/pyston/pyston/releases/latest )`.
|
2023-01-12 19:43:03 +01:00
|
|
|
|
- Extract the portable `.tar.gz` to a set location, such as `$HOME/.local/opt/pyston/` (create folders as needed).
|
|
|
|
|
- Use `cd` to reach the extracted Pyston folder from a terminal,
|
|
|
|
|
then run `./pyston -m pip install scons` to install SCons within Pyston.
|
2022-03-18 17:46:08 +01:00
|
|
|
|
- To make SCons via Pyston easier to run, create a symbolic link of its wrapper
|
2023-01-12 22:00:14 +01:00
|
|
|
|
script to a location in your `PATH` environment variable:
|
2022-03-18 17:46:08 +01:00
|
|
|
|
|
2023-01-12 22:00:14 +01:00
|
|
|
|
```
|
2022-03-18 17:46:08 +01:00
|
|
|
|
ln -s ~/.local/opt/pyston/bin/scons ~/.local/bin/pyston-scons
|
2023-01-12 22:00:14 +01:00
|
|
|
|
```
|
2022-03-18 17:46:08 +01:00
|
|
|
|
|
2023-01-12 20:47:54 +01:00
|
|
|
|
- Instead of running `scons ( build arguments )`, run `pyston-scons ( build arguments )`
|
2022-03-18 17:46:08 +01:00
|
|
|
|
to compile Godot.
|
|
|
|
|
|
2023-01-12 19:43:03 +01:00
|
|
|
|
If you can't run `pyston-scons` after creating the symbolic link,
|
|
|
|
|
make sure `$HOME/.local/bin/` is part of your user's `PATH` environment variable.
|