.bzl ファイル

7.3 · 7.2 · 7.1 · 7.0 · 6.5

すべての .bzl ファイルで使用できるグローバル メソッド。

メンバー

analysis_test_transition

transition analysis_test_transition(settings)

分析テストルールの依存関係に適用される構成遷移を作成します。この移行は、analysis_test = True を含むルールの属性にのみ適用できます。このようなルールは機能に制限があるため(たとえば、依存関係ツリーのサイズが制限されているなど)、この関数を使用して作成された遷移は、transition() を使用して作成された遷移と比べて潜在的なスコープが制限されます。

この関数は主に、Analysis Test Framework のコアライブラリを円滑化するために設計されています。ベスト プラクティスについては、ドキュメント(またはその実装)をご覧ください。

パラメータ

パラメータ 説明
settings 必須
この構成遷移で設定する必要がある構成設定に関する情報を含む辞書。キーはビルド設定のラベルで、値は移行後の新しい値です。その他の設定はすべて変更されていません。これを使用して、分析テストに合格するために設定する必要がある特定の構成設定を宣言します。

アスペクト

Aspect aspect(implementation, attr_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(ターゲットが作成されたルール コンテキスト)の 2 つのパラメータのみを持ちます。ターゲットの属性は ctx.rule フィールドで使用できます。この関数は、ターゲットにアスペクトを適用するたびに、分析フェーズで評価されます。
attr_aspects 文字列シーケンス。デフォルトは []
です。属性名のリスト。アスペクトは、これらの名前を持つターゲットの属性で指定された依存関係に沿って伝播されます。一般的な値には depsexports があります。リストに 1 つの文字列 "*" を含めて、ターゲットのすべての依存関係に伝播することもできます。
attrs dict; デフォルトは {} です
アスペクトのすべての属性を宣言する辞書。属性名から属性オブジェクト(attr.label や attr.string など)にマッピングします(attr モジュールをご覧ください)。アスペクト属性は、実装関数で ctx パラメータのフィールドとして使用できます。

_ で始まる暗黙的属性には、デフォルト値と label または label_list の型が必要です。

明示的な属性は、string 型にする必要があります。また、values 制限を使用する必要があります。明示的な属性では、制限に従って、同じ名前、タイプ、有効な値の属性を持つルールでのみアスペクトが使用されるように制限されます。

required_providers デフォルトは [] です。
この属性を使用すると、アスペクトは必要なプロバイダをアドバタイズするルールを持つターゲットのみに伝播を制限できます。値は、個々のプロバイダまたはプロバイダのリストを含むリストにする必要があります。両方を含むリストは使用できません。たとえば、[[FooInfo], [BarInfo], [BazInfo, QuxInfo]] は有効な値ですが、[FooInfo, BarInfo, [BazInfo, QuxInfo]] は無効になります。

プロバイダのネスト解除されたリストは、1 つのプロバイダのリストを含むリストに自動的に変換されます。つまり、[FooInfo, BarInfo] は自動的に [[FooInfo, BarInfo]] に変換されます。

ルール(some_rule など)のターゲットをアスペクトに表示するには、some_rule が、必須のベンダーリストの少なくとも 1 つからすべてのベンダーを宣伝する必要があります。たとえば、アスペクトの required_providers[[FooInfo], [BarInfo], [BazInfo, QuxInfo]] の場合、some_ruleFooInfoまたは BarInfoまたは BazInfo QuxInfo の両方を提供する場合にのみ、このアスペクトは some_rule ターゲットを確認できます。

required_aspect_providers デフォルトは []
です。この属性により、このアスペクトは他のアスペクトを検査できます。値は、個別のプロバイダまたはプロバイダのリストのいずれかを含むリストにする必要があります。両方を含めることはできません。たとえば、[[FooInfo], [BarInfo], [BazInfo, QuxInfo]] は有効な値ですが、[FooInfo, BarInfo, [BazInfo, QuxInfo]] は無効になります。

プロバイダのネスト解除されたリストは、1 つのプロバイダのリストを含むリストに自動的に変換されます。つまり、[FooInfo, BarInfo] は自動的に [[FooInfo, BarInfo]] に変換されます。

別のアスペクト(other_aspect など)をこのアスペクトに公開するには、other_aspect で少なくとも 1 つのリストのすべてのプロバイダを指定する必要があります。[[FooInfo], [BarInfo], [BazInfo, QuxInfo]] の例では、other_aspectFooInfoまたは BarInfoまたは BazInfo QuxInfo の両方を提供する場合にのみ、このアスペクトは other_aspect を確認できます。

provides デフォルトは [] です。
実装関数が返すプロバイダのリスト。

実装関数で、以下のいずれかのタイプのプロバイダが戻り値から除外されている場合、エラーになります。ただし、実装関数はここに記載されていない追加のプロバイダを返す場合があります。

リストの各要素は、provider() によって返される *Info オブジェクトです。ただし、従来のプロバイダは文字列名で表されます。ルールのターゲットが、必須のプロバイダを宣言するターゲットの依存関係として使用される場合、ここでそのプロバイダを指定する必要はありません。実装関数が返すだけで十分です。必須ではありませんが、指定することをおすすめします。ただし、アスペクトの required_providers フィールドでは、プロバイダをここで指定する必要があります。

requires Aspectシーケンス。デフォルトは []
このアスペクトの前に伝播する必要があるアスペクトのリスト。
fragments 文字列シーケンス。デフォルトは []
。ターゲット構成でアスペクトに必要な構成フラグメントの名前のリスト。
host_fragments 文字列シーケンス。デフォルトは []
アスペクトがホスト構成で必要とする構成フラグメントの名前のリスト。
toolchains sequence: デフォルトは []
。設定されている場合、このルールに必要なツールチェーンのセット。このリストには、String、Label、StarlarkToolchainTypeApi などのオブジェクトを自由に組み合わせて含めることができます。現在のプラットフォームを確認すると、ツールチェーンが見つかり、ctx.toolchain によってルールの実装に提供されます。
incompatible_use_toolchain_transition デフォルトは False
非推奨。使用されなくなったため、削除する必要があります。
doc 文字列、または None。デフォルトは None
ドキュメント生成ツールによって抽出できるアスペクトの説明。
apply_to_generating_rules デフォルトは False です。
true の場合、アスペクトは出力ファイルに適用されると、代わりに出力ファイルの生成ルールに適用されます。

たとえば、アスペクトが属性「deps」を介して伝播し、ターゲット「alpha」に適用されているとします。alpha に「deps = [':beta_output']」があるとします。ここで、beta_output はターゲット beta の宣言された出力です。beta にターゲット「charlie」が「deps」の 1 つとしてあるとします。アスペクトの「apply_to_generating_rules=True」の場合、アスペクトは「alpha」、「beta」、「charlie」を介して伝播します。False の場合、アスペクトは「alpha」にのみ伝播します。

デフォルトは false です。

exec_compatible_with 文字列シーケンス。デフォルトは []
。このアスペクトのすべてのインスタンスに適用される実行プラットフォームの制約のリスト。
exec_groups dict または None。デフォルトは None です。
実行グループ名(文字列)の exec_groups へのディクショナリ。設定すると、アスペクトが 1 つのインスタンス内の複数の実行プラットフォームでアクションを実行できるようになります。詳細については、実行グループに関するドキュメントをご覧ください。
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 必須
遅延バインディング値を含む構成フラグメントの名前。
name required
構成フラグメントから取得する値の名前。

depset

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

depset を作成します。direct パラメータは depset の直接要素のリストで、transitive パラメータは、要素が作成された depset の間接要素になる depset のリストです。depset がリストに変換されるときに返される要素の順序は、order パラメータで指定します。詳細については、Depsets の概要をご覧ください。

依存関係のすべての要素(直接的および間接的)は、式 type(x) で取得される型と同じ型でなければなりません。

ハッシュベースのセットは反復処理中の重複を排除するために使用されるので、depset のすべての要素はハッシュ可能である必要があります。ただし、現在のところ、この不変条件は、すべてのコンストラクタで一貫してチェックされるわけではありません。--incompatible_always_check_depset_elements フラグを使用して、一貫したチェックを有効にします。これは今後のリリースのデフォルトの動作になります。問題 10313 をご覧ください。

また、要素は現在不変である必要がありますが、この制限は今後緩和される予定です。

作成されるデプセットの順序は、transitive デプセットの順序と互換性がある必要があります。"default" の注文は他の注文と互換性があります。他のすべての注文は自分とのみ互換性があります。

パラメータ

パラメータ 説明
direct シーケンス、または None。デフォルトは None
depset の直接要素のリスト。
order デフォルトは "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 文字列シーケンス。デフォルトは []
実行プラットフォームに対する制約のリスト。

module_extension

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

新しいモジュール拡張機能を作成します。グローバル値に保存して、use_extension を使用して MODULE.bazel ファイルでエクスポートして使用できるようにします。

パラメータ

パラメータ 説明
implementation required
このモジュール拡張機能を実装する関数。1 つのパラメータ module_ctx を受け取る必要があります。この関数は、ビルドの開始時に 1 回呼び出され、使用可能なリポジトリのセットを決定します。
tag_classes デフォルトは {} です。
拡張機能で使用されるすべてのタグクラスを宣言するための辞書。タグクラスの名前から tag_class オブジェクトにマッピングされます。
doc string: 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 文字列、または None。デフォルトは None
ドキュメント生成ツールで抽出できるプロバイダの説明。
fields stringシーケンスdict、または None。デフォルトは None です。
指定すると、許可されるフィールドのセットが制限されます。
有効な値は次のとおりです。
  • フィールドのリスト:
    provider(fields = ['a', 'b'])

  • 辞書フィールド名 -> ドキュメント:
    provider(
           fields = { 'a' : 'Documentation for a', 'b' : 'Documentation for b' })
すべてのフィールドは省略可能です。
init 呼び出し可能オブジェクト、または None。デフォルトは None
インスタンス化時にプロバイダのフィールド値を前処理して検証するためのオプションのコールバック。init が指定された場合、provider() は通常のプロバイダ シンボルと未加工のコンストラクタの 2 つの要素のタプルを返します。

以下に正確な説明を示します。直感的な説明とユースケースについては、ルール(プロバイダのカスタム初期化)をご覧ください。

P を、provider() を呼び出して作成したプロバイダ シンボルにします。概念的には、P のインスタンスはデフォルトのコンストラクタ関数 c(*args, **kwargs) を呼び出して生成されます。この関数は次の処理を行います。

  • args が空でない場合、エラーが発生します。
  • provider() の呼び出し時に fields パラメータが指定されていて、fields にリストされていないキーが kwargs に含まれていると、エラーが発生します。
  • それ以外の場合、c は、kwargsk: 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. c(**d) のように、d のエントリをキーワード引数としてデフォルト コンストラクタを呼び出す場合と同様に、P の新しいインスタンスが生成されます。

注: 上記の手順は、*args または **kwargsinit のシグネチャと一致しない場合、または init の本文の評価が失敗した場合(意図的に fail() の呼び出しを介して)である場合、あるいは init の戻り値が、想定されたスキーマを持つ辞書でない場合にエラーが発生することを意味します。

このように、init コールバックは、位置引数と任意のロジックを事前処理と検証に使用できるようにすることで、通常のプロバイダの作成を一般化します。許可された fields のリストへの迂回を許可しません

init を指定すると、provider() の戻り値はタプル (P, r) になります。ここで、r未加工のコンストラクタです。実際、r の動作は、前述のデフォルト コンストラクタ関数 c の動作とまったく同じです。通常、r は名前の先頭にアンダースコアが付いた変数にバインドされるため、現在の .bzl ファイルのみが直接アクセスできます。

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 required
このルールを実装する関数。単一のパラメータ repository_ctx を指定する必要があります。この関数は、ルールのインスタンスごとに、読み込みフェーズで呼び出されます。
attrs dict、または None。デフォルトは None
ルールのすべての属性を宣言する辞書。属性名から属性オブジェクトにマッピングされます(attr モジュールを参照)。_ で始まる属性は非公開で、ラベルに対する暗黙的な依存関係をファイルに追加するために使用できます(リポジトリ ルールは生成されたアーティファクトに依存できません)。属性 name は暗黙的に追加されるため、指定しないでください。
local デフォルトは False
です。このルールはローカル システムからすべてを取得し、取得ごとに再評価する必要があることを示します。
environ 文字列シーケンス。デフォルトは []
非推奨。このパラメータのサポートは終了しました。代わりに repository_ctx.getenv に移行します。
このリポジトリ ルールが依存する環境変数のリストを提供します。このリスト内の環境変数が変更されると、リポジトリが再取得されます。
configure デフォルトは False です。
リポジトリが構成のためにシステムを検査することを示します。
remotable デフォルトは False です。
試験運用版。このパラメータは試験運用版であり、随時変更される可能性があります。これに依存しないでください。---experimental_repo_remote_exec を設定することで、試験運用版として有効にできます。
リモート実行との互換性あり
doc string: 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=[], 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 というパラメータが 1 つだけ必要です。この関数は、ルールの各インスタンスの分析フェーズで呼び出されます。ユーザーが指定した属性にアクセスできます。宣言されたすべての出力を生成するアクションを作成する必要があります。
test bool: デフォルトは unbound
このルールがテストルールであるかどうか、つまり blaze test コマンドのサブジェクトである可能性があるかどうか。すべてのテストルールは自動的に実行可能と見なされます。テストルールに executable = True を明示的に設定する必要はありません(設定しないことをおすすめします)。値はデフォルトで False に設定されます。詳細については、ルール ページをご覧ください。
attrs dict; デフォルトは {} です。
ルールのすべての属性を宣言する辞書です。属性名から属性オブジェクトにマッピングします(attr モジュールを参照)。_ で始まる属性は非公開であり、ラベルへの暗黙的な依存関係の追加に使用できます。属性 name は暗黙的に追加されるため、指定する必要はありません。属性 visibilitydeprecationtagstestonlyfeatures は暗黙的に追加され、オーバーライドできません。ほとんどのルールでは、必要な属性はほんの一握りです。メモリ使用量を制限するため、ルール関数は attrs のサイズに上限を設定します。
outputs dictNone、または function。デフォルトは None
非推奨。このパラメータは非推奨となり、まもなく削除されます。これに依存しないでください。---incompatible_no_rule_outputs_param では無効になっています。このフラグを使用すると、コードがまもなく削除される機能と互換性があることを確認できます。
このパラメータは非推奨になりました。代わりに OutputGroupInfo または attr.output を使用するようにルールを移行します。

事前に宣言された出力を定義するスキーマoutput 属性や output_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 など)はすべて、1 つの要素のみを持つ必要があります。このユーザーのコンバージョンは、リスト以外のバージョン(attr.label)と同じです。
  • 他の属性タイプはプレースホルダに表示されない場合があります。
  • 属性以外の特別なプレースホルダ %{dirname}%{basename} は、ルールのラベルの一部(パッケージを除く)に展開されます。たとえば、"//pkg:a/b.c" では、dirname は a、basename は b.c です。

