一般ルール

問題を報告 ソースを表示

ルール

エイリアス

ルールのソースを表示
alias(name, actual, compatible_with, deprecation, features, restricted_to, tags, target_compatible_with, testonly, visibility)

alias ルールは、ルールの別名を作成します。

エイリアス設定は「標準」のターゲットに対してのみ機能します。特に、package_grouptest_suite にエイリアスを設定することはできません。

エイリアスの設定は、ターゲットの名前を変更するために大量のファイルを変更する必要がある大規模なリポジトリで役立ちます。また、ロジックを複数のターゲットで再利用したい場合は、エイリアス ルールを使用して select 関数呼び出しを格納することもできます。

エイリアス ルールには独自の公開設定宣言があります。その他の点では、参照するルールと同様に動作します(たとえば、エイリアスの testonly は無視され、代わりに参照されるルールの testonly-ness が使用されます)。ただし、いくつかの例外があります。

  • コマンドラインにエイリアスが指定されている場合、テストは実行されません。参照先テストを実行するエイリアスを定義するには、tests 属性で単一のターゲットを持つ test_suite ルールを使用します。
  • 環境グループを定義する場合、environment ルールのエイリアスはサポートされません。--target_environment コマンドライン オプションでもサポートされていません。

filegroup(
    name = "data",
    srcs = ["data.txt"],
)

alias(
    name = "other",
    actual = ":data",
)

引数

属性
name

名前(必須)

このターゲットの一意の名前。

actual

ラベル(必須)

このエイリアスが参照するターゲット。ルールである必要はなく、入力ファイルにすることもできます。

config_setting

ルールのソースを表示
config_setting(name, constraint_values, define_values, deprecation, distribs, features, flag_values, licenses, tags, testonly, values, visibility)

構成可能な属性をトリガーするために、想定される構成状態(ビルドフラグまたはプラットフォームの制約として表される)と一致すること。このルールの使用方法については、select をご覧ください。一般的な機能の概要については、 構成可能な属性をご覧ください。

以下は、--compilation_mode=opt または -c opt を(コマンドラインで明示的に、または .bazelrc ファイルから暗黙的に)設定しているすべてのビルドに一致します。

  config_setting(
      name = "simple",
      values = {"compilation_mode": "opt"}
  )
  

以下は、ARM をターゲットとし、カスタム定義 FOO=barbazel build --cpu=arm --define FOO=bar ... など)を適用するビルドに一致します。

  config_setting(
      name = "two_conditions",
      values = {
          "cpu": "arm",
          "define": "FOO=bar"
      }
  )
  

以下は、ユーザー定義フラグ --//custom_flags:foo=1 を(コマンドラインで明示的に、または .bazelrc ファイルから暗黙的に)設定するビルドと一致します。

  config_setting(
      name = "my_custom_flag_is_set",
      flag_values = { "//custom_flags:foo": "1" },
  )
  

以下は、//example:glibc_2_25 というラベルの constraint_value が存在すると仮定して、x86_64 アーキテクチャのプラットフォームと glibc バージョン 2.25 をターゲットとするすべてのビルドと一致します。なお、この 2 つを超える追加の制約値を定義している場合は、プラットフォームが一致します。

  config_setting(
      name = "64bit_glibc_2_25",
      constraint_values = [
          "@platforms//cpu:x86_64",
          "//example:glibc_2_25",
      ]
  )
  
上記のすべてのケースで、ビルド内で構成が変更される可能性があります。たとえば、ターゲットをその依存関係とは異なるプラットフォーム用にビルドする必要がある場合です。つまり、config_setting が最上位のコマンドライン フラグと一致しない場合でも、一部のビルド ターゲットと一致する可能性があります。

