Перейти к содержанию

Справочник команд компилятора 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, 03
-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).

cdt-init --path=/путь/к/родителю --project=имя_папки
Опция Описание
-bare Только исходники, без CMake
-path=<dir> Куда положить проект
-project=<name> Имя каталога/проекта

cdt-abidiff

Сравнение двух ABI: cdt-abidiff первый.abi второй.abi — отчёт в консоль.

Опция Описание
-help / -help-list / -version Справка

cdt-objdump

Просмотр и дизассемблирование объектных файлов (аналог llvm-objdump для артефактов CDT).

Полный список опций зависит от версии LLVM:

cdt-objdump --help

Часто используют: -d / --disassemble, --section-headers, --syms, --source.


Примеры вызовов

Сборка контракта и ABI:

cdt-cpp -abigen src/contract.cpp -o build/contract.wasm -I include/

Нативный тестовый бинарник:

cdt-cpp -fnative tests/contract_test.cpp -o contract_test -I include/

Подробнее — Сборка контрактов.