正規表現と引数によるビルドのカスタマイズ
正規表現の使用
ib_profile.xml ファイルに含めるビルド ツールやプロセスの定義には正規表現 (regex
) も使用できます。正規表現はプロセス ファイル名に対して適用します。
regex=true
の場合、プロセス ファイル名は完全一致ではなく、正規表現が有効になるので動的な名前や名前の一部しか分からないツールやプロセスを ib_profile.xml ファイルに追加することができます。
regex を使用するには、まず以下のコマンドを入力します。
<process filename="<partial_name+regex>" regex="true" type="<distribution_type>" />
以下では ib_profile.xml ファイルでの regex
の 2 つの使用例を紹介します。
-
プロセス ファイル名の定義に「
$
」を使用する<process filename=".bash$" regex="true" type="intercepted" />
この場合、名前が 「bash」で終わるすべてのプロセス、つまり 「<any_character>bash」は、intercepted として処理されることになります。
-
プロセス ファイル名の定義に「
^
」を使用する<process filename="^soong" regex="true" type="intercepted" />
この場合、名前が 「soong」で始まるすべてのプロセス、つまり 「soong<any_character>」は、intercepted として処理されることになります。
注意: 正規表現の詳細については、https://www.guru99.com/linux-regular-expressions.htmlをご覧ください。
引数 (args) の使用
引数 (args
) を使って、実行中のプロセスのインスタンスを特定の引数で絞り込み、定義した分散タイプを自動的に適用することができます。
args
パラメーターはインスタンスに異なる引数が含まれているプロセスに最適です。このようなプロセスでは、実行するインスタンスをそれぞれ別の方法で分散したい場合があります。例えば、コンパイル インスタンスをリモートで、リンカ インスタンスをローカルで実行したい場合などです。
例えば、-c
(リンクなしコンパイル) の引数を持つインスタンスを除き、すべてのインスタンスをlocal_only とするように指定することができます。つまり、コンパイル用インスタンスの分散タイプは「local_only」ではなく、「allow_remote」 となり、それ以外のインスタンスは「local_only」 となります。
args
パラメーターは「含む」または「含まない」のどちらでも使用でき、1 つまたは複数の引数を指定します。args
パラメータに複数の引数がある場合、各引数をコロンで区切ったときに、引数をリストで整理する必要があります。
args の使用例:
<process filename="<process_name>" type="<distribution_type>" exclude_args/include_args="<argument:argument:argument"/>
注意: 正規表現を用いた部分名を引数として使用しないでください。ib_profile.xml ファイルの引数には完全な値を入力する必要があります。
-
exclude_args:
exclude_args
のリストの引数を含むインスタンスに対して、該当プロセス実行時に指定した分散タイプを適用しません。
コマンドの例:
<process filename="clang.real" type="local_only" exclude_args="-c:-S:-E"/>
この例では、clang.real
プロセスを「local_only」として実行するよう指定しています。定義した引数 (-c
、-S
、-E
) を 1 つでも含まれているインスタンスには、この分散タイプは適用されません。つまり、clang.real process
を実行するコマンドに-c
、-S
、-E
のトークンが含まれている場合、「local_only」 ではなく、「allow_remote」 としてプロセスが実行されることになりま す。
-
include_args:
include_args
のリストの引数を 1 つでも含むインスタンスに対して、該当プロセス実行時に指定した分散タイプを適用します。
同じプロセスに関するエントリが複数ある場合、include_args
パラメーターを持つエントリが有効になります。
コマンドの例:
<process filename="java" type="allow_remote" /><process filename="java" type="intercepted" include_args="org.gradle.launcher.GradleMain:org.gradle.wrapper.GradleWrapperMain" />
この例では、通常、java プロセスは「allow_remote」 として実行されます。ただし、実際のコマンドにorg.gradle.launcher.GradleMain
and/ororg.gradle.wrapper.GradleWrapperMain
が含まれる場合は、「intercepted」 として処理されます。