Attention: Here be dragons

This is the latest (unstable) version of this documentation, which may document features not available in or compatible with released stable versions of Godot.

Компіляція для Linux, *BSD

Дивись також

На цій сторінці описано, як скомпілювати редактор Linux і експортувати двійкові файли шаблону з джерела. Якщо ви натомість хочете експортувати свій проект у Linux, прочитайте Експорт на Linux.

Вимоги

Для того щоб зібрати проєкт під Linux чи який-небудь інший вид Unix системи, вам знадобляться:

  • GCC 9+ або Clang 6+.

  • Python 3.8+.

  • SCons 4.0+ build system.

  • pkg-config (використовується для виявлення бібліотек розробки, перелічених нижче).

  • Бібліотеки розробки:

    • X11, Xcursor, Xinerama, Xi та XRandR.

    • Wayland і Wayland-сканер.

    • Меса.

    • ALSA.

    • Пульс Аудіо.

  • За бажанням - libudev (зберіть з параметром udev=yes).

Дивись також

Щоб отримати вихідний код Godot для компіляції, перегляньте Отримання джерела.

Для загального огляду використання SCons для Godot див. Знайомство з системою побудови.

Команди для різних дистрибутивів

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

Компілювання

Відкрийте термінал, перейдіть до кореневої директорії проєкту та введіть:

scons platform=linuxbsd

Примітка

