Keyboard shortcuts

Press or to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

Bootstrap の仕組み

Bootstrap の中核概念はビルド Step であり、これらは Builder::ensure によって連結されます。Builder::ensureStep を入力として受け取り、 その 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::ensurerun を呼び出します。
  • should_run はコマンドラインインターフェイスであり、x build foo のような呼び出しによって 指定された Step を実行すべきかどうかを決定します。パスが指定されていない「デフォルト」のコンテキストでは、 make_run が直接呼び出されます。
  • make_run は、CLI 経由で直接要求されたものに対してのみ呼び出され、 他のステップの依存関係であるステップに対しては呼び出されません。

エントリポイント

中核となる Bootstrap コードに到達する前に、いくつかの準備段階があります。

  1. シェルスクリプトまたは make: ./x または ./x.ps1 または make
  2. 便宜的なラッパースクリプト: x.py
  3. src/bootstrap/bootstrap.py
  4. src/bootstrap/src/bin/main.rs

実装の詳細について、より具体的な説明は src/bootstrap/README.md を参照してください。