Проект собирается на Linux (Ubuntu/Debian), Windows (MSVC, Clang, MinGW, Cygwin, WSL) и macOS с помощью Meson.
- Подготовка
- Сборка
- Linux / WSL
- macOS
- Windows (MSVC / Clang)
- Windows (MinGW / MSYS2)
- Cross-компиляция под Windows с Linux (MinGW)
- Unity-сборка
- Пересборка
- Тесты
- Покрытие кода
- Docker
- Опции сборки
- Профиль сборки
- Функциональность
- Зависимости
Клонируйте репозиторий:
git clone https://github.com/bylins/mud
cd mudСкопируйте шаблон данных мира:
cp --update=none -r lib.template/* libУстановите зависимости (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 4000WSL (Ubuntu под Windows) настраивается по официальной инструкции Microsoft, после чего шаги идентичны Linux.
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Установите зависимости через 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"В терминале 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В репозитории есть готовый toolchain-файл:
meson setup build --cross-file toolchains/windows-mingw64-cross.txt -Dbuild_profile=dev
meson compile -C buildMeson поддерживает 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 buildmeson 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 / Codecovdocker 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_profile |
release, debug, dev, fasttest, custom |
release |
release/debug — ggdb3 O0; dev — O3 + TEST_BUILD; fasttest — Ofast + TEST_BUILD; custom — без специфических флагов |
| Опция | Тип | По умолчанию | Описание |
|---|---|---|---|
build_tests |
boolean | true |
Собирать тесты |
scripting |
boolean | false |
Python-скриптинг через Boost.Python |
admin_api |
boolean | false |
Admin API и JSON-обработка |
has_epoll |
boolean | true |
Использовать epoll (Linux/FreeBSD) |
nocrypt |
boolean | false |
Отключить использование crypt() |
with_asan |
boolean | false |
Address Sanitizer |
use_pch |
boolean | true |
Предкомпилированные заголовки |
linker |
string | `` (системный) | Линковщик: gold, mold, lld, bfd |
full_world_path |
string | `` | Абсолютный путь к данным мира для создания симлинков |
Для некоторых возможностей движка требуются внешние зависимости. Большинство из них возможно как собирать из исходного кода, так и использовать установленные в системе. Синтаксис такой:
meson setup build -Ddependency1=builtin -Ddependency2=system -Ddependency3=disabled -Ddependency4=autoДля каждой зависимости доступны значения: auto (сначала искать системную, при отсутствии собрать встроенную), system (использовать зависимость из системы или ошибка), builtin (сразу собрать встроенную), disabled.
Если зависимость собирается из исходного кода впервые, Meson автоматически скачает её.
| Опция | По умолчанию | Описание |
|---|---|---|
zlib |
auto |
Поддержка MCCP через ZLib |
iconv |
disabled |
Поддержка iconv |
telegram |
disabled |
Telegram-интеграция (требует CURL + OpenSSL) |
boost |
disabled |
Boost (нужен для scripting) |
sqlite |
disabled |
SQLite как источник данных мира |
yaml |
disabled |
YAML как источник данных мира |
otel |
disabled |
OpenTelemetry (трассировка и метрики) |
fmt |
builtin |
Библиотека fmt (обязательная зависимость) |
gtest |
builtin |
Google Test (используется при build_tests=true) |
Стандартные опции Meson также доступны, например -Db_coverage=true для покрытия кода.