.bzl 파일

문제 신고 Nightly · 8.0 . 7.4 . 7.3 · 7.2 · 7.1 · 7.0 · 6.5

모든 .bzl 파일에서 사용할 수 있는 전역 메서드입니다.

회원

analysis_test_transition

transition analysis_test_transition(settings)

분석 테스트 규칙의 종속 항목에 적용할 구성 전환을 만듭니다. 이 전환은 analysis_test = True가 있는 규칙의 속성에만 적용할 수 있습니다. 이러한 규칙은 기능이 제한되어 있으므로 (예: 종속 항목 트리의 크기가 제한됨) 이 함수를 사용하여 만든 전환은 transition()를 사용하여 만든 전환에 비해 잠재적 범위가 제한됩니다.

이 함수는 주로 분석 테스트 프레임워크 핵심 라이브러리를 지원하도록 설계되었습니다. 권장사항은 문서 (또는 구현)를 참고하세요.

매개변수

매개변수 설명
settings dict: 필수
이 구성 전환에서 설정해야 하는 구성 설정에 관한 정보가 포함된 사전입니다. 키는 빌드 설정 라벨이고 값은 전환 후의 새 값입니다. 다른 모든 설정은 변경되지 않습니다. 분석 테스트를 통과하기 위해 설정해야 하는 특정 구성 설정을 선언하는 데 사용합니다.

관점

Aspect aspect(implementation, attr_aspects=[], toolchains_aspects=[], attrs={}, required_providers=[], required_aspect_providers=[], provides=[], requires=[], fragments=[], host_fragments=[], toolchains=[], incompatible_use_toolchain_transition=False, doc=None, *, apply_to_generating_rules=False, exec_compatible_with=[], exec_groups=None, subrules=[])

새 측정기준을 만듭니다. 이 함수의 결과는 전역 값에 저장되어야 합니다. 자세한 내용은 관점 소개를 참고하세요.

매개변수

매개변수 설명
implementation 함수; 필수
이 측면을 구현하는 Starlark 함수로, 정확히 두 개의 매개변수(Target(측면이 적용되는 타겟) 및 ctx(타겟이 생성된 규칙 컨텍스트))가 있습니다. 타겟의 속성은 ctx.rule 필드를 통해 사용할 수 있습니다. 이 함수는 각 측정기준을 타겟에 적용할 때의 분석 단계에서 평가됩니다.
attr_aspects 문자열시퀀스입니다. 기본값은 []입니다.
속성 이름 목록입니다. 측면은 이러한 이름으로 대상의 속성에 지정된 종속 항목을 따라 전파됩니다. 일반적인 값에는 depsexports가 포함됩니다. 목록에 단일 문자열 "*"을 포함하여 타겟의 모든 종속 항목을 따라 전파할 수도 있습니다.
toolchains_aspects sequence: 기본값은 []입니다.
툴체인 유형 목록입니다. 관점은 이러한 도구 모음 유형과 일치하는 대상 도구 모음으로 전파됩니다.
attrs dict; 기본값은 {}입니다.
Aspect의 모든 속성을 선언하는 사전입니다. 속성 이름에서 attr.label 또는 attr.string와 같은 속성 객체로 매핑합니다 (attr 모듈 참고). 측정기준 속성은 구현 함수에서 ctx 매개변수의 필드로 사용할 수 있습니다.

_로 시작하는 암시적 속성에는 기본값이 있어야 하며 유형은 label 또는 label_list여야 합니다.

명시적 속성은 유형이 string여야 하며 values 제한을 사용해야 합니다. 명시적 속성은 제한사항에 따라 동일한 이름, 유형, 유효한 값의 속성이 있는 규칙에만 측정기준이 사용되도록 제한합니다.

선언된 속성은 None를 기본값으로 변환합니다.

required_providers sequence: 기본값은 []
입니다. 이 속성을 사용하면 측면이 규칙에서 필요한 제공자를 광고하는 타겟으로만 적용을 제한할 수 있습니다. 값은 개별 제공업체 또는 제공업체 목록이 포함된 목록이어야 하며 둘 다 포함되어서는 안 됩니다. 예를 들어 [[FooInfo], [BarInfo], [BazInfo, QuxInfo]]는 유효한 값이지만 [FooInfo, BarInfo, [BazInfo, QuxInfo]]는 유효하지 않습니다.

중첩되지 않은 제공업체 목록은 제공업체 목록 1개가 포함된 목록으로 자동 변환됩니다. 즉, [FooInfo, BarInfo]가 자동으로 [[FooInfo, BarInfo]]로 변환됩니다.

일부 규칙 (예: some_rule) 타겟을 측정기준에 표시하려면 some_rule가 필수 제공업체 목록 중 하나 이상에서 모든 제공업체를 광고해야 합니다. 예를 들어 측정의 required_providers[[FooInfo], [BarInfo], [BazInfo, QuxInfo]]인 경우 이 측정은 some_ruleFooInfo, 또는 BarInfo, 또는 BazInfo QuxInfo을 모두 제공하는 경우에만 some_rule 타겟을 볼 수 있습니다.

required_aspect_providers sequence: 기본값은 []입니다.
이 속성을 사용하면 이 측면에서 다른 측면을 검사할 수 있습니다. 값은 개별 제공업체 또는 제공업체 목록이 포함된 목록이어야 하며 둘 다 포함되어서는 안 됩니다. 예를 들어 [[FooInfo], [BarInfo], [BazInfo, QuxInfo]]는 유효한 값이지만 [FooInfo, BarInfo, [BazInfo, QuxInfo]]는 유효하지 않습니다.

중첩되지 않은 제공업체 목록은 제공업체 목록 1개가 포함된 목록으로 자동 변환됩니다. 즉, [FooInfo, BarInfo]가 자동으로 [[FooInfo, BarInfo]]로 변환됩니다.

다른 측면 (예: other_aspect)을 이 측면에 표시하려면 other_aspect가 하나 이상의 목록에서 모든 제공업체를 제공해야 합니다. [[FooInfo], [BarInfo], [BazInfo, QuxInfo]]의 예에서 이 측면은 other_aspectFooInfo, 또는 BarInfo, 또는 BazInfo QuxInfo를 모두 제공하는 경우에만 other_aspect를 볼 수 있습니다.

provides sequence; 기본값은 []입니다.
구현 함수가 반환해야 하는 제공업체 목록입니다.

