c и c++

XenolithSDK для C и C++

Тулчейн, libc, libc++, прикладные библиотеки и графический движок. Linux, Windows, macOS и Android из одного кода. Windows SDK, MacOS SDK и Android NDK для этого не нужны.

Испытать в браузере

Компилятор, линкер и make уже в тулчейне. Отдельно их ставить не нужно.

MIT


ИИ-ориентированность

Спросите своего агента

Как создать проект, собрать его и выбрать систему: всё есть в базе знаний репозитория. Содержание и документация оптимизированы для агентной работы.


системы

Без чужих SDK

Тулчейн везёт компилятор, заголовки и библиотеки с собой. Чужой SDK нужен только если вы сами выбрали сборку через него.

Linux

x86_64, arm64 и riscv64, glibc и musl. Рантайм работает над системной libc.

Windows

x86_64 и arm64. Своя libc на mimalloc, без UCRT и без Windows SDK. Импорт DLL и компиляция в DLL поддерживаются.

macOS

x86_64 и arm64. Сборка +open обходится без macOS SDK и лицензионных ограничений. Обычная сборка под Apple SDK ищет его в системе.

Android

arm64, armv7, x86 и x86_64. Есть свой sysroot для сборки без NDK. Есть отдельная обёртка для сборки через NDK, если нужно интегрировать проект в общую систему.

Отдельными таргетами собираются WebAssembly, Embox и NuttX. На iOS пока только sysroot тулчейна: рантайма и варианта +open там нет.


рантайм

Единая libc и libc++

С вашего кода Linux, Windows, macOS и Android выглядят одинаково. Лес #ifdef из-за разной CRT не нужен.

Один POSIX

На Linux, Android и macOS вызовы идут в glibc, musl, Bionic или libSystem. На Windows libc своя. time_t и off_t везде 64-битные. Вызова, которого в системе нет, из заголовков не выкидываем: он возвращает ENOSYS.

Потоки

Обычный pthread на каждой системе. Мьютекс с наследованием приоритета сидит на futex, на WaitOnAddress или на os_sync — смотря где запущено.

Два слоя C++

Сам рантайм собран на маленьком sprt/cxx: без поддержки исключений. Прикладной код получает обычный std:: из порта LLVM libc++. Он живёт в отдельном namespace и не сталкивается с чужим libc++.

Один асинхронный цикл событий

Потоки, таймеры, сокеты, файлы и процессы — через один Looper. Под ним epoll и io_uring, IOCP, kqueue или ALooper. Здесь же окна, дисплеи и все системные детали.


прикладное

Прикладные возможности

Реализованы поверх рантайма и дают ключевые возможности, необходиые реальным приложениям.

Данные

Один контейнер Value пишется в JSON, CBOR и свой url-safe формат. Сжатие LZ4, формат на чтении определяется сам.

Базы

SQLite и PostgreSQL через одни схемы: объекты, файлы, роли на операцию, постраничная выборка. Полнотекстовый поиск на 23 языках, в том числе в памяти, без сервера.

Сеть и крипто

HTTP и HTTP/3 через curl. OpenSSL или GnuTLS (если предустановлен на Linux): RSA, ECDSA, EdDSA, ГОСТ 34.10, 34.11 и 34.12, JWT.

Картинки и шрифты

Чтение PNG, JPEG, WebP, GIF и TIFF, запись PNG, JPEG и WebP. Вектор режется в треугольники на GPU. Шрифты — FreeType и HarfBuzz, поддержка variadic шрифтов.

Документы

HTML и EPUB со своей вёрсткой: блоки, обтекание, таблицы, оглавление. Markdown и шаблоны Pug.

Файлы и Wasm

Свой zip, файловая система, гостевой WebAssembly на WAMR.


графика

Рендерграф

Кадр — это граф проходов и ресурсов. Барьеры и смену лейаутов движок ставит сам, графику и compute можно мешать в одном графе. Новый кадр готовится, только если сцена изменилась: в простое батарею не жжёт.

Бэкенды

Vulkan

Основной. На macOS это MoltenVK из вашего .app.

Metal

Отдельный бэкенд на macOS, без прослойки через Vulkan.

OpenGL ES 3.1

Для плат, где Vulkan нет: Mali, VideoCore, старый Android и эмуляторы.

WebGPU

Нативно и в браузере, через сборку в WebAssembly.

CPU

Собственный программный растеризатор для простых интерфейсов. Поддерживает SSE2/4, NEON, RVV

Окна и 2D

Wayland и X11 (на Linux выбирается при запуске), Win32, Cocoa, Android, прямой вывод на HDMI для встроек и режим без окна. В комплекте flexbox и grid, жесты, вектор и текст с посадкой глифа в пиксель.


Испытайтев браузере

Откроется в браузере. Ставить тулчейн для этого не нужно.

GitHub Испытать в браузере