플랫폼 규칙

규칙

constraint_setting

constraint_setting(name, default_constraint_value, deprecation, distribs, exec_compatible_with, exec_properties, features, licenses, tags, testonly, visibility)

이 규칙은 플랫폼이 값을 지정할 수 있는 새로운 제약조건 유형을 도입하는 데 사용됩니다. 예를 들어 이름이 'glibc_version'인 constraint_setting를 정의할 수 있습니다. 데이터 세트를 다양한 버전의 glibc 라이브러리를 설치할 수 있는 기능이 있습니다. 자세한 내용은 플랫폼 페이지

constraint_setting에는 확장 가능한 연결된 constraint_value 대개 같은 패키지에 정의되어 있지만 다른 패키지에서 기존 설정에 대한 새 값을 도입합니다. 예를 들어 사전 정의된 @platforms//cpu:cpu 설정을 맞춤 값으로 확장하여 모호한 CPU 아키텍처를 타겟팅하는 플랫폼을 정의합니다.

인수

속성
name

Name; required

이 대상의 고유한 이름입니다.

default_constraint_value

Name; optional; nonconfigurable

값이 제공되지 않을 경우 사용될 이 설정의 기본값 라벨입니다. 만약 속성이 있는 경우 이 속성이 가리키는 constraint_value를 이 constraint_setting와 동일한 패키지입니다.

제약조건 설정에 기본값이 있는 경우 플랫폼에 포함되지 않을 때마다 제약 조건 값이 없으면 플랫폼에서 기본값입니다. 기본값이 없으면 제약 조건 설정이 고려됩니다. 지정할 수 없습니다. 이 경우 플랫폼은 어떤 경우에도 특정 값이 필요한 제약조건 목록 (예: config_setting) 이 옵션을 선택합니다.

constraint_value

constraint_value(name, constraint_setting, deprecation, distribs, exec_compatible_with, exec_properties, features, licenses, tags, testonly, visibility)
드림 이 규칙은 지정된 제약조건 유형에 새 값을 도입합니다. 자세한 내용은 플랫폼 페이지

다음은 사전 정의된 constraint_value에 가능한 새 값을 만듭니다. CPU 아키텍처를 나타냅니다.

constraint_value(
    name = "mips",
    constraint_setting = "@platforms//cpu:cpu",
)
드림 그러면 플랫폼은 다음의 대안으로 mips 아키텍처를 보유하고 있다고 선언할 수 있습니다. x86_64, arm

인수

속성
name

Name; required

이 대상의 고유한 이름입니다.

constraint_setting

Label; required; nonconfigurable

constraint_value가 해당하는 constraint_setting입니다. 선택할 수 있습니다

platform

platform(name, constraint_values, deprecation, distribs, exec_compatible_with, exec_properties, features, licenses, parents, remote_execution_properties, tags, testonly, visibility)

이 규칙은 제약조건 선택 항목의 이름이 지정된 컬렉션인 새 플랫폼을 정의합니다. 환경을 설명하는 (예: CPU 아키텍처 또는 컴파일러 버전) 지정할 수도 있습니다 자세한 내용은 플랫폼 페이지

이는 ARM에서 Linux를 실행하는 모든 환경을 설명하는 플랫폼을 정의합니다.

platform(
    name = "linux_arm",
    constraint_values = [
        "@platforms//os:linux",
        "@platforms//cpu:arm",
    ],
)

플랫폼 상속

플랫폼은 parents 속성을 사용하여 다른 플랫폼을 지정할 수 있습니다. 제약 조건 값을 상속합니다. parents 속성은 목록을 가져오지만 둘 이상의 값이 현재 지원되며 여러 상위 요소를 지정하는 것은 오류입니다.

플랫폼에서 제약조건 설정의 값을 확인할 때는 먼저 직접 설정된 값을 (constraint_values 속성을 통해)가 선택되면 있습니다. 이는 상위 플랫폼 체인을 따라 반복적으로 위쪽에 배치됩니다. 이러한 방식으로 플랫폼에 직접 설정된 값이 상위 요소에 설정된 값보다 우선 적용됩니다.

