一般規則

問題を報告 ソースを表示

ルール

エイリアス

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

alias ルールにより、ルールの参照対象となる別の名前が作成されます。

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

エイリアス ルールには独自の可視性宣言があります。他のすべての点で、参照するルールと同じように動作します(例: エイリアス上の testonly は無視されます)。ただし、若干の例外があります(参照先のルールのテスト専用性が使用されます)。

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

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

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

引数

属性
name

Name; required

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

actual

Label; required

このエイリアスが指すターゲット。ルールである必要はありませんが、入力ファイルを使用することもできます。

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=bar を適用するビルドと一致します(例: bazel 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 つのプラットフォーム以外の 2 つの制約値は、プラットフォームで定義されていれば一致します。

  config_setting(
      name = "64bit_glibc_2_25",
      constraint_values = [
          "@platforms//cpu:x86_64",
          "//example:glibc_2_25",
      ]
  )
  
いずれの場合も、構成をビルド内で変更できます。たとえば、ターゲットと異なるプラットフォーム用のターゲットをビルドする必要がある場合、config_setting がトップレベルのコマンドライン フラグと一致していなくても、一部のビルド ターゲットは一致する可能性があります。

メモ

  • 複数のconfig_settingが現在の構成状態と一致した場合の処理については、をご覧ください。
  • 省略形をサポートするフラグ(--compilation_mode-c など)の場合、values 定義は完全な形式を使用する必要があります。これらは、どちらのフォームを使用した呼び出しも自動的に一致します。
  • フラグが複数の値(--copt=-Da --copt=-Db やリスト型の スターラーク フラグなど)を受け取る場合、"a" が実際のリストのどこかに存在する場合、values = { "flag": "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

Name; required

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

constraint_values

List of labels; optional; nonconfigurable

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

同じ select 内で 2 つの config_setting が一致する場合、この属性は、一方が他方のスペシャライゼーションであるかどうかを判断するものではありません。つまり、あるプラットフォームには、別のプラットフォームより強固な config_setting は指定できません。

define_values

Dictionary: String -> String; optional; nonconfigurable

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

Dictionary: label -> String; optional; nonconfigurable

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

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

values

Dictionary: String -> String; optional; nonconfigurable

このルールに一致する構成値のセット(ビルドフラグとして表される)

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

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

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

ファイルグループ

ルールのソースを表示
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 を使用してテストデータ ディレクトリを表示します。

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

Name; required

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

srcs

List of labels; optional

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

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

data

List of labels; optional

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

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

output_group

String; optional

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

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

genquery

ルールのソースを表示
genquery(name, deps, data, compatible_with, 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 つ目は、クエリの推移的なクロージャの外側にあるターゲットが出力に影響を与えないようにスコープを指定する必要があるためです。2 つ目は、BUILD ファイルがワイルドカードの依存関係をサポートしていないためです(deps=["//a/..."] は使用できません)。

確定的出力を適用するため、genquery の出力は --order_output=full で順序付けされます。

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

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

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

引数

属性
name

Name; required

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

expression

String; required

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

List of strings; optional

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

List of labels; required

クエリのスコープ。このクエリは、これらのターゲットの一時的な終了以外のターゲットにタップすることはできません。
strict

Boolean; optional; default is 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, exec_tools, 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 の 1 行で実行できます。ただし、C++ ファイルをコンパイルする必要がある場合は、既存の cc_* ルールに従ってください。手間のかかる作業はすべて完了しています。

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

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

クロスコンパイルに関する考慮事項

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

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

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

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

genrule では deps 属性が定義されません。他の組み込みルールでは、ルール間で渡される言語依存のメタ情報を使用して、依存ルールの処理方法を自動的に決定しますが、このレベルの自動化を genrule で行うことはできません。Genrules は、ファイルレベルとランファイル レベルでのみ機能します。

特殊なケース

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

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

Genrule 環境

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

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

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

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

一般的なアドバイス

  • genrule により実行されるツールは、決定論的で密閉されていることを確認します。タイムスタンプを出力に書き込むのではなく、セットとマップに安定した順序付けを用い、絶対パスではなく、出力への相対ファイルパスのみを書き込みます。このルールに従わないと、予期しないビルド動作(Bazel が想定している genrule を再構築しない)が発生し、キャッシュのパフォーマンスが低下します。
  • 出力、ツール、ソースには、$(location) を幅広く使用します。さまざまな構成の出力ファイルが分離されているため、genrule はハードコードされたパスや絶対パスに依存できません。
  • 同じ / 非常に類似した 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 のラベルまたは個々の出力ファイルのラベルを使用できます。1 つのアプローチのほうが読みやすくなることもあります。別のアプローチでは、消費ルールの srcs で名前を使用して出力を参照することで、genrule の他の出力が意図せず選択されてしまう可能性がありますが、genrule によって多くの出力が生成されると、手間がかかります。

この例では、foo.h が生成されます。このコマンドは入力を受け取らないため、ソースはありません。コマンドによって実行される「バイナリ」は、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

Name; required

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


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

List of labels; optional

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

この属性は、cmd によって実行されるツールのリスティングには適していません。代わりに、tools 属性を使用してください。

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

outs

List of filenames; required; nonconfigurable

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

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

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

genrule コマンドでは、各出力ファイルが所定の場所に作成されます。この場所は、genrule 固有の「Make」変数$@$(OUTS)$(@D) $(RULEDIR))を使用するか、 $(location) 置換を使用して cmd で利用できます。

cmd

String; optional

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

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

cmd_bash

String; optional

実行する Bash コマンド。

この属性には cmd より高い優先度が設定されています。このコマンドは展開され、cmd 属性とまったく同じように動作します。

cmd_bat

String; optional

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

この属性は、cmd および cmd_bash よりも優先度が高くなっています。 このコマンドの実行方法は cmd 属性の場合と同様ですが、次の点が異なります。

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

String; optional

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 に変更します。
exec_tools

List of labels; optional

サポートを終了しました。代わりに tools を使用してください。

exec_toolstools の動作が異なり、それらは同等であったため、Blaze チームが exec_tools のすべての使用を tools に移行することになりました。

executable

Boolean; optional; nonconfigurable; default is False

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

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

生成された実行可能ファイルのデータ依存関係を宣言することはできません。

local

Boolean; optional; default is False

true に設定すると、この genrule で「ローカル」戦略が強制的に実行されます。つまり、リモート実行、サンドボックス化、永続ワーカーは実行されません。

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

message

String; optional

進行状況のメッセージ。

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

output_licenses

Licence type; optional

common attributes をご覧ください。
output_to_bindir

Boolean; optional; nonconfigurable; default is False

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

tools

List of labels; optional

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

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

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

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 拡張」と呼びます)、Blaze はこれらのターゲットをビルドしてテストします。

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

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

Name; required

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

tags

List of strings; optional; nonconfigurable

「small」、「database」、「-flaky」などのテキストタグのリスト。タグは、任意の有効な文字列にすることができます。

「-」で始まるタグは除外キーワードとみなされます。上記の「-」文字はタグの一部とは見なされないため、スイート タグの「-small」はテストの「小さい」サイズと一致します。他のすべてのタグは、肯定的なタグと見なされます。

必要に応じて、肯定的なタグをより明示するために、タグの先頭を「+」にすることもできます。これは、タグのテキストの一部として評価されません。プラスとマイナスの区別が見やすくなります。

テストスイートに含まれるのは、ポジティブなタグ全体に一致し、ネガティブなタグなしのテストルールのみです。ただし、フィルタで除外されたテストに対する依存関係のチェックがスキップされるわけではありません。スキップされたテストに対する依存関係は、有効な状態を維持する必要があります(可視性の制約によってブロックされていないなど)。

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

テストでは、size はフィルタリング用のタグと見なされます。

test_suite ルールに相互に排他的なタグの付いたテスト(すべての小規模テストと中規模テストなど)を含める場合は、すべての小規模なテストに対して 1 つずつ、および前の 2 つのテストを含む 3 つの test_suite ルールを作成する必要があります。

tests

List of labels; optional; nonconfigurable

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

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

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