도구 모음 해결 방법 구현 세부정보

참고: 이 섹션은 Bazel 개발자를 대상으로 하며 규칙 작성자에게는 필요하지 않습니다.

여러 SkyFunction 클래스가 도구 모음 확인 프로세스를 구현합니다.

  1. RegisteredToolchainsFunctionRegisteredExecutionPlatformsFunction 은 현재 구성 및 WORKSPACE 파일을 기반으로 사용 가능한 도구 모음 및 실행 플랫폼을 찾습니다.

  2. SingleToolchainResolutionFunction 은 모든 실행 플랫폼에 대해 단일 도구 모음 유형을 확인합니다. 즉, 모든 실행 플랫폼에 대해 다음 기준에 따라 사용할 최적의 등록된 도구 모음을 찾습니다.

    1. target_compatible_with 속성을 확인하여 도구 모음과 대상 플랫폼이 호환되는지 확인합니다.
    2. exec_compatible_with 속성을 확인하여 도구 모음과 실행 플랫폼이 호환되는지 확인합니다.
    3. 여러 도구 모음이 남아 있으면 우선순위가 가장 높은 도구 모음 (가장 먼저 등록된 도구 모음)을 선택합니다.
  3. ToolchainResolutionFunction은 요청된 각 도구 모음 유형에 대해 SingleToolchainResolutionFunction을 호출한 후 사용할 최적의 실행 플랫폼을 결정합니다.

    1. 먼저 요청된 각 도구 모음 유형에 유효한 도구 모음이 없는 실행 플랫폼을 삭제합니다.
    2. 여러 실행 플랫폼이 남아 있으면 우선순위가 가장 높은 실행 플랫폼 (가장 먼저 등록된 실행 플랫폼)을 선택합니다.
      1. 실행 플랫폼이 도구 모음 전환에 의해 이미 설정된 경우 아래 설명된 대로 먼저 선택됩니다.

도구 모음 및 구성에서 설명한 대로 대상에서 도구 모음으로의 종속 항목은 실행 플랫폼이 둘 다 동일하도록 하는 특수 구성을 사용합니다. '도구 모음 전환'이라는 이름에도 불구하고 이는 구성 전환으로 구현되지 않고 대신 ConfiguredTargetKey라는 ToolchainDependencyConfiguredTargetKey의 특수 하위 클래스로 구현됩니다. 이 하위 클래스는 ConfiguredTargetKey의 다른 데이터 외에도 실행 플랫폼의 라벨을 보유합니다. ToolchainResolutionFunction이 사용할 실행 플랫폼을 고려할 때 ToolchainDependencyConfiguredTargetKey의 강제 실행 플랫폼이 유효하면 우선순위가 가장 높지 않더라도 사용됩니다.

참고: 강제 실행 플랫폼이 유효하지 않은 경우 (유효한 도구 모음이 없거나 규칙 또는 대상의 실행 제약 조건으로 인해) 우선순위가 가장 높은 유효한 실행 플랫폼이 대신 사용됩니다.