{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 desc}
  The shell command to run to generate the output file. 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 /&#x2F;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 /&#x2F;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: '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 /&#x2F;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',
  ],
  cmd = 'python $(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}