メモ

  • 複数の config_setting が現在の構成状態と一致した場合の動作については、select をご覧ください。
  • 省略形をサポートするフラグ(--compilation_mode-c など)では、values 定義で完全な形式を使用する必要があります。これらは、どちらの形式を使用した呼び出しとも自動的に一致します。
  • フラグが複数の値を取る場合(--copt=-Da --copt=-Db やリスト型の Starlark フラグなど)、values = { "flag": "a" } は実際のリストの任意の場所に "a" が存在するときに一致します。

    values = { "myflag": "a,b" } も同じように動作します。これは --myflag=a --myflag=b--myflag=a --myflag=b --myflag=c--myflag=a,b--myflag=c,b,a と一致します。正確なセマンティクスは、フラグによって異なります。たとえば、--copt は同じインスタンス内の複数の値をサポートしていません。--copt=a,b["a,b"] を生成し、--copt=a --copt=b["a", "b"] を生成します(values = { "copt": "a,b" } は前者と一致しますが後者には一致しません)。ただし、--ios_multi_cpus(Apple のルールの場合)は行います-ios_multi_cpus=a,bios_multi_cpus=a --ios_multi_cpus=b はどちらも ["a", "b"] を生成します。フラグの定義を確認し、条件を慎重にテストして、期待どおりの結果が得られていることを確認します。

  • 組み込みのビルドフラグでモデル化されない条件を定義する必要がある場合は、 Starlark 定義のフラグを使用します。--define も使用できますが、サポートが弱いため、おすすめしません。詳しくは、こちらをご覧ください。
  • 異なるパッケージで同じ config_setting 定義を繰り返さないでください。代わりに、正規パッケージで定義された共通の config_setting を参照してください。
  • valuesdefine_valuesconstraint_values は、同じ config_setting で任意の組み合わせで使用できますが、特定の config_setting には少なくとも 1 つを設定する必要があります。

引数

属性
name

名前(必須)

このターゲットの一意の名前。

constraint_values

ラベルのリスト。構成できません。デフォルトは [] です。

この config_setting と一致させるためにターゲット プラットフォームが指定する必要がある constraint_values の最小セット。(実行プラットフォームはここでは考慮されません)。プラットフォームに設定されている追加の制約値は無視されます。詳細については、 構成可能なビルド属性をご覧ください。

2 つの config_setting が同じ select で一致する場合、この属性は、config_setting の一方が他方を特殊化しているかどうかを判断するために考慮されません。つまり、ある config_setting が別のプラットフォームより強く一致することはできません。

define_values

辞書: 文字列 -> 文字列、設定不可、デフォルトは {}

values と同じですが、--define フラグに関するものです。

--define は、その構文(--define KEY=VAL)が Bazel フラグの観点から KEY=VAL が値であることを意味するため、特別なものです。

つまり、次のようになります。

            config_setting(
                name = "a_and_b",
                values = {
                    "define": "a=1",
                    "define": "b=2",
                })
          

同じキー(define)が辞書に 2 回出現するため、これは機能しません。この問題は、この属性によって解決できます。

            config_setting(
                name = "a_and_b",
                define_values = {
                    "a": "1",
                    "b": "2",
                })
          

bazel build //foo --define a=1 --define b=2 と正しく一致します。

--define は、引き続き通常のフラグ構文で values で使用できます。辞書のキーが区別できない限り、この属性と自由に組み合わせることができます。

flag_values

辞書: label -> 文字列、設定不可、デフォルトは {}

values と同じですが、 ユーザー定義のビルドフラグ用です。

ユーザー定義のフラグはラベルとして参照されるのに対し、組み込みフラグは任意の文字列として参照されるため、この属性は異なります。

values

辞書: 文字列 -> 文字列、設定不可、デフォルトは {}

このルールに一致する設定値のセット(ビルドフラグで表されます)

このルールは、select ステートメントでこのルールを参照する、構成済みのターゲットの構成を継承します。ディクショナリ内のすべてのエントリで、その構成がエントリの想定値と一致する場合、Bazel 呼び出しと「一致する」とみなされます。たとえば、values = {"compilation_mode": "opt"} は、ターゲット構成のルールに対する bazel build --compilation_mode=opt ... および bazel build -c opt ... の呼び出しと一致します。

便宜上、構成値はビルドフラグとして指定します(先頭の "--" は付けません)。ただし、この 2 つは同じではないことに注意してください。これは、ターゲットは同じビルド内の複数の構成でビルドできるためです。たとえば、exec 構成の「cpu」は、--cpu ではなく --host_cpu の値と一致します。そのため、同じ config_setting の異なるインスタンスが、それらを使用するルールの構成によっては、同じ呼び出しと一致する場合があります。

コマンドラインでフラグが明示的に設定されていない場合は、そのデフォルト値が使用されます。辞書でキーが複数回出現する場合は、最後のインスタンスのみが使用されます。コマンドラインで複数回設定できるフラグ(例: bazel build --copt=foo --copt=bar --copt=baz ...)をキーが参照している場合、これらの設定のいずれかが一致すると、一致が発生します。

filegroup

ルールのソースを表示
filegroup(name, srcs, data, compatible_with, deprecation, distribs, features, licenses, output_group, restricted_to, tags, target_compatible_with, testonly, visibility)

filegroup を使用して、ターゲットのコレクションにわかりやすい名前を付けます。これらは他のルールから参照できます。

