이 규칙 집합은 특정 하드웨어 플랫폼을 모델링할 수 있도록 하기 위해 존재합니다. 해당 플랫폼의 코드를 컴파일하는 데 필요할 수 있는 특정 도구를 지정하고 지정해야 합니다. 사용자는 여기에 설명된 개념을 잘 알고 있어야 합니다.
규칙
- <ph type="x-smartling-placeholder"></ph> constraint_setting
- <ph type="x-smartling-placeholder"></ph> constraint_value
- <ph type="x-smartling-placeholder"></ph> 플랫폼
- <ph type="x-smartling-placeholder"></ph> 도구 모음
- <ph type="x-smartling-placeholder"></ph> toolchain_type
constraint_setting
<ph type="x-smartling-placeholder"></ph> 규칙 소스 보기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
|
값이 제공되지 않을 경우 사용될 이 설정의 기본값 라벨입니다. 만약
속성이 있는 경우 이 속성이 가리키는 constraint_value 를
이 constraint_setting 와 동일한 패키지입니다.
제약조건 설정에 기본값이 있는 경우 플랫폼에 포함되지 않을 때마다
제약 조건 값이 없으면 플랫폼에서
기본값입니다. 기본값이 없으면 제약 조건 설정이 고려됩니다.
지정할 수 없습니다. 이 경우 플랫폼은 어떤 경우에도
특정 값이 필요한 제약조건 목록 (예: |
constraint_value
<ph type="x-smartling-placeholder"></ph> 규칙 소스 보기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
<ph type="x-smartling-placeholder"></ph> 규칙 소스 보기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
설정 로직은 다음과 같습니다.
상위 플랫폼입니다.
-
하위 플랫폼에
remote_execution_property
가 설정되어 있지 않으면 상위 플랫폼의remote_execution_properties
가 사용됩니다. -
remote_execution_property
가 하위 플랫폼에 설정되어 있고 리터럴 문자열 {PARENT_REMOTE_EXECUTION_PROPERTIES}이(가) 있으면 매크로는 상위 요소의remote_execution_property
속성 콘텐츠로 대체됩니다. -
remote_execution_property
이 하위 플랫폼에 설정되어 있고 매크로의 경우 하위 요소의remote_execution_property
은 변경되지 않고 사용됩니다.
remote_execution_properties
가 지원 중단되었으며 단계적으로 중단될 예정이므로
같은 위치에 있는 remote_execution_properties
및 exec_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
|
이 플랫폼이 구성하는 제약조건 선택 항목의 조합입니다. 플랫폼의 경우
환경에 적용하려면 최소한 이 목록의 값이 환경에 있어야 합니다.
이 목록의 각 |
exec_properties
|
사전: 문자열 -> String; 구성 불가 기본값은 exec_properties 속성에 있는 모든 데이터가 포함됩니다.
하위 플랫폼과 상위 플랫폼에서 동일한 키를 정의하면 하위 요소의 값이 유지됩니다. 모든 문자
빈 문자열인 값과 연결된 키는 사전에서 삭제됩니다.
이 속성은 지원 중단된 속성을 완전히 대체합니다.
remote_execution_properties
|
flags
|
문자열 목록 구성 불가 기본값은 |
parents
|
이 플랫폼이 상속해야 하는 platform 타겟의 라벨입니다. 하지만
속성이 목록을 받습니다. 플랫폼이 둘 이상 있으면 안 됩니다. 모든 문자
이 플랫폼에서 직접 설정되지 않은 constraints_settings는 상위 플랫폼에서 찾을 수 있습니다.
자세한 내용은 플랫폼 상속 섹션을 참고하세요.
|
remote_execution_properties
|
String; 구성 불가 기본값은 |
required_settings
|
라벨 목록 기본값은 config_setting 목록
이 플랫폼이 툴체인 확인 중에 실행 플랫폼으로 사용되어야 합니다.
필수 설정은 상위 플랫폼에서 상속되지 않습니다.
|
도구 모음
<ph type="x-smartling-placeholder"></ph> 규칙 소스 보기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
<ph type="x-smartling-placeholder"></ph> 규칙 소스 보기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 |
이름 필수 이 대상의 고유한 이름입니다. |