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

문제 신고 소스 보기 Nightly · 8.0 . 7.4 . 7.3 · 7.2 · 7.1 · 7.0 · 6.5

참고: 이 섹션은 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의 강제 실행 플랫폼이 유효하면 우선순위가 가장 높지 않더라도 사용됩니다.

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