---
layout: documentation
title: Build Encyclopedia
---

<h1>Bazel BUILD Encyclopedia of Functions</h1>
<h2>Concepts and terminology</h2>

<ul>
  <li>
    <a href="$expander.expandRef("common-definitions")">Common definitions</a>
    <ul>
      <li><a href="$expander.expandRef("common-definitions#sh-tokenization")">Bourne shell tokenization</a></li>
      <li><a href="$expander.expandRef("common-definitions#label-expansion")">Label expansion</a></li>
      <li><a href="$expander.expandRef("common-definitions#common-attributes")">Common attributes</a></li>
      <li><a href="$expander.expandRef("common-definitions#common-attributes-tests")">Common attributes for tests</a></li>
      <li><a href="$expander.expandRef("common-definitions#common-attributes-binaries")">Common attributes for binaries</a></li>
      <li><a href="$expander.expandRef("common-definitions#configurable-attributes")">Configurable attributes</a></li>
      <li><a href="$expander.expandRef("common-definitions#implicit-outputs")">Implicit output targets</a></li>
    </ul>
  </li>
  <li>
    <a href="$expander.expandRef("make-variables")">"Make" variables</a>
    <ul class="be-toc">
      <li><a href="$expander.expandRef("make-variables#make-var-substitution")">"Make" variable substitution</a></li>

    </ul>
  </li>
</ul>

<h2>Functions</h2>

<ul class="be-toc">
  <li><a href="$expander.expandRef("package")">package</a></li>
  <li><a href="$expander.expandRef("package_group")">package_group</a></li>

  <li><a href="$expander.expandRef("licenses")">licenses</a></li>
  <li><a href="$expander.expandRef("exports_files")">exports_files</a></li>
  <li><a href="$expander.expandRef("glob")">glob</a></li>
  <li><a href="$expander.expandRef("select")">select</a></li>
  <li><a href="$expander.expandRef("workspace")">workspace</a></li>
</ul>

<h2>Rules</h2>

Native rules ship with the Bazel binary and do not require a <code>load</code> statement.
Native rules are available globally in BUILD files. In .bzl files, you can find them in
the <code>native</code> module.

<h3>Language-specific native rules</h3>

#macro(summaryLink $page $heading)
  #if ($singlePage)#${heading}#else${page}.html#${heading}#end
#end

#macro(summaryTable $ruleFamilies)
  <tbody>
  #foreach($ruleFamily in $ruleFamilies)
    #if($ruleFamily.size() > 0)
      <tr>
        <td class="lang">${ruleFamily.name}</td>
      #set( $ruleTypes = [$ruleFamily.binaryRules, $ruleFamily.libraryRules, $ruleFamily.testRules, $ruleFamily.otherRules1, $ruleFamily.otherRules2] )
      #foreach($ruleType in $ruleTypes)
        <td>
        #foreach($ruleDoc in $ruleType)
          <a href="#summaryLink(${ruleFamily.id}, ${ruleDoc.ruleName})"#if($ruleDoc.isDeprecated()) class="deprecated"#end>${ruleDoc.ruleName}</a>
          <br />
        #end
        </td>
      #end
      </tr>
    #end
  #end
  </tbody>
#end

<table class="table table-condensed table-striped" summary="Table of rules sorted by language">
  <colgroup span="6" width="20%"></colgroup>
  <thead>
    <tr>
      <th>Language</th>
      <th>Binary rules</th>
      <th>Library rules</th>
      <th>Test rules</th>
      <th>Other rules</th>
      <th></th>
    </tr>
  </thead>
#summaryTable($langSpecificRuleFamilies)

</table>
<table class="table table-condensed table-striped" summary="Table of rules not specific to a programming language">
  <colgroup span="6" width="20%"></colgroup>
#summaryTable($genericRuleFamilies)

</table>
