c и c++

XenolithSDK для C и C++

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

Скачать установщик

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

MIT, без роялти


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

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

Как создать проект, собрать его и выбрать систему, написано в репозитории. Откройте исходники и спросите — агент ответит по ним.


системы

Без чужих SDK

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

Linux

x86_64, arm64 и riscv64, glibc и musl. Вызовы уходят в системную libc, вторая поверх неё не подменяется.

Windows

x86_64 и arm64. Своя libc на mimalloc, без UCRT и без Windows SDK. Системные DLL цепляются своим import.lib.

macOS

x86_64 и arm64. Сборка +sprt обходится без macOS SDK. Обычная сборка под Apple SDK его просит — так у них устроена лицензия.

Android

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

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


рантайм

Единая 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: без исключений, со Status и Result. Прикладной код получает обычный std:: из порта LLVM libc++. Он живёт в std::__sprt и не сталкивается с чужим libc++.

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

Таймеры, сокеты, файлы и процессы — через один Looper. Под ним epoll и io_uring, IOCP, kqueue или ALooper. Окна и дисплеи тоже за этим API, а не за заголовками чужого SDK.


прикладное

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

Поверх рантайма лежат библиотеки, которыми обычно обрастает приложение. Это не обёртки над системными SDK.

Данные

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

Базы

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

Сеть и крипто

HTTP/2 и HTTP/3 через curl. OpenSSL, GnuTLS и mbedTLS: RSA, ECDSA, EdDSA, ГОСТ 34.10, 34.11 и 34.12, JWT.

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

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

Документы

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

Файлы и Wasm

Свой zip, файловая система, гостевой WebAssembly на WAMR. Графику в гостевой код пока не отдаём.


графика

Рендерграф

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

Бэкенды

Vulkan

Основной. На macOS это MoltenVK, с portability-подмножеством, из вашего .app.

Metal

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

OpenGL ES 3.1

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

WebGPU

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

CPU

Плоский 2D без драйвера и шейдеров. Compute, глубина и MSAA тут не делаются.

Окна и 2D

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


Поставьтеи соберите

Установщик ставит тулчейн и создаёт первый проект.

Скачать установщик GitHub