ディレクトリを直接参照するのではなく、filegroup を使用することをおすすめします。後者は、ビルドシステムがディレクトリの下のすべてのファイルを完全に把握しているわけではないため、問題はありません。そのため、これらのファイルが変更されても再ビルドされない可能性があります。filegroupglob と組み合わせると、すべてのファイルがビルドシステムに対して明示的に認識されるようになります。

2 つのソースファイルで構成される filegroup を作成する手順は次のとおりです。

filegroup(
    name = "mygroup",
    srcs = [
        "a_file.txt",
        "some/subdirectory/another_file.txt",
    ],
)

または、glob を使用して testdata ディレクトリを掘り下げます。

filegroup(
    name = "exported_testdata",
    srcs = glob([
        "testdata/*.dat",
        "testdata/logs/**/*.log",
    ]),
)

これらの定義を利用するには、任意のルールのラベルで filegroup を参照します。

cc_library(
    name = "my_library",
    srcs = ["foo.cc"],
    data = [
        "//my_package:exported_testdata",
        "//my_package:mygroup",
    ],
)

引数

属性
name

名前(必須)

このターゲットの一意の名前。

srcs

ラベルのリスト。デフォルトは [] です。

ファイル グループのメンバーであるターゲットのリスト。

srcs 属性の値には、glob 式の結果を使用するのが一般的です。

data

ラベルのリスト。デフォルトは [] です。

実行時にこのルールで必要なファイルのリスト。

data 属性で指定されたターゲットは、この filegroup ルールの runfiles に追加されます。filegroup が別のルールの data 属性で参照されている場合、その runfiles は依存するルールの runfiles に追加されます。データファイルに対する依存方法と使用方法の詳細については、データの依存関係セクションと data の一般的なドキュメントをご覧ください。

output_group

文字列。デフォルトは ""

ソースからアーティファクトを収集する出力グループ。この属性を指定すると、デフォルトの出力グループではなく、指定した依存関係の出力グループのアーティファクトがエクスポートされます。

「出力グループ」は、ルールの実装で指定された、ターゲットの出力アーティファクトのカテゴリです。

genquery

ルールのソースを表示
genquery(name, deps, data, compatible_with, compressed_output, deprecation, distribs, exec_compatible_with, exec_properties, expression, features, licenses, opts, restricted_to, scope, strict, tags, target_compatible_with, testonly, visibility)

genquery() は、Blaze クエリ言語で指定されたクエリを実行し、結果をファイルにダンプします。

ビルドの整合性を保つため、クエリでは scope 属性で指定されたターゲットの推移的クロージャへのアクセスのみが許可されます。strict が未指定または true の場合、このルールに違反するクエリは実行中に失敗します(strict が false の場合、スコープ外のターゲットは単にスキップされ、警告が表示されます)。これを防ぐ最も簡単な方法は、クエリ式と同じラベルをスコープ内で指定することです。

