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::ensure는 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;

    // Required methods
    fn run(self, builder: &Builder<'_>) -> Self::Output;
    fn should_run(run: ShouldRun<'_>) -> ShouldRun<'_>;

    // Provided method
    fn make_run(_run: RunConfig<'_>) { ... }
}
  • run은 실제 작업을 수행하는 함수입니다. Builder::ensure가 run을 호출합니다.
  • 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를 참고하십시오.