Инструкции по сборке

Как собрать библиотеку ядра и её тестовое приложение из исходников (для интеграторов, не для пользователей).

На этой странице показано, как собрать ядро Plugify из исходников на Windows, Linux и macOS, какие у него есть опции CMake и как запустить его тесты.

Что нужно

  • Компилятор с поддержкой C++23: GCC, Clang, MSVC (Visual Studio 2022) или Apple Clang. В CI ядро проверяется с GCC, Clang, MSVC и MinGW (MSYS2).
  • CMake 3.14 или новее. Для пресетов нужны CMake 3.21 или новее и Ninja.
  • Git.

Ставить библиотеки вручную не нужно. CMake скачивает зависимости при конфигурации: glaze, valijson, libsolv и asmjit, а также fmt, если в стандартной библиотеке нет <format>. Тесты дополнительно скачивают CLI11, Tracy и Catch2.

Исходники

git clone https://github.com/untrustedmodders/plugify.git
cd plugify

Сборка

Из командной строки

Команды одинаковы на всех платформах:

cmake -S . -B build -DCMAKE_BUILD_TYPE=Release
cmake --build build --config Release

Так собираются библиотека ядра и, поскольку PLUGIFY_BUILD_TESTS по умолчанию включена, тестовое приложение plug и тесты containers. Чтобы собрать только библиотеку, добавьте --target plugify.

На Windows запускайте команды из Developer Command Prompt для Visual Studio. Для MinGW добавьте к первой команде -G "MinGW Makefiles".

С пресетами

В репозитории два пресета, Debug и Release. Они используют Ninja и кладут сборку в build/<система>/<пресет>:

cmake --preset Release
cmake --build --preset Release

В IDE

Visual Studio 2022 и CLion открывают папку с CMakeLists.txt напрямую (в Visual Studio: File > Open > Folder) и подхватывают пресеты. Выберите Debug или Release и соберите проект.

Обновление

git pull

Если после обновления сборка падает, удалите папку сборки и сконфигурируйте заново. Сборка ничего не пишет за пределы своей папки.

Типы сборки

CMAKE_BUILD_TYPE принимает Debug, Release, RelWithDebInfo или MinSizeRel. Если он не задан, используется Release.

На Windows тип сборки важен: ядро не загружает языковой модуль, собранный в другой конфигурации, поэтому собирайте ядро и модули одинаково.

Опции CMake

ОпцияПо умолчаниюОписание
PLUGIFY_BUILD_TESTSONСобрать тестовое приложение plug и тесты containers
PLUGIFY_BUILD_DOCSOFFСобрать документацию Doxygen
PLUGIFY_BUILD_SHARED_LIBONСобрать ядро как разделяемую библиотеку; OFF собирает статическую
PLUGIFY_BUILD_OBJECT_LIBOFFСобрать ядро как объектную библиотеку, чтобы влинковать его в свой бинарник
PLUGIFY_BUILD_SHARED_ASMJITOFFСобрать asmjit как разделяемую библиотеку
PLUGIFY_USE_EXTERNAL_GLAZEOFFИспользовать установленный glaze вместо скачивания
PLUGIFY_USE_EXTERNAL_VALIJSONOFFИспользовать установленный valijson
PLUGIFY_USE_EXTERNAL_LIBSOLVOFFИспользовать установленный libsolv
PLUGIFY_USE_EXTERNAL_ASMJITOFFИспользовать установленный asmjit
PLUGIFY_USE_EXTERNAL_FMTOFFИспользовать установленный fmt
PLUGIFY_DEFAULT_CXX_STANDARD23Стандарт C++; минимально поддерживаемый 20
PLUGIFY_USE_LIBCPPOFFИспользовать libc++ (-stdlib=libc++), если она есть
PLUGIFY_USE_STATIC_STDLIBOFFСтатически линковать стандартную библиотеку (-static-*), если возможно
PLUGIFY_USE_SANITIZEROFFСобрать с AddressSanitizer (-fsanitize=address), если он есть
PLUGIFY_USE_ANALYZEROFFВключить статический анализатор компилятора. Медленно
PLUGIFY_USE_CLANG_TIDYOFFЗапускать clang-tidy при сборке
PLUGIFY_USE_ABI0OFFИспользовать старый C++ ABI GCC (по умолчанию до GCC 5)

Опции передаются в первую команду, например -DPLUGIFY_BUILD_TESTS=OFF.

Проверка сборки

Тестовое приложение

plug — консольный хост для ядра. Запускайте его рядом с папкой extensions, где лежат модули и плагины, как описано в Установке.

Вызовы между языками

Вызовы между языками проверяются двумя плагинами из репозитория C++-модуля, папка test:

  • cross_call_master вызывает методы плагина-исполнителя с параметрами всех видов и проверяет результаты;
  • cross_call_worker экспортирует эти методы. У каждого языкового модуля свой worker, поэтому тест проверяет, как этот модуль передаёт значения в C++ и обратно.

Каждый из них — отдельный CMake-проект. Соберите их как любой C++-плагин, положите master, worker и нужные им языковые модули в extensions и запустите plug. Master запускает тесты при старте и выводит, сколько из них прошло.

Сборка документации

Справочник по API ядра собирается Doxygen:

cmake -S . -B build -DPLUGIFY_BUILD_DOCS=ON
cmake --build build --target docs

Когда сборка закончится, откройте в браузере build/docs/html/index.html.