ここで許可されるクエリとコマンドラインで許可される唯一の違いは、ワイルドカード ターゲット指定を含むクエリ(//pkg:*//pkg:all など)は許可されないことです。これには 2 つの理由があります。1 つ目は、genquery がクエリの推移的クロージャ以外のターゲットが出力に影響しないようにスコープを指定する必要がある、2 つ目は、BUILD ファイルがワイルドカード依存関係をサポートしていない(例: deps=["//a/..."] は許可されない)ことです。

genquery の出力は、決定論的な出力を適用するために辞書順に並べられます。ただし、--output=graph|minrank|maxrank の場合、または somepath がトップレベル関数として使用されている場合は除きます。

出力ファイルの名前はルールの名前です。

この例では、指定されたターゲットの推移的クロージャ内のラベルのリストをファイルに書き込みます。

genquery(
    name = "kiwi-deps",
    expression = "deps(//kiwi:kiwi_lib)",
    scope = ["//kiwi:kiwi_lib"],
)

引数

属性
name

名前(必須)

このターゲットの一意の名前。

compressed_output

ブール値。デフォルトは False です。

True の場合、クエリ出力は GZIP ファイル形式で書き込まれます。この設定は、クエリ出力が大きいと予想される場合に Bazel のメモリ使用量の急増を回避するために使用できます。Bazel では、この設定の値に関係なく、すでに 220 バイトを超えるクエリ出力が内部で圧縮されているため、これを True に設定すると、保持されるヒープが減少しない可能性があります。ただし、これにより Bazel は出力ファイルの書き込み時に解凍をスキップできるため、メモリ使用量が増える可能性があります。
expression

文字列、必須

実行されるクエリ。コマンドラインや BUILD ファイルの他の場所とは異なり、ここでのラベルはワークスペースのルート ディレクトリを基準として相対的に解決されます。たとえば、a/BUILD ファイル内のこの属性のラベル :b は、ターゲット //:b を参照します。
opts

文字列のリスト。デフォルトは [] です。

クエリエンジンに渡されるオプション。これらは、bazel query に渡すことができるコマンドライン オプションに対応しています。ここでは、一部のクエリ オプション(--keep_going--query_file--universe_scope--order_results--order_output)は使用できません。ここで指定しないオプションには、bazel query のコマンドラインと同様にデフォルト値が設定されます。
scope

ラベルのリスト。必須

クエリの範囲。クエリでは、これらのターゲットの推移的クロージャ以外のターゲットをタップすることはできません。
strict

ブール値。デフォルトは True です。

true の場合、スコープの推移的クロージャをエスケープするクエリを持つターゲットはビルドに失敗します。false の場合、Bazel は警告を出力し、スコープ外につながるクエリパスをすべてスキップし、その間クエリの残りの部分を完了します。

genrule

ルールのソースを表示
genrule(name, srcs, outs, cmd, cmd_bash, cmd_bat, cmd_ps, compatible_with, deprecation, distribs, exec_compatible_with, exec_properties, executable, features, licenses, local, message, output_licenses, output_to_bindir, restricted_to, tags, target_compatible_with, testonly, toolchains, tools, visibility)

genrule は、ユーザー定義の Bash コマンドを使用して 1 つ以上のファイルを生成します。

genrule は、タスクに特定のルールがない場合に使用できる汎用のビルドルールです。たとえば、Bash のワンライナーを実行できます。ただし、C++ ファイルをコンパイルする必要がある場合は、煩雑な処理がすべてすでに完了しているため、既存の cc_* ルールに従います。

なお、genrule にはコマンド引数を解釈するためのシェルが必要です。PATH 上の任意のプログラムを簡単に参照できますが、これによりコマンドが非密閉型になり、再現できない場合があります。1 つのツールを実行するだけでよい場合は、代わりに run_binary の使用を検討してください。

テストの実行に genrule を使用しないでください。テストとテスト結果には、キャッシュ ポリシーや環境変数など、特別な割り当てがあります。テストは通常、ビルドの完了後にターゲット アーキテクチャで実行する必要がありますが、genrules はビルド中に exec アーキテクチャで実行されます(この 2 つが異なる場合があります)。汎用のテストルールが必要な場合は、sh_test を使用します。

クロスコンパイルの考慮事項

クロスコンパイルの詳細については、ユーザー マニュアルをご覧ください。

genrule はビルド中に実行されますが、その出力はビルド後にデプロイやテストに使用されることがよくあります。マイクロコントローラの C コードをコンパイルする場合を考えてみます。コンパイラは C ソースファイルを受け入れ、マイクロコントローラで実行されるコードを生成します。生成されたコードはビルドに使用した CPU では実行できませんが、C コンパイラ(ソースからコンパイルする場合)自体は実行する必要があります。

ビルドシステムは exec 構成を使用してビルドを実行するマシンを記述し、ターゲット構成を使用してビルドの出力を実行するマシンを記述します。これらのそれぞれを構成するオプションが提供され、対応するファイルを別々のディレクトリに分離して競合を回避します。

genrules の場合、ビルドシステムは依存関係が適切にビルドされていることを確認します。srcs は(必要に応じて)ターゲット構成用にビルドされ、toolsexec 構成用にビルドされ、出力はターゲット構成用のものとみなされます。また、genrule コマンドが対応するツールに渡すことができる 「Make」変数も用意されています。

genrule で deps 属性を定義しないという意図があります。他の組み込みルールは、ルール間で渡された言語依存のメタ情報を使用して、依存ルールの処理方法を自動的に決定しますが、genrule ではこのレベルの自動化は不可能です。genrule はファイル レベルとランファイル レベルでのみ機能します。

特殊なケース

Exec-exec コンパイル: 場合によっては、ビルドシステムで genrules を実行して、ビルド中に出力も実行できるようにする必要があります。たとえば、genrule がカスタム コンパイラをビルドする場合、そのカスタム コンパイラは後で別の genrule で使用されます。最初の genrule で exec 構成の出力を生成する必要があります。これは、コンパイラがもう一方の genrule で実行されるためです。この場合、ビルドシステムは適切な処理を自動的に行います。つまり、ターゲット構成ではなく、exec 構成に対して最初の genrule の srcsouts をビルドします。詳しくは、ユーザー マニュアルをご覧ください。

JDK と C++ のツール: JDK または C++ コンパイラ スイートのツールを使用するために、ビルドシステムには、使用する一連の変数が用意されています。詳細については、Make 変数をご覧ください。

Genrule 環境

genrule コマンドは、set -e -o pipefail を使用してコマンドまたはパイプラインが失敗した場合に失敗するように構成された Bash シェルで実行されます。

ビルドツールは、PATHPWDTMPDIR などのコア変数のみを定義するサニタイズされたプロセス環境で Bash コマンドを実行します。ビルドを再現可能にするため、ユーザーのシェル環境で定義されている変数のほとんどは genrule のコマンドに渡されません。ただし、Bazel は(Blaze ではなく)ユーザーの PATH 環境変数の値を渡します。 PATH の値を変更すると、Bazel は次のビルドでコマンドを再実行します。

genrule コマンドでは、コマンド自体の子プロセスを接続する場合を除き、ネットワークにアクセスできません。ただし、これは現在は適用されていません。

ビルドシステムは既存の出力ファイルを自動的に削除しますが、必要な親ディレクトリは、genrule を実行する前に作成します。エラーが発生した場合は、出力ファイルも削除されます。

一般的なアドバイス

  • genrule によって実行されるツールが決定的かつ密閉型であることを確認してください。出力にはタイムスタンプを書き込まないでください。また、セットとマップには安定した順序を使用します。また、絶対パスではなく、出力への相対ファイルパスのみを書き出す必要があります。このルールに従わないと、予期しないビルド動作(Bazel が予想した genrule を再構築しない)が発生し、キャッシュのパフォーマンスが低下します。
  • 出力、ツール、ソースに $(location) を幅広く使用します。構成ごとに出力ファイルが分離されているため、genrules はハードコードされたパスや絶対パスに依存できません。
  • 同一または非常に類似した genrule が複数の場所で使用される場合は、共通の Starlark マクロを作成します。genrule が複雑な場合は、スクリプトまたは Starlark ルールとして実装することを検討してください。これにより、可読性とテスト性が向上します。
  • 終了コードが正しく genrule の成功または失敗を示していることを確認してください。
  • stdout または stderr に情報メッセージを書き込まないでください。これはデバッグには役立ちますが、ノイズになる可能性があります。genrule が成功すると、サイレントである必要があります。一方、genrule が失敗すると、適切なエラー メッセージが出力されます。
  • $$ evaluates to a $, a literal dollar-sign, so in order to invoke a shell command containing dollar-signs such as ls $(dirname $x), one must escape it thus: ls $$(dirname $$x).
  • シンボリック リンクとディレクトリを作成しないようにします。Bazel は、genrules によって作成されたディレクトリ/シンボリック リンク構造をコピーせず、ディレクトリの依存関係チェックは機能しません。
  • 他のルールで genrule を参照する場合は、genrule のラベルまたは個々の出力ファイルのラベルを使用できます。一方のアプローチのほうが読みやすい場合もありますが、使用ルールの srcs で出力を名前で参照すると、genrule の他の出力が意図せず取得されるのを回避できますが、genrule が多数の出力を生成する場合は面倒な場合があります。

この例では、foo.h を生成します。このコマンドは入力を取らないため、ソースはありません。このコマンドによって実行される「binary」は、genrule と同じパッケージ内の perl スクリプトです。

genrule(
    name = "foo",
    srcs = [],
    outs = ["foo.h"],
    cmd = "./$(location create_foo.pl) > \"$@\"",
    tools = ["create_foo.pl"],
)

次の例は、filegroup の使用方法と、別の genrule の出力を示しています。なお、明示的な $(location) ディレクティブの代わりに $(SRCS) を使用することもできます。この例では、デモ用として後者を使用しています。

genrule(
    name = "concat_all_files",
    srcs = [
        "//some:files",  # a filegroup with multiple files in it ==> $(locations)
        "//other:gen",   # a genrule with a single output ==> $(location)
    ],
    outs = ["concatenated.txt"],
    cmd = "cat $(locations //some:files) $(location //other:gen) > $@",
)

引数

属性
name

名前(必須)

このターゲットの一意の名前。


このルールは、他の BUILD ルールの srcs または deps セクションで名前で参照できます。ルールでソースファイルが生成される場合は、srcs 属性を使用します。
srcs

ラベルのリスト。デフォルトは [] です。

このルールの入力のリスト(処理するソースファイルなど)。

この属性は、cmd によって実行されるツールを一覧表示するには適していません。代わりに tools 属性を使用してください。

ビルドシステムでは、genrule コマンドを実行する前にこれらの前提条件がビルドされます。前提条件は、元のビルド リクエストと同じ構成を使用してビルドされます。これらの前提条件のファイル名は、$(SRCS) でスペース区切りのリストとしてコマンドで使用できます。また、個々の srcs ターゲット //x:y のパスは、$(location //x:y) を使用して取得できます。また、srcs の唯一のエントリである場合は $< を使用して取得することもできます。

outs

ファイル名のリスト。構成不可、必須

このルールによって生成されたファイルのリスト。

出力ファイルはパッケージの境界を越えてはいけません。出力ファイル名はパッケージからの相対名として解釈されます。

executable フラグが設定されている場合、outs には 1 つのラベルのみを含める必要があります。

genrule コマンドでは、各出力ファイルを所定の場所に作成する必要があります。ロケーションは、genrule 固有の Make 変数$@$(OUTS)$(@D) $(RULEDIR))を使用するか、 $(location) 置換を使用することで、cmd で使用できます。

