26 экспортируемых символов · список сверен с src/script/tcc_host.h

Справочник вложенной компиляции и VFS

Фундамент системы плагинов на уровне приложения: скрипты могут создавать новые компиляторы TCC, компилировать код и разбирать символы. Рекомендуемый вход — xsCreateTCC: он предустанавливает стандартные пути include/lib и импорт всех символов хоста; таблицы ниже — полная поверхность возможностей, стоящая за ним.

Что предустанавливает xsCreateTCC

ПредустановкаСодержимое
Тип выводаTCC_OUTPUT_MEMORY — продукт компиляции чисто в памяти, на диск не попадает
Пути includedev_inc приложения + встроенный в VFS SDK (xsbase.h / xrt_decl.h / libtcc.h)
Импорт символовта же четырёхуровневая таблица символов, что у хоста: xrt 3 030 + контракт XServer 20 + libtcc/VFS 26 + расширения (по варианту)
Системные библиотекина Windows msvcrt/kernel32 автоматически; 7 системных библиотек доступны явно

Иначе говоря: код вложенной компиляции равноправен со скриптами хоста — может вызывать любые API (включая дальнейшую вложенность). Это и возможность, и ответственность; обсуждение границ — в главе 40 и главе 44.

Управление компилятором (18)

ФункцияНазначение
tcc_new / tcc_deleteсоздать / уничтожить экземпляр компилятора (перед delete убедитесь, что символы продукта больше не используются)
tcc_set_lib_path / tcc_set_optionsкорень поиска библиотек / опции в стиле командной строки
tcc_set_error_funcколбэк ошибок компиляции (по умолчанию пишет в stderr — в сценариях плагинов стоит перехватить)
tcc_add_include_path / tcc_add_sysinclude_pathобычные / системные пути поиска заголовков
tcc_define_symbol / tcc_undefine_symbolзадать / отменить макросы (например, переключатель расширения XS_USE_SQLITE=1)
tcc_add_library_path / tcc_add_libraryкаталог библиотек / подключаемые библиотеки (в сочетании с dev_lib приложения)
tcc_add_fileскомпилировать файл исходника (путь на диске или в VFS)
tcc_add_symbolзарегистрировать символ хоста (имя → адрес) — канал, по которому плагин вызывает хост
tcc_set_output_typeформа вывода (для плагинов — MEMORY)
tcc_compile_stringскомпилировать строку исходника — главный вход для вычисления выражений / динамических плагинов
tcc_output_fileвывод в файл (экспорт .dll/.so; в режиме плагина не нужен)
tcc_relocateлинковка и релокация в память — только после этого можно брать символы
tcc_get_symbolвзять адрес символа продукта по имени (получили указатель на функцию — можно вызывать)
Пять шагов компиляции плагина
TCCState* pTcc = xsCreateTCC();            /* 1. экземпляр с предустановками */
/* 2. (опционально) tcc_add_symbol регистрирует символы плагина */
tcc_compile_string(pTcc, sPluginSource);    /* 3. компиляция */
tcc_relocate(pTcc, TCC_RELOCATE_AUTO);      /* 4. релокация */
void* pfn = tcc_get_symbol(pTcc, "plugin_main");
/* 5. вызов; когда больше не нужен — xsDestroyTCC(pTcc) */

Файловый слой VFS (8)

ФункцияНазначение
tcc_vfs_open / tcc_vfs_closeоткрыть / закрыть дескриптор файла VFS
tcc_vfs_read / tcc_vfs_lseekчтение / позиционирование (семантика в стиле POSIX)
tcc_vfs_fopen / tcc_vfs_fcloseоткрытие / закрытие в стиле FILE*
tcc_vfs_mount_memory / tcc_vfs_unmountсмонтировать память как путь VFS — канал для внедрения заголовков/исходников во время выполнения

Статическое содержимое VFS (заголовки SDK, include TCC, определения системных библиотек) описано в справочнике ресурсов VFS; mount_memory позволяет «из воздуха» подсунуть вложенному компилятору файлы во время выполнения — именно так хост загружает собственные скрипты (исходники монтируются по виртуальному пути /xs/script/%p.c и затем передаются в add_file).