Компиляция для Linux, *BSD
См. также
На этой странице описывается, как скомпилировать редактор для Linux и экспортировать исполняемые файлы шаблонов из исходного кода. Если вы хотите экспортировать свой проект в Linux, прочтите Экспорт для Linux.
Требования
Для компиляции под Linux или другими вариантами Unix требуется следующее:
GCC 9+ или Clang 6+.
SCons 4.0+ система сборки.
pkg-config (используется для обнаружения перечисленных ниже библиотек разработки).
Библиотеки разработки:
X11, Xcursor, Xinerama, Xi и XRandR.
Wayland и wayland-scanner.
Mesa.
ALSA.
PulseAudio.
Необязательно - libudev (сборка с
udev=yes).
См. также
Чтобы получить исходный код Godot для компиляции, см. Получение исходного кода.
Для общего обзора использования SCons в Godot, смотрите Введение в систему сборки.
Оne-liners, специфичные для дистрибутива
apk add \
scons \
pkgconf \
gcc \
g++ \
libx11-dev \
libxcursor-dev \
libxinerama-dev \
libxi-dev \
libxrandr-dev \
mesa-dev \
eudev-dev \
alsa-lib-dev \
pulseaudio-dev
pacman -Sy --noconfirm --needed \
scons \
pkgconf \
gcc \
libxcursor \
libxinerama \
libxi \
libxrandr \
wayland-utils \
mesa \
glu \
libglvnd \
alsa-lib \
pulseaudio
sudo apt-get update
sudo apt-get install -y \
build-essential \
scons \
pkg-config \
libx11-dev \
libxcursor-dev \
libxinerama-dev \
libgl1-mesa-dev \
libglu1-mesa-dev \
libasound2-dev \
libpulse-dev \
libudev-dev \
libxi-dev \
libxrandr-dev \
libwayland-dev
sudo dnf install -y \
scons \
pkgconfig \
gcc-c++ \
libstdc++-static \
wayland-devel
pkg install \
devel/scons \
pkgconf \
xorg-libraries \
libXcursor \
libXrandr \
libXi \
xorgproto \
libGLU \
alsa-lib \
pulseaudio \
wayland
emerge --sync
emerge -an \
dev-build/scons \
x11-libs/libX11 \
x11-libs/libXcursor \
x11-libs/libXinerama \
x11-libs/libXi \
dev-util/wayland-scanner \
media-libs/mesa \
media-libs/glu \
media-libs/alsa-lib \
media-sound/pulseaudio
sudo urpmi --auto \
scons \
task-c++-devel \
wayland-devel \
"pkgconfig(alsa)" \
"pkgconfig(glu)" \
"pkgconfig(libpulse)" \
"pkgconfig(udev)" \
"pkgconfig(x11)" \
"pkgconfig(xcursor)" \
"pkgconfig(xinerama)" \
"pkgconfig(xi)" \
"pkgconfig(xrandr)"
pkgin install \
pkg-config \
py313-scons
Подсказка
Для поддержки звука вы можете дополнительно установить pulseaudio.
pkg_add \
python \
scons \
llvm
sudo apt update
sudo apt install -y \
python3-pip \
build-essential \
pkg-config \
libx11-dev \
libxcursor-dev \
libxinerama-dev \
libgl1-mesa-dev \
libglu1-mesa-dev \
libasound2-dev \
libpulse-dev \
libudev-dev \
libxi-dev \
libxrandr-dev \
libwayland-dev
sudo pip install scons
sudo zypper install -y \
scons \
pkgconfig \
libX11-devel \
libXcursor-devel \
libXrandr-devel \
libXinerama-devel \
libXi-devel \
wayland-devel \
Mesa-libGL-devel \
alsa-devel \
libpulse-devel \
libudev-devel \
gcc-c++ \
libGLU1
eopkg install -y \
-c system.devel \
scons \
libxcursor-devel \
libxinerama-devel \
libxi-devel \
libxrandr-devel \
wayland-devel \
mesalib-devel \
libglu \
alsa-lib-devel \
pulseaudio-devel
Компиляция
Запустите терминал, перейдите в корневой каталог исходного кода движка и введите:
scons platform=linuxbsd
Примечание
До Godot 4.0 целевой проект Linux/*BSD назывался x11 вместо linuxbsd. Если вы хотите скомпилировать Godot 3.x, используйте ветку 3.x из этой документации.
Совет
Если вы компилируете Godot для внесения изменений или доработки движка, вам может пригодиться параметр SCons dev_build=yes или dev_mode=yes. Подробнее см. в документе Псевдонимы разработки и производства.
Если всё пройдёт успешно, полученный исполняемый двоичный файл будет помещен в подкаталог "bin". Этот исполняемый файл содержит весь движок и работает без каких-либо зависимостей. Запуск файла откроет менеджер проектов.
Примечание
Если вы хотите компилировать с использованием Clang, а не GCC, используйте эту команду:
scons platform=linuxbsd use_llvm=yes
Использование Clang, по-видимому, является обязательным требованием для OpenBSD, иначе шрифты не будут собираться. Для устройств с архитектурой RISC-V используйте компилятор Clang вместо компилятора GCC.
Примечание
Compiling on some platforms such as OpenBSD may require more memory than
available by default.
To increase the memory limit on OpenBSD within the maximum for the current user,
run ulimit -d {new amount in kB}.
Совет
Если вы компилируете Godot для использования в продакшене, вы можете уменьшить размер и ускорить финальный исполняемый файл, добавив опцию SCons production=yes. Это включает дополнительную оптимизацию компиляции и оптимизации времени компоновки.
Запуск LTO занимает некоторое время и требует около 7 ГБ доступной оперативной памяти во время компиляции. Если при использовании вышеуказанного варианта у вас заканчивается память, используйте production=yes lto=none или production=yes lto=thin для облегчённой, но менее эффективной версии LTO.
Примечание
Если вы хотите использовать отдельные настройки редактора для собственных сборок Godot и официальных релизов, вы можете включить Автономный режим, создав файл с именем ._sc_ или _sc_ в папке bin/.
Compiling with AccessKit support
AccessKit provides support for screen readers.
By default, Godot is built with AccessKit dynamically linked. You can use it by placing
accesskit.so alongside the executable.
Примечание
You can use dynamically linked AccessKit with export templates as well, rename
the SO to accesskit.{architecture}.so
and place them alongside the export template executables, and the libraries will
be automatically copied during the export process.
To compile Godot with statically linked AccessKit:
Download the pre-built static libraries from godot-accesskit-c-static library, and unzip them.
When building Godot, add
accesskit_sdk_path={path}to tell SCons where to look for the AccessKit libraries:scons platform=linuxbsd accesskit_sdk_path=<...>
Примечание
При желании вы можете самостоятельно собрать библиотеки godot-angle-static, выполнив следующие шаги:
Clone the godot-accesskit-c-static directory and navigate to it.
Выполните следующую команду:
cd accesskit-c
cmake -S . -B build -DCMAKE_BUILD_TYPE=Release
cmake --build build
cmake --install build
The AccessKit static library should be built using the same compiler you are using for building Godot.
Запуск headless/серверной сборки
Для запуска в режиме headless, который обеспечивает функциональность редактора для экспорта проектов в автоматическом режиме, используйте обычную сборку:
scons platform=linuxbsd target=editor
А затем используйте аргумент коммандной строки --headless:
./bin/godot.linuxbsd.editor.x86_64 --headless
Чтобы скомпилировать отладочную сборку сервера, которую можно использовать с remote debugging tools, используйте:
scons platform=linuxbsd target=template_debug
Чтобы скомпилировать сборку сервера, оптимизированную для запуска выделенных игровых серверов, используйте:
scons platform=linuxbsd target=template_release production=yes
Создание шаблонов экспорта
Предупреждение
Двоичные файлы Linux обычно не запускаются в дистрибутивах, более старых, чем тот, в котором они были собраны. Если вы хотите распространять двоичные файлы, работающие в большинстве дистрибутивов, следует собрать их в старом дистрибутиве, например, в Ubuntu 20.04. Для настройки подходящей среды сборки можно использовать виртуальную машину или контейнер.
Для сборки шаблонов экспорта Linux или *BSD запустите систему сборки со следующими параметрами:
(32 бита)
scons platform=linuxbsd target=template_release arch=x86_32
scons platform=linuxbsd target=template_debug arch=x86_32
(64 бита)
scons platform=linuxbsd target=template_release arch=x86_64
scons platform=linuxbsd target=template_debug arch=x86_64
Обратите внимание, что кросс-компиляция для противоположных битов (64/32) в зависимости от вашей хост-платформы не всегда проста и может потребовать использования chroot-среды.
Для создания стандартных шаблонов экспорта полученные файлы из папки bin/ необходимо скопировать в:
$HOME/.local/share/godot/export_templates/<version>/
и назван следующим образом (даже для *BSD, который Godot видит как "Linux/X11"):
linux_debug.arm32
linux_debug.arm64
linux_debug.x86_32
linux_debug.x86_64
linux_release.arm32
linux_release.arm64
linux_release.x86_32
linux_release.x86_64
Однако, если вы пишете собственные модули или код на C++, вам может потребоваться настроить исполняемые файлы как пользовательские шаблоны экспорта в меню экспорта проекта. Для этого необходимо включить Advanced Options (Дополнительные параметры).
Вам даже не нужно их копировать, вы можете просто сослаться на полученные файлы в каталоге bin/ исходной папки Godot, и в следующий раз при сборке вы автоматически будете ссылаться на пользовательские шаблоны.
Кросс-компиляция для устройств RISC-V
Для кросс-компиляции Godot для устройств RISC-V нам необходимо настроить следующие элементы:
riscv-gnu-toolchain. Хотя мы не будем использовать его напрямую, он предоставляет нам sysroot, а также заголовочные файлы и библиотеки, которые нам понадобятся. Существует множество версий на выбор, однако, чем старше набор инструментов, тем более совместимыми будут наши финальные бинарные файлы. Если сомневаетесь, используйте эту версию и скачайте
riscv64-glibc-ubuntu-20.04-gcc-nightly-2023.07.07-nightly.tar.gz. Распакуйте его куда-нибудь и запомните путь.mold. Этот быстрый линкер — единственный, который корректно компонует полученный двоичный файл. Скачайте его, распакуйте и добавьте папку
binв переменную PATH. Выполнитеmold --help | grep support, чтобы проверить, поддерживает ли ваша версия Mold RISC-V. Если вы не видите RISC-V, возможно, Mold нуждается в обновлении.
Чтобы упростить ссылку на нашу цепочку инструментов, мы можем установить переменную окружения следующим образом:
export RISCV_TOOLCHAIN_PATH="path to toolchain here"
Таким образом, нам не придется вручную указывать местоположение каталога каждый раз, когда мы захотим на него сослаться.
После выполнения всех вышеперечисленных настроек мы готовы приступить к сборке Godot.
Перейдите в корень исходного кода и выполните следующую команду сборки:
PATH="$RISCV_TOOLCHAIN_PATH/bin:$PATH" \
scons arch=rv64 use_llvm=yes linker=mold lto=none target=editor \
ccflags="--sysroot=$RISCV_TOOLCHAIN_PATH/sysroot --gcc-toolchain=$RISCV_TOOLCHAIN_PATH -target riscv64-unknown-linux-gnu" \
linkflags="--sysroot=$RISCV_TOOLCHAIN_PATH/sysroot --gcc-toolchain=$RISCV_TOOLCHAIN_PATH -target riscv64-unknown-linux-gnu"
Примечание
В RISC-V GCC есть ошибки в атомарных операциях, которые мешают ему корректно скомпилировать Godot. Поэтому вместо него используется Clang. Убедитесь, что он может компилироваться в RISC-V. Вы можете проверить это, выполнив команду clang -print-targets. Убедитесь, что в списке целей есть riscv64.
Предупреждение
Приведённый выше код включает добавление $RISCV_TOOLCHAIN_PATH/bin в PATH, но только для следующей за ним команды scons. Поскольку riscv-gnu-toolchain использует свой собственный Clang, находящийся в папке bin, добавление $RISCV_TOOLCHAIN_PATH/bin в переменную окружения PATH вашего пользователя может заблокировать доступ к другой версии Clang, если она установлена. По этой причине не рекомендуется делать добавление папки bin постоянным. Вы также можете опустить строку PATH="$RISCV_TOOLCHAIN_PATH/bin:$PATH", если хотите использовать scons с самостоятельно установленной версией Clang, но это может вызвать проблемы совместимости с riscv-gnu-toolchain.
Команда по своей сути похожа, но с некоторыми ключевыми изменениями. ccflags и linkflags добавляют дополнительные флаги к сборке. --sysroot указывает на папку, симулирующую систему Linux; она содержит все заголовочные файлы, библиотеки и файлы .so, которые будет использовать Clang. --gcc-toolchain сообщает Clang, где находится полный набор инструментов, а -target riscv64-unknown-linux-gnu указывает Clang целевую архитектуру и ОС, для которой мы хотим выполнить сборку.
Если всё прошло успешно, вы должны увидеть директорию bin, а в ней — бинарный файл, подобный следующему:
godot.linuxbsd.editor.rv64.llvm
Теперь вы можете скопировать этот исполняемый файл на ваше любимое устройство RISC-V, а затем запустить его двойным щелчком, что должно открыть менеджер проектов.
Если вы позже решите скомпилировать шаблоны экспорта, скопируйте приведенную выше команду сборки, но измените значение target на template_debug для отладочной сборки или template_release для релизной сборки.
Использование Clang и LLD для ускорения разработки
Вы также можете использовать Clang и LLD для сборки Godot. У этого есть два преимущества по сравнению со стандартной связкой GCC + GNU ld:
LLD компонует Godot значительно быстрее по сравнению с GNU ld или gold. Это приводит к сокращению времени итерации.
Clang, как правило, выдаёт более полезные сообщения об ошибках по сравнению с GCC.
Для этого установите Clang и пакет lld из менеджера пакетов вашего дистрибутива, а затем используйте следующую команду SCons:
scons platform=linuxbsd use_llvm=yes linker=lld
После завершения сборки в папке bin/ будет создан новый бинарный файл с суффиксом .llvm.
По-прежнему рекомендуется использовать GCC для релизных сборок, так как их можно скомпилировать с оптимизацией на этапе компоновки, благодаря чему результирующие бинарные файлы становятся меньше и быстрее.
Если возникает эта ошибка:
/usr/bin/ld: cannot find -l:libatomic.a: No such file or directory
Есть два решения:
В вашу команду SCons добавьте параметр
use_static_cpp=no.Следуйте этим инструкциям, чтобы сконфигурировать, собрать и установить
libatomic_ops. Затем скопируйте/usr/lib/libatomic_ops.aв/usr/lib/libatomic.aили создайте символическую ссылку наlibatomic_opsс помощью командыln -s /usr/lib/libatomic_ops.a /usr/lib/libatomic.a. Символическая ссылка гарантирует, что будет использоваться последняя версияlibatomic_opsбез необходимости копировать её каждый раз при обновлении.
Использование формы (mold) для более быстрого развития
Для ещё более быстрой компоновки по сравнению с LLD вы можете использовать mold. mold можно использовать как с GCC, так и с Clang.
sudo apt-get update
sudo apt-get install -y mold
sudo dnf install -y mold
pacman -Sy --noconfirm --needed mold
Once mold is installed, use the following SCons command when compiling Godot:
scons platform=linuxbsd linker=mold
Использование системных библиотек для более быстрой разработки
Godot включает в себя исходный код различных сторонних библиотек. Вместо этого вы можете использовать системные версии сторонних библиотек. Это ускоряет компоновку бинарного файла Godot, так как сторонние библиотеки компонуются динамически. Поэтому их не нужно статически компоновать каждый раз, когда вы собираете движок (даже при небольших инкрементных изменениях).
Однако не во всех дистрибутивах Linux есть доступные пакеты для сторонних библиотек (или они могут быть устаревшими).
Переход на системные библиотеки может сократить время компоновки на несколько секунд на медленных процессорах, но это требует ручного тестирования в зависимости от вашего дистрибутива Linux. Кроме того, возможно, вы не сможете использовать системные библиотеки для всего из-за ошибок в пакетах системных библиотек (или в системе сборки, так как эта функция менее протестирована).
Чтобы скомпилировать Godot с использованием системных библиотек, установите эти зависимости в дополнение к тем, что перечислены в разделе Оne-liners, специфичные для дистрибутива:
sudo apt-get update
sudo apt-get install -y \
libembree-dev \
libenet-dev \
libfreetype-dev \
libpng-dev \
zlib1g-dev \
libgraphite2-dev \
libharfbuzz-dev \
libogg-dev \
libtheora-dev \
libvorbis-dev \
libwebp-dev \
libmbedtls-dev \
libminiupnpc-dev \
libpcre2-dev \
libsdl3-dev \
libzstd-dev \
libsquish-dev \
libicu-dev
sudo dnf install -y \
embree-devel \
enet-devel \
glslang-devel \
graphite2-devel \
harfbuzz-devel \
libicu-devel \
libsquish-devel \
libtheora-devel \
libvorbis-devel \
libwebp-devel \
libzstd-devel \
mbedtls-devel \
miniupnpc-devel \
SDL3-devel
После установки всех необходимых пакетов используйте следующую команду для сборки Godot:
scons platform=linuxbsd builtin_embree=no builtin_enet=no builtin_freetype=no builtin_graphite=no builtin_harfbuzz=no builtin_libogg=no builtin_libpng=no builtin_libtheora=no builtin_libvorbis=no builtin_libwebp=no builtin_mbedtls=no builtin_miniupnpc=no builtin_pcre2=no builtin_sdl=no builtin_zlib=no builtin_zstd=no
В Debian stable вам потребуется убрать builtin_embree=no, так как предоставляемая системой версия Embree слишком стара для работы с последней веткой master Godot (которая требует Embree 4).
Вы можете просмотреть список всех встроенных библиотек, у которых есть системные альтернативы, выполнив команду scons -h, а затем найдя опции, начинающиеся с builtin_.
Предупреждение
При использовании системных библиотек результирующий бинарный файл перестаёт быть переносимым между дистрибутивами Linux. Не используйте этот подход для создания бинарных файлов, которые вы намерены распространять, если только вы не создаёте пакет для конкретного дистрибутива Linux.