cmd

文字列。デフォルトは ""

実行するコマンド。$(location) 「Make」変数の置換が適用されます。
  1. 最初の $(location) 置換が適用され、$(location label)$(locations label)(および関連する変数 execpathexecpathsrootpathrootpaths を使用した同様の構造)がすべて置き換えられます。
  2. 次に、[Make 変数] を展開します。事前定義された変数 $(JAVA)$(JAVAC)$(JAVABASE)exec 構成の下に展開されるため、ビルドステップの一部として実行される Java 呼び出しは、共有ライブラリやその他の依存関係を正しく読み込むことができます。
  3. 最後に、Bash シェルを使用してコマンドが実行されます。終了コードがゼロ以外の場合、コマンドは失敗したとみなされます。
該当しない場合、これは cmd_bashcmd_pscmd_bat のフォールバックです。

コマンドラインの長さがプラットフォームの制限(Linux/macOS では 64 K、Windows では 8 K)を超えると、genrule はコマンドをスクリプトに書き込み、そのスクリプトを実行して回避します。これは、すべての cmd 属性(cmdcmd_bashcmd_pscmd_bat)に適用されます。

cmd_bash

文字列。デフォルトは ""

実行する Bash コマンド。

この属性の優先度は cmd よりも高くなります。このコマンドは展開され、cmd 属性とまったく同じように実行されます。

