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 코드에 도달하기 전에 몇 가지 사전 단계를 거칩니다:
- 셸 스크립트 또는
make:./x또는./x.ps1또는make - 편의용 래퍼 스크립트:
x.py src/bootstrap/bootstrap.pysrc/bootstrap/src/bin/main.rs
구현 세부 사항에 대한 더 구체적인 설명은 src/bootstrap/README.md를 참고하십시오.