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

컬렉션을 사용해 정리하기 내 환경설정을 기준으로 콘텐츠를 저장하고 분류하세요.
문제 신고 소스 보기

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

여러 SkyFunction 클래스에서 도구 모음 해결 프로세스를 구현합니다.

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

  2. SingleToolchainResolutionFunction는 모든 실행 플랫폼의 단일 도구 모음 유형을 확인합니다. 즉, 모든 실행 플랫폼에서 다음 기준에 따라 사용하기에 가장 적합한 등록된 도구 모음을 찾습니다.

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

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

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

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