cmd_bat

文字列。デフォルトは ""

Windows で実行する Batch コマンド。

この属性は、cmdcmd_bash よりも優先度が高くなります。 このコマンドは cmd 属性と同様の方法で実行されますが、次の点が異なります。

  • この属性は Windows にのみ適用されます。
  • このコマンドは、次のデフォルト引数を指定して cmd.exe /c で実行されます。
    • /S - 最初と最後の引用符を削除し、その他はすべてそのまま実行します。
    • /E:ON - 拡張コマンドセットを有効にします。
    • /V:ON - 遅延変数の展開を有効にする
    • /D - AutoRun のレジストリ エントリを無視します。
  • $(location)「Make」変数を置換すると、パスは Windows スタイルのパス(バックスラッシュを含む)に展開されます。
cmd_ps

文字列。デフォルトは ""

Windows で実行する Powershell コマンド。

この属性は、cmdcmd_bashcmd_bat よりも優先度が高くなります。このコマンドは cmd 属性と同様の方法で実行されますが、次の点が異なります。

  • この属性は Windows にのみ適用されます。
  • このコマンドは powershell.exe /c で実行されます。

PowerShell をより使いやすく、エラーが発生しにくくするために、genrule で Powershell コマンドを実行する前に、次のコマンドを実行して環境を設定します。

  • Set-ExecutionPolicy -Scope CurrentUser RemoteSigned - 署名なしのスクリプトの実行を許可します。
  • $errorActionPreference='Stop' - ; で区切られた複数のコマンドがある場合、Powershell CmdLet が失敗するとアクションはすぐに終了しますが、これは外部コマンドでは機能しません
  • $PSDefaultParameterValues['*:Encoding'] = 'utf8' - デフォルトのエンコードを utf-16 から utf-8 に変更します。
executable

ブール値、設定不可、デフォルトは False

出力を実行可能として宣言します。

