플랫폼 및 도구 모음 규칙

<ph type="x-smartling-placeholder"></ph> 문제 신고 소스 보기 1박 · 7.2 · 7.1 · 7.0 · 6.5 · 6.4

이 규칙 집합은 특정 하드웨어 플랫폼을 모델링할 수 있도록 하기 위해 존재합니다. 해당 플랫폼의 코드를 컴파일하는 데 필요할 수 있는 특정 도구를 지정하고 지정해야 합니다. 사용자는 여기에 설명된 개념을 잘 알고 있어야 합니다.

규칙

constraint_setting

규칙 소스 보기
constraint_setting(name, default_constraint_value, deprecation, distribs, features, licenses, tags, testonly, visibility)

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

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

인수

속성
name

이름 필수

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

default_constraint_value

이름 구성 불가 기본값은 None입니다.

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

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

constraint_value

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

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

constraint_value(
    name = "mips",
    constraint_setting = "@platforms//cpu:cpu",
)
그런 다음 플랫폼은 mips 아키텍처를 대신 사용하고 있다고 선언할 수 있습니다. x86_64, arm

인수

속성
name

이름 필수

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

constraint_setting

라벨 구성 불가 필수

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

platform

규칙 소스 보기
platform(name, constraint_values, deprecation, distribs, exec_properties, features, flags, licenses, parents, remote_execution_properties, required_settings, tags, testonly, visibility)

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

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

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

플랫폼 플래그

플랫폼은 flags 속성을 사용하여 추가할 플래그 목록을 지정할 수 있습니다. 플랫폼이 대상 플랫폼으로 사용될 때마다 (즉, --platforms 플래그).

플랫폼에서 설정된 플래그는 실질적으로 우선순위가 가장 높으며 이전의 모든 플래그를 덮어씁니다. 값을 지정할 수 있습니다.

platform(
    name = "foo",
    flags = [
        "--dynamic_mode=fully",
        "--//bool_flag",
        "--no//package:other_bool_flag",
    ],
)

이는 foo라는 플랫폼을 정의합니다. 타겟 플랫폼 (예: 사용자가 --platforms//:foo를 지정했습니다. 전환이 //command_line_option:platforms 플래그를 ["//:foo"]로 설정하거나 그 이유는 다음과 같습니다. //:foo가 실행 플랫폼으로 사용된 경우) 지정된 플래그는 구성할 수 있습니다

플랫폼 및 반복 가능한 플래그

--features와 같은 일부 플래그는 반복될 때 값을 누적합니다. --copt, config.string(repeatable = True)로 생성된 모든 Starlark 플래그 이러한 플래그는 플랫폼의 플래그 설정과 호환되지 않습니다. 대신 이전의 모든 플래그는 값이 삭제되고 플랫폼의 값으로 덮어쓰기됩니다.

예를 들어 다음 플랫폼에서 build --platforms=//:repeat_demo --features feature_a --features feature_b 호출은 --feature 플래그가 ["feature_c", "feature_d"]이므로 특성 삭제 명령줄에서 설정할 수 있습니다

platform(
    name = "repeat_demo",
    flags = [
        "--features=feature_c",
        "--features=feature_d",
    ],
)

이러한 이유로 flags 속성에 반복 가능한 플래그를 사용하지 않는 것이 좋습니다.

플랫폼 상속

플랫폼은 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

이름 필수

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

constraint_values

라벨 목록 구성 불가 기본값은 []입니다.

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

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

exec_properties

사전: 문자열 -> String; 구성 불가 기본값은 {}입니다.

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

문자열 목록 구성 불가 기본값은 []입니다.

이 플랫폼이 대상 플랫폼으로 사용될 때 사용 설정되는 플래그의 목록입니다. 구성할 수 있습니다 전환에 설정할 수 있는 플래그만 사용할 수 있습니다.
parents

라벨 목록 구성 불가 기본값은 []입니다.

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

String; 구성 불가 기본값은 ""입니다.

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

라벨 목록 기본값은 []입니다.

타겟 구성으로 충족되어야 하는 config_setting 목록 이 플랫폼이 툴체인 확인 중에 실행 플랫폼으로 사용되어야 합니다. 필수 설정은 상위 플랫폼에서 상속되지 않습니다.

도구 모음

규칙 소스 보기
toolchain(name, deprecation, distribs, exec_compatible_with, features, licenses, tags, target_compatible_with, target_settings, testonly, toolchain, toolchain_type, visibility)

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

인수

속성
name

이름 필수

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

exec_compatible_with

라벨 목록 구성 불가 기본값은 []입니다.

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

라벨 목록 구성 불가 기본값은 []입니다.

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

라벨 목록 기본값은 []입니다.

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

이름 필수

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

라벨 구성 불가 필수

이 역할을 나타내는 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

이름 필수

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