26 экспортируемых символов · список сверен с src/script/tcc_host.h
Справочник вложенной компиляции и VFS
Фундамент системы плагинов на уровне приложения: скрипты могут создавать новые компиляторы TCC, компилировать код и разбирать символы. Рекомендуемый вход — xsCreateTCC: он предустанавливает стандартные пути include/lib и импорт всех символов хоста; таблицы ниже — полная поверхность возможностей, стоящая за ним.
Что предустанавливает xsCreateTCC
Предустановка
Содержимое
Тип вывода
TCC_OUTPUT_MEMORY — продукт компиляции чисто в памяти, на диск не попадает
та же четырёхуровневая таблица символов, что у хоста: 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
взять адрес символа продукта по имени (получили указатель на функцию — можно вызывать)
чтение / позиционирование (семантика в стиле 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).