Справочник команд компилятора
wavec Описывает команды, конвейер сборки, выходные данные, цели, диагностику, связывание зависимостей и запросы инструментов.
Wave Foundation
командная модель
wavec — компилятор CLI. Он напрямую компилирует отдельные входные данные, предоставляет инструментам информацию о поддержке компилятора и управляет установленными источниками стандартной библиотеки.
wavec [global-options] <command> [command-options]
| команда | Использование |
|---|---|
wavec build <input...> |
В зависимости от флагов он выполняет проверку, генерацию кода, связывание или выполнение конвейеров. |
wavec check <file> |
Никнейм для build <file> --emit=check. |
wavec run <file> [-- <args...>] |
Это псевдоним для build <file> --run, и аргумент после -- передается программе. |
wavec print <item> |
Запрашивает информацию о поддержке целевого объекта и цепочки инструментов. |
wavec install std |
Установите стандартную библиотеку. |
wavec update std |
Обновите установленные стандартные библиотеки. |
wavec --version |
Распечатывает информацию об установленной версии. |
Полный список команд и опций можно найти по адресу wavec --help.
Сборка, тестирование и запуск
wavec build main.wave
wavec check main.wave
wavec run main.wave -- first-argument second-argument
build по умолчанию создает исполняемый файл. check останавливается после завершения проверки интерфейса. run требует двоичного вывода и не может использоваться со сборками общих библиотек.
Используйте --dry-run, чтобы проверить запрос и определить, какие шаги следует выполнить без компиляции, связывания или выполнения.
wavec build main.wave --target riscv64-unknown-linux-gnu --dry-run
wavec build main.wave --dry-run --error-format=json
Формат JSON — это стабильный унифицированный интерфейс, используемый такими инструментами сборки, как Vex.
emit и тип входа
wavec build main.wave --emit=ast
wavec build main.wave --emit=ir
wavec build main.wave --emit=bc
wavec build main.wave --emit=asm
wavec build main.wave --emit=obj -o main.o
wavec build main.wave --emit=bin -o app
Типы вывода emit: ast, ir, bc, asm, obj, bin. check — это режим управления, который следует использовать отдельно. Вы можете указать несколько типов вывода, которые принимает конвейер, через запятую.
Типы ввода: wave, ir, bc, asm, obj, archive. --input-type=<kind> принудительно указывает тип всех входных данных. При связывании только входов object или archive используйте двоичные файлы emit и --link-only.
wavec build module.o --input-type=obj --link-only --emit=bin -o app
выходное местоположение
| варианты | эффект |
|---|---|
-o <file> |
Указывает основной путь вывода. |
--out-dir <dir> |
emit Помещает выходные данные в указанный каталог. |
--target-dir <dir> |
Определяет промежуточные и основные маршруты доставки. |
Оптимизация и диагностический вывод
wavec -O2 build main.wave
wavec --debug-wave=tokens,ast build main.wave
Шаги оптимизации: -O0, -O1, -O2, -O3, -Os, -Oz, -Ofast. За --debug-wave могут следовать tokens, ast, ir, mc, hex, all, а несколько шагов можно объединять запятыми.
собственная ссылка
wavec --link=m -L ./lib build main.wave
wavec build main.wave --shared -o libexample.so
wavec build main.wave --static -o app
wavec build main.wave --pie -o app
--link=<lib> добавляет собственные библиотеки, а -L <path> добавляет пути поиска. В режимах связи используются --shared, --static, --pie, --no-pie в соответствии с правилами совместимости.
Опции управления серверной частью и компоновщиком включают в себя:
--target,--cpu,--features,--abi,--sysroot-C linker=<path>и-C link-arg=<arg>-C link-sysroot=<path>и-C relocation-model=<model>-C no-default-libs
Автономные выходные данные, такие как ядра, используют --freestanding вместе с настройками --entry, --linker-script и --no-start-files, соответствующими среде.
Интерпретация внешней упаковки
wavec --dep-root .vex/deps build main.wave
wavec --dep math=/opt/wave-deps/math build main.wave
--dep-root <dir> добавляет корень для поиска внешних package::module import. --dep <name>=<path> фиксирует имя пакета в одном каталоге. Это точка интеграции компилятора, а проекты manifest, загрузки зависимостей и lockfile обрабатываются Vex.
Поддержка функции запроса
Инструменты, использующие целевой или выходной тип, могут запрашивать информацию о поддержке с помощью wavec print.
wavec print host-target
wavec print target-spec --format=json
wavec print supported-targets
wavec print supported-input-types
wavec print supported-emit-kinds
wavec print supported-print-items
wavec print cpu-list --target riscv64-unknown-linux-gnu
wavec print target-features --target riscv64-unknown-linux-gnu
wavec print default-linker
wavec print sysroot
wavec print std-path
wavec print dep-search-paths
Вы также можете запрашивать такие элементы, как host, default-target и target-list. Элементы, поддерживающие структурированный вывод, получают --format=json.
Граница между компилятором и набором инструментов
wavec отвечает за проверку исходного кода, генерацию кода и связывание. Vex отвечает за создание воспроизводимых пакетов с пакетом manifest, графом зависимостей и lockfile. Whale — это набор инструментов низкого уровня, который работает независимо.
std Укажите путь
wavec --std-root /absolute/path/to/std check main.wave
wavec --std-root /absolute/path/to/std run main.wave
Указанный путь std имеет приоритет над путем установки и завершится ошибкой, если путь неверен или несовместим с std. Он не заменяет автоматически std из других установок. Выберите std, соответствующий вашему компилятору.
Для вывода -o используется путь, отличный от исходного/входного файла. Поскольку check не проверяет операцию во время выполнения, практика также проверяет результаты выполнения.