구현 함수가 여기에 나열된 제공자 유형 중 하나를 반환 값에서 생략하면 오류가 발생합니다. 그러나 구현 함수는 여기에 나열되지 않은 추가 제공업체를 반환할 수 있습니다.

목록의 각 요소는 provider()에서 반환된 *Info 객체입니다. 단, 기존 제공업체는 문자열 이름으로 대신 표시됩니다. 규칙의 타겟이 필수 제공업체를 선언하는 타겟의 종속 항목으로 사용되는 경우 여기에서 해당 제공업체를 지정할 필요가 없습니다. 구현 함수가 반환하면 됩니다. 하지만 필수사항은 아니지만 지정하는 것이 좋습니다. 그러나 측정항목required_providers 필드에는 제공업체를 여기에서 지정해야 합니다.

requires Aspect시퀀스입니다. 기본값은 []입니다.
이 측면 전에 전파해야 하는 측면 목록입니다.
fragments 문자열시퀀스입니다. 기본값은 []입니다.
타겟 구성에서 측면이 요구하는 구성 프래그먼트의 이름 목록입니다.
host_fragments 문자열시퀀스입니다. 기본값은 []입니다.
Aspect가 호스트 구성에서 필요로 하는 구성 프래그먼트의 이름 목록입니다.
toolchains sequence: 기본값은 []
입니다. 설정하면 이 측면에 필요한 도구 모음이 됩니다. 목록에는 String, Label, StarlarkToolchainTypeApi 객체가 어떤 조합으로든 포함될 수 있습니다. 도구 모음은 현재 플랫폼을 확인하여 찾고 ctx.toolchain를 통해 측정항목 구현에 제공됩니다.
incompatible_use_toolchain_transition bool; 기본값은 False입니다.
지원 중단됨. 더 이상 사용되지 않으며 삭제해야 합니다.
doc string 또는 None; 기본값은 None입니다.
문서 생성 도구로 추출할 수 있는 측면에 관한 설명입니다.
apply_to_generating_rules bool; 기본값은 False
true이면 출력 파일에 적용될 때 대신 출력 파일의 생성 규칙에 적용됩니다.

예를 들어 측면이 속성 `deps` 를 통해 전이적으로 전파되고 타겟 `alpha`에 적용된다고 가정해 보겠습니다. `alpha` 에 `deps = [':beta_output']`가 있다고 가정해 보겠습니다. 여기서 `beta_output` 은 타겟 `beta`의 선언된 출력입니다. `beta` 에 타겟 `charlie` 가 `deps` 중 하나로 있다고 가정해 보겠습니다. 측면의 `apply_to_generating_rules=True` 인 경우 측면이 `alpha`, `beta`, `charlie`를 통해 전파됩니다. False인 경우 측면은 `alpha`로만 전파됩니다.

기본값은 false입니다.

exec_compatible_with 문자열시퀀스입니다. 기본값은 []입니다.
이 측면의 모든 인스턴스에 적용되는 실행 플랫폼의 제약 조건 목록입니다.
exec_groups dict 또는 None(기본값: None)
실행 그룹 이름(문자열)과 exec_groups의 사전입니다. 설정하면 측정항목이 단일 인스턴스 내에서 여러 실행 플랫폼에서 작업을 실행할 수 있습니다. 자세한 내용은 실행 그룹 문서를 참고하세요.
subrules 하위 규칙시퀀스입니다. 기본값은 []입니다.
실험용: 이 측면에서 사용하는 하위 규칙 목록입니다.

configuration_field

LateBoundDefault configuration_field(fragment, name)

label 유형의 속성에 대한 지연 결합 기본값을 참조합니다. 값을 결정하기 전에 구성을 빌드해야 하는 값은 '지연 결합'입니다. 이를 값으로 사용하는 모든 속성은 비공개여야 합니다.

사용 예:

규칙 속성 정의:

'_foo': attr.label(default=configuration_field(fragment='java', name='toolchain'))

규칙 구현에서 액세스:

  def _rule_impl(ctx):
    foo_info = ctx.attr._foo
    ...

매개변수

매개변수 설명
fragment string; required
지연 결합 값이 포함된 구성 프래그먼트의 이름입니다.
name string; required
구성 프래그먼트에서 가져올 값의 이름입니다.

depset

depset depset(direct=None, order="default", *, transitive=None)

depset을 만듭니다. direct 매개변수는 depset의 직접 요소 목록이고 transitive 매개변수는 요소가 생성된 depset의 간접 요소가 되는 depset 목록입니다. depset이 목록으로 변환될 때 요소가 반환되는 순서는 order 매개변수로 지정됩니다. 자세한 내용은 Depset 개요를 참고하세요.

depset의 모든 요소 (직접 및 간접)는 type(x) 표현식으로 얻은 것과 동일한 유형이어야 합니다.

해시 기반 세트는 반복 중에 중복을 제거하는 데 사용되므로 depset의 모든 요소는 해싱 가능해야 합니다. 그러나 이 불변식은 현재 모든 생성자에서 일관되게 검사되지 않습니다. --incompatible_always_check_depset_elements 플래그를 사용하여 일관된 검사를 사용 설정합니다. 이는 향후 출시에서 기본 동작이 될 예정입니다. 문제 10313을 참고하세요.

또한 현재는 요소가 변경 불가해야 하지만 향후 이 제한이 완화될 예정입니다.

생성된 depset의 순서는 transitive depset의 순서와 호환되어야 합니다. "default" 순서는 다른 순서와 호환되며 다른 모든 순서는 자체적으로만 호환됩니다.

매개변수

매개변수 설명
direct 시퀀스 또는 None 기본값은 None입니다.
depset의 직접 요소 목록입니다.
order string; 기본값은 "default"
입니다. 새 depset의 탐색 전략입니다. 가능한 값은 여기를 참고하세요.
transitive depset시퀀스 또는 None입니다. 기본값은 None입니다.
요소가 depset의 간접 요소가 되는 depset 목록입니다.

exec_group

exec_group exec_group(toolchains=[], exec_compatible_with=[])

규칙 구현 중에 특정 실행 플랫폼의 작업을 만드는 데 사용할 수 있는 실행 그룹을 만듭니다.

매개변수

