규칙
constraints_setting
규칙 소스 보기constraint_setting(name, default_constraint_value, deprecation, distribs, features, licenses, tags, testonly, visibility)
이 규칙은 플랫폼에서 값을 지정할 수 있는 새로운 제약조건 유형을 도입하는 데 사용됩니다.
예를 들어, 다양한 버전의 glibc 라이브러리를 설치할 수 있는 기능을 나타내기 위해 'glibc_version'이라는 constraint_setting
를 정의할 수 있습니다.
자세한 내용은 플랫폼 페이지를 참고하세요.
각 constraint_setting
에는 확장 가능한 연결된 constraint_value
세트가 있습니다. 일반적으로 이 두 속성은 같은 패키지에서 정의되지만 다른 패키지에서 기존 설정에 새 값을 도입하는 경우도 있습니다. 예를 들어 사전 정의된 설정 @platforms//cpu:cpu
은 알 수 없는 CPU 아키텍처를 타겟팅하는 플랫폼을 정의하기 위해 맞춤 값으로 확장될 수 있습니다.
인수
속성 | |
---|---|
name |
이 타겟의 고유한 이름입니다. |
default_constraint_value
|
constraint_value 를 이 constraint_setting 와 동일한 패키지에 정의해야 합니다.
제약 조건 설정의 기본값이 있는 경우 플랫폼에 이 설정의 제약조건 값이 포함되지 않을 때마다 플랫폼이 기본값을 지정한 것과 같습니다. 그렇지 않고 기본값이 없으면 제약 조건 설정이 해당 플랫폼에서 지정되지 않은 것으로 간주합니다. 이 경우 플랫폼은 해당 설정에 특정 값이 필요한 제약조건 목록 (예: |
제약 조건_값
규칙 소스 보기constraint_value(name, constraint_setting, deprecation, distribs, features, licenses, tags, testonly, visibility)이 규칙은 특정 제약조건 유형에 대한 새 값을 도입합니다. 자세한 내용은 플랫폼 페이지를 참고하세요.
예
다음은 CPU 아키텍처를 나타내는 사전 정의된 constraint_value
에 사용 가능한 새 값을 만듭니다.
constraint_value( name = "mips", constraint_setting = "@platforms//cpu:cpu", )그러면 플랫폼에서
x86_64
, arm
등의 대안으로 mips
아키텍처가 있음을 선언할 수 있습니다.
인수
속성 | |
---|---|
name |
이 타겟의 고유한 이름입니다. |
constraint_setting
|
constraint_value 가 가능한 선택인 constraint_setting 입니다.
|
platform
규칙 소스 보기platform(name, constraint_values, deprecation, distribs, 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
를 설정하는 로직은 상위 플랫폼이 있을 때 다음과 같습니다.
-
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
를 함께 사용하는 것은 허용되지 않습니다.
지원 중단된 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 |
이 타겟의 고유한 이름입니다. |
constraint_values
|
이 목록의 각 |
exec_properties
|
exec_properties 속성에 있는 모든 데이터가 포함됩니다.
하위 플랫폼과 상위 플랫폼에서 동일한 키를 정의하면 하위 요소의 값이 유지됩니다. 빈 문자열인 값과 연결된 모든 키는 사전에서 삭제됩니다.
이 속성은 지원 중단된 remote_execution_properties 를 완전히 대체합니다.
|
parents
|
platform 대상의 라벨입니다. 속성은 목록을 받지만 플랫폼이 둘 이상 없어야 합니다. 이 플랫폼에 직접 설정되지 않은 constraints_settings는 상위 플랫폼에서 찾을 수 있습니다.
자세한 내용은 플랫폼 상속 섹션을 참고하세요.
|
remote_execution_properties
|
|
도구 모음
규칙 소스 보기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 |
이 타겟의 고유한 이름입니다. |