Skip to content

Latest commit

History

13,476 Commits

Folders and files

NameName
Last commit message
Last commit date

Repository files navigation

BRus MUD Engine

Multi-Platform BuildQuick Checkcodecov

Проект собирается на Linux (Ubuntu/Debian), Windows (MSVC, Clang, MinGW, Cygwin, WSL) и macOS с помощью Meson.


Содержание


Подготовка

Клонируйте репозиторий:

git clone https://github.com/bylins/mud
cd mud

Скопируйте шаблон данных мира:

cp --update=none -r lib.template/* lib

Сборка

Linux / WSL

Установите зависимости (Ubuntu 24.04):

sudo apt-get update
sudo apt-get install -y \
build-essential make \
libssl-dev libcurl4-gnutls-dev libexpat1-dev \
gettext unzip gdb \
libgtest-dev zlib1g-dev libcrypt-dev \
ninja-build meson pkg-config

Сборка:

meson setup build -Dbuild_profile=dev
meson compile -C build
build/circle 4000

WSL (Ubuntu под Windows) настраивается по официальной инструкции Microsoft, после чего шаги идентичны Linux.

macOS

brew install openssl curl expat googletest meson ninja pkgconf
meson setup build -Dbuild_profile=dev
meson compile -C build
build/circle 4000

Сборка для Mac на процессорах Intel:

meson setup build --native-file=toolchains/macos-x86_64-native.txt -Dbuild_profile=dev
meson compile -C build

Создание universal binary для двух архитектур одновременно:

meson setup build --native-file=toolchains/macos-universal-native.txt -Dbuild_profile=dev
meson compile -C build

Windows (MSVC / Clang)

Установите зависимости через vcpkg:

vcpkg install openssl:x64-windows curl:x64-windows expat:x64-windows gtest:x64-windows
pip install meson ninja

Откройте Developer Command Prompt (или используйте ilammy/msvc-dev-cmd в CI), затем:

$env:PKG_CONFIG_PATH="C:\vcpkg\installed\x64-windows\lib\pkgconfig"
meson setup build -Dbuild_profile=dev
meson compile -C build

Для Clang передайте переменные окружения перед meson setup:

$env:CC="clang-cl"; $env:CXX="clang-cl"

Windows (MinGW / MSYS2)

В терминале MSYS2 (MINGW64):

pacman -S git mingw-w64-x86_64-gcc mingw-w64-x86_64-meson mingw-w64-x86_64-ninja \
mingw-w64-x86_64-pkg-config mingw-w64-x86_64-openssl \
mingw-w64-x86_64-curl mingw-w64-x86_64-expat mingw-w64-x86_64-gtest
meson setup build -Dbuild_profile=dev
meson compile -C build

Cross-компиляция под Windows с Linux (MinGW)

В репозитории есть готовый toolchain-файл:

meson setup build --cross-file toolchains/windows-mingw64-cross.txt -Dbuild_profile=dev
meson compile -C build

LuaJIT и форматирование Lua

Для сборки движка с Lua-триггерами и встроенным форматтером EmmyLuaCodeStyle используйте встроенные Meson-зависимости:

meson setup build_lua \
-Dbuild_profile=release \
-Dbuild_tests=false \
-Dluajit=builtin \
-Dlua_formatter=true
meson compile -C build_lua

-Dluajit=builtin включает LuaJIT и интеграцию через sol2. При включенном LuaJIT опция lua_formatter по умолчанию равна true; она указана в примере явно, чтобы конфигурация была очевидна. Meson использует subprojects из репозитория или загружает недостающие исходники через wrap-файлы.

Если LuaJIT установлен в системе и доступен через pkg-config, вместо встроенной версии можно использовать:

meson setup build_lua \
-Dbuild_profile=release \
-Dbuild_tests=false \
-Dluajit=system \
-Dlua_formatter=true

Чтобы оставить Lua-триггеры, но отключить форматтер:

meson configure build_lua -Dlua_formatter=false
meson compile -C build_lua

В итоговой сводке конфигурации Meson строки LuaJIT и Lua formatter показывают фактически выбранные режимы. Форматтер доступен в OLC только в сборке с LuaJIT.


Unity-сборка

Meson поддерживает unity-сборку (объединение нескольких .cpp в один compilation unit), что существенно ускоряет компиляцию за счёт параллельной обработки:

# Ускорение примерно в 2x по сравнению с обычной сборкой
meson setup build --unity=on
# по умолчанию эта опция включена, поэтому допустимо
meson setup build
# Ускорение в 4-5x — подберите unity_size под число ядер вашего процессора
meson setup build -Dunity_size=45

Рекомендуемые значения unity_size: 30–50. Чем больше ядер — тем большее значение имеет смысл пробовать. Флаг можно передать при первом meson setup или сбросить конфигурацию через meson setup build --wipe.


Пересборка

Если не требуется менять конфигурацию сборки, пересборка осуществляется так:

meson compile -C build
# также допустимо, если бэкендом выбран ninja
ninja -C build

Пересборка с изменением параметров осуществляется так:

# первая сборка
meson setup build -Dyaml=system -Dunity_size=45
# теперь yaml соберется из кода, unity_size по-прежнему 45
meson setup --reconfigure build -Dyaml=builtin
# сброс всех ранее примененных настроек
meson setup --wipe build

Тесты

meson setup build -Dbuild_profile=dev
meson compile -C build tests
meson test -C build

Запуск конкретного теста напрямую:

build/tests/tests --gtest_filter="TriggersList_F.*"

Покрытие кода

# -Db_coverage=true обязательно (встроенная опция meson для отчётов о покрытии)
meson setup build -Dbuild_profile=debug -Db_coverage=true
meson compile -C build tests
meson test -C build
# HTML-отчёт (требует lcov/gcovr)# для MacOS работает только gcovr
ninja -C build coverage-html
# Или другие форматы:
ninja -C build coverage # отчёты во всех доступных форматах + сводка в терминале
ninja -C build coverage-xml # для CI / Codecov

Docker

docker build -t mud-server --build-arg BUILD_TYPE=Test .
docker run -d -p 4000:4000 -e MUD_PORT=4000 -v ./lib:/mud/lib --name mud mud-server

Остановка:

docker stop mud

Подключение из клиента: localhost:4000


Опции сборки

Опции передаются при вызове meson setup в виде -Dимя=значение.

Профиль сборки

ОпцияЗначенияПо умолчаниюОписание
build_profilerelease, debug, dev, fasttest, customreleaserelease/debug — ggdb3 O0; dev — O3 + TEST_BUILD; fasttest — Ofast + TEST_BUILD; custom — без специфических флагов

Функциональность

ОпцияТипПо умолчаниюОписание
build_testsbooleantrueСобирать тесты
scriptingbooleanfalsePython-скриптинг через Boost.Python
admin_apibooleanfalseAdmin API и JSON-обработка
has_epollbooleantrueИспользовать epoll (Linux/FreeBSD)
nocryptbooleanfalseОтключить использование crypt()
with_asanbooleanfalseAddress Sanitizer
use_pchbooleantrueПредкомпилированные заголовки
lua_formatterbooleantrueВстроенный EmmyLuaCodeStyle; используется только при включенном LuaJIT
linkerstring`` (системный)Линковщик: gold, mold, lld, bfd
full_world_pathstring``Абсолютный путь к данным мира для создания симлинков
sol2_rootstring``Необязательный путь к заголовкам sol2; пустое значение использует Meson dependency/fallback

Зависимости

Для некоторых возможностей движка требуются внешние зависимости. Большинство из них возможно как собирать из исходного кода, так и использовать установленные в системе. Синтаксис такой:

meson setup build -Ddependency1=builtin -Ddependency2=system -Ddependency3=disabled -Ddependency4=auto

Для каждой зависимости доступны значения: auto (сначала искать системную, при отсутствии собрать встроенную), system (использовать зависимость из системы или ошибка), builtin (сразу собрать встроенную), disabled. Если зависимость собирается из исходного кода впервые, Meson автоматически скачает её.

ОпцияПо умолчаниюОписание
zlibautoПоддержка MCCP через ZLib
iconvdisabledПоддержка iconv
telegramdisabledTelegram-интеграция (требует CURL + OpenSSL)
luajitdisabledLua-триггеры через LuaJIT и sol2; builtin собирает встроенные зависимости
boostdisabledBoost (нужен для scripting)
sqlitedisabledSQLite как источник данных мира
yamldisabledYAML как источник данных мира
oteldisabledOpenTelemetry (трассировка и метрики)
fmtbuiltinБиблиотека fmt (обязательная зависимость)
gtestbuiltinGoogle Test (используется при build_tests=true)

Стандартные опции Meson также доступны, например -Db_coverage=true для покрытия кода.

About

МПМ Былины

Resources

Contributing

Stars

43 stars

Watchers

13 watching

Forks

Releases

Packages

Used by

Contributors

Languages