매개변수 설명
toolchains sequence: 기본값은 []입니다.
이 실행 그룹에 필요한 도구 모음 집합입니다. 목록에는 String, Label, StarlarkToolchainTypeApi 객체가 어떤 조합으로든 포함될 수 있습니다.
exec_compatible_with 문자열시퀀스입니다. 기본값은 []입니다.
실행 플랫폼의 제약 조건 목록입니다.

exec_transition

transition exec_transition(implementation, inputs, outputs)

실행 전환을 정의하는 데 사용되는 transition()의 특수 버전입니다. 권장사항은 문서 (또는 구현)를 참고하세요. Bazel 내장 함수에서만 사용할 수 있습니다.

매개변수

매개변수 설명
implementation 호출 가능; 필수
inputs 문자열 시퀀스입니다. 필수
outputs 문자열 시퀀스입니다. 필수

매크로

macro macro(implementation, attrs={}, inherit_attrs=None, finalizer=False, doc=None)

BUILD 파일 또는 매크로(기존 또는 기호)에서 호출되어 대상을 정의할 수 있는 기호 매크로를 정의합니다(여러 개일 수 있음).

macro(...)에서 반환된 값은 .bzl 파일의 전역 변수에 할당되어야 합니다. 전역 변수의 이름은 매크로 기호의 이름이 됩니다.

기호 매크로를 사용하는 방법에 관한 포괄적인 가이드는 매크로를 참고하세요.

매개변수

매개변수 설명
implementation 함수; 필수
이 매크로를 구현하는 Starlark 함수입니다. 매크로의 속성 값은 구현 함수에 키워드 인수로 전달됩니다. 구현 함수에는 이름이 지정된 매개변수 namevisibility가 2개 이상 있어야 하며, 매크로가 속성을 상속하는 경우 (아래 inherit_attrs 참고) **kwargs 잔여 키워드 매개변수가 있어야 합니다.

관례에 따라 구현 함수에는 매크로가 '기본'이 아닌 타겟을 검사, 수정 또는 전달해야 하는 모든 속성에 이름이 지정된 매개변수가 있어야 합니다. 반면 '기본' 타겟에 변경되지 않은 상태로 전달되는 '대량' 상속 속성은 **kwargs로 전달됩니다.

구현 함수는 값을 반환해서는 안 됩니다. 대신 구현 함수는 규칙 또는 매크로 기호를 호출하여 타겟을 선언합니다.

기호 매크로 (매크로의 구현 함수가 전이적으로 호출하는 모든 Starlark 함수 포함)에 의해 선언된 타겟 또는 내부 기호 매크로의 이름은 name('기본' 타겟이라고 함)과 같거나 name로 시작하고 구분자 문자 ("_", "-" 또는 ".")와 문자열 접미사가 이어져야 합니다. 이 이름 지정 체계를 위반하는 타겟은 선언할 수 있지만 빌드, 구성 또는 종속할 수는 없습니다.

기본적으로 기호 매크로 (매크로의 구현 함수가 전이적으로 호출하는 모든 Starlark 함수 포함)로 선언된 타겟은 매크로를 정의하는 .bzl 파일이 포함된 패키지에만 표시됩니다. 기호 매크로 호출자를 포함하여 외부에 표시되는 타겟을 선언하려면 구현 함수가 visibility를 적절하게 설정해야 합니다. 일반적으로 호출되는 규칙 또는 매크로 기호에 visibility = visibility를 전달합니다.

매크로 구현 함수와 이 함수가 전이적으로 호출하는 모든 Starlark 함수 내에서는 다음 API를 사용할 수 없습니다.

attrs dict: 기본값은 {}입니다.
이 매크로에서 지원하는 속성의 사전으로, rule.attrs와 유사합니다. 키는 속성 이름이고 값은 attr.label_list(...)와 같은 속성 객체 (attr 모듈 참고) 또는 None입니다. None 항목은 매크로에 해당 이름의 속성이 없음을 의미합니다. inherit_attrs를 통해 속성을 상속했더라도 마찬가지입니다(아래 참고).

특수 name 속성은 사전에서 선언되며 사전에 포함되어서는 안 됩니다. visibility 속성 이름은 예약되어 있으며 사전에 포함되어서는 안 됩니다.

이름이 _로 시작하는 속성은 비공개입니다. 규칙의 호출 위치에서 전달할 수 없습니다. 이러한 속성은 기본값 (예: attr.label(default="//pkg:foo"))을 할당하여 라벨에 대한 암시적 종속 항목을 만들 수 있습니다.

메모리 사용량을 제한하기 위해 선언할 수 있는 속성 수에 한도가 있습니다.

inherit_attrs rule, macro, string, None: 기본값은 None입니다.
규칙 기호, 매크로 기호 또는 매크로가 속성을 상속해야 하는 내장 공통 속성 목록 (아래 참고)의 이름입니다.

inherit_attrs가 문자열 "common"로 설정되면 매크로는 모든 Starlark 규칙에서 사용하는 공통 규칙 속성 정의를 상속합니다.

rule() 또는 macro()의 반환 값이 .bzl 파일의 전역 변수에 할당되지 않은 경우 이러한 값은 규칙 또는 매크로 기호로 등록되지 않았으므로 inherit_attrs에 사용할 수 없습니다.

상속 메커니즘은 다음과 같이 작동합니다.

  1. 특수 namevisibility 속성은 상속되지 않습니다.
  2. 숨겨진 속성 (이름이 "_"로 시작하는 속성)은 상속되지 않습니다.
  3. 이름이 이미 attrs 사전에 정의된 속성은 상속되지 않습니다 (attrs의 항목이 우선 적용됨). 해당 이름의 속성이 매크로에 정의되지 않도록 하려면 항목을 None로 설정할 수 있습니다.
  4. 다른 모든 속성은 규칙 또는 매크로에서 상속되며 attrs 사전으로 효과적으로 병합됩니다.

필수가 아닌 속성이 상속되면 속성의 기본값은 원래 규칙 또는 매크로에 지정된 값과 관계없이 None로 재정의됩니다. 이렇게 하면 매크로가 수정되지 않은 **kwargs를 전달하는 등 래핑된 규칙 또는 매크로의 인스턴스에 속성 값을 전달할 때 외부 매크로 호출에 없던 값이 내부 규칙 또는 매크로 호출에도 없게 됩니다 (None를 속성에 전달하는 것이 속성을 생략하는 것과 동일하게 취급되기 때문). 이는 속성을 생략하는 것이 표시된 기본값을 전달하는 것과 미묘하게 다른 시맨틱을 가지기 때문에 중요합니다. 특히 생략된 속성은 일부 bazel query 출력 형식에 표시되지 않으며 계산된 기본값은 값이 생략된 경우에만 실행됩니다. 상속된 속성을 검사하거나 수정해야 하는 매크로(예: 상속된 tags 속성에 값 추가)의 경우 매크로의 구현 함수에서 None 사례를 처리해야 합니다.

