.bzl ファイル

問題を報告 Nightly · 8.3 · 8.2 · 8.1 · 8.0 · 7.6

すべての .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 などがあります。リストには、ターゲットのすべての依存関係に沿って伝播する単一の文字列 "*" を含めることもできます。
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または BazInfoQuxInfo の両方を提供する場合にのみ、このアスペクトは 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または BazInfoQuxInfo の両方を提供する場合にのみ、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 string、または None。デフォルトは None
ドキュメント生成ツールで抽出できるアスペクトの説明。
apply_to_generating_rules デフォルトは False
です。true の場合、アスペクトは出力ファイルに適用されるときに、出力ファイルの生成ルールに適用されます。

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

デフォルトは False です。

exec_compatible_with 文字列シーケンス。デフォルトは []
です。 このアスペクトのすべてのインスタンスに適用される実行プラットフォームの制約のリスト。
exec_groups dict、または None。デフォルトは None
です。 実行グループ名(文字列)と exec_groups のディクショナリ。設定されている場合、アスペクトは単一インスタンス内の複数の実行プラットフォームでアクションを実行できます。詳細については、実行グループのドキュメントをご覧ください。
subrules Subruleシーケンス。デフォルトは []
です。 試験運用版: このアスペクトで使用されるサブルールのリスト。

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 のリストです。depsset がリストに変換されるときに要素が返される順序は、order パラメータで指定します。詳しくは、Depset の概要をご覧ください。

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

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

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

作成された depset の順序は、その transitive depset の順序と互換性がある必要があります。"default" 順序は他のすべての順序と互換性がありますが、他のすべての順序はそれ自体とのみ互換性があります。

パラメータ

パラメータ 説明
direct sequence、または None。デフォルトは None
です。 deps の直接要素のリスト。
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 stringシーケンス。デフォルトは []
です。 実行プラットフォームの制約のリスト。

module_extension

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

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

パラメータ

パラメータ 説明
implementation 必須
このモジュール拡張機能を実装する関数。module_ctx という 1 つのパラメータを取る必要があります。この関数は、ビルドの開始時に 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 呼び出し可能値と raw コンストラクタ呼び出し可能値)を返します。詳しくは、 ルール(カスタム プロバイダのカスタム初期化)と、下記の init パラメータの説明をご覧ください。

パラメータ

パラメータ 説明
doc 文字列、または None。デフォルトは None
です。 ドキュメント生成ツールで抽出できるプロバイダの説明。
fields stringsequence、または dict、または None。デフォルトは None
です。指定すると、許可されるフィールドのセットが制限されます。
指定できる値は次のとおりです。
  • フィールドのリスト:
    provider(fields = ['a', 'b'])

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

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

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

  • args が空でない場合は、エラーが発生します。
  • provider() の呼び出し時に fields パラメータが指定され、kwargsfields にリストされていないキーが含まれている場合は、エラーが発生します。
  • それ以外の場合、c は、kwargs の各 k: v エントリに対して、値 v を持つ k という名前のフィールドを持つ新しいインスタンスを返します。
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 の新しいインスタンスは、d のエントリをキーワード引数としてデフォルトのコンストラクタを呼び出すかのように生成されます(c(**d) を参照)。

注: 上記の手順は、*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
リモート実行と互換性ありに設定することで、試験運用として有効にできます。
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 dictNonefunction のいずれか。デフォルトは None
です。 非推奨。このパラメータは非推奨となり、まもなく削除されます。これに依存しないでください。---incompatible_no_rule_outputs_param無効になっています。このフラグを使用して、コードが削除予定の API と互換性があることを確認します。
このパラメータは非推奨になりました。代わりに 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 デフォルトは []
です。 実装関数が返す必要があるプロバイダのリスト。

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

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

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

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

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

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

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

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

parent デフォルトは None
です。 試験運用版: 拡張される Stalark ルール。設定すると、公開属性とアドバタイズされたプロバイダも統合されます。ルールは親の executabletest に一致します。fragmentstoolchainsexec_compatible_withexec_groups の値が統合されます。以前のパラメータや非推奨のパラメータは設定できない場合があります。このルールの受信構成の後に、親の受信構成の移行 cfg が適用されます。
extendable boolラベル文字列None。デフォルトは None
です。 試験運用版: このルールを拡張できるルールを定義する許可リストのラベル。また、常に延長を許可/拒否するために True/False に設定することもできます。Bazel はデフォルトで拡張機能を常に許可します。
subrules Subruleシーケンス。デフォルトは []
です。 試験運用版: このルールで使用されるサブルールのリスト。

選択

unknown select(x, no_match_error='')

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

パラメータ

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

subrule

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

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

パラメータ

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

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

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

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" の値は常に使用可能で、"//..." は常に「現在のリポジトリ内のすべてのパッケージ」として解釈されます。