До Godot 4.0 ціль Linux/*BSD називалася x11 замість linuxbsd. Якщо ви хочете скомпілювати Godot 3.x, обов’язково використовуйте гілку 3.x цієї документації <https://docs.godotengine.org/en/3.6/development/compiling/compiling_for_x11.html>`__.

Порада

If you are compiling Godot to make changes or contribute to the engine, you may want to use the SCons options dev_build=yes or dev_mode=yes. See Псевдоніми розробки та виробництва for more info.

Якщо все піде добре, отриманий двійковий виконуваний файл буде розміщено в підкаталозі "bin". Цей виконуваний файл містить весь механізм і працює без будь-яких залежностей. Після його виконання з’явиться менеджер проекту.

Примітка

Якщо ж вам хочеться зібрати проєкт використовуючи Clang а не GCC, то використайте команду:

scons platform=linuxbsd use_llvm=yes

Використання Clang є обов’язковою умовою для OpenBSD, інакше шрифти не збиратимуться. Для пристроїв з архітектурою RISC-V використовуйте компілятор Clang замість компілятора GCC.

Порада

Якщо ви компілюєте Godot для використання у виробництві, ви можете зробити кінцевий виконуваний файл меншим і швидшим, додавши опцію SCons production=yes. Це дозволяє додатково оптимізувати компілятор і оптимізувати час зв’язку.

LTO потребує деякий час для запуску та вимагає близько 7 ГБ доступної оперативної пам’яті під час компіляції. Якщо вам не вистачає пам’яті з наведеним вище параметром, використовуйте production=yes lto=none або production=yes lto=thin для легкої, але менш ефективної форми LTO.

Примітка

Якщо ви хочете використовувати окремі параметри редактора для власних збірок Godot та офіційних випусків, ви можете ввімкнути Автономний режим, створивши файл під назвою ._sc_ або _sc_ у bin/ папка.

Запуск безголової/серверної збірки

Щоб працювати в режимі headless, який надає функції редактора для автоматичного експорту проектів, використовуйте звичайну збірку:

scons platform=linuxbsd target=editor

А потім скористайтеся аргументом командного рядка --headless:

./bin/godot.linuxbsd.editor.x86_64 --headless

Щоб зібрати серверну версію, яку можна використати зі сторонніми інструментами дебагу, скористайтесь:

scons platform=linuxbsd target=template_debug

Щоб зібрати серверну версію, оптимізовану для запуску ігрових серверів, скористайтесь:

scons platform=linuxbsd target=template_release production=yes

Збірка шаблонів експорту

Попередження

Зазвичай, програми для Linux не запускаються на дистрибутивах, старіших ніж той, на якому вони побудовані. Якщо ви хочете мати змогу розповсюджувати свою збірку серед більшости дистрибутивів, вам варто зібрати програму на старій версії ОС, на зразок Ubuntu 16.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, який Годо розглядає як «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++ то вам, натомість, краще обрати ваші шаблони експорту тут:

../../../_images/lintemplates.png

Вам навіть не потрібно копіювати їх файли, достатньо просто вказати їх в підтеці bin/ з теки, де знаходиться код Godot, щоб наступного разу, при збірці, ваші шаблони будуть додані автоматично.

Cross-compiling for RISC-V devices

To cross-compile Godot for RISC-V devices, we need to setup the following items:

  • riscv-gnu-toolchain. While we are not going to use this directly, it provides us with a sysroot, as well as header and libraries files that we will need. There are many versions to choose from, however, the older the toolchain, the more compatible our final binaries will be. If in doubt, use this version, and download riscv64-glibc-ubuntu-18.04-nightly-2021.12.22-nightly.tar.gz. Extract it somewhere and remember its path.

  • mold. This fast linker, is the only one that correctly links the resulting binary. Download it, extract it, and make sure to add its bin folder to your PATH. Run mold --help | grep support to check if your version of Mold supports RISC-V. If you don't see RISC-V, your Mold may need to be updated.

To make referencing our toolchain easier, we can set an environment variable like this:

export RISCV_TOOLCHAIN_PATH="path to toolchain here"

This way, we won't have to manually set the directory location each time we want to reference it.

With all the above setup, we are now ready to build Godot.

Go to the root of the source code, and execute the following build command:

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 has bugs with its atomic operations which prevent it from compiling Godot correctly. That's why Clang is used instead. Make sure that it can compile to RISC-V. You can verify by executing this command clang -print-targets, make sure you see riscv64 on the list of targets.

Попередження

The code above includes adding $RISCV_TOOLCHAIN_PATH/bin to the PATH, but only for the following scons command. Since riscv-gnu-toolchain uses its own Clang located in the bin folder, adding $RISCV_TOOLCHAIN_PATH/bin to your user's PATH environment variable may block you from accessing another version of Clang if one is installed. For this reason it's not recommended to make adding the bin folder permanent. You can also omit the PATH="$RISCV_TOOLCHAIN_PATH/bin:$PATH" line if you want to use scons with self-installed version of Clang, but it may have compatibility issues with riscv-gnu-toolchain.

The command is similar in nature, but with some key changes. ccflags and linkflags append additional flags to the build. --sysroot points to a folder simulating a Linux system, it contains all the headers, libraries, and .so files Clang will use. --gcc-toolchain tells Clang where the complete toolchain is, and -target riscv64-unknown-linux-gnu indicates to Clang the target architecture, and OS we want to build for.

If all went well, you should now see a bin directory, and within it, a binary similar to the following:

godot.linuxbsd.editor.rv64.llvm

You can now copy this executable to your favorite RISC-V device, then launch it there by double-clicking, which should bring up the project manager.

If you later decide to compile the export templates, copy the above build command but change the value of target to template_debug for a debug build, or template_release for a release build.

Використання Clang та LLD для пришвидшення розробки

Ви можете збудувати Godot з Clang та LLD. Вони мають пару переваг у порівнянні зі стандартною зв'язкою GCC + GNU ld:

  • LLD збирає Godot значно швидше у порівнянні з to GNU ld чи gold. Таким чином збирання проходить швидшими ітераціями.

  • Clang дає корисніші повідомлення про помилки ніж GCC.

Щоб це зробити, встановіть Clang та пакет lld з вашого пакетного менеджера та використайте їх в наступній команді:

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 буде використовуватися без необхідності копіювати його кожного разу, коли він оновлюється.

Використання цвілі для швидшого розвитку

Для ще швидшого зв’язування порівняно з LLD ви можете використовувати mold. mold можна використовувати з GCC або Clang.

Станом на січень 2023 року mold не доступний у сховищах дистрибутивів Linux, тому вам доведеться інсталювати його двійкові файли вручну.

  • Завантажте двійкові файли mold зі сторінки випусків <https://github.com/rui314/mold/releases/latest>`__.

  • Розпакуйте файл .tar.gz, а потім перемістіть видобуту папку в таке розташування, як .local/share/mold.

  • Додайте $HOME/.local/share/mold/bin до змінної середовища вашого користувача PATH. Наприклад, ви можете додати такий рядок у кінці вашого файлу $HOME/.bash_profile:

PATH="$HOME/.local/share/mold/bin:$PATH"
  • Відкрийте новий термінал (або запустіть source "$HOME/.bash_profile"), а потім використовуйте таку команду SCons під час компіляції Godot:

    scons platform=linuxbsd linker=mold
    

Використання системних бібліотек для прискорення розробки

Godot об’єднує вихідний код різних сторонніх бібліотек. Натомість ви можете використовувати системні версії сторонніх бібліотек. Це робить двійковий файл Godot швидшим для зв’язування, оскільки сторонні бібліотеки зв’язуються динамічно. Таким чином, їх не потрібно статично пов’язувати кожного разу, коли ви створюєте механізм (навіть при невеликих поступових змінах).

Однак не всі дистрибутиви Linux мають пакунки для бібліотек сторонніх розробників (або вони можуть бути неоновленими).

Перехід до системних бібліотек може скоротити час зв’язування на кілька секунд на повільних процесорах, але це вимагає ручного тестування залежно від вашого дистрибутива Linux. Крім того, можливо, ви не зможете використовувати системні бібліотеки для всього через помилки в пакетах системної бібліотеки (або в системі збірки, оскільки ця функція менш перевірена).

To compile Godot with system libraries, install these dependencies on top of the ones listed in the Команди для різних дистрибутивів:

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 \
  libzstd-dev \
  libsquish-dev \
  libicu-dev

Після встановлення всіх необхідних пакетів скористайтеся такою командою, щоб створити 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_zlib=no builtin_zstd=no

On Debian stable, you will need to remove builtin_embree=no as the system-provided Embree version is too old to work with Godot's latest master branch (which requires Embree 4).

Ви можете переглянути список усіх вбудованих бібліотек, які мають системні альтернативи, запустивши scons -h, а потім шукаючи параметри, що починаються з builtin_.

Попередження

When using system libraries, the resulting binary is not portable across Linux distributions anymore. Do not use this approach for creating binaries you intend to distribute to others, unless you're creating a package for a Linux distribution.