예를 들어 다음 매크로는 cxxopts (속성 목록에서 삭제됨) 및 copts(새로운 정의를 부여함)를 제외한 native.cc_library의 모든 속성을 상속합니다. 또한 태그를 추가하기 전에 상속된 tags 속성의 기본 None 값을 확인합니다.

def _my_cc_library_impl(name, visibility, tags, **kwargs):
    # Append a tag; tags attr was inherited from native.cc_library, and
    # therefore is None unless explicitly set by the caller of my_cc_library()
    my_tags = (tags or []) + ["my_custom_tag"]
    native.cc_library(
        name = name,
        visibility = visibility,
        tags = my_tags,
        **kwargs
    )

my_cc_library = macro(
    implementation = _my_cc_library_impl,
    inherit_attrs = native.cc_library,
    attrs = {
        "cxxopts": None,
        "copts": attr.string_list(default = ["-D_FOO"]),
    },
)

inherit_attrs가 설정된 경우 매크로의 구현 함수에는 **kwargs 잔여 키워드 매개변수가 있어야 합니다.

관례에 따라 매크로는 상속된 재정의되지 않은 속성을 변경되지 않은 상태로 매크로가 래핑하는 '기본' 규칙 또는 매크로 기호에 전달해야 합니다. 일반적으로 대부분의 상속된 속성은 구현 함수의 매개변수 목록에 매개변수가 없으며 **kwargs를 통해 전달됩니다. 매크로가 이러한 속성을 '기본' 타겟과 '기본'이 아닌 타겟 모두에 전달해야 하는 경우 구현 함수에 일부 상속 속성 (일반적으로 tagstestonly)에 대한 명시적 매개변수가 있는 것이 편리할 수 있습니다. 하지만 매크로가 이러한 속성을 검사하거나 조작해야 하는 경우 필수가 아닌 상속 속성의 None 기본값을 처리해야 합니다.

finalizer 불리언; 기본값은 False입니다.
이 매크로가 규칙 최종 처리자인지 여부입니다. 규칙 최종 처리자는 BUILD 파일의 위치와 관계없이 모든 최종 처리자가 아닌 타겟이 정의된 후 패키지 로드가 끝날 때 평가되는 매크로입니다.

일반 기호 매크로와 달리 규칙 최종 처리기는 native.existing_rule()native.existing_rules()를 호출하여 현재 패키지에 정의된 최종 처리기가 아닌 규칙 타겟 집합을 쿼리할 수 있습니다. native.existing_rule()native.existing_rules()는 이 규칙 최종 처리기를 포함한 모든 규칙 최종 처리기에서 정의된 타겟에 액세스할 수 없습니다.

doc string 또는 None(기본값: None)
문서 생성 도구로 추출할 수 있는 매크로 설명입니다.

module_extension

unknown module_extension(implementation, *, tag_classes={}, doc=None, environ=[], os_dependent=False, arch_dependent=False)

새 모듈 확장 프로그램을 만듭니다. use_extension를 사용하여 MODULE.bazel 파일에서 내보내고 사용할 수 있도록 전역 값에 저장합니다.

매개변수

매개변수 설명
implementation callable; required
이 모듈 확장 프로그램을 구현하는 함수입니다. 단일 매개변수 module_ctx를 사용해야 합니다. 이 함수는 빌드 시작 시 한 번 호출되어 사용 가능한 저장소 집합을 결정합니다.
tag_classes dict; 기본값은 {}입니다.
확장 프로그램에서 사용하는 모든 태그 클래스를 선언하는 사전입니다. 태그 클래스의 이름에서 tag_class 객체로 매핑합니다.
doc 문자열 또는 None; 기본값은 None입니다.
문서 생성 도구로 추출할 수 있는 모듈 확장 프로그램의 설명입니다.
environ 문자열시퀀스입니다. 기본값은 []입니다.
이 모듈 확장 프로그램이 종속되는 환경 변수 목록을 제공합니다. 이 목록의 환경 변수가 변경되면 확장 프로그램이 다시 평가됩니다.
os_dependent 불리언; 기본값은 False입니다.
이 확장자가 OS에 종속적인지 여부를 나타냅니다.
arch_dependent 불리언; 기본값은 False입니다.
이 확장자가 아키텍처 종속인지 여부를 나타냅니다.

provider

unknown provider(doc=None, *, fields=None, init=None)

제공자 기호를 정의합니다. 이 함수의 결과는 전역 값에 저장되어야 합니다. 제공업체는 호출하여 인스턴스화하거나 타겟에서 해당 제공업체의 인스턴스를 검색하는 키로 직접 사용할 수 있습니다. 예:
MyInfo = provider()
...
def _my_library_impl(ctx):
    ...
    my_info = MyInfo(x = 2, y = 3)
    # my_info.x == 2
    # my_info.y == 3
    ...

제공자 사용 방법에 관한 포괄적인 가이드는 규칙 (제공자)을 참고하세요.

init가 지정되지 않은 경우 호출 가능한 Provider 값을 반환합니다.

init가 지정되면 2개의 요소(Provider 호출 가능 값 및 원시 생성자 호출 가능 값)로 구성된 튜플을 반환합니다. 자세한 내용은 규칙 (맞춤 제공업체의 맞춤 초기화) 및 아래의 init 매개변수에 관한 설명을 참고하세요.

매개변수

매개변수 설명
doc string 또는 None; 기본값은 None입니다.
문서 생성 도구로 추출할 수 있는 제공업체에 관한 설명입니다.
fields 문자열시퀀스 또는 사전 또는 None입니다. 기본값은 None입니다.
지정하면 허용되는 필드 집합을 제한합니다.
가능한 값은 다음과 같습니다.
  • 필드 목록:
    provider(fields = ['a', 'b'])

  • 사전 필드 이름 -> 문서:
    provider(
           fields = { 'a' : 'Documentation for a', 'b' : 'Documentation for b' })
