Справочник команд компилятора CDT¶
Опции и флаги приведены в том виде, как в --help (английские имена). Описания — на русском.
Справочник по контрактному API, intrinsic-функциям и заголовкам CDT: документация CDT (Doxygen).
cdt-cpp¶
Использование: cdt-cpp [опции] <исходные_файлы> ...
Аналог clang для контрактов: пути к заголовкам CDT и целевой WASM уже настроены в toolchain.
Общие опции¶
| Опция | Описание |
|---|---|
-help |
Вывести справку по опциям (расширенно: -help-hidden) |
-help-list |
Вывести список опций (расширенно: -help-list-hidden) |
-version |
Версия cdt-cpp |
Опции компилятора (как у Clang, плюс CDT)¶
| Опция | Описание |
|---|---|
-C |
Включать комментарии в вывод препроцессора |
-CC |
То же для комментариев внутри макросов |
-D=<макрос> |
Определить макрос (=значение или по умолчанию 1) |
-E |
Только препроцессор |
-I=<dir> |
Каталог для поиска #include |
-L=<dir> |
Каталог для поиска библиотек линковщика |
-MD |
Записать depfile (пользовательские и системные заголовки) |
-MF=<file> |
Имя файла зависимостей |
-MMD |
Depfile без системных заголовков |
-MT=<target> |
Имя цели в depfile |
-O=<уровень> |
Уровень оптимизации: s, 0–3 |
-R=<path> |
Путь к ресурсам (в т.ч. Ricardian .md, см. ABI) |
-S |
До ассемблера (без линковки) |
-U=<макрос> |
Снять определение макроса |
-W=<warning> |
Включить предупреждение Clang |
-abigen |
Сгенерировать ABI рядом с выходным файлом |
-abigen_output=<file> |
Явное имя выходного ABI |
-c |
Компиляция до объектного файла (без линковки) |
-contract=<name> |
Имя контракта для генерации/сборки |
-dD |
В режиме -E печатать определения макросов вместе с выводом |
-dI |
В режиме -E печатать директивы #include |
-dM |
В режиме -E только определения макросов |
-emit-ast |
Сохранить AST Clang для входов |
-emit-llvm |
Вывод в представлении LLVM |
-faligned-allocation |
Включить aligned new/delete (C++17) |
-fasm |
Собрать ассемблер под x86-64 (нативный режим) |
-fcolor-diagnostics |
Цветной вывод диагностики |
-fcoroutine-ts |
Поддержка coroutines TS |
-finline-functions |
Встраивание подходящих функций |
-finline-hint-functions |
Встраивание функций с inline/подсказками |
-fmerge-all-constants |
Разрешить слияние одинаковых констант |
-fnative |
Сборка нативного кода x86-64 (тесты), не WASM |
-fno-cfl-aa |
Отключить CFL alias analysis |
-fno-elide-constructors |
Отключить elision конструкторов C++ |
-fno-lto |
Отключить LTO |
-fno-post-pass |
Не запускать пост-проход CDT |
-fno-stack-first |
Не размещать стек в начале памяти WASM |
-stack-size |
Максимальный размер стека контракта |
-fstack-protector |
Stack canary для уязвимых функций |
-fstack-protector-all |
Canaries для всех функций |
-fstack-protector-strong |
«Сильная» эвристика для canaries |
-fstrict-enums |
Оптимизации с учётом строгих enum |
-fstrict-return |
Пути «выпадения» из non-void = unreachable |
-fstrict-vtable-pointers |
Строгие правила для vtable |
-fuse-main |
Точка входа main (нестандартные бинарники) |
-include=<file> |
Подключить файл до разбора |
-isystem=<dir> |
Системный каталог include |
-l=<lib> |
Имя библиотеки для линковки |
-lto-opt=<O0-O3> |
Уровень оптимизации LTO |
-o=<file> |
Выходной файл |
-std=<стандарт> |
Стандарт C/C++ (c++17, …) |
-sysroot |
Корень системы для поиска библиотек |
-v |
Подробный режим: показывать команды |
-w |
Подавить все предупреждения |
-no-missing-ricardian-clause |
Не предупреждать о недостающих Ricardian clause |
--warn-action-read-only |
Только предупреждение, если read-only действие пишет в состояние |
cdt-cc¶
Использование: cdt-cc [опции] <файлы> ... — вариант для C; набор опций почти тот же, что у cdt-cpp.
Отличия и дополнения относительно cdt-cpp¶
| Опция | Описание |
|---|---|
-fquery |
Сборка под wasmql (серверный модуль) |
-fquery-client |
Клиентская часть wasmql |
-fquery-server |
Серверная часть wasmql |
-stack-size=<int> |
Размер стека WASM в байтах (по умолчанию 8192) |
Остальные флаги совпадают с таблицей cdt-cpp, кроме перечисленных только в cdt-cpp (например -faligned-allocation, -fcoroutine-ts — ориентируйтесь на вывод cdt-cc -help).
cdt-ld¶
Линковщик WASM для контрактов.
Использование: cdt-ld [опции] <объектные_файлы> ...
| Опция | Описание |
|---|---|
-help / -help-list / -version |
Справка и версия |
-L=<dir> |
Путь поиска библиотек |
-fasm |
Режим x86-64 ассемблера |
-fnative |
Нативная линковка x86-64 |
-fno-cfl-aa |
Отключить CFL AA |
-fno-lto |
Без LTO |
-fno-post-pass |
Без пост-прохода |
-fno-stack-first |
Стек не в начале памяти |
-stack-size |
Лимит стека контракта |
-fuse-main |
Вход через main |
-l=<lib> |
Библиотека |
-lto-opt=<уровень> |
Оптимизация LTO |
-o=<file> |
Итоговый файл |
cdt-init¶
Создаёт каркас проекта (по умолчанию с CMake).
| Опция | Описание |
|---|---|
-bare |
Только исходники, без CMake |
-path=<dir> |
Куда положить проект |
-project=<name> |
Имя каталога/проекта |
cdt-abidiff¶
Сравнение двух ABI: cdt-abidiff первый.abi второй.abi — отчёт в консоль.
| Опция | Описание |
|---|---|
-help / -help-list / -version |
Справка |
cdt-objdump¶
Просмотр и дизассемблирование объектных файлов (аналог llvm-objdump для артефактов CDT).
Полный список опций зависит от версии LLVM:
Часто используют: -d / --disassemble, --section-headers, --syms, --source.
Примеры вызовов¶
Сборка контракта и ABI:
Нативный тестовый бинарник:
Подробнее — Сборка контрактов.