/XServer/ — тройка SDK
| Путь | Содержимое |
|---|---|
/xs/xsbase.h | контрактный заголовок: 14 символов, 20 API, структуры и перечисления — #include <xsbase.h> автоматически подтягивает следующие два |
/xs/xrt_decl.h | полные публичные объявления xrt (3 030 прототипа API) |
/xs/libtcc.h | объявления API вложенной компиляции |
Эти три заголовка выпускаются в ногу с бинарником (при сборке пакуются из дерева исходников) — дрейф «заголовок старый, библиотека новая» невозможен.
/tcc/ — дерево заголовков
| Путь | Содержимое |
|---|---|
/tcc/include/tcclib.h | вспомогательные объявления рантайма TCC |
/tcc/include_win/** | заголовки Windows SDK (урезанные до сохраняемого набора: весь winapi плюс curl) |
/tcc/include_linux/** | стандартные заголовки Linux-стороны (полный набор C99/C11) |
У Windows-стороны есть ещё один неявный канал: msvcrt и kernel32 в режиме компиляции в память подключаются автоматически — скрипты пользуются стандартной библиотекой и базовыми API Win32 без единой строки конфигурации линковки.
/tcc/ — определения библиотек
/tcc/lib/*.def: kernel32, msvcrt, user32, gdi32, shell32, ole32, oleaut32, ws2_32, imm32 — ссылаются напрямую через#pragma comment(lib, ...)или tcc_add_library/tcc/lib/libtcc1.a: вспомогательная библиотека рантайма TCC (компилятор использует её сам)
Такая библиотечная поверхность означает: процессы (CreateProcess), COM (автоматизация Excel), нативные сокеты и операции Shell доступны в скриптах напрямую — обсуждение границ возможностей см. в главе 44.
Различия вариантов
| Вариант | Доп. содержимое VFS | Доп. символы |
|---|---|---|
default | — | — |
sqlite | sqlite3.h попадает в VFS | +272 (sqlite3_*) |
xtp | xtp2.h попадает в VFS | +13 (xtp2_*) |
sqlite xtp | оба заголовка | +285 |
xllm / xllm-session | два заголовка в VFS | +98 (xllm_*/xllmSession_*) |
xmail / xsmtp xpop3 ximap | дерево заголовков xmail + протокольные + слой прокладок xrt | +283 (xrtMail*/Smtp/Pop3/Imap*) |
md4c | md4c.h + md4c-html.h | +2 (md_parse/md_html) |
xacme | дерево заголовков xacme + заголовки потока | +20 (xrtAcme*/xacmeClient*) |
qrcodegen | qrcodegen.h + qrpng.h | +10 (qrcodegen_*/png) |
all | деревья заголовков всех десяти библиотек | +700 |
Изоляция строгая: в варианте default скрипт с include <sqlite3.h> получит ошибку компиляции «заголовок не найден», а ссылка на символы sqlite3_* не слинкуется — невыбранные возможности не существуют в процессе: не скрыты, а отсутствуют физически.