모든 입력란은 선택사항입니다.
init 호출 가능 함수 또는 None입니다. 기본값은 None입니다.
인스턴스화 중에 제공자의 필드 값을 사전 처리하고 유효성 검사하는 선택적 콜백입니다. init이 지정되면 provider()는 일반 제공자 기호와 원시 생성자라는 두 요소의 튜플을 반환합니다.

다음은 정확한 설명입니다. 직관적인 설명과 사용 사례는 규칙 (제공자 맞춤 초기화)을 참고하세요.

Pprovider()를 호출하여 생성된 제공업체 기호입니다. 개념적으로 P의 인스턴스는 다음을 실행하는 기본 생성자 함수 c(*args, **kwargs)를 호출하여 생성됩니다.

  • args가 비어 있지 않으면 오류가 발생합니다.
  • provider()가 호출될 때 fields 매개변수가 지정되었고 kwargsfields에 나열되지 않은 키가 포함된 경우 오류가 발생합니다.
  • 그렇지 않으면 ckwargs의 각 k: v 항목에 대해 값이 vk라는 필드가 있는 새 인스턴스를 반환합니다.
init 콜백이 제공되지 않은 경우 기호 P 호출 자체가 기본 생성자 함수 c 호출 역할을 합니다. 즉, P(*args, **kwargs)c(*args, **kwargs)를 반환합니다. 예를 들면 다음과 같습니다.
MyInfo = provider()
m = MyInfo(foo = 1)
를 사용하면 mm.foo == 1가 있는 MyInfo 인스턴스가 됩니다.

하지만 init가 지정된 경우에는 P(*args, **kwargs) 호출이 대신 다음 단계를 실행합니다.

  1. 콜백은 init(*args, **kwargs)로 호출되며, 즉 P에 전달된 것과 정확히 동일한 위치 및 키워드 인수를 사용합니다.
  2. init의 반환 값은 키가 필드 이름 문자열인 사전 d이어야 합니다. 그렇지 않으면 오류가 발생합니다.
  3. P의 새 인스턴스는 c(**d)에서와 같이 d의 항목을 키워드 인수로 사용하여 기본 생성자를 호출하는 것처럼 생성됩니다.

참고: 위 단계는 *args 또는 **kwargsinit의 서명과 일치하지 않거나 init의 본문 평가가 실패하거나 (의도적으로 fail() 호출을 통해 실패할 수 있음) init의 반환 값이 예상되는 스키마가 있는 사전이 아닌 경우 오류가 발생함을 의미합니다.

이렇게 하면 init 콜백은 전처리 및 유효성 검사를 위한 위치 인수와 임의 로직을 허용하여 일반 제공자 구성을 일반화합니다. 허용된 fields 목록을 우회할 수 없습니다.

init가 지정되면 provider()의 반환 값이 튜플 (P, r)이 됩니다. 여기서 r원시 생성자입니다. 실제로 r의 동작은 위에서 설명한 기본 생성자 함수 c의 동작과 정확히 일치합니다. 일반적으로 r는 이름 앞에 밑줄이 붙은 변수에 바인딩되므로 현재 .bzl 파일만 r에 직접 액세스할 수 있습니다.

MyInfo, _new_myinfo = provider(init = ...)

repository_rule

callable repository_rule(implementation, *, attrs=None, local=False, environ=[], configure=False, remotable=False, doc=None)

새 저장소 규칙을 만듭니다. module_extension() 구현 함수에서 로드하고 호출하거나 use_repo_rule()에서 사용할 수 있도록 전역 값에 저장합니다.

매개변수

매개변수 설명
implementation callable; required
이 규칙을 구현하는 함수입니다. 단일 매개변수 repository_ctx가 있어야 합니다. 이 함수는 규칙의 각 인스턴스 로드 단계 중에 호출됩니다.
attrs dict 또는 None; 기본값은 None입니다.
저장소 규칙의 모든 속성을 선언하는 사전입니다. 속성 이름에서 속성 객체로 매핑합니다 (attr 모듈 참고). _로 시작하는 속성은 비공개이며 라벨에 대한 암시적 종속 항목을 파일에 추가하는 데 사용할 수 있습니다 (저장소 규칙은 생성된 아티팩트에 종속될 수 없음). name 속성은 암시적으로 추가되며 지정해서는 안 됩니다.

선언된 속성은 None를 기본값으로 변환합니다.

local bool; 기본값은 False
이 규칙이 로컬 시스템에서 모든 항목을 가져오고 가져올 때마다 재평가되어야 함을 나타냅니다.
environ 문자열시퀀스입니다. 기본값은 []
입니다. 사용 중단됨 이 매개변수는 지원 중단되었습니다. 대신 repository_ctx.getenv로 이전하세요.
이 저장소 규칙이 종속되는 환경 변수 목록을 제공합니다. 이 목록의 환경 변수가 변경되면 저장소가 다시 가져옵니다.
configure 불리언; 기본값은 False
저장소가 구성 목적으로 시스템을 검사함을 나타냅니다.
remotable bool; 기본값은 False
실험용입니다. 이 매개변수는 실험용이며 언제든지 변경될 수 있습니다. 이 방법을 사용하지 마세요. --experimental_repo_remote_exec
원격 실행과 호환 설정을 통해 실험적으로 사용 설정할 수 있습니다.
doc 문자열 또는 None; 기본값은 None입니다.
문서 생성 도구로 추출할 수 있는 저장소 규칙의 설명입니다.

규칙

callable rule(implementation, *, test=unbound, attrs={}, outputs=None, executable=unbound, output_to_genfiles=False, fragments=[], host_fragments=[], _skylark_testable=False, toolchains=[], incompatible_use_toolchain_transition=False, doc=None, provides=[], dependency_resolution_rule=False, exec_compatible_with=[], analysis_test=False, build_setting=None, cfg=None, exec_groups=None, initializer=None, parent=None, extendable=None, subrules=[])

BUILD 파일 또는 매크로에서 호출하여 타겟을 만들 수 있는 새 규칙을 만듭니다.

규칙은 .bzl 파일의 전역 변수에 할당되어야 합니다. 전역 변수의 이름은 규칙의 이름입니다.

테스트 규칙의 이름은 _test로 끝나야 하지만 다른 모든 규칙의 이름은 이 접미사가 없어야 합니다. 이 제한은 타겟이 아닌 규칙에만 적용됩니다.