このフラグを True に設定すると、出力が実行可能ファイルであり、run コマンドを使用して実行できることを意味します。この場合、genrule は 1 つの出力のみを生成する必要があります。この属性を設定した場合、run はファイルの内容に関係なく実行を試みます。

生成された実行可能ファイルのデータ依存関係の宣言はサポートされていません。

local

ブール値。デフォルトは False です。

True に設定すると、このオプションは「ローカル」戦略を使用してこの genrule を強制的に実行します。つまり、リモート実行、サンドボックス化、永続ワーカーはありません。

これは、タグ(tags=["local"])として「local」を指定するのと同じです。

message

文字列。デフォルトは ""

進行状況のメッセージ。

このビルドステップの実行時に出力される進行状況メッセージ。デフォルトでは、メッセージは「output を生成しています」(またはそれに似た名前)ですが、より具体的なメッセージを指定することもできます。cmd コマンド内の echo や他の print ステートメントの代わりにこの属性を使用します。これにより、そのような進行状況メッセージを出力するかどうかをビルドツールで制御できるようになります。

output_licenses

ライセンスの種類(デフォルトは ["none"]

common attributes をご覧ください。
output_to_bindir

ブール値、設定不可、デフォルトは False

このオプションを True に設定すると、出力ファイルは genfiles ディレクトリではなく bin ディレクトリに書き込まれます。

tools

ラベルのリスト。デフォルトは [] です。

このルールの tool 依存関係のリスト。詳細については、依存関係の定義をご覧ください。

ビルドシステムでは、genrule コマンドを実行する前にこれらの前提条件がビルドされます。これらのツールはビルドの一部として実行されるため、exec 構成を使用してビルドされます。個々の tools ターゲット //x:y のパスは、$(location //x:y) を使用して取得できます。

cmd によって実行される *_binary やツールは、正しい構成でビルドされるように、srcs ではなく、このリストに配置する必要があります。

starlark_doc_extract

ルールのソースを表示
starlark_doc_extract(name, deps, src, data, compatible_with, deprecation, distribs, exec_compatible_with, exec_properties, features, licenses, render_main_repo_name, restricted_to, symbol_names, tags, target_compatible_with, testonly, visibility)

starlark_doc_extract() は、指定された .bzl ファイルまたは .scl ファイルで定義または再エクスポートされたルール、関数(マクロを含む)、アスペクト、プロバイダのドキュメントを抽出します。このルールの出力は、Bazel ソースツリーの stardoc_output.proto で定義されている ModuleInfo バイナリ proto です。

暗黙的な出力ターゲット

  • name.binaryproto(デフォルト出力): ModuleInfo バイナリ proto。
  • name.textproto(明示的にリクエストされた場合にのみビルド): name.binaryproto のテキスト proto バージョン。

警告: このルールの出力形式は、必ずしも安定しているとは限りません。これは、主に Stardoc による内部使用を想定しています。

引数

属性
name

名前(必須)

このターゲットの一意の名前。

deps

ラベルのリスト。デフォルトは [] です。

src によって load() 拡張された Starlark ファイルをラップするターゲットのリスト。通常の使用では、これらのターゲットは bzl_library ターゲットであることが推奨されますが、starlark_doc_extract ルールは強制ではなく、DefaultInfo で Starlark ファイルを提供するターゲットを受け入れます。

ラップされた Starlark ファイルはソースツリー内のファイルである必要があります。Bazel は、生成されたファイルを load() できません。

src

ラベル(必須)

ドキュメントの抽出元となる Starlark ファイル。

ソースツリー内のファイルであることに留意してください。Bazel は、生成されたファイルを load() できません。

render_main_repo_name

ブール値。デフォルトは False です。

true の場合、リポジトリ コンポーネントを使用して、出力されたドキュメントのメイン リポジトリのラベルをレンダリングします(つまり、//foo:bar.bzl@main_repo_name//foo:bar.bzl として出力されます)。

メイン リポジトリに使用する名前は、メイン リポジトリの MODULE.bazel ファイル内の module(name = ...)(Bzlmod が有効になっている場合)またはメイン リポジトリの WORKSPACE ファイル内の workspace(name = ...) から取得されます。

この属性は、同じリポジトリ内でのみ使用する Starlark ファイルのドキュメントを生成する場合は False に設定し、他のリポジトリから使用することを意図した Starlark ファイルのドキュメントを生成する場合は、True に設定する必要があります。

symbol_names

文字列のリスト。デフォルトは [] です。

ドキュメントを抽出するエクスポートされた関数、ルール、プロバイダ、アスペクト(またはそれらがネストされている構造体)の修飾名のリスト(省略可)。ここで、修飾名とは、モジュールのユーザーがエンティティを使用できるようにするための名前を意味します。これには、名前空間のためにエンティティがネストされている構造体も含まれます。

starlark_doc_extract は、次の場合にのみエンティティのドキュメントを出力します。

  1. エンティティの修飾名の各要素が public である(つまり、修飾名の各要素の最初の文字は "_" ではなくアルファベットである)。かつ
    1. symbol_names リストが空の場合(これがデフォルト)、または
    2. エンティティの修飾名、またはエンティティがネストされている構造体の修飾名が、symbol_names リストにある。

test_suite

ルールのソースを表示
test_suite(name, compatible_with, deprecation, distribs, features, licenses, restricted_to, tags, target_compatible_with, testonly, tests, visibility)

test_suite は人間にとって「有用」とみなされる一連のテストを定義します。これにより、プロジェクトで「チェックイン前に実行する必要があるテスト」、「プロジェクトのストレステスト」、「すべて小規模なテスト」などの一連のテストを定義できます。blaze test コマンドは、このような編成に従います。blaze test //some/test:suite のような呼び出しでは、Blaze はまず //some/test:suite ターゲットに推移的に含まれているすべてのテスト ターゲットを列挙し(これを「test_suite 拡張」と呼んでいます)、その後、これらのターゲットをビルドおよびテストします。

現在のパッケージ内の小規模なテストをすべて実行するテストスイート。

test_suite(
    name = "small_tests",
    tags = ["small"],
)

指定されたテストセットを実行するテストスイート:

test_suite(
    name = "smoke_tests",
    tests = [
        "system_unittest",
        "public_api_unittest",
    ],
)

現在のパッケージ内の不安定でないすべてのテストを実行するためのテストスイート。

test_suite(
    name = "non_flaky_test",
    tags = ["-flaky"],
)

引数

属性
name

名前(必須)

このターゲットの一意の名前。

tags

文字列のリスト。設定不可。デフォルトは [] です。

「small」「database」「-flaky」などのテキストタグのリスト。タグには任意の有効な文字列を指定できます。

「-」で始まるタグは除外タグと見なされます。直前の「-」文字はタグの一部とは見なされないため、スイートタグ「-small」はテストの「small」サイズと一致します。他のすべてのタグは正のタグとみなされます。

(省略可)タグを明確にするために、タグの先頭に「+」を付けることもできます。この場合、+ 記号はタグのテキストの一部としては評価されません。肯定的な区別と否定的な区別が読みやすくなるだけです。

テストスイートには、すべての陽性タグに一致し、どの否定的タグにも一致しないテストルールのみが含まれます。これは、除外されたテストの依存関係のエラーチェックがスキップされるという意味ではありません。スキップされたテストの依存関係は正当である必要があります(可視性の制約によってブロックされていないなど)。

manual タグのキーワードは、ワイルドカード ターゲット パターンを含む呼び出しに対して blaze test コマンドが実行する「test_suite 展開」によって、上記とは異なる方法で処理されます。「手動」でタグ付けされた test_suite ターゲットは除外されます(したがって展開されません)。この動作は、blaze build および blaze test がワイルドカード ターゲット パターンを処理する一般的な方法と同じです。これは blaze query 'tests(E)' の動作とは明らかに異なることに注意してください。スイートは manual タグに関係なく、常に tests クエリ関数によって展開されるためです。

テストの size は、フィルタリングを目的としたタグと見なされます。

相互に排他的なタグを持つテスト(すべての小規模テストと中規模テストなど)を含む test_suite が必要な場合は、3 つの test_suite ルールを作成する必要があります。1 つはすべての小規模テスト用、1 つは中規模テスト用、もう 1 つは前の 2 つのテストを含むものです。

tests

ラベルのリスト。構成できません。デフォルトは [] です。

任意の言語のテストスイートとテスト ターゲットのリスト。

ここでは、言語に関係なく、すべての *_test を受け入れます。ただし、たまたまテストを実行しても、*_binary ターゲットは受け入れられません。指定された tags によるフィルタリングは、この属性に直接リストされているテストに対してのみ行われます。この属性に test_suite が含まれている場合、その中のテストはこの test_suite でフィルタされません(すでにフィルタされているとみなされます)。

tests 属性が指定されていないか空の場合、ルールはデフォルトで、現在の BUILD ファイルに manual としてタグ付けされていないすべてのテストルールを含めます。これらのルールは引き続き tag フィルタリングの対象となります。