플랫폼 규칙

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

규칙

constraint_setting

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

이 규칙은 플랫폼에서 값을 지정할 수 있는 새로운 제약조건 유형을 도입하는 데 사용됩니다. 예를 들어 이름이 quot;glibc_version"인 constraint_setting를 정의하여 플랫폼에 다른 버전의 glibc 라이브러리를 설치할 수 있는 기능을 나타낼 수 있습니다. 자세한 내용은 플랫폼 페이지를 참조하세요.

constraint_setting에는 확장 가능한 관련 constraint_value 집합이 있습니다. 일반적으로 동일한 패키지에 정의되지만 다른 패키지로 인해 기존 설정에 새 값이 도입되는 경우도 있습니다. 예를 들어 사전 정의된 설정 @platforms//cpu:cpu를 커스텀 값으로 확장하여 불명확한 CPU 아키텍처를 타겟팅하는 플랫폼을 정의할 수 있습니다.

인수

속성
name

Name; required

이 타겟의 고유한 이름입니다.

default_constraint_value

Name; optional

이 설정의 기본값 라벨로, 값이 제공되지 않을 경우 사용됩니다. 이 속성이 있으면 constraint_valueconstraint_setting과 동일한 패키지에서 정의해야 합니다.

제약 조건 설정의 기본값이 있으면 플랫폼에 해당 설정의 제약조건 값이 포함되지 않을 때마다 플랫폼에서 기본값을 지정한 것과 동일합니다. 그렇지 않으면 기본값이 없으면 제약 조건 설정이 해당 플랫폼에서 지정되지 않은 것으로 간주됩니다. 이 경우 플랫폼은 해당 설정에 특정 값이 필요한 제약 조건 목록 (예: config_setting)과 일치하지 않습니다.

constraint_value

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

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

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

인수

속성
name

Name; required

이 타겟의 고유한 이름입니다.

constraint_setting

Label; required

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를 혼합하는 것은 허용되지 않습니다. 지원 중단된 remote_execution_properties보다 exec_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

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

List of labels; optional

이 플랫폼이 상속해야 하는 platform 타겟의 라벨입니다. 속성이 목록을 가져오지만 플랫폼이 1개 이상 있으면 안 됩니다. 이 플랫폼에서 직접 설정되지 않은 constraint_settings는 상위 플랫폼에서 확인할 수 있습니다. 자세한 내용은 플랫폼 상속 섹션을 참조하세요.
remote_execution_properties

String; optional

지원이 중단되었습니다. 대신 exec_properties 속성을 사용하세요. 원격 실행 플랫폼을 구성하는 데 사용되는 문자열입니다. 실제 빌드는 이를 해석하려고 시도하지 않으며, 특정 SpawnRunner에서 사용할 수 있는 불투명 데이터로 취급됩니다. 여기에는 매크로 "{PARENT_REMOTE_EXECUTION_PROPERTIES}"를 사용하여 상위 플랫폼의 remote_execute_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(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

이 타겟의 고유한 이름입니다.