매개변수

매개변수 설명
implementation 함수; 필수
이 규칙을 구현하는 Starlark 함수로, ctx라는 매개변수가 정확히 하나 있어야 합니다. 이 함수는 규칙의 각 인스턴스에 대한 분석 단계 중에 호출됩니다. 사용자가 제공한 속성에 액세스할 수 있습니다. 선언된 모든 출력을 생성하는 작업을 만들어야 합니다.
test 불리언; 기본값은 unbound입니다.
이 규칙이 테스트 규칙인지, 즉 blaze test 명령어의 대상이 될 수 있는지 여부입니다. 모든 테스트 규칙은 자동으로 executable로 간주됩니다. 테스트 규칙에 executable = True를 명시적으로 설정할 필요가 없으며 권장하지도 않습니다. 기본값은 False입니다. 자세한 내용은 규칙 페이지를 참고하세요.
attrs dict: 기본값은 {}
입니다. 규칙의 모든 속성을 선언하는 사전입니다. 속성 이름에서 속성 객체로 매핑합니다 (attr 모듈 참고). _로 시작하는 속성은 비공개이며 라벨에 암시적 종속 항목을 추가하는 데 사용할 수 있습니다. name 속성은 암시적으로 추가되며 지정해서는 안 됩니다. 속성 visibility, deprecation, tags, testonly, features는 암시적으로 추가되며 재정의할 수 없습니다. 대부분의 규칙에는 몇 가지 속성만 필요합니다. 메모리 사용량을 제한하기 위해 선언할 수 있는 속성 수에 한도가 있습니다.

선언된 속성은 None를 기본값으로 변환합니다.

outputs dict, None 또는 function(기본값: None)
지원 중단됨 이 매개변수는 지원 중단되었으며 곧 삭제됩니다. 이 방법을 사용하지 마세요. --incompatible_no_rule_outputs_param를 사용하면 사용 중지됩니다. 이 플래그를 사용하여 코드가 곧 삭제될 예정인지 확인합니다.
이 매개변수는 지원 중단되었습니다. 대신 OutputGroupInfo 또는 attr.output를 사용하도록 규칙을 이전합니다.

사전 선언된 출력을 정의하기 위한 스키마입니다. outputoutput_list 속성과 달리 사용자는 이러한 파일의 라벨을 지정하지 않습니다. 사전 선언된 출력에 관한 자세한 내용은 규칙 페이지를 참고하세요.

이 인수의 값은 사전 또는 사전을 생성하는 콜백 함수입니다. 콜백은 계산된 종속 항목 속성과 유사하게 작동합니다. 함수의 매개변수 이름이 규칙의 속성과 일치합니다. 예를 들어 정의 def _my_func(srcs, deps): ...와 함께 outputs = _my_func를 전달하면 함수는 srcsdeps 속성에 액세스할 수 있습니다. 사전이 직접 지정되든 함수를 통해 지정되든 다음과 같이 해석됩니다.

사전의 각 항목은 사전 선언된 출력을 만듭니다. 여기서 키는 식별자이고 값은 출력의 라벨을 결정하는 문자열 템플릿입니다. 규칙의 구현 함수에서 식별자는 ctx.outputs에서 출력의 File에 액세스하는 데 사용되는 필드 이름이 됩니다. 출력 라벨은 규칙과 동일한 패키지를 가지며 패키지 뒤의 부분은 "%{ATTR}" 형식의 각 자리표시자를 속성 ATTR의 값으로부터 형성된 문자열로 대체하여 생성됩니다.

  • 문자열 유형의 속성은 그대로 대체됩니다.
  • 라벨 유형 속성은 패키지 뒤의 라벨의 일부가 되며 파일 확장자는 제외됩니다. 예를 들어 "//pkg:a/b.c" 라벨은 "a/b"가 됩니다.
  • 출력 유형 속성은 파일 확장자 (위 예에서는 "a/b.c")를 포함하여 패키지 뒤의 라벨의 일부가 됩니다.
  • 자리표시자에 사용되는 모든 목록 유형 속성 (예: attr.label_list)에는 요소가 정확히 하나 있어야 합니다. 전환은 목록 외 버전 (attr.label)과 동일합니다.
  • 다른 속성 유형은 자리표시자에 표시되지 않을 수 있습니다.
  • 속성이 아닌 특수 자리표시자 %{dirname}%{basename}는 패키지를 제외하고 규칙 라벨의 해당 부분으로 확장됩니다. 예를 들어 "//pkg:a/b.c"에서 디렉터리 이름은 a이고 기본 이름은 b.c입니다.

실제로 가장 일반적인 대체 자리표시자는 "%{name}"입니다. 예를 들어 'foo'라는 이름의 타겟의 경우 출력 사전 {"bin": "%{name}.exe"}은 구현 함수에서 ctx.outputs.bin로 액세스할 수 있는 foo.exe라는 출력을 미리 선언합니다.

executable 불리언; 기본값은 unbound입니다.
이 규칙이 실행 파일로 간주되는지, 즉 blaze run 명령어의 대상이 될 수 있는지 여부입니다. 기본값은 False입니다. 자세한 내용은 규칙 페이지를 참고하세요.
output_to_genfiles bool; 기본값은 False
true이면 파일이 bin 디렉터리가 아닌 genfiles 디렉터리에 생성됩니다. 기존 규칙과의 호환성을 위해 필요하지 않은 한 (예: C++의 헤더 파일을 생성할 때) 이 플래그를 설정하지 마세요.
fragments 문자열시퀀스입니다. 기본값은 []입니다.
타겟 구성에서 규칙에 필요한 구성 프래그먼트의 이름 목록입니다.
host_fragments 문자열시퀀스입니다. 기본값은 []입니다.
호스트 구성에서 규칙에 필요한 구성 프래그먼트의 이름 목록입니다.
_skylark_testable 불리언; 기본값은 False입니다.
(실험용)

이 규칙이 true이면 이 규칙은 Actions 제공자를 통해 이 규칙에 종속된 규칙이 검사할 수 있도록 작업을 노출합니다. ctx.created_actions()를 호출하여 규칙 자체에서도 제공자를 사용할 수 있습니다.