実際には、最も一般的な置換プレースホルダは "%{name}" です。たとえば、foo という名前のターゲットの場合、出力ディクショナリ {"bin": "%{name}.exe"} は、実装関数で ctx.outputs.bin としてアクセスできる foo.exe という名前の出力を事前宣言します。

executable bool: デフォルトは unbound
このルールが実行可能とみなされるかどうか、つまり blaze run コマンドのサブジェクトである可能性があるかどうか。デフォルトは False です。詳細については、ルール ページをご覧ください。
output_to_genfiles デフォルトは 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 デフォルトは False です。
非推奨。使用されなくなったため、削除する必要があります。
doc 文字列、または None。デフォルトは None です。
ドキュメント生成ツールによって抽出できるルールの説明。
provides デフォルトは []
implement 関数が返すプロバイダのリスト。

実装関数で、以下のいずれかのタイプのプロバイダが戻り値から除外されている場合、エラーになります。ただし、実装関数はここに記載されていない追加のプロバイダを返す場合があります。

リストの各要素は、provider() によって返される *Info オブジェクトです。ただし、従来のプロバイダは文字列名で表されます。ルールのターゲットが、必須のプロバイダを宣言するターゲットの依存関係として使用される場合、ここでそのプロバイダを指定する必要はありません。実装関数が返すだけで十分です。ただし、必須ではないものの、指定することをおすすめします。ただし、アスペクトrequired_providers フィールドでは、プロバイダをここで指定する必要があります。

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 辞書、または None。デフォルトは None
。実行グループ名(文字列)と exec_group の辞書。設定すると、ルールによって 1 つのターゲット内の複数の実行プラットフォームでアクションを実行できます。詳細については、実行グループのドキュメントをご覧ください。
initializer デフォルトは None
です。試験運用版: ルールの属性を初期化する Stalark 関数。

