pulsar
RU

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

Требования: Bun, CMake (≥ 3.21), компилятор C++20 и dev-файлы Qt 6.9+, включая модуль WebSockets.

# Debian/Ubuntu
sudo apt install g++ cmake qt6-base-dev qt6-base-dev-tools qt6-declarative-dev \
  qt6-websockets-dev qml6-module-qtquick qml6-module-qtquick-controls

# Fedora
sudo dnf install gcc-c++ cmake qt6-qtbase-devel qt6-declarative-devel qt6-qtwebsockets-devel

# Arch
sudo pacman -S base-devel cmake qt6-base qt6-declarative qt6-websockets qt6-quickcontrols2

# macOS
brew install cmake qt

# Windows: поставьте Qt 6.9 через онлайн-установщик и передайте -DCMAKE_PREFIX_PATH=<qt>/lib/cmake

Затем:

bun install
cmake -S . -B build && cmake --build build

Сборка создаёт:

  • build/bin/qml-host — Qt-хост (рендерит QML, нативные диалоги/трей);
  • build/bin/bridge — супервизор процессов на C++ для рантайма;
  • build/bin/launcher — лончер без Qt для однофайловых приложений.

Qt ищется через CMake find_package(Qt6), поэтому при нестандартном пути передай -DCMAKE_PREFIX_PATH=<qt>. PULSAR_QMAKE по-прежнему задаёт qmake для упаковки (pulsar build встраивает Qt).

Релизы собираются CI-матрицей (.github/workflows/release.yml) на Linux, macOS и Windows, с платформенной упаковкой Qt (ldd в Linux, otool + копирование фреймворков в macOS, windeployqt в Windows).

Раскладка одного файла

pulsar build дописывает payload к launcher:

[ launcher ][ контейнер payload ][ смещение payload + магия ]
             ├─ bin/qml-host, bin/bridge, bin/qt.conf
             ├─ runtime                  (Bun standalone: рантайм + приложение + SDK)
             ├─ app/…                     (QML, ассеты, манифест)
             └─ lib/Qt/…                  (встроенный Qt, Linux/macOS)
                                          или DLL Qt рядом с хостом в Windows

При запуске лончер распаковывает payload в кэш пользователя и делает exec хоста, который грузит собственный Qt — из lib/Qt по RPATH в Linux/macOS либо из DLL рядом с exe в Windows — никогда из системы. Используйте --slim, чтобы не класть Qt и опираться на системную установку.

pulsar build переиспользует Qt из установленного toolchain; если у хоста нет встроенного Qt (dev-сборки), берётся Qt из qmake. Переменная PULSAR_QT_ROOT указывает на конкретное дерево Qt.