05 марта 2026 № 1 (2026)

ROSARIUM

газета советского программиста

Практикум 7: Meson-проект (gamemode)

Сборка и упаковка gamemode — демон оптимизации производительности для игр, Meson-проект с systemd, D-Bus и shared library.

В этом практикуме мы упакуем gamemode — демон от Feral Interactive, который оптимизирует производительность Linux-системы во время запуска игр. Проект идеально подходит для изучения Meson-сборки: здесь есть демон, CLI-утилита, разделяемая библиотека, заголовки, D-Bus-конфигурация и юнит-файлы systemd.

Что вы узнаете

  • Как работает система сборки Meson и чем она отличается от Autotools и CMake
  • Как использовать RPM-макросы %meson, %meson_build, %meson_install
  • Как задавать опции сборки Meson через -D
  • Как правильно разделять пакет на подпакеты: основной, -libs, -devel
  • Как работать с юнит-файлами systemd и D-Bus-сервисами в RPM
  • Как использовать systemd-макросы в скриптлетах

Что такое Meson

Meson — это современная система сборки, написанная на Python. Ключевые отличия от Autotools и CMake:

  • Декларативный синтаксис — файлы meson.build читаются проще, чем CMakeLists.txt или Makefile.am
  • Быстрая конфигурация — Meson значительно быстрее autoconf/automake на больших проектах
  • Бэкенд Ninja — вместо Make используется Ninja, который параллелит сборку эффективнее
  • Встроенная поддержка pkg-config, systemd, D-Bus, i18n и многого другого
  • Кросс-платформенность — один и тот же meson.build работает на Linux, macOS, Windows

Meson не генерирует Makefile. Вместо этого он создаёт файлы для Ninja (build.ninja), и вся компиляция идёт через ninja. В RPM-контексте это означает, что вместо %configure / %make_build / %make_install используются %meson / %meson_build / %meson_install.

Что делают RPM-макросы Meson

МакросЧто делает за кулисамиАналог в Autotools
%mesonЗапускает meson setup с правильными путями (--prefix=/usr, --libdir=%{_libdir} и т.д.)%configure
%meson_buildЗапускает ninja -C %{__meson_build_dir} — компиляция проекта%make_build
%meson_installЗапускает DESTDIR=%{buildroot} ninja -C %{__meson_build_dir} install%make_install

Макрос %meson автоматически передаёт Ninja правильные системные пути: --prefix=/usr, --libdir=/usr/lib64 (на x86_64), --sysconfdir=/etc и т.д. Вам не нужно указывать их вручную.

О проекте gamemode

gamemode (GitHub) состоит из нескольких компонентов:

КомпонентОписание
gamemodedДемон, принимающий запросы через D-Bus и применяющий оптимизации
gamemoderunCLI-обёртка для запуска игр с gamemode
libgamemode.soРазделяемая библиотека — клиентский API для приложений
libgamemodeauto.soБиблиотека для автоматической активации (через LD_PRELOAD)
gamemode_client.hЗаголовочный файл для разработчиков
gamemode.pcФайл pkg-config
gamemoded.serviceПользовательский юнит systemd
D-Bus-конфигурацияФайлы политики и описания сервиса

Содержание практикума

  1. SPEC-файл и сборка — подготовка окружения, скачивание исходников, изучение опций Meson, создание SPEC-файла и сборка пакета
  2. Проверка результатов — rpmlint, проверка содержимого пакетов, зависимостей и тестовая установка
  3. systemd и D-Bus — юнит-файлы systemd, скриптлеты, D-Bus-конфигурация
  4. Ошибки и отладка — типичные ошибки новичков, полезные команды для отладки, итоги