.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 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(ターゲットが作成されたルール コンテキスト)の 2 つのパラメータのみを持ちます。ターゲットの属性は ctx.rule フィールドで使用できます。この関数は、ターゲットへのアスペクトの適用ごとに分析フェーズで評価されます。
attr_aspects 文字列シーケンス。デフォルトは []
です。属性名のリスト。アスペクトは、これらの名前を持つターゲットの属性で指定された依存関係に沿って伝播されます。一般的な値には depsexports があります。リストに 1 つの文字列 "*" を含めて、ターゲットのすべての依存関係に伝播することもできます。
toolchains_aspects sequence: デフォルトは []
です。ツールチェーン タイプのリスト。アスペクトは、これらのツールチェーン タイプに一致するターゲット ツールチェーンに伝播されます。
attrs dict: デフォルトは {}
。アスペクトのすべての属性を宣言するディクショナリ。属性名から属性オブジェクト(attr.labelattr.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 が、必須のベンダーリストの少なくとも 1 つからすべてのベンダーを宣伝する必要があります。たとえば、アスペクトの required_providers[[FooInfo], [BarInfo], [BazInfo, QuxInfo]] の場合、このアスペクトは、some_ruleFooInfoBarInfoBazInfoQuxInfo のいずれかを提供する場合にのみ、some_rule ターゲットを参照できます。

required_aspect_providers sequence: デフォルトは []
です。この属性により、このアスペクトは他のアスペクトを検査できます。値は、個々のプロバイダまたはプロバイダのリストを含むリストにする必要があります。両方を含むリストは使用できません。たとえば、[[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 アスペクトシーケンス。デフォルトは []
。このアスペクトの前に伝播する必要があるアスペクトのリスト。
fragments 文字列シーケンス。デフォルトは []
。ターゲット構成でアスペクトに必要な構成フラグメントの名前のリスト。
host_fragments 文字列シーケンス。デフォルトは []
。ホスト構成でアスペクトに必要な構成フラグメントの名前のリスト。
toolchains sequence: デフォルトは []
。設定されている場合、このアスペクトに必要なツールチェーンのセット。このリストには、String、Label、StarlarkToolchainTypeApi オブジェクトを任意の組み合わせで含めることができます。ツールチェーンは現在のプラットフォームをチェックすることで検出され、ctx.toolchain を介してアスペクト実装に提供されます。
incompatible_use_toolchain_transition bool; デフォルトは False
非推奨。使用されなくなったため削除する必要があります。
doc 文字列、または None。デフォルトは None
ドキュメント生成ツールによって抽出できるアスペクトの説明。
apply_to_generating_rules bool; デフォルトは 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 string; 必須
レイト バウンド値を含む構成フラグメントの名前。
name string; 必須
構成フラグメントから取得する値の名前。

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 文字列シーケンス。デフォルトは []
。実行プラットフォームの制約のリスト。

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 を渡します。

次の API は、マクロ実装関数内と、その関数が呼び出す Starlark 関数内では使用できません。

attrs dict: デフォルトは {}
。このマクロがサポートする属性の辞書。rule.attrs に似ています。キーは属性名で、値は attr.label_list(...) などの属性オブジェクト(attr モジュールを参照)または None です。None エントリは、マクロにその名前の属性がないことを示します(inherit_attrs を介して継承する場合でも、以下を参照)。

特別な name 属性は事前宣言されているため、辞書に含めることはできません。visibility 属性名は予約済みであり、辞書に含めることはできません。

名前が _ で始まる属性は非公開です。ルールの呼び出しサイトで渡すことはできません。このような属性には、(attr.label(default="//pkg:foo") のように)デフォルト値を割り当てて、ラベルに対する暗黙的な依存関係を作成できます。

メモリ使用量を制限するため、宣言できる属性の数には上限があります。

inherit_attrs ルールマクロ文字列、または None。デフォルトは None です。
試験運用版。このパラメータは試験運用版であり、随時変更される可能性があります。これに依存しないでください。--experimental_enable_macro_inherit_attrs を設定することで、試験運用版として有効にできます。
マクロが属性を継承するルールシンボル、マクロシンボル、または組み込みの共通属性リストの名前(後述)です。

inherit_attrs が文字列 "common" に設定されている場合、マクロはすべての Starlark ルールで使用される共通のルール属性定義を継承します。

rule() または macro() の戻り値が .bzl ファイルのグローバル変数に割り当てられていない場合、そのような値はルールまたはマクロ記号として登録されていないため、inherit_attrs に使用できません。

継承メカニズムは次のように機能します。

  1. 特別な name 属性と visibility 属性は決して継承されません。
  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 bool; デフォルトは False
このマクロがルール ファイナライザであるかどうか。BUILD ファイル内の位置に関係なく、ファイナライザ以外のすべてのターゲットが定義された後、パッケージの読み込みの最後に評価されるマクロです。

通常のシンボリック マクロとは異なり、ルール ファイナライザは native.existing_rule()native.existing_rules() を呼び出して、現在のパッケージで定義されているファイナライザ以外のルール ターゲットのセットをクエリする場合があります。native.existing_rule()native.existing_rules() は、このファイナライザを含むルール ファイナライザによって定義されたターゲットにアクセスできません。

doc 文字列、または 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; 必須
このモジュール拡張を実装する関数。1 つのパラメータ module_ctx を受け取る必要があります。この関数は、ビルドの開始時に 1 回呼び出され、使用可能なリポジトリのセットを決定します。
tag_classes dict(デフォルトは {}
): 拡張機能で使用されるすべてのタグクラスを宣言するディクショナリ。タグクラスの名前から tag_class オブジェクトにマッピングします。
doc 文字列、または None。デフォルトは None
ドキュメント生成ツールによって抽出できるモジュール拡張の説明。
environ 文字列シーケンス。デフォルトは []
。このモジュール拡張機能が依存する環境変数のリストを指定します。このリスト内の環境変数が変更されると、拡張機能が再評価されます。
os_dependent bool; デフォルトは False
この拡張機能が OS に依存するかどうかを示します
arch_dependent bool; デフォルトは 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)

新しいリポジトリ ルールを作成します。グローバル値に格納して、module_extension() 実装関数から読み込んで呼び出したり、use_repo_rule() で使用できるようにします。

パラメータ

パラメータ 説明
implementation callable(呼び出し可能): 必須
このルールを実装する関数。パラメータは repository_ctx のみです。この関数は、ルールの各インスタンスの読み込みフェーズで呼び出されます。
attrs dict、または None。デフォルトは None
リポジトリ ルールのすべての属性を宣言する辞書。属性名から属性オブジェクトにマッピングします(attr モジュールを参照)。_ で始まる属性は非公開で、ラベルに対する暗黙的な依存関係をファイルに追加するために使用できます(リポジトリ ルールは生成されたアーティファクトに依存できません)。属性 name は暗黙的に追加されるため、指定する必要はありません。

宣言された属性は、None をデフォルト値に変換します。

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

宣言された属性は、None をデフォルト値に変換します。

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 bool; デフォルトは False
true の場合、ファイルは bin ディレクトリではなく genfiles ディレクトリに生成されます。既存のルールとの互換性のために必要な場合(C++ のヘッダー ファイルを生成する場合など)を除き、このフラグを設定しないでください。
fragments 文字列シーケンス。デフォルトは []
。ターゲット構成でルールに必要な構成フラグメントの名前のリスト。
host_fragments 文字列シーケンス。デフォルトは []
。ホスト構成でルールに必要な構成フラグメントの名前のリスト。
_skylark_testable bool。デフォルトは False
(試験運用版)

true の場合、このルールは、Actions プロバイダを介して、このルールに依存するルールによる検査のためにアクションを公開します。プロバイダは、ctx.created_actions() を呼び出すことで、ルール自体でも使用できます。

これは、Starlark ルールの分析時の動作をテストする場合にのみ使用してください。このフラグは今後削除される可能性があります。
toolchains sequence: デフォルトは []
。設定されている場合、このルールに必要なツールチェーンのセット。このリストには、String、Label、StarlarkToolchainTypeApi オブジェクトを任意の組み合わせで含めることができます。ツールチェーンは現在のプラットフォームをチェックすることで検出され、ctx.toolchain を介してルール実装に提供されます。
incompatible_use_toolchain_transition bool; デフォルトは False
非推奨。使用されなくなったため削除する必要があります。
doc 文字列、または None。デフォルトは None です。
ドキュメント生成ツールによって抽出できるルールの説明。
provides シーケンス。デフォルトは []
。実装関数が返す必要があるプロバイダのリスト。

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

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

dependency_resolution_rule bool。デフォルトは False
。設定すると、マテリアルライザで使用可能とマークされている属性を介して、ルールが依存関係になることができます。このフラグが設定されているルールのすべての属性は、マテリアルライザでも使用可能としてマークする必要があります。これは、マークされたルールが、マークされていないルールに依存できないようにするためです。
exec_compatible_with 文字列シーケンス。デフォルトは []
。このルールタイプのすべてのターゲットに適用される実行プラットフォームの制約のリスト。
analysis_test bool。デフォルトは 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 dict; 必須
構成条件を値にマッピングする辞書。各キーは、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 を介してサブルールの実装に提供されます。このパラメータを設定する場合は、使用ルールで 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 文字列、または 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" の値は常に使用できます。"//..." は常に「現在のリポジトリ内のすべてのパッケージ」として解釈されます。