| {namespace genrule} |
| |
| /***/ |
| {template .soyweb} |
| {call buck.page} |
| {param title: 'genrule()' /} |
| {param prettify: true /} |
| {param content} |
| |
| {call buck.rule} |
| {param overview} |
| A <code>genrule()</code> is used to generate a file from a shell |
| command. It must produce a single output file. |
| {/param} |
| |
| {param args} |
| |
| {call buck.arg} |
| {param name: 'name' /} |
| {param desc} |
| The name of the genrule. |
| {/param} |
| {/call} |
| |
| {call buck.arg} |
| {param name: 'srcs' /} |
| {param default: '[]' /} |
| {param desc} |
| A list of files to be used in the shell command. |
| {/param} |
| {/call} |
| |
| {call buck.arg} |
| {param name: 'cmd' /} |
| {param default: 'None' /} |
| {param desc} |
| The shell command to run to generate the output file. It is the fallback of <code>bash</code> |
| {sp}and <code>cmd_exe</code>. |
| It will be subject to the following environment variable substitutions: |
| <dl> |
| <dt><code>SRCS</code><dt> |
| <dd>A space-delimited string expansion of the <code>srcs</code> |
| {sp}argument where each element of <code>srcs</code> will be |
| translated into an absolute path.</dd> |
| |
| <dt><code>SRCDIR</code><dt> |
| <dd>The absolute path to a directory to which sources are copied |
| to prior to running the command.</dd> |
| |
| <dt><code>OUT</code></dt> |
| <dd>The output file for the <code>genrule()</code>. The file |
| specified by this variable must always be written by this |
| command. If not, the execution of this rule will be considered a |
| failure, halting the build process.</dd> |
| </dl> |
| |
| It is also possible to expand references to other rules within the |
| {sp}<code>cmd</code>. This expansion takes two supported forms: |
| <dl> |
| <dt><code>$(exe //path/to:target)</code></dt> |
| <dd>Expands a build rule that results in an executable to the commands |
| necessary to execute that command. For example, a <code>java_binary() |
| </code> may expand to a call to <code>java -jar path/to/target.jar |
| </code>. Files that are executable (perhaps generated by a <code> |
| genrule()</code>) will also be expanded. If the build rule does |
| not generate an executable output an exception will be thrown and |
| the build will break.</dd> |
| |
| <dt><code>$(location //path/to:target)</code></dt> |
| <dd>Expands to the location of the output of the build rule. This |
| means that you can refer to these without needing to be aware of how |
| Buck is storing data on the disk mid-build.</dd> |
| </dl> |
| |
| Note that all build rules expanded in the command must be listed in the |
| {sp}<code>deps</code> parameter of the <code>genrule()</code>. |
| {/param} |
| {/call} |
| |
| {call buck.arg} |
| {param name: 'bash' /} |
| {param default: 'None' /} |
| {param desc} |
| The platform-specific version of parameter <code>cmd</code>. |
| It runs on UNIX in which <code>bash</code> is installed and has a higher priority than |
| {sp}<code>cmd</code>. Command specified will be run with <code>/bin/bash -c</code>. |
| {/param} |
| {/call} |
| |
| {call buck.arg} |
| {param name: 'cmd_exe' /} |
| {param default: 'None' /} |
| {param desc} |
| The platform-specific version of parameter <code>cmd</code>. It runs on Windows and has a higher |
| {sp}priority than <code>cmd</code>. Command specified will be run with <code>cmd.exe /c</code>. |
| {/param} |
| {/call} |
| |
| {call buck.arg} |
| {param name: 'out' /} |
| {param desc} |
| The name of the output file. Must be unique within the build file |
| in which the <code>genrule()</code> is declared. |
| {/param} |
| {/call} |
| |
| {call buck.arg} |
| {param name: 'deps' /} |
| {param default: '[]' /} |
| {param desc} |
| A list of rules that must be built before this rule. These may be |
| accessed within the <code>cmd</code> by treating the target as a |
| brace-wrapped variable: <code>$(location //like:this)</code>. |
| {/param} |
| {/call} |
| |
| {call buck.visibility_arg /} |
| |
| {/param} // args |
| |
| {param examples} |
| |
| This genrule() uses a Python script to derive a new |
| {sp}<code>AndroidManifest.xml</code> from an |
| {sp}<code>AndroidManifest.xml</code> in the source tree. |
| |
| {literal}<pre class="prettyprint lang-py"> |
| genrule( |
| name = 'generate_manifest', |
| srcs = [ |
| 'AndroidManifest.xml', |
| ], |
| bash = 'python $(exe //python/android:basic_to_full) ' \ |
| '$SRCDIR/AndroidManifest.xml > $OUT', |
| cmd_exe = 'python.exe $(exe //python/android:basic_to_full) ' \ |
| '%SRCDIR%\\AndroidManifest.xml > %OUT%', |
| out = 'AndroidManifest.xml', |
| deps = [ |
| '//python/android:basic_to_full', |
| ] |
| ) |
| </pre>{/literal} |
| |
| <h2>See Also</h2> |
| |
| <a href="{ROOT}function/genfile.html"><code>genfile()</code></a> |
| {sp}function. |
| |
| {/param} // examples |
| |
| {/call} // buck.rule |
| |
| {/param} |
| {/call} |
| {/template} |