이는 Starlark 규칙의 분석 시간 동작을 테스트하는 데만 사용해야 합니다. 이 플래그는 향후 삭제될 수 있습니다.
toolchains sequence: 기본값은 []입니다.
설정하면 이 규칙에 필요한 도구 모음 세트입니다. 목록에는 String, Label, StarlarkToolchainTypeApi 객체가 어떤 조합으로든 포함될 수 있습니다. 도구 모음은 현재 플랫폼을 확인하여 찾고 ctx.toolchain를 통해 규칙 구현에 제공됩니다.
incompatible_use_toolchain_transition bool; 기본값은 False입니다.
지원 중단됨. 더 이상 사용되지 않으며 삭제해야 합니다.
doc 문자열 또는 None; 기본값은 None입니다.
문서 생성 도구로 추출할 수 있는 규칙 설명입니다.
provides sequence; 기본값은 []입니다.
구현 함수가 반환해야 하는 제공업체 목록입니다.

구현 함수가 여기에 나열된 제공자 유형 중 하나를 반환 값에서 생략하면 오류가 발생합니다. 그러나 구현 함수는 여기에 나열되지 않은 추가 제공업체를 반환할 수 있습니다.

목록의 각 요소는 provider()에서 반환된 *Info 객체입니다. 단, 기존 제공업체는 문자열 이름으로 대신 표시됩니다. 규칙의 타겟이 필수 제공업체를 선언하는 타겟의 종속 항목으로 사용되는 경우 여기에서 해당 제공업체를 지정할 필요가 없습니다. 구현 함수가 반환하면 됩니다. 하지만 필수사항은 아니지만 지정하는 것이 좋습니다. 그러나 측정항목required_providers 필드에는 제공업체를 여기에서 지정해야 합니다.

dependency_resolution_rule bool; 기본값은 False입니다.
설정하면 규칙이 materializer에서 사용 가능으로 표시된 속성을 통한 종속 항목이 될 수 있습니다. 이 플래그가 설정된 규칙의 모든 속성은 Materializers에서도 사용할 수 있는 것으로 표시되어야 합니다. 이렇게 표시된 규칙은 그렇게 표시되지 않은 규칙에 종속될 수 없습니다.
exec_compatible_with 문자열시퀀스입니다. 기본값은 []입니다.
이 규칙 유형의 모든 타겟에 적용되는 실행 플랫폼의 제약 조건 목록입니다.
analysis_test 불리언; 기본값은 False입니다.
true이면 이 규칙이 분석 테스트로 취급됩니다.

참고: 분석 테스트 규칙은 주로 핵심 Starlark 라이브러리에 제공된 인프라를 사용하여 정의됩니다. 안내는 테스트를 참고하세요.

규칙이 분석 테스트 규칙으로 정의된 경우 속성에 analysis_test_transition을 사용하여 정의된 구성 전환을 사용할 수 있지만 몇 가지 제한사항이 적용됩니다.

  • 이 규칙의 타겟은 있을 수 있는 전이 종속 항목의 수에 제한이 있습니다.
  • 이 규칙은 test=True가 설정된 것처럼 테스트 규칙으로 간주됩니다. 이 값은 test의 값보다 우선 적용됩니다.
  • 규칙 구현 함수가 작업을 등록하지 않을 수 있습니다. 대신 AnalysisTestResultInfo를 제공하여 통과/실패 결과를 등록해야 합니다.
build_setting BuildSetting 또는 None(기본값: None)
설정된 경우 이 규칙이 어떤 종류의 build setting인지 설명합니다. config 모듈을 참고하세요. 이 옵션을 설정하면 'build_setting_default'라는 필수 속성이 여기에 전달된 값에 상응하는 유형으로 이 규칙에 자동으로 추가됩니다.
cfg 기본값은 None
입니다. 설정하면 분석 전에 규칙이 자체 구성에 적용할 구성 전환을 가리킵니다.
exec_groups dict 또는 None(기본값: None)
실행 그룹 이름(문자열)과 exec_groups의 사전입니다. 이 속성을 설정하면 규칙이 단일 타겟 내의 여러 실행 플랫폼에서 작업을 실행할 수 있습니다. 자세한 내용은 실행 그룹 문서를 참고하세요.
initializer 기본값은 None
입니다. 실험용: 규칙의 속성을 초기화하는 Stalark 함수입니다.

이 함수는 규칙의 각 인스턴스 로드 시 호출됩니다. name 및 규칙에 의해 정의된 공개 속성 값으로 호출됩니다(일반 속성(예: tags)이 아님).

속성 이름에서 원하는 값으로의 사전을 반환해야 합니다. 반환되지 않는 속성은 영향을 받지 않습니다. None를 값으로 반환하면 속성 정의에 지정된 기본값이 사용됩니다.

이니셜라이저는 속성 정의에 지정된 기본값보다 먼저 평가됩니다. 따라서 이니셜라이저 서명에 있는 매개변수에 기본값이 포함된 경우 속성 정의의 기본값을 덮어씁니다 (None를 반환하는 경우 제외).

마찬가지로 이니셜라이저 서명에 있는 매개변수에 기본값이 없으면 매개변수가 필수가 됩니다. 이러한 경우 속성 정의에서 기본값/필수 설정을 생략하는 것이 좋습니다.

처리되지 않는 속성에는 **kwargs를 사용하는 것이 좋습니다.

확장된 규칙의 경우 모든 이니셜라이저가 하위 요소에서 상위 요소로 진행하면서 호출됩니다. 각 이니셜라이저에는 알고 있는 공개 속성만 전달됩니다.

parent 기본값은 None
실험용: 확장된 Stalark 규칙입니다. 설정하면 광고된 제공업체와 함께 공개 속성이 병합됩니다. 규칙은 상위의 executabletest와 일치합니다. fragments, toolchains, exec_compatible_with, exec_groups 값이 병합됩니다. 기존 또는 지원 중단된 매개변수는 설정할 수 없습니다. 상위 요소의 수신 구성 전환 cfg이 thisrule의 수신 구성 후에 적용됩니다.
extendable bool, 라벨, 문자열, None(기본값: None)
실험용: 이 규칙을 확장할 수 있는 규칙을 정의하는 허용 목록의 라벨입니다. 항상 확장을 허용/허용하지 않도록 True/False로 설정할 수도 있습니다. Bazel은 기본적으로 항상 확장 프로그램을 허용합니다.
subrules 하위 규칙시퀀스입니다. 기본값은 []입니다.
실험용: 이 규칙에서 사용하는 하위 규칙 목록입니다.

