Справочник по CLI wavec.
Этот документ детально описывает работу CLI в текущей реализации компилятора Wave (wavec).
Основные принципы:
wavec— это компилятор.- Инсталляция/удаление пакетом (lockfile, реестр, загрузка) не является обязанностью
wavec. - Внешние зависимости передаются как явные аргументы CLI при выполнении
wavec.
1. Основной формат
wavec [global-options] <command> [command-options]
Пример:
wavec -O2 run main.wave
wavec build app.wave --link ssl -L ./native/lib
wavec run app.wave --dep-root .vex/dep
2. Правила разборки команд (важно)
В wavec сначала сканируются глобальные параметры из всех аргументов, а остальные интерпретируются как <command>.
Иными словами, глобальные параметры гибки в плане размещения.
wavec -O3 run main.wave
wavec run main.wave -O3
wavec run -O3 main.wave
Все 3 варианта допустимы.
Использование -- останавливает сканирование глобальных параметров и передает их в область команды.
wavec -- run main.wave
3. Команды
3.1 run <file>
Компилирует и выполняет файл Wave.
wavec run hello.wave
Действие:
- Анализ источника + расширение import
- Генерация LLVM IR
- Связывание нативного бинарного файла (
target/<file_stem>) - Выполнение
Особенности:
wavecпередает код завершения выполненной программы.
3.2 build <file>
Создает исполняемый файл (exe).
wavec build app.wave
Выходной бинарный файл:
target/<file_stem>
3.3 опции build (-o, -c)б
Команда build позволяет контролировать имя и формат выходного файла через опции.
wavec build app.wave -o ./bin/app
wavec build app.wave -c
wavec build app.wave -c -o ./build/app.o
-o <file>: указывает имя выходного файла.- По умолчанию (без
-c): указывает путь к исполняемому файлу - При использовании с
-c: указывает путь к объектному файлу
- По умолчанию (без
-c: пропускает линковщик и генерирует только объектный файл.- При использовании
-cпуть объекта выводится на stdout.
Основное поведение:
wavec build app.wave->target/appwavec build app.wave -c->target/app.o(вывод пути)б
Пример freestanding объектного ядра:
wavec --llvm \
--target=x86_64-unknown-none-elf \
build kernel.wave --emit=obj --freestanding -o kernel.o
aarch64-unknown-none-elf, riscv64-unknown-none-elf также могут использоваться таким же образом.
3.4 install std, update std
Команды установки/обновления стандартной библиотеки.
wavec install std
wavec update std
3.5 --help, --version
wavec --help
wavec --version
4. Глобальные опции
4.1 Оптимизация
Допустимые значения:
-O0-O1-O2-O3-Os-Oz-Ofast
Пример:
wavec -O3 run main.wave
4.2 Отладочный вывод
wavec --debug-wave=tokens,ast,ir run main.wave
Допустимые элементы:
tokensastirmchexall
4.3 Опции связывания
wavec build app.wave --link ssl --link crypto -L ./native/lib
--link=<lib>или--link <lib>-L<path>или-L <path>
При связывании wavec внутренне передает в формате -l<lib>, -L<path>.