플랫폼은 상위 플랫폼에서 exec_properties 속성을 상속합니다. 상위 및 하위 플랫폼의 exec_properties에 있는 사전 항목 결합됩니다 상위 요소와 하위 요소의 exec_properties 모두에 동일한 키가 표시되면 하위 요소의 값이 사용됩니다. 하위 플랫폼이 빈 문자열을 값으로 지정하면 해당 속성이 설정 해제됩니다.

플랫폼은 지원 중단된 remote_execution_properties 속성을 상속할 수도 있습니다. 삭제할 수 있습니다 참고: 새 코드는 대신 exec_properties를 사용해야 합니다. 이 아래에 설명된 로직은 기존 동작과 호환되도록 유지되지만 삭제될 예정입니다. 있습니다. remote_execution_platform 설정 로직은 다음과 같습니다. 상위 플랫폼입니다.

  1. 하위 플랫폼에 remote_execution_property가 설정되어 있지 않으면 상위 플랫폼의 remote_execution_properties가 사용됩니다.
  2. remote_execution_property가 하위 플랫폼에 설정되어 있고 리터럴 문자열 {PARENT_REMOTE_EXECUTION_PROPERTIES}이(가) 있으면 매크로는 상위 요소의 remote_execution_property 속성 콘텐츠로 대체됩니다.
  3. remote_execution_property이 하위 플랫폼에 설정되어 있고 매크로의 경우 하위 요소의 remote_execution_property은 변경되지 않고 사용됩니다.

remote_execution_properties가 지원 중단되었으며 단계적으로 중단될 예정이므로 같은 위치에 있는 remote_execution_propertiesexec_properties 상속 체인은 허용되지 않습니다. 지원 중단된 버전보다 exec_properties 사용을 선호합니다. remote_execution_properties입니다.

예: 제약조건 값

platform(
    name = "parent",
    constraint_values = [
        "@platforms//os:linux",
        "@platforms//cpu:arm",
    ],
)
platform(
    name = "child_a",
    parents = [":parent"],
    constraint_values = [
        "@platforms//cpu:x86_64",
    ],
)
platform(
    name = "child_b",
    parents = [":parent"],
)

이 예에서 하위 플랫폼에는 다음과 같은 속성이 있습니다.

  • child_a에는 제약조건 값 @platforms//os:linux (상속됨)가 있습니다. 상위 요소로부터) 및 @platforms//cpu:x86_64 (플랫폼에서 직접 설정)에 사용됩니다.
  • child_b는 상위 요소의 모든 제약 조건 값을 상속하며 다음 중 어느 것도 설정하지 않습니다. 있습니다.

예: 실행 속성

platform(
    name = "parent",
    exec_properties = {
      "k1": "v1",
      "k2": "v2",
    },
)
platform(
    name = "child_a",
    parents = [":parent"],
)
platform(
    name = "child_b",
    parents = [":parent"],
    exec_properties = {
      "k1": "child"
    }
)
platform(
    name = "child_c",
    parents = [":parent"],
    exec_properties = {
      "k1": ""
    }
)
platform(
    name = "child_d",
    parents = [":parent"],
    exec_properties = {
      "k3": "v3"
    }
)

이 예에서 하위 플랫폼에는 다음과 같은 속성이 있습니다.

  • child_a는 'exec_properties'를 상속합니다. 자체를 설정하지 않습니다.
  • child_b는 상위 요소의 exec_properties를 상속하며 k1입니다. exec_properties는 다음과 같습니다. { "k1": "child", "k2": "v2" }입니다.
  • child_c가 상위 요소의 exec_properties를 상속하고 설정을 설정 해제합니다. k1입니다. exec_properties는 다음과 같습니다. { "k2": "v2" }입니다.
  • child_d는 상위 요소의 exec_properties를 상속하며 새 속성 exec_properties는 다음과 같습니다. { "k1": "v1", "k2": "v2", "k3": "v3" }입니다.

인수

속성
name

Name; required

이 대상의 고유한 이름입니다.

constraint_values

List of labels; optional

이 플랫폼이 구성하는 제약조건 선택 항목의 조합입니다. 플랫폼의 경우 환경에 적용하려면 최소한 이 목록의 값이 환경에 있어야 합니다.

이 목록의 각 constraint_value은 서로 달라야 합니다. constraint_setting입니다. 예를 들어 CPU 아키텍처는 @platforms//cpu:x86_64@platforms//cpu:arm입니다.

