Поддержка 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