select

unknown select(x, no_match_error='')

select()는 규칙 속성을 구성 가능하게 만드는 도우미 함수입니다. 자세한 내용은 빌드 백과사전을 참고하세요.

매개변수

매개변수 설명
x dict; 필수
구성 조건을 값에 매핑하는 사전입니다. 각 키는 config_setting 또는 constraint_value 인스턴스를 식별하는 라벨 또는 라벨 문자열입니다. 문자열 대신 라벨을 사용해야 하는 경우는 매크로에 관한 문서를 참고하세요.
no_match_error string; 기본값은 ''입니다.
조건이 일치하지 않는 경우 보고할 선택적 맞춤 오류입니다.

subrule

Subrule subrule(implementation, attrs={}, toolchains=[], fragments=[], subrules=[])

하위 규칙의 새 인스턴스를 생성합니다. 이 함수의 결과를 사용하려면 먼저 전역 변수에 저장해야 합니다.

매개변수

매개변수 설명
implementation 함수; 필수
이 하위 규칙을 구현하는 Starlark 함수
attrs dict: 기본값은 {}입니다.
하위 규칙의 모든 (비공개) 속성을 선언하는 사전입니다.

하위 규칙에는 라벨 유형 (예: 라벨 또는 라벨 목록)의 비공개 속성만 있을 수 있습니다. 이러한 라벨에 해당하는 확인된 값은 Bazel에서 하위 규칙의 구현 함수에 이름이 지정된 인수로 자동 전달됩니다. 따라서 구현 함수는 속성 이름과 일치하는 이름이 지정된 매개변수를 허용해야 합니다. 이러한 값의 유형은 다음과 같습니다.

  • executable=True가 있는 라벨 속성의 경우 FilesToRunProvider
  • allow_single_file=True가 있는 라벨 속성의 경우 File
  • 다른 모든 라벨 속성의 경우 Target
  • 모든 라벨 목록 속성의 경우 [Target]
toolchains sequence: 기본값은 []입니다.
설정하면 이 하위 규칙에 필요한 도구 모음이 됩니다. 목록에는 String, Label, StarlarkToolchainTypeApi 객체가 어떤 조합으로든 포함될 수 있습니다. 도구 모음은 현재 플랫폼을 확인하여 찾고 ctx.toolchains를 통해 하위 규칙 구현에 제공됩니다. 이 매개변수가 설정된 경우 소비 규칙에서 AEG를 사용 설정해야 합니다. 아직 AEG로 이전하지 않은 경우 https://bazel.build/extending/auto-exec-groups#migration-aegs를 참고하세요.
fragments 문자열시퀀스입니다. 기본값은 []입니다.
하위 규칙이 타겟 구성에서 요구하는 구성 프래그먼트의 이름 목록입니다.
subrules 하위 규칙시퀀스입니다. 기본값은 []입니다.
이 하위 규칙에 필요한 다른 하위 규칙의 목록입니다.

tag_class

tag_class tag_class(attrs={}, *, doc=None)

모듈 확장 프로그램에서 사용할 수 있는 데이터 객체인 태그 클래스의 속성 스키마를 정의하는 새 tag_class 객체를 만듭니다.

매개변수

매개변수 설명
attrs dict; 기본값은 {}입니다.
이 태그 클래스의 모든 속성을 선언하는 사전입니다. 속성 이름에서 속성 객체로 매핑합니다 ( attr 모듈 참고).

선언된 속성은 rule(), aspect(), repository_rule()와 달리 None를 기본값으로 변환하지 않습니다. 기본값을 사용하려면 호출자가 속성을 완전히 생략해야 합니다.

doc string 또는 None; 기본값은 None입니다.
문서 생성 도구로 추출할 수 있는 태그 클래스의 설명입니다.

공개 상태

None visibility(value)

현재 초기화 중인 .bzl 모듈의 로드 공개 상태를 설정합니다.

모듈의 로드 공개 상태에 따라 다른 BUILD 및 .bzl 파일이 모듈을 로드할 수 있는지 여부가 결정됩니다. 이는 파일이 다른 타겟의 종속 항목으로 표시될 수 있는지를 지정하는 기본 .bzl 소스 파일의 타겟 공개 상태와는 다릅니다. 로드 공개 상태는 패키지 수준에서 작동합니다. 모듈을 로드하려면 로드를 실행하는 파일이 모듈에 공개 상태가 부여된 패키지에 있어야 합니다. 모듈은 공개 상태와 관계없이 항상 자체 패키지 내에 로드될 수 있습니다.

visibility()는 .bzl 파일당 한 번만 호출할 수 있으며 함수 내부가 아닌 최상위 수준에서만 호출할 수 있습니다. 이 호출은 load() 문과 인수를 결정하는 데 필요한 간단한 로직 바로 아래에 배치하는 것이 좋습니다.

플래그 --check_bzl_visibility가 false로 설정되면 로드 공개 상태 위반으로 인해 경고가 발생하지만 빌드가 실패하지는 않습니다.

매개변수

매개변수 설명
value 필수
패키지 사양 문자열 목록 또는 단일 패키지 사양 문자열입니다.

패키지 사양은 package_group와 동일한 형식을 따르지만, 음수 패키지 사양은 허용되지 않습니다. 즉, 사양은 다음과 같은 형식일 수 있습니다.

  • "//foo": 패키지 //foo
  • "//foo/...": //foo 패키지 및 모든 하위 패키지입니다.
  • "public" 또는 "private": 각각 모든 패키지 또는 패키지 없음

'@' 문법은 허용되지 않습니다. 모든 사양은 현재 모듈의 저장소를 기준으로 해석됩니다.

value가 문자열 목록인 경우 이 모듈에 공개 상태가 부여된 패키지 세트는 각 사양으로 표현된 패키지의 합집합입니다. 빈 목록은 private와 동일한 효과가 있습니다. value이 단일 문자열인 경우 싱글톤 목록 [value]인 것처럼 처리됩니다.

--incompatible_package_group_has_public_syntax--incompatible_fix_package_group_reporoot_syntax 플래그는 이 인수에 영향을 미치지 않습니다. "public""private" 값은 항상 사용할 수 있으며 "//..."는 항상 '현재 저장소의 모든 패키지'로 해석됩니다.