Перейти к содержимому

Сборка из исходного кода

Инструмент Назначение
Git Клонирование репозитория с подмодулями
CMake 3.28+ Конфигурация сборки
Ninja Бэкенд сборки
GCC или Clang (gcc/g++ или clang/clang++) Компилятор хоста
Zig Только для кросс-сборок (он несёт собственную libc)
Visual Studio 2015+ (инструменты C/C++) Только для нативных сборок на Windows
Окно терминала
git clone --recursive https://github.com/yapb/yapb
cd yapb

Подмодули (crlib, linkage, mbedtls) обязательны. Если вы уже склонировали без --recursive, выполните git submodule update --init --recursive.

build.sh — хелпер-скрипт, оборачивающий CMake-пресеты:

Окно терминала
# нативная dev-сборка (компилятор хоста, zig не нужен)
./build.sh
# кросс-сборка под конкретную цель через zig
./build.sh --arch=linux-x86
# нативная сборка clang'ом с оптимизацией под эту машину, 8 параллельных задач
./build.sh -c=clang --native -j=8

Доступные опции:

Опция Описание
--arch=<preset> Пресет сборки (по умолчанию: release). Кросс-пресеты требуют zig в PATH
-c= / --compiler= C/C++ компилятор хоста для нативных сборок (gcc или clang)
-j= / --jobs= Количество параллельных задач сборки (по умолчанию: автоопределение ninja)
--native Оптимизация под эту машину (-march=native)
--skip-checks Пропустить проверку окружения
-D<Var>=<Val> Дополнительные CMake-определения, передаваемые на этап конфигурации

Пресеты повторяют матрицу CI, поэтому можно управлять CMake напрямую:

Окно терминала
# нативная dev-сборка
cmake --preset release
cmake --build --preset release

Группы пресетов:

  • Локальные пресеты (компилятор хоста, zig не нужен): release, dist, linux-amd64-asan, linux-x86-asan
  • Кросс-пресеты (нужен zig в PATH): ci-linux-x86, ci-linux-amd64, ci-linux-x86-nosimd, ci-linux-arm64, ci-linux-riscv64, ci-apple-amd64, ci-windows-x86-clang, ci-windows-amd64
  • Пресеты только для CI (их раннеры, не для локального использования): ci-apple-arm64, ci-windows-x86, ci-windows-x86-clang-cl, ci-windows-x86-msvc-xp

Полная матрица — в CMakePresets.json.

  1. Установите требования:

    Окно терминала
    sudo apt update
    sudo apt install git cmake ninja-build gcc g++ gcc-multilib g++-multilib
  2. Получите исходники (см. выше)

  3. Соберите:

    Окно терминала
    ./build.sh
  4. Готово! Собранная библиотека находится в release/yapb.so (каждый пресет собирается в директорию, названную его же именем)

  1. Установите Visual Studio с рабочей нагрузкой C/C++

  2. Получите исходники (см. выше)

  3. Либо откройте vc/yapb.sln в Visual Studio и соберите, либо используйте кросс-пресеты через Zig из bash-шелла (Git Bash/WSL):

    Окно терминала
    ./build.sh --arch=windows-x86-clang
  4. Готово! Собранная библиотека находится в release/yapb.dll для нативных сборок или в windows-x86-clang/yapb.dll для кросс-пресета

Эти опции CMake можно передать через -D<Var>=<Val> (или через build.sh -D<Var>=<Val>):

Опция По умолчанию Описание
64BIT OFF Собрать 64-битный бинарник
NATIVE OFF Настроить компилятор для нативной сборки под машину (-march=native)
WINXP OFF Настроить MSVC-сборку бинарника, совместимого с Windows XP
NOSIMD OFF Отключить все оптимизации SIMD/NEON
STATIC_LINKENT OFF Использовать предопределённый список связей сущностей
LTO ON Включить link-time оптимизацию
SANITIZE (пусто) Включить санитайзеры, например address или address,undefined (dev-сборки)
WITH_TLS ON Включить поддержку HTTPS через vendored mbedtls