참고: 이 섹션은 Bazel 개발자를 대상으로 하며 규칙 작성자에게는 필요하지 않습니다.
여러 SkyFunction 클래스가 도구 모음 해결 프로세스를 구현합니다.
RegisteredToolchainsFunction및RegisteredExecutionPlatformsFunction은 현재 구성 및 WORKSPACE 파일을 기반으로 사용 가능한 도구 모음과 실행 플랫폼을 찾습니다.SingleToolchainResolutionFunction은 모든 실행 플랫폼에 대해 단일 도구 모음 유형을 확인합니다. 즉, 실행 플랫폼마다 다음 기준에 따라 사용할 최적의 등록된 도구 모음을 찾습니다.target_compatible_with속성을 확인하여 도구 모음과 타겟 플랫폼이 호환되는지 확인합니다.exec_compatible_with속성을 확인하여 도구 모음과 실행 플랫폼이 호환되는지 확인합니다.- 여러 도구 모음이 남아 있으면 우선순위가 가장 높은 도구 모음 (가장 먼저 등록된 도구 모음)을 선택합니다.
ToolchainResolutionFunction은 요청된 각 도구 모음 유형에 대해SingleToolchainResolutionFunction을 호출한 다음 사용할 최적의 실행 플랫폼을 결정합니다.- 먼저 요청된 각 도구 모음 유형에 유효한 도구 모음이 없는 실행 플랫폼을 삭제합니다.
- 실행 플랫폼이 여러 개 남은 경우 우선순위가 가장 높은 플랫폼 (가장 먼저 등록된 플랫폼)을 선택합니다.
- 실행 플랫폼이 도구 모음 전환에 의해 이미 설정된 경우 아래 설명과 같이 먼저 선택됩니다.
도구 모음 및 구성에서 설명한 대로 타겟에서 도구 모음으로의 종속 항목은 실행 플랫폼이 둘 다 동일하도록 강제하는 특수 구성을 사용합니다. '툴체인 전환'이라는 이름과 달리 이는 구성 전환으로 구현되지 않고 ConfiguredTargetKey의 특수 하위 클래스인 ToolchainDependencyConfiguredTargetKey로 구현됩니다.
이 하위 클래스는 ConfiguredTargetKey의 다른 데이터 외에도 실행 플랫폼의 라벨을 보유합니다. ToolchainResolutionFunction에서 사용할 실행 플랫폼을 고려할 때 ToolchainDependencyConfiguredTargetKey의 강제 실행 플랫폼이 유효하면 우선순위가 가장 높지 않더라도 사용됩니다.
참고: 강제 실행 플랫폼이 유효하지 않으면 (유효한 도구 체인이 없거나 규칙 또는 타겟의 실행 제약 조건 때문) 대신 우선순위가 가장 높은 유효한 실행 플랫폼이 사용됩니다.