.bzl ファイル

問題を報告する ナイトリー · 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() を使用して作成された遷移と比較して、潜在的なスコープが制限されます。

この関数は、主に 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_ruleFooInfoBarInfoBazInfoQuxInfo のいずれかを提供する場合にのみ、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 デフォルトは []
implement 関数が返すプロバイダのリスト。

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

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

requires アスペクトシーケンス。デフォルトは []
。このアスペクトの前に伝播する必要があるアスペクトのリスト。
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 辞書、または 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 必須
構成フラグメントから取得する値の名前。

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 デフォルトは "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)

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

パラメータ

パラメータ 説明
implementation 必須
このモジュール拡張を実装する関数。1 つのパラメータ module_ctx を受け取る必要があります。この関数は、ビルドの開始時に 1 回呼び出され、使用可能なリポジトリのセットを決定します。
tag_classes デフォルトは {}
拡張機能で使用されるすべてのタグクラスを宣言するディクショナリ。タグクラスの名前から 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 文字列、または 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 パラメータが指定され、kwargsfields にリストされていないキーが含まれている場合、エラーが発生します。
  • それ以外の場合、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)

新しいリポジトリ ルールを作成します。WORKSPACE ファイルから読み込んで呼び出せるように、グローバル値に保存します。

パラメータ

パラメータ 説明
implementation 必須
このルールを実装する関数。パラメータは repository_ctx のみです。この関数は、ルールの各インスタンスの読み込みフェーズで呼び出されます。
attrs dict、または None。デフォルトは None
ルールのすべての属性を宣言する辞書。属性名から属性オブジェクトにマッピングします(attr モジュールを参照)。_ で始まる属性は非公開で、ラベルに対する暗黙的な依存関係をファイルに追加するために使用できます(リポジトリ ルールは生成されたアーティファクトに依存できません)。属性 name は暗黙的に追加されるため、指定する必要はありません。
local デフォルトは False
です。このルールはローカル システムからすべてを取得し、取得ごとに再評価する必要があることを示します。
environ 文字列シーケンス。デフォルトは []
非推奨。このパラメータのサポートは終了しました。代わりに repository_ctx.getenv に移行します。
このリポジトリ ルールが依存する環境変数のリストを提供します。このリスト内の環境変数が変更されると、リポジトリが再取得されます。
configure デフォルトは False
リポジトリが構成目的でシステムを検査することを示します
remotable デフォルトは False
試験運用版)です。このパラメータは試験運用版であり、随時変更される可能性があります。これに依存しないでください。---experimental_repo_remote_exec
Compatible with remote execution を設定することで、試験運用版として有効にできます。
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=[], 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 辞書None関数。デフォルトは 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_groups の辞書。設定すると、ルールで 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 文字列、または 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" の値は常に使用できます。"//..." は常に「現在のリポジトリ内のすべてのパッケージ」として解釈されます。