Статьи

Документация

Дополнительно

Поддержка Linux

См. страницу поддержки устройств и ОС

Рекомендуемые компоненты:

  • libunistring
  • libdbus

Как выбирается поддержка Unicode

Поддерживаются библиотеки libunistring или libicuc, загружаемые динамически.

При запуске система в первую очередь ищет доступную библиотеку libunistring. Если не находит - происходит поиск libicuc.

Для libicuc первоначально ишется библиотека libicutu, поскольку поставщики ОС чаще всего её не версионируют. Эта библиотека с помощью функции udbg_getSystemParameterValueByIndex позволяет узнать установленную версию ICU.

Далее, происходит поиск libicuc, из неё извлекаются необходимые функции с учётом версии. Если libicutu недоступна, и система использует версионирование ICU, динамически получить доступ к функциям невозможно, поддержка юникода будет отключена.

GnuTLS

GnuTLS может опционально использоваться в качестве криптографической библиотеки. Для этого необходимо установить пакет заголовоков для дистрибутива, например (Ubuntu):

sudo apt-get install libgnutls28-dev

DBus

Для работы функции определения состояния подключения системы к сети необходима настроенная шина DBus в системе и библиотека libdbus-1.so. Приложение подключает эту библиотеку динамически. Если она недоступна - приложение сможет узнать о состоянии сети только с помощью пробного подключения.

Также, DBus отвечает за получение информации об оконной системе при использовании Wayland.

XKB

Для работы с символьным вводом в X11 и Wayland используется библиотека libxkbcommon.so, загружаемая динамически.

X11

Проверка поддержки X11 выполняется динамической загрузкой библиотеки libxcb.so. В случае успеха также загружаются libxcb-randr.so, libxcb-keysyms.so, libxcb-xkb.so.

Wayland

На текущий момент для поддержки Wayland необходимо передать флаг XL_ENABLE_WAYLAND=1 в LOCAL_CFLAGS проекта.

Поддержка Wayland определяется при загрузке libwayland-client.so. Также, для работы необходимы libdbus-1.so и libxkbcommon.so.

При запуске приложения, если Wayland поддерживает Vulkan, графическое приложение будет запущено на основе Wayland. В другом случае, будет использоваться X11 (в т.ч. через XWayland).

Переопределить поведение можно через установку функции VulkanInstanceData::checkPresentationSupport возвратом в качестве результата соотвествующих флагов xenolith::platform::SurfaceType.

OpenSSL

см. OpenSSL

Vulkan

см. Vulkan

Apache HTTPD

Веб-сервер Apache HTTPD выступает основным носителем модулей для SDK при использовании серверных возможностей. Поддерживается версия от 2.4. Требуются рабочий модуль mod_ssl. Рекомендуется установка mod_dbd для работы баз данных (в таком случае, нужно использовать конфигурацию mod_dbd, а не Stappler для баз данных).

Несмотря на то, что SDK может работать с различными вариантами конфигурации Apache HTTPD, для случая использования веб-сервера только в связке с SDK есть рекомендуемый вариант конфигурации.

Ключевое для успешной работы - избежание конфликта зависимостей. Для этой цели используются зависимости из Stappler SDK (переменная STAPPLER_DEPS_ROOT должна указывать на корень архитектуры собранных зависимостей, например, deps/linux/x86_64).

Примерную логику развёртывания контейнера со сборкой зависимостей можно увидеть здесь.

Для использования ГОСТ-шифров необходимо указать их в конфигурации SSLCipherSuite. Поддерживаемый шифронабор можно выяснить при тестировании OpenSSL.

glibc и musl

Предсобранные зависимости собираются для glibc конкретной версии. Если установленная в системе версия glibc не совместима с предсобранными зависимостями, компилятор сообщит об этом. в таком случае, зависимости необходимо пересобрать вручную.

Для musl зависимости всегда необходимо собирать вручную. Также, из musl ужалён ряд функций простой развёртки стека, используемых в SDK, потому модуль stappler_backtrace обязателен к подключению при использовании musl.

Кросскомпиляция

SDK поддерживает сборку приложения в режиме кросскомпиляции для aarch64 и e2k. Для этого необходимо указать STAPPLER_ARCH=e2k|aarch64 при запуске make.

При кросскопиляции, если компиляторы не указаны, они выбираются автоматически как

ifeq ($(STAPPLER_ARCH),e2k)
ifneq ($(STAPPLER_ARCH),$(UNAME_ARCH))
GLOBAL_CPP ?= e2k-linux-l++
GLOBAL_CC ?= e2k-linux-lcc
endif
endif

ifeq ($(STAPPLER_ARCH),aarch64)
ifneq ($(STAPPLER_ARCH),$(UNAME_ARCH))
GLOBAL_CPP ?= aarch64-linux-gnu-g++
GLOBAL_CC ?= aarch64-linux-gnu-gcc
endif
endif

Эльбрус (e2k)

см. e2k