exec_properties

Dictionary: String -> String; optional

작업이 원격으로 실행되는 방식에 영향을 미치는 문자열 맵입니다. 아무 시도도 하지 않는 바젤 해석하기 위해 이 데이터는 원격 실행 프로토콜 여기에는 상위 플랫폼의 exec_properties 속성에 있는 모든 데이터가 포함됩니다. 하위 플랫폼과 상위 플랫폼에서 동일한 키를 정의하면 하위 요소의 값이 유지됩니다. 모든 문자 빈 문자열인 값과 연결된 키는 사전에서 삭제됩니다. 이 속성은 지원 중단된 속성을 완전히 대체합니다. remote_execution_properties
parents

List of labels; optional

이 플랫폼이 상속해야 하는 platform 타겟의 라벨입니다. 하지만 속성이 목록을 받습니다. 플랫폼이 둘 이상 있으면 안 됩니다. 모든 문자 이 플랫폼에서 직접 설정되지 않은 constraints_settings는 상위 플랫폼에서 찾을 수 있습니다. 자세한 내용은 플랫폼 상속 섹션을 참고하세요.
remote_execution_properties

String; optional

DEPRECATED. 대신 exec_properties 속성을 사용하세요. 원격 실행 플랫폼을 구성하는 데 사용되는 문자열입니다. 실제 빌드는 이는 특정 SpawnRunner가 사용할 수 있는 불투명 데이터로 처리됩니다. 여기에는 상위 플랫폼의 'remote_execution_properties' 데이터가 포함될 수 있습니다. 속성 이를 위해 "{PARENT_REMOTE_EXECUTION_PROPERTIES}" 매크로를 사용합니다. 자세한 내용은 자세한 내용은 플랫폼 상속을 참조하세요.

도구 모음

toolchain(name, deprecation, distribs, exec_compatible_with, exec_properties, features, licenses, tags, target_compatible_with, target_settings, testonly, toolchain, toolchain_type, visibility)

이 규칙은 선택할 수 있도록 특정 도구 모음의 유형과 제약 조건을 선언합니다. 툴체인 확인 중에 렌더링됩니다. 자세한 내용은 도구 모음 페이지에서 자세한 내용을 확인하세요. 확인하세요.

인수

속성
name

Name; required

이 대상의 고유한 이름입니다.

exec_compatible_with

List of labels; optional; nonconfigurable

다음에서 실행 플랫폼이 충족되어야 하는 constraint_value 목록 이 툴체인이 플랫폼에서 빌드되는 타겟에 대해 선택되어야 합니다.
target_compatible_with

List of labels; optional; nonconfigurable

대상 플랫폼이 충족해야 하는 constraint_value의 목록: 이 도구 모음이 플랫폼의 대상 빌드에 대해 선택되어야 합니다.
target_settings

List of labels; optional

타겟 구성으로 충족되어야 하는 config_setting 목록 툴체인 확인 중에 이 툴체인이 선택되어야 합니다.
toolchain

Name; required

이 시점에 사용 가능한 실제 도구 또는 도구 모음을 나타내는 대상입니다. 도구 모음이 선택됩니다.
toolchain_type

Label; required; nonconfigurable

이 역할을 나타내는 toolchain_type 대상의 라벨 도구 모음이 제공됩니다

toolchain_type

toolchain_type(name, compatible_with, deprecation, features, restricted_to, tags, target_compatible_with, testonly, visibility)

이 규칙은 새로운 유형의 도구 모음을 정의합니다. 이 도구 모음은 특정 웹 사용자를 대상으로 하는 도구 클래스를 나타내는 여러 플랫폼에서 동일한 역할을 제공할 수 있습니다

자세한 내용은 도구 모음 페이지를 참고하세요.

맞춤 규칙의 도구 모음 유형을 정의합니다.

toolchain_type(
    name = "bar_toolchain_type",
)

bzl 파일에서 사용할 수 있습니다.

bar_binary = rule(
    implementation = _bar_binary_impl,
    attrs = {
        "srcs": attr.label_list(allow_files = True),
        ...
        # No `_compiler` attribute anymore.
    },
    toolchains = ["//bar_tools:toolchain_type"]
)

인수

속성
name

Name; required

이 대상의 고유한 이름입니다.