この関数は、ルールのインスタンスごとに、読み込み時に呼び出されます。name と、ルールで定義された公開属性の値(tags などの汎用属性ではなく)を使用して呼び出されます。

属性名から目的の値へのディクショナリを返す必要があります。返されない属性は影響を受けません。値として None を返すと、属性定義で指定されたデフォルト値が使用されます。

イニシャライザは、属性定義で指定されたデフォルト値の前に評価されます。そのため、イニシャライザのシグネチャのパラメータにデフォルト値が含まれている場合、属性定義のデフォルト値が上書きされます(None を返す場合を除く)。

同様に、イニシャライザの署名のパラメータにデフォルト値がない場合、そのパラメータは必須になります。このような場合は、属性定義のデフォルト設定または必須設定を省略することをおすすめします。

処理されない属性には **kwargs を使用することをおすすめします。

拡張ルールの場合、すべてのイニシャライザは、子から祖先に向かって呼び出されます。各イニシャライザには、そのイニシャライザが認識している公開属性のみが渡されます。

parent デフォルトは None
です。試験運用版: 拡張された Stalark ルール。設定すると、パブリック属性はアドバタイズされたプロバイダだけでなく、統合されます。ルールは、親の executabletest を照合します。fragmentstoolchainsexec_compatible_withexec_groups の値は統合されます。以前のパラメータまたは非推奨のパラメータは設定できません。親の受信構成遷移 cfg は、thisrule の受信構成の後に適用されます。
extendable boolLabelstringNone(デフォルトは None
(試験運用版): このルールを拡張できるルールを定義する許可リストのラベル。True または False に設定して、常に拡張を許可または禁止することもできます。Bazel では、デフォルトで拡張機能を常に許可しています。
subrules サブルールシーケンス。デフォルトは []
試験運用版: このルールで使用されるサブルールのリスト。

選択

unknown select(x, no_match_error='')

select() は、ルール属性を構成可能にするヘルパー関数です。詳しくは、百科事典を作成をご覧ください。

パラメータ

パラメータ 説明
x required
構成条件を値にマッピングする辞書。各キーは、config_setting インスタンスまたは constraint_value インスタンスを識別するラベルまたはラベル文字列です。文字列の代わりにラベルを使用するタイミングについては、マクロに関するドキュメントをご覧ください。
no_match_error デフォルトは '' です。
条件が一致しない場合に報告するオプションのカスタムエラーです。

サブルール

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

サブルールの新しいインスタンスを構築します。この関数の結果は、使用する前にグローバル変数に格納する必要があります。

パラメータ

パラメータ 説明
implementation 関数。必須
このサブルールを実装する Starlark 関数
attrs dict: デフォルトは {} です
サブルールのすべての(プライベートの)属性を宣言するための辞書。

サブルールは、ラベル型(ラベルまたはラベルリスト)の非公開属性のみを持つことができます。これらのラベルに対応する解決された値は、Bazel によって自動的にサブルールの実装関数に名前付き引数として渡されます(そのため、実装関数は属性名に一致する名前付きパラメータを受け入れる必要があります)。これらの値の型は次のとおりです。

  • FilesToRunProvider: executable=True のラベル属性の場合
  • File: allow_single_file=True のラベル属性の場合
  • Target(その他のラベル属性の場合)
  • [Target](すべてのラベルリスト属性に対して)
toolchains sequence: デフォルトは []
。設定されている場合、このサブルールに必要なツールチェーンのセット。このリストには、String、Label、StarlarkToolchainTypeApi オブジェクトを任意の組み合わせで含めることができます。ツールチェーンは現在のプラットフォームをチェックすることで検出され、ctx.toolchains を介してサブルールの実装に提供されます。
fragments 文字列シーケンス。デフォルトは []
サブルールがターゲット構成で必要とする構成フラグメントの名前のリスト。
subrules サブルールシーケンス。デフォルトは []
。このサブルールに必要な他のサブルールのリスト。

tag_class

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

新しい tag_class オブジェクトを作成します。このタグは、タグのクラスの属性スキーマ(モジュール拡張機能で使用できるデータ オブジェクト)を定義します。

パラメータ

パラメータ 説明
attrs デフォルトは {} です。
このタグクラスのすべての属性を宣言するための辞書。属性名から属性オブジェクトにマッピングします(attr モジュールを参照)。
doc string: None: デフォルトは None
ドキュメント生成ツールで抽出できるタグクラスの説明。

visibility

None visibility(value)

現在初期化されている .bzl モジュールの読み込み公開設定を設定します。

モジュールの読み込み公開設定は、他の BUILD ファイルと .bzl ファイルがそのモジュールを読み込むことができるかどうかを制御します。(これは、ファイルが他のターゲットの依存関係として表示されることを制御する、基盤となる .bzl ソースファイルのターゲット ビジュアリビティとは異なります)。読み込みの公開設定はパッケージ単位で機能します。モジュールを読み込むには、読み込みを行うファイルが、そのモジュールの公開設定が付与されているパッケージに存在している必要があります。モジュールは、可視性に関わらず、常に独自のパッケージ内で読み込むことができます。

visibility() は、.bzl ファイルごとに 1 回だけ呼び出すことができ、関数内ではなく最上位レベルでのみ呼び出せます。推奨されるスタイルは、この呼び出しを 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" の値は常に使用でき、"//..." は常に「現在のリポジトリ内のすべてのパッケージ」として解釈されます。