Whale ツールチェーン

Wave から独立した低レベルのアセンブラ、オブジェクト、リンカー、IR ツールチェーンである Whale の役割と境界を説明します。

Wave Foundation

Whale とは

Whale は Rust で書かれた独立した低レベルツールチェーンです。Wave やその他のネイティブコード生成系で再利用できる、アセンブリ、オブジェクト、リンク、中間表現のコンポーネントを提供します。

Whale は Wave の開発環境全体を指す名称ではありません。各プロジェクトには異なる責務があります。

プロジェクト 責務
wavec Wave ソースの検証とコンパイル、アーティファクト生成、ネイティブリンクの調整
Vex Wave パッケージ、マニフェスト、依存グラフ、ロックファイル、パッケージビルドの管理
Whale 独立した低レベルのアセンブラ、オブジェクト、リンカー、IR コンポーネントの開発
Wave std ランタイムとシステム API の Wave ソースモジュールの提供

コンポーネント

Whale ワークスペースは、主に 4 つのライブラリ領域で構成されています。

  • assembler: トークン化、AMD64 の解析とエンコード、セクション、シンボル、リロケーション
  • object: オブジェクトファイルモデルと ELF64 ライター
  • linker: リンク計画と実行ファイル構築のコンポーネント
  • ir: Whale IR の型、ビルダー、表示、検証、任意のフロントエンドソケット

whale 実行ファイルは、これらの領域を asmobjectlinkir コマンドとして公開します。

ツールの境界

wavec と Whale は独立したコマンドラインツールです。Whale をインストールまたは実行しても、wavec のビルドは変更されません。

Vex はパッケージのビルド計画を wavec へ渡しますが、Whale のオプションは転送しません。それぞれのツールを固有のコマンドラインインターフェースから実行してください。

コマンドの選択

AMD64 ソースを ELF64 再配置可能オブジェクトへアセンブルするには whale asm --amd64 を使います。生のバイト列を ELF64 オブジェクトへ格納するには whale object を使います。IR ソケットコマンドは socket-cli を有効にしたビルドで利用できます。実行ファイルのビルドにはプラットフォームリンカーまたは wavec を使用し、生成したオブジェクトはターゲットプラットフォーム用のオブジェクト形式ツールで検証します。