Да, название статьи на английском, чтобы любой в интернете мог быстро ее найти.
Проблема: чтобы собрать UE из сурсов, достаточно 2х команд; чтобы собрать UE докер-образ, достаточно 1 команды. А чтобы собрать godot из сурсов с поддержкой c# на линукс и с возможностью экспортировать проект в web, надо прочитать 5+ статей и потратить кучу времени на понимание оных. Чтобы вы могли не тратить своё время, я собрал всю необходимую информацию в одной статье. Здесь приведены краткие инструкции по сборке godot движка из сурсов на debain 11 (64bit).
1 — Установка нужных зависимостей
Надо поставить кучу всего. Во-первых, скачайте sdk Emscripten и положите исходники в какую-нибудь папку, скажем, $HOME/GODOT/emsdk/
. Вам надо будет выполнить несколько команд, чтобы sdk manager загрузил нужный sdk и добавил его в path. Ставьте версию 1.39.9
:
mkdir $HOME/GODOT cd $HOME/GODOT git clone https://github.com/emscripten-core/emsdk.git cd emsdk git pull ./emsdk install 1.39.9 ./emsdk activate 1.39.9 source ./emsdk_env.sh
В принципе, можно ставить любую версию 1.39.9+, но дальше нам встретятся сверх-тонкие вещи, которые тестировались именно на этой версии. Помимо этого, надо сохранить путь к созданному файлу конфигурации в переменной окружения:
export EM_CONFIG=`pwd` # где находится файл конфигурации .emscripten cd .. # возвращаемся в каталог $HOME/GODOT
Теперь надо поставить MSBuild
версии 16.9
. Как сказано тут, самый простой способ — установить .NET 6.0
, в котором и есть всё необходимое. Инструкции для конкретного дистрибутива можно найти в обширной документации от microsoft. В моём случае — это инструкции для debian — добавить ключ и установить сам пакет. По идее, после этого вы можете убедиться в том, что sdk установлен, командой:
dotnet --list-sdks # output example: 6.0.402 [/usr/share/dotnet/sdk]
Но и это не всё. Ещё нам понадобится NuGet
. Если верить этому посту на stackoverflow, после установки net-core, вы можете поставить его командой:
$ apt install nuget # под sudo, разумеется $ nuget NuGet Version: 2.8.7.0 usage: NuGet <command> [args] [options] Type 'NuGet help <command>' for help on a specific command.
Ну супер, осталось немного:
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 gdb
2 — Подготовить NuGet
А именно скачать и дать ему ключ:
curl -LO https://curl.haxx.se/ca/cacert.pem cert-sync --user cacert.pem rm cacert.pem # удалить, чтобы не засорять систему
3 — Скачиваем ресурсы mono
Mono is an open source implementation of Microsoft’s .NET Framework based on the ECMA standards for C# and the Common Language Runtime.
Нам нужная конкретная версия : 1.62.0.182
.
cd $HOME/GODOT git clone https://github.com/mono/mono cd mono git fetch --all --tags git checkout tags/mono-6.12.0.182 # Перейти на нужную версию cd .. export MONO_SOURCE_ROOT=$HOME/mono # путь к mono
Как перейти на указанный tag в git я нашел здесь: https://devconnected.com/how-to-checkout-git-tags/.
4 — Собрать mono сурсы для каждой из платформ
Целевые платформы в нашем случае: это linux, для которого надо собрать сам движок, и web (т.е. html5), для которого надо собрать только шаблоны экспорта. Все команды кратко описаны здесь. Смысл указанного репозитория — собрать ресурсы mono под каждую из указанных платформ. Важный момент: у меня была 64 bit версия компа, поэтому я собирал только 64bit версию движка, и чтобы она успешно собралась, надо править файл $HOME/GODOT/mono/mono/utils/mono-mmap-wasm.c
. На 193-194 строках в этом файле используется флаг MAP_32BIT, который в современных машинах не нужен, поэтому эти строки можно удалить. Потом начинаем билдить исходники mono:
# Предполагается, что вы уже скачали # https://github.com/godotengine/godot-mono-builds.git # Пропатчили файл mono/mono/utils/mono-mmap-wasm.c # находитесь в директории, где склонен godot-mono-builds. # Желательно, чтобы godot-mono-builds лежал в $HOME/GODOT ./patch_mono.py ./patch_emscripten.py ./linux.py configure --target=x86_64 ./linux.py make --target=x86_64 ./bcl.py make --product=desktop ./linux.py copy-bcl --target=x86_64 ./wasm.py configure --target=runtime ./wasm.py make --target=runtime ./bcl.py make --product=wasm ./wasm.py copy-bcl --target=runtime ./reference_assemblies.py install
Чтобы все эти скрипты клали результат не в $HOME/mono-installs
, а в, например, $HOME/GODOT/mono-installs
, к каждой команде, которая это поддерживает, надо приписать --install-dir=$HOME/GODOT/mono-installs
.
Узнать, поддерживает ли команда указанный флаг --install-dir
, можно, как всегда, флагом --help
, например: ./linux.py --help
.
5 — Скачиваем исходники godot
Нам нужная версия 3.5.1 stable
. Клонируем репозиторий в $HOME/GODOT/godot
.
6 — Генерируем glue код
Godot для сборки использует «хрен пойми» какой-то glue, если кратко: сначала надо сбилдить его с кое-какими флагами, запустить godot и вот тогда-то этот glue сгенерируется как раз, а уже только потом билдить сам godot. В директории, где лежат исходники:
scons -j15 platform=x11 tools=yes module_mono_enabled=yes mono_glue=no copy_mono_root=yes mono_prefix="$HOME/GODOT/mono-installs/desktop-linux-x86_64-release" sudo cp ~/GODOT/mono-installs/desktop-linux-x86_64-release/lib/libmonosgen-2.0.so.1 /usr/lib/libmonosgen-2.0.so.1 bin/godot.x11.tools.64.mono --generate-mono-glue modules/mono/glue
Первая команда сгенерирует вам недобилд godot, обратите внимание, что если у вас в другом месте лежат сбилденные файлы mono (не в "$HOME/GODOT/mono-installs/desktop-linux-x86_64-release"
), то и путь к ним надо указать соответствующий. В папке, куда указывает mono_prefix=
должны лежать папки include lib
.
Вторая команда из тех, что выше — это просто костыль, который решает проблему, которая, видимо, только у меня произошла. Дело в том, что bin/godot.x11.tools.64.mono
искал эту библиотеку и не мог найти, из-за чего падал. Тогда при помощи strace я посмотрел, где он её ищет и скопировал туда.
Третья команда — запуск недобилденного godot, который и сгенерирует файлы glue.
Результат: в папке modules/mono/glue/
будут файлы:
mono_glue.gen.cpp GodotSharp/GodotSharp/Generated GodotSharp/GodotSharpEditor/Generated
7 — Собираем движок
Наконец-то. Не забываем про mono_prefix
.
scons -j15 platform=x11 tools=yes target=release_debug use_lto=yes module_mono_enabled=yes copy_mono_root=yes mono_prefix="$HOME/GODOT/mono-installs/desktop-linux-x86_64-release"
А, да и кстати (возможно об этом надо было сказать чуть раньше): scons — это система сборки. А флаг -j15
указывает ей, сколько потоков использовать. Например, если у вас на компьютере 16 ядер, то команда выше будет билдить движок в 15 потоков, а у вас останется 1 ядро, чтобы смотреть ютубчик, пока дело шьётся.
Результат — бинарники в bin
папке. Для запуска движка выполнять opt файл (godot.x11.opt.tools.64.mono
).
8 — Собираем шаблоны для javascript
Отлично, но мы хотим уметь билдить наши проекты в html. Для этого собираем шаблоны:
scons -j15 platform=javascript tools=no target=release_debug javascript_eval=no module_mono_enabled=yes copy_mono_root=yes mono_prefix="$HOME/GODOT/mono-installs/wasm-runtime-release" scons -j15 platform=javascript tools=no target=release javascript_eval=no module_mono_enabled=yes copy_mono_root=yes mono_prefix="$HOME/GODOT/mono-installs/wasm-runtime-release"
Ключ javascript_eval=no
говорит, чтобы godot по возможности в результирующих билдах игры не использовал eval.
Результат — zip-архивы в bin
папке.
9 — Скопировать экспорт-шаблоны в нужную папку
Перемещаем шаблоны экспорта в папку, где godot ожидает их увидеть:
mkdir ~/.local/share/godot/templates/3.5.1.stable.mono mv bin/godot.javascript.opt.debug.zip ~/.local/share/godot/templates/3.5.1.stable.mono/webassembly_debug.zip mv bin/godot.javascript.opt.zip ~/.local/share/godot/templates/3.5.1.stable.mono/webassembly_release.zip
10 — Скопировать BCL в нужные папки
BCL — это Base Class Library. Он билдился на шаге 4 (собрать mono сурсы). Без понятия, что это, но я переместил это дело в папку поближе к экспорт-шаблонам, как это сказано в доках по godot. Просто сделайте так, чтобы по пути ~/.local/share/godot/templates/3.5.1.stable.mono/bcl/wasm/
оказались dll
файлы из $HOME/GODOT/mono-installs/wasm-bcl/wasm/
. Например:
mkdir ~/.local/share/godot/templates/3.5.1.stable.mono/bcl cp -r $HOME/GODOT/mono-installs/wasm-bcl/wasm/ ~/.local/share/godot/templates/3.5.1.stable.mono/bcl/wasm/
Заключение
Простите, пожалуйста, если что-то в этой инструкции не так. Поймите, это ручная работа и, если тут были опечатки, не судите строго. Я просто хотел сделать маленькую шпору, руководствуясь которой можно было бы поставить godot из сурсов на новый debian 11. Мотив написания этой статьи очевиден: я читал много доков и инструкций и пока читал, фиксировал, что и в каком порядке выполнять. Я проверил, и вроде бы всё работает. Кроме того, я хотел, чтобы $HOME
не засорялась всякими файлами, поэтому постарался написать этот туториал, который пытается всё хранить в $HOME/GODOT
. Может быть такое, что после всего этого у вас появится каталог $HOME/mono-config
, как это было у меня, но его можно безболезненно удалить (что я и сделал, и вроде бы всё работает).
Всем спасибо за внимание. Покупайте пшеничное поле. (с) Великий Прикалёль
ссылка на оригинал статьи https://habr.com/ru/post/697634/
Добавить комментарий