wavec CLI リファレンス
この文書は、現在のWaveコンパイラ(wavec)実装基準のCLI動作を詳細に説明します。
核心原則:
wavecはコンパイラです。- パッケージのインストール/解決(ロックファイル、レジストリ、ダウンロード)は
wavecの責任ではありません。 - 外部依存性は
wavec実行時に 明示的CLI引数 で渡します。
1. 基本形式
wavec [グローバルオプション] <コマンド> [コマンドオプション]
例:
wavec -O2 run main.wave
wavec build app.wave --link ssl -L ./native/lib
wavec run app.wave --dep-root .vex/dep
2. コマンド解析ルール(重要)
wavec は全体の引数から global option を最初にスキャンした後に、残りの引数で <command> を解釈します。
つまり、global option の位置は柔軟です。
wavec -O3 run main.wave
wavec run main.wave -O3
wavec run -O3 main.wave
上記の3つはすべて有効です。
-- を使用すると、その後は global option のスキャンを停止し、コマンド領域に渡します。
wavec -- run main.wave
3. コマンド
3.1 run <file>
Wave ファイルをコンパイルして実行します。
wavec run hello.wave
動作:
- ソース解析 + インポート拡張
- 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> 形式で渡します。
4.4 外部依存オプション(重要)
外部import(pkg::...)解釈用オプションです。
--dep-root <dir>
パッケージルートディレクトリの候補を追加します。
wavec run app.wave --dep-root .vex/dep
パッケージ math を探すとき:
.vex/dep/mathを検査
複数回指定可能:
wavec run app.wave --dep-root .vex/dep --dep-root ./vendor/dep
--dep <name>=<path>
パッケージ名を特定のパスに固定します。
wavec run app.wave --dep math=.vex/dep/math