Bootstrap の仕組み
Bootstrap の中核概念はビルド Step であり、これらは
Builder::ensure によって連結されます。Builder::ensure は Step を入力として受け取り、
その Step がまだ実行されていない場合に限り、その Step を実行します。
Step をさらに詳しく見てみましょう。
Step の概要
Step は、何らかのアーティファクトを生成するプロセスに関与するアクションの粒度の細かい集合を表します。
Makefile におけるルールのようなものと考えることができます。
Step トレイトは次のように定義されています。
pub trait Step: 'static + Clone + Debug + PartialEq + Eq + Hash {
type Output: Clone;
const DEFAULT: bool = false;
const ONLY_HOSTS: bool = false;
// 必須メソッド
fn run(self, builder: &Builder<'_>) -> Self::Output;
fn should_run(run: ShouldRun<'_>) -> ShouldRun<'_>;
// 提供されるメソッド
fn make_run(_run: RunConfig<'_>) { ... }
}
runは実際の作業を行う責任を持つ関数です。Builder::ensureがrunを呼び出します。should_runはコマンドラインインターフェイスであり、x build fooのような呼び出しによって 指定されたStepを実行すべきかどうかを決定します。パスが指定されていない「デフォルト」のコンテキストでは、make_runが直接呼び出されます。make_runは、CLI 経由で直接要求されたものに対してのみ呼び出され、 他のステップの依存関係であるステップに対しては呼び出されません。
エントリポイント
中核となる Bootstrap コードに到達する前に、いくつかの準備段階があります。
- シェルスクリプトまたは
make:./xまたは./x.ps1またはmake - 便宜的なラッパースクリプト:
x.py src/bootstrap/bootstrap.pysrc/bootstrap/src/bin/main.rs
実装の詳細について、より具体的な説明は src/bootstrap/README.md を参照してください。