diff --git a/site/docs/crosstool-reference.md b/site/docs/crosstool-reference.md
new file mode 100644
index 0000000..7a50c7d
--- /dev/null
+++ b/site/docs/crosstool-reference.md
@@ -0,0 +1,1008 @@
+---
+layout: documentation
+title: Understanding CROSSTOOL
+---
+
+# Understanding CROSSTOOL
+
+*  [Overview](#overview)
+*  [CROSSTOOL proto structure](#crosstool-proto-structure)
+*  [Toolchain selection](#toolchain-selection)
+*  [CROSSTOOL features](#crosstool-features)
+   *  [Feature relationships](#feature-relationships)
+*  [CROSSTOOL actions](#crosstool-actions)
+   *  [Assembler actions](#assembler-actions)
+   *  [Compiler actions](#compiler-actions)
+   *  [Link actions](#link-actions)
+   *  [AR actions](#ar-actions)
+   *  [LTO actions](#lto-actions)
+*  [CROSSTOOL `action_config`](#crosstool-action_config)
+   *  [`tool` messages](#tool-messages)
+   *  [Example usage](#example-usage)
+   *  [Flag groups](#flag-groups)
+   *  [Conditional expansion](#conditional-expansion)
+*  [CROSSTOOL reference](#crosstool-reference)
+   *  [CROSSOTOOL build variables](#crosstool-build-variables)
+   *  [CROSSTOOL features](#crosstool-features)
+
+To get hands-on with CROSSTOOL, see the
+[Configuring CROSSTOOL](tutorial/crosstool.html) tutorial.
+
+## Overview
+
+`CROSSTOOL` is a text file containing a
+[protocol buffer](https://developers.google.com/protocol-buffers/docs/overview)
+that provides the necessary level of granularity for configuring the behavior of
+Bazel's C++ rules. By default, Bazel automatically configures `CROSSTOOL` for
+your build, but you have the option to configure it manually. You reference the
+`CROSSTOOL` file in your `BUILD` file(s) using a `cc_toolchain` target and check
+it into source control alongside your project. You can share a single
+`CROSSTOOL` file across multiple projects or create separate per-project files.
+
+When a C++ target enters the analysis phase, Bazel selects the appropriate
+`cc_toolchain` target based on the BUILD file, then reads the corresponding
+toolchain definition from the CROSSTOOL file.  The `cc_toolchain` target passes
+information from the CROSSTOOL proto to the C++ target through a
+`CcToolchainProvider`.
+
+For example, a compile or link action, instantiated by a rule such as
+`cc_binary` or `cc_library`, needs the following information:
+
+*   The compiler or linker to use
+*   Command-line flags for the compiler/linker
+*   Configuration flags passed through the `--copt/--linkopt` options
+*   Environment variables
+*   Artifacts needed in the sandbox in which the action executes
+
+All of the above information except the artifacts required in the sandbox are
+specified in the CROSSTOOL proto.
+
+The artifacts to be shipped to the sandbox are declared in the `cc_toolchain`
+target. For example, with the `cc_toolchain.linker_files` attribute you can
+specify the linker binary and toolchain libraries to ship into the sandbox.
+
+## CROSSTOOL proto structure
+
+The CROSSTOOL proto has the following structure:
+
+*   Map from `--cpu` to toolchain (to be used when `--compiler` is not specified
+    or when `cc_toolchain_suite.toolchains` omits the `cpu` entry)
+
+*   Toolchain for a particular `--cpu` and `--compiler` combination (1)
+    *   Static toolchain:
+        *   `compiler_flags`
+        *   `linker_flags`
+        *   `compilation_mode_flags`
+        *   `linking_mode_flags`
+    *   Dynamic toolchain:
+        *   `features`
+
+*   Toolchain for a particular  `--cpu` and `--compiler` combination (2)
+
+*   Toolchain for a particular  `--cpu` and `--compiler` combination (3)
+
+*   ...
+
+
+## Toolchain selection
+
+The toolchain selection logic operates as follows:
+
+1.  User specifies a `cc_toolchain_suite` target in the `BUILD` file and points
+    Bazel to the target using the
+    [`--crosstool_top option`](https://docs.bazel.build/versions/master/user-manual.html#flag--crosstool_top).
+    The `CROSSTOOL` file must reside in the same directory as the
+    `BUILD` file containing the `cc_toolchain_suite` target.
+
+2.  The `cc_toolchain_suite` target and the `CROSSTOOL`
+    file reference multiple toolchains. The values of the `--cpu` and
+    `--compiler `flags determine which of those toolchains is selected,
+    either based only on the `--cpu` flag value, or based on a joint
+    `--cpu | --compiler` value. The selection process is as follows:
+
+  * If the `--compiler` option is specified, Bazel selects the
+        corresponding entry from the `cc_toolchain_suite.toolchains`
+        attribute with `--cpu | --compiler`. If Bazel does not find
+        a corresponding entry, it throws an error.
+
+  * If the `--compiler` option is not specified, Bazel selects
+    the corresponding entry from the `cc_toolchain_suite.toolchains`
+    attribute with just `--cpu`.
+
+    However, if Bazel does not find a corresponding entry and the
+    `--incompatible_disable_cc_toolchain_label_from_crosstool_proto`
+    option is disabled, Bazel iterates through `default_toolchains`
+    in the `CROSSTOOL` file until it finds an entry where the
+    `default_toolchain.cpu` value matches the specified `--cpu`
+    option value. Bazel then reads the `toolchain_identifier`
+    value to identify the corresponding toolchain, and selects the appropriate
+    entry in the `cc_toolchain_suite.toolchains` attribute using
+    `toolchain.target_cpu | toolchain.compiler`.
+
+  * If no flags are specified, Bazel inspects the host system and selects a
+    `--cpu` value based on its findings. See the
+    [inspection mechanism code](https://source.bazel.build/bazel/+/1b73bc37e184e71651eb631223dcce321ba16211:src/main/java/com/google/devtools/build/lib/analysis/config/AutoCpuConverter.java).
+
+Once a toolchain has been selected, corresponding `feature` and `action_config`
+messages in the CROSSTOOL file govern the configuration of the build (that is,
+items described earlier in this document). These messages allow the
+implementation of fully fledged C++ features in Bazel without modifying the
+Bazel binary. C++ rules support multiple unique actions documented in detail
+[in the Bazel source code](https://source.bazel.build/bazel/+/4f547a7ea86df80e4c76145ffdbb0c8b75ba3afa:tools/build_defs/cc/action_names.bzl).
+
+## CROSSTOOL features
+
+A feature is an entity that requires non-default command-line flags, actions,
+constraints on the execution environment, or dependency alterations. A feature
+can be something as simple as allowing BUILD files to select configurations of
+flags, such as `treat_warnings_as_errors`, or interact with the C++ rules and
+include new compile actions and inputs to the compilation, such as
+`header_modules` or `thin_lto`.
+
+Ideally, a toolchain definition consists of a set of features, where each
+feature consists of multiple flag groups, each defining a list of flags that
+apply to specific Bazel actions.
+
+A feature is specified by name, which allows full decoupling of the CROSSTOOL
+configuration from Bazel releases. In other words, a Bazel release does not
+affect the behavior of CROSSTOOL configurations as long as those configurations
+do not require the use of new features.
+
+A feature is enabled only when both Bazel and the CROSSTOOL configuration
+support it.
+
+Features can have interdependencies, depend on command line flags, `BUILD` file
+settings, and other variables.
+
+### Feature relationships
+
+Dependencies are typically managed directly with Bazel, which simply enforces
+the requirements and manages conflicts intrinsic to the nature of the features
+defined in the build. The toolchain specification allows for more granular
+constraints for use directly within the CROSSTOOL file that govern feature
+support and expansion. These are:
+
+<table>
+  <col width="300">
+  <col width="600">
+  <tr>
+   <td><strong>Constraint</strong>
+   </td>
+   <td><strong>Description</strong>
+   </td>
+  </tr>
+  <tr>
+   <td><code>requires: ['feature1', 'feature2']</code>
+   </td>
+   <td>Feature-level. The feature is supported only if the specified required
+       features are enabled. For example, when a feature is only supported in
+       certain build modes (features <code>opt</code>, <code>dbg</code>, or
+       <code>fastbuild</code>). Multiple `requires` statements are
+       satisfied all at once if any one of them is satisfied.
+   </td>
+  </tr>
+  <tr>
+   <td><code>implies: 'feature'</code>
+   </td>
+   <td>Feature-level. This feature implies the specified feature. For example, a
+       module compile implies the need for module maps, which can be implemented
+       by a repeated <code>implies</code> string in the feature where each of
+       the strings names a specific feature. Enabling a feature also implicitly
+       enables all features implied by it (that is, it functions recursively).
+     <p>
+      Also provides the ability to factor common subsets of functionality out of
+      a set of features, such as the common parts of sanitizers. Implied
+      features cannot be disabled.
+   </td>
+  </tr>
+  <tr>
+   <td><code>provides: 'feature'</code>
+   </td>
+   <td>Feature-level. Indicates that this feature is one of several mutually
+       exclusive alternate features. For example, all of the sanitizers could
+       specify <code>provides: "sanitizer"</code>.
+       <p>
+       This improves error handling by listing the alternatives if the user asks
+       for two or more mutually exclusive features at once.
+   </td>
+  </tr>
+  <tr>
+   <td><code>with_feature: {feature: 'feature1', not_feature: 'feature2']</code>
+   </td>
+   <td>Flag set-level. A feature can specify multiple flag sets with multiple
+     <code>with_feature</code> statements. When <code>with_feature</code> is
+     specified, the flag set will only expand to the build command if all of the
+     feature in the specified <code>feature:</code> set are enabled, and all the
+     features specified in <code>not_feature:</code> set are disabled.
+   </td>
+  </tr>
+</table>
+
+## CROSSTOOL actions
+
+CROSSTOOL actions provide the flexibility to modify the circumstances under
+which an action executes without assuming how the action will be run. An
+<code>action_config</code> specifies the tool binary that an action invokes,
+while a <code>feature</code> specifies the configuration (flags) that determine
+how that tool behaves when the action is invoked.
+
+[Features](#crosstool-features) reference CROSSTOOL actions to signal which
+Bazel actions they affect since CROSSTOOL actions can modify the Bazel action
+graph. The CROSSTOOL file includes actions that have flags and tools associated
+with them, such as `c++-compile`. Flags are assigned to each action by
+associating them with a feature.
+
+Each CROSSTOOL action name represents a single type of action performed by
+Bazel, such as compiling or linking. There is, however, a many-to-one
+relationship between CROSSTOOL actions and Bazel action types, where a Bazel
+action type refers to a Java class that implements an action (such as
+`CppCompileAction`). In particular, the "assembler actions" and "compiler
+actions" in the table below are `CppCompileAction`, while the link actions are
+`CppLinkAction`.
+
+### Assembler actions
+
+<table>
+  <col width="300">
+  <col width="600">
+  <tr>
+   <td><strong>Action</strong>
+   </td>
+   <td><strong>Description</strong>
+   </td>
+  </tr>
+  <tr>
+   <td><code>preprocess-assemble</code>
+   </td>
+   <td>Assemble with preprocessing. Typically for <code>.S</code> files.
+   </td>
+  </tr>
+  <tr>
+   <td><code>assemble</code>
+   </td>
+   <td>Assemble without preprocessing. Typically for <code>.s</code> files.
+   </td>
+  </tr>
+</table>
+
+### Compiler actions
+
+<table>
+  <col width="300">
+  <col width="600">
+  <tr>
+   <td><strong>Action</strong>
+   </td>
+   <td><strong>Description</strong>
+   </td>
+  </tr>
+  <tr>
+   <td><code>cc-flags-make-variable</code>
+   </td>
+   <td>Propagates <code>CC_FLAGS</code> to genrules.
+   </td>
+  </tr>
+  <tr>
+   <td><code>c-compile</code>
+   </td>
+   <td>Compile as C.
+   </td>
+  </tr>
+  <tr>
+   <td><code>c++-compile</code>
+   </td>
+   <td>Compile as C++.
+   </td>
+  </tr>
+  <tr>
+   <td><code>c++-header-parsing</code>
+   </td>
+   <td>Run the compiler's parser on a header file to ensure that the header is
+     self-contained, as it will otherwise produce compilation errors. Applies
+     only to toolchains that support modules.
+   </td>
+  </tr>
+</table>
+
+### Link actions
+
+<table>
+  <col width="300">
+  <col width="600">
+  <tr>
+   <td><strong>Action</strong>
+   </td>
+   <td><strong>Description</strong>
+   </td>
+  </tr>
+  <tr>
+   <td><code>c++-link-dynamic-library</code>
+   </td>
+   <td>Link a shared library containing all of its dependencies.
+   </td>
+  </tr>
+  <tr>
+   <td><code>c++-link-nodeps-dynamic-library</code>
+   </td>
+   <td>Link a shared library only containing <code>cc_library</code> sources.
+   </td>
+  </tr>
+  <tr>
+   <td><code>c++-link-executable</code>
+   </td>
+   <td>Link a final ready-to-run library.
+   </td>
+  </tr>
+</table>
+
+### AR actions
+
+AR actions assemble object files into archive libraries (`.a` files) via `ar`
+and encode some semantics into the name.
+
+<table>
+  <col width="300">
+  <col width="600">
+  <tr>
+   <td><strong>Action</strong>
+   </td>
+   <td><strong>Description</strong>
+   </td>
+  </tr>
+  <tr>
+   <td><code>c++-link-static-library</code>
+   </td>
+   <td>Create a static library (archive).
+   </td>
+  </tr>
+</table>
+
+### LTO actions
+
+<table>
+  <col width="300">
+  <col width="600">
+  <tr>
+   <td><strong>Action</strong>
+   </td>
+   <td><strong>Description</strong>
+   </td>
+  </tr>
+  <tr>
+   <td><code>lto-backend</code>
+   </td>
+   <td>ThinLTO action compiling bitcodes into native objects.
+   </td>
+  </tr>
+  <tr>
+   <td><code>lto-index</code>
+   </td>
+   <td>ThinLTO action generating global index.
+   </td>
+  </tr>
+</table>
+
+## CROSSTOOL `action_config`
+
+A CROSSTOOL `action_config` is a proto message that describes a Bazel action by
+specifying the tool (binary) to invoke during the action and sets of flags,
+defined by features, that apply constraints to the action's execution. A
+CROSSTOOL action takes the following attributes:
+
+<table>
+  <col width="300">
+  <col width="600">
+  <tr>
+   <td><strong>Attribute</strong>
+   </td>
+   <td><strong>Description</strong>
+   </td>
+  </tr>
+  <tr>
+   <td><code>action_name</code>
+   </td>
+   <td>The Bazel action to which this CROSSTOOL action corresponds. Bazel uses
+       this attribute to discover per-action tool and execution requirements.
+   </td>
+  </tr>
+  <tr>
+   <td><code>tool</code>
+   </td>
+   <td>The executable to invoke. This can depend on a feature. A default must be
+       provided.
+   </td>
+  </tr>
+  <tr>
+   <td><code>flag_set</code>
+   </td>
+   <td>A set of flags that applies to a group of actions. Same as for a feature.
+   </td>
+  </tr>
+  <tr>
+   <td><code>env_set</code>
+   </td>
+   <td>A set of environment constraints that applies to a group of actions. Same
+       as for a feature.
+   </td>
+  </tr>
+</table>
+
+A CROSSTOOL `action_config` can require and imply other features and
+<code>action_config</code>s as dictated by the
+[feature relationships](#feature-relationships) described earlier. This behavior
+is similar to that of a feature.
+
+The last two attributes are redundant against the corresponding attributes on
+features and are included because some Bazel actions require certain flags or
+environment variables and we want to avoid unnecessary `ction_config`+`feature`
+pairs. Typically, sharing a single feature across multiple `action_config`s is
+preferred.
+
+You can not define more than one CROSSTOOL `action_config` with the same
+`action_name` within the same toolchain. This prevents ambiguity in tool paths
+and enforces the intention behind `action_config` - that an action's properties
+are clearly described in a single place in the toolchain.
+
+### `tool` messages
+
+A CROSSTOOL `action_config` can specify a set of tools via `tool` messages.
+A `tool` message consists of the following fields:
+
+
+<table>
+  <col width="300">
+  <col width="600">
+  <tr>
+   <td><strong>Field</strong>
+   </td>
+   <td><strong>Description</strong>
+   </td>
+  </tr>
+  <tr>
+   <td><code>tool_path</code>
+   </td>
+   <td>Path to the tool in question (relative to the <code>CROSSTOOL</code>
+       file).
+   </td>
+  </tr>
+  <tr>
+   <td><code>with_feature</code>
+   </td>
+   <td>A set of features that must be enabled for this tool to apply.
+   </td>
+  </tr>
+</table>
+
+For a given CROSSTOOL `action_config`, only a single `tool` message applies its
+tool path and execution requirements to the Bazel action. A tool is selected by
+sequentially parsing `tool` messages on an `action_config` until a tool with a
+`with_feature` set matching the feature configuration is found
+(see [Feature relationships](#feature-relationships) earlier in this document
+for more information). We recommend that you end your tool lists with a default
+tool that corresponds to an empty feature configuration.
+
+
+### Example usage
+
+Features and CROSSTOOL actions can be used together to implement Bazel actions
+with diverse cross-platform semantics. For example, debug symbol generation on
+macOS requires generating symbols in the compile action, then invoking a
+specialized tool during the link action to create  compressed dsym archive, and
+then decompressing that archive to produce the application bundle and `.plist`
+files consumable by Xcode.
+
+With Bazel, this process can instead be implemented as follows, with
+`unbundle-debuginfo` being a Bazel action:
+
+```
+toolchain {
+    action_config {
+        config_name: "c++-link-executable"
+        action_name: "c++-link-executable"
+        tool {
+          with_feature { feature: "generate-debug-symbols" }
+          tool_path: "toolchain/mac/ld-with-dsym-packaging"
+        }
+        tool {
+          tool_path: "toolchain/mac/ld"
+        }
+    }
+
+    feature {
+        name: "generate-debug-symbols"
+        flag_set {
+            action: "c-compile"
+            action: "c++-compile"
+            flag_group {
+                flag: "-g"
+            }
+        }
+        implies: { feature: "unbundle-debuginfo" }
+    }
+}
+```
+
+This same feature can be implemented entirely differently for Linux, which uses
+`fission`, or for Windows, which produces `.pdb` files.  For example, the
+implementation for `fission`-based debug symbol generation might look as
+follows:
+
+```
+toolchain {
+    action_config {
+        name: "c++-compile"
+
+    tool {
+          tool_path: "toolchain/bin/gcc"
+        }
+    }
+
+    feature {
+        name: "generate-debug-symbols"
+        requires { feature: "dbg" }
+        flag_set {
+          action: "c++-compile"
+          flag_group {
+              flag: "-gsplit-dwarf"
+          }
+        }
+        flag_set {
+          action: "c++-link-executable"
+          flag_group {
+              flag: "-Wl"
+              flag: "--gdb-index"
+          }
+        }
+      }
+    }
+}
+```
+
+### Flag groups
+
+CROSSTOOL allows you to bundle flags into groups that serve a specific purpose.
+You can specify a flag within the CROSSTOOL file using pre-defined variables
+within the flag value, which the compiler expands when adding the flag to the
+build command. For example:
+
+```
+  flag_group {
+    flag: "%{output_file_path}
+  }
+```
+
+In this case, the contents of the flag will be replaced by the output file path
+of the action.
+
+Flag groups are expanded to the build command in the order in which they appear
+in the `CROSSTOOL` file, top-to-bottom, left-to-right.
+
+For flags that need to repeat with different values when added to the build
+command, the flag group can iterate variables of type `list`. For example, the
+variable `include_path` of type `list`:
+
+```
+   flag_group {
+    iterate_over: "include_paths"
+    flag: "-I%{include_paths}"
+  }
+```
+
+expands to `-I<path>` for each path element in the `include_paths` list. All
+flags (or `flag_group`s) in the body of a flag group declaration are expanded as
+a unit. For example:
+
+```
+   flag_group {
+    iterate_over: "include_paths"
+    flag: "-I"
+    flag: "%{include_paths}"
+  }
+```
+
+expands to `-I <path>` for each path element in the `include_paths` list.
+
+A variable can repeat multiple times. For example:
+
+```
+   flag_group {
+    iterate_over: "include_paths"
+    flag: "-iprefix=%{include_paths}"
+    flag: "-isystem=%{include_paths}"
+  }
+```
+
+expands to:
+
+```
+  -iprefix=<inc0> -isystem=<inc0> -iprefix=<inc1> -isystem=<inc1>
+```
+
+Variables can correspond to structures accessible using dot-notation. For
+example:
+
+```
+   flag_group {
+    flag: "-l%{libraries_to_link.name}"
+  }
+```
+
+Structures can be nested and may also contain sequences. To prevent name clashes
+and to be explicit, you must specify the full path through the fields. For
+example:
+
+```
+   flag_group {
+    iterate_over: "libraries_to_link"
+    flag_group {
+      iterate_over: "libraries_to_link.shared_libraries"
+      flag: "-l%{libraries_to_link.shared_libraries.name}"
+    }
+  }
+```
+
+### Conditional expansion
+
+Flag groups support conditional expansion based on the presence of a particular
+variable or its field using the `expand_if_all_available`, `expand_if_none_available`,
+`expand_if_true`, `expand_if_false`, or `expand_if_equal` messages. For example:
+
+```
+   flag_group {
+    iterate_over: "libraries_to_link"
+    flag_group {
+      iterate_over: "libraries_to_link.shared_libraries"
+      flag_group {
+        expand_if_all_available: "libraries_to_link.shared_libraries.is_whole_archive"
+        flag: "--whole_archive"
+      }
+      flag_group {
+        flag: "-l%{libraries_to_link.shared_libraries.name}"
+      }
+      flag_group {
+        expand_if_all_available: "libraries_to_link.shared_libraries.is_whole_archive"
+        flag: "--no_whole_archive"
+      }
+    }
+  }
+```
+
+**Note:** The `--whole_archive` and `--no_whole_archive` options are added to
+the build command only when a currently iterated library has an
+`is_whole_archive` field.
+
+## CROSSTOOL reference
+
+This section provides a reference of build variables, features, and other
+information required to successfully configure CROSSTOOL.
+
+### CROSSTOOL build variables
+
+The following is a reference of CROSSTOOL build variables.
+
+**Note:** `[action]` indicates the relevant action type.
+
+<table>
+  <col width="300">
+  <col width="600">
+  <tr>
+   <td><strong>Variable</strong>
+   </td>
+   <td><strong>Description</strong>
+   </td>
+  </tr>
+  <tr>
+   <td><strong><code>source_file</code></strong>
+   </td>
+   <td><code>[compile]</code> Source file to compile.
+   </td>
+  </tr>
+  <tr>
+   <td><strong><code>input_file</code></strong>
+   </td>
+   <td><code>[strip]</code> Artifact to strip.
+   </td>
+  </tr>
+  <tr>
+   <td><strong><code>output_file</code></strong>
+   </td>
+   <td><code>[compile]</code> Compilation output.
+   </td>
+  </tr>
+  <tr>
+   <td><strong><code>output_assembly_file</code></strong>
+   </td>
+   <td><code>[compile]</code> Emitted assembly file. Applies only when the
+       <code>compile</code> action emits assembly text, typically when using the
+       <code>--save_temps</code> flag. The contents are the same as for
+       <code>output_file</code>.
+   </td>
+  </tr>
+  <tr>
+   <td><strong><code>output_preprocess_file</code></strong>
+   </td>
+   <td><code>[compile]</code> Preprocessed output. Applies only to compile
+       actions that only preprocess the source files, typically when using the
+     <code>--save_temps</code> flag. The contents are the same as for
+     <code>output_file</code>.
+   </td>
+  </tr>
+  <tr>
+   <td><strong><code>includes</code></strong>
+   </td>
+   <td><code>[compile]</code> Sequence of files the compiler must
+       unconditionally include in the compiled source.
+   </td>
+  </tr>
+  <tr>
+   <td><strong><code>include_paths</code></strong>
+   </td>
+   <td><code>[compile]</code> Sequence directories in which the compiler
+       searches for headers included using <code>#include&lt;foo.h&gt;</code>
+       and <code>#include "foo.h"</code>.
+   </td>
+  </tr>
+  <tr>
+   <td><strong><code>quote_include_paths</code></strong>
+   </td>
+   <td><code>[compile]</code> Sequence of <code>-iquote</code> includes -
+       directories in which the compiler searches for headers included using
+       <code>#include&lt;foo.h&gt;</code>.
+   </td>
+  </tr>
+  <tr>
+   <td><strong><code>system_include_paths</code></strong>
+   </td>
+   <td><code>[compile]</code> Sequence of <code>-isystem</code> includes -
+       directories in which the compiler searches for headers included using
+       <code>#include "foo.h"</code>.
+   </td>
+  </tr>
+  <tr>
+   <td><strong><code>dependency_file</code></strong>
+   </td>
+   <td><code>[compile]</code> The <code>.d</code> dependency file generated by
+       the compiler.
+   </td>
+  </tr>
+  <tr>
+   <td><strong><code>preprocessor_defines</code></strong>
+   </td>
+   <td><code>[compile]</code> Sequence of <code>defines</code>, such as
+       <code>--DDEBUG</code>.
+   </td>
+  </tr>
+  <tr>
+   <td><strong><code>pic</code></strong>
+   </td>
+   <td><code>[compile]</code> Compiles the output as position-independent code.
+   </td>
+  </tr>
+  <tr>
+   <td><strong><code>gcov_gcno_file</code></strong>
+   </td>
+   <td><code>[compile]</code> The <code>gcov</code> coverage file.
+   </td>
+  </tr>
+  <tr>
+   <td><strong><code>per_object_debug_info_file</code></strong>
+   </td>
+   <td><code>[compile]</code> The per-object debug info (<code>.dwp</code>)
+       file.
+   </td>
+  </tr>
+  <tr>
+   <td><strong><code>stripotps</code></strong>
+   </td>
+   <td><code>[strip]</code> Sequence of <code>stripopts</code>.
+   </td>
+  </tr>
+  <tr>
+   <td><strong><code>legacy_compile_flags</code></strong>
+   </td>
+   <td><code>[compile]</code> Sequence of flags from legacy CROSSTOOL fields
+       such as <code>compiler_flag</code>, <code>optional_compiler_flag</code>,
+     <code>cxx_flag</code>, and <code>optional_cxx_flag</code>.
+   </td>
+  </tr>
+  <tr>
+   <td><strong><code>user_compile_flags</code></strong>
+   </td>
+   <td><code>[compile]</code> Sequence of flags from either the
+       <code>copt</code> rule attribute or the <code>--copt</code>,
+       <code>--cxxopt</code>, and <code>--conlyopt</code> flags.
+   </td>
+  </tr>
+  <tr>
+   <td><strong><code>unfiltered_compile_flags</code></strong>
+   </td>
+   <td><code>[compile]</code> Sequence of flags from the
+       <code>unfiltered_cxx_flag</code> legacy CROSSTOOL field or the
+       <code>unfiltered _compile_flags</code> feature. These are not filtered by
+       the <code>nocopts</code> rule attribute.
+   </td>
+  </tr>
+  <tr>
+   <td><strong><code>sysroot</code></strong>
+   </td>
+   <td>The <code>sysroot</code>.
+   </td>
+  </tr>
+  <tr>
+   <td><strong><code>runtime_library_search_directories</code></strong>
+   </td>
+   <td><code>[link]</code> Entries in the linker runtime search path (usually
+       set with the <code>-rpath</code> flag).
+   </td>
+  </tr>
+  <tr>
+   <td><strong><code>library_search_directories</code></strong>
+   </td>
+   <td><code>[link]</code> Entries in the linker search path (usually set with
+       the <code>-L</code> flag).
+   </td>
+  </tr>
+  <tr>
+   <td><strong><code>libraries_to_link</code></strong>
+   </td>
+   <td><code>[link]</code> Flags providing files to link as inputs in the linker
+       invocation.
+   </td>
+  </tr>
+  <tr>
+   <td><strong><code>def_file_path</code></strong>
+   </td>
+   <td><code>[link]</code> Location of def file used on Windows with MSVC.
+   </td>
+  </tr>
+  <tr>
+   <td><strong><code>linker_param_file</code></strong>
+   </td>
+   <td><code>[link]</code> Location of linker param file created by bazel to
+       overcome command line length limit.
+   </td>
+  </tr>
+  <tr>
+   <td><strong><code>output_execpath</code></strong>
+   </td>
+   <td><code>[link]</code> execpath of the output of the linker.
+   </td>
+  </tr>
+  <tr>
+   <td><strong><code>generate_interface_library</code></strong>
+   </td>
+   <td><code>[link]</code> "yes"|"no" depending on whether interface library
+       should be generated.
+   </td>
+  </tr>
+  <tr>
+   <td><strong><code>interface_library_builder_path</code></strong>
+   </td>
+   <td><code>[link]</code> Path to the interface library builder tool.
+   </td>
+  </tr>
+  <tr>
+   <td><strong><code>interface_library_input_path</code></strong>
+   </td>
+   <td><code>[link]</code> Input for the interface library ifso builder tool.
+   </td>
+  </tr>
+  <tr>
+   <td><strong><code>interface_library_output_path</code></strong>
+   </td>
+  <td><code>[link]</code> Path where to generate interface library using the
+      <code>ifso</code> builder tool.
+   </td>
+  </tr>
+  <tr>
+   <td><strong><code>legacy_link_flags</code></strong>
+   </td>
+   <td><code>[link]</code> Linker flags coming from the legacy crosstool fields.
+   </td>
+  </tr>
+  <tr>
+   <td><strong><code>user_link_flags</code></strong>
+   </td>
+   <td><code>[link]</code> Linker flags coming from the <code>--linkopt</code>
+       or <code>linkopts</code> attribute.
+   </td>
+  </tr>
+  <tr>
+   <td><strong><code>symbol_counts_output</code></strong>
+   </td>
+   <td><code>[link]</code> Path to which to write symbol counts.
+   </td>
+  </tr>
+  <tr>
+   <td><strong><code>linkstamp_paths</code></strong>
+   </td>
+   <td><code>[link]</code> A build variable giving linkstamp paths.
+   </td>
+  </tr>
+  <tr>
+   <td><strong><code>force_pic</code></strong>
+   </td>
+   <td><code>[link]</code> Presence of this variable indicates that PIC code
+       should be generated.
+   </td>
+  </tr>
+  <tr>
+   <td><strong><code>strip_debug_symbols</code></strong>
+   </td>
+   <td><code>[link]</code> Presence of this variable indicates that the debug
+       symbols should be stripped.
+   </td>
+  </tr>
+  <tr>
+   <td><strong><code>is_cc_test</code></strong>
+   </td>
+   <td><code>[link]</code> Truthy when current action is a <code>cc_test</code>
+       linking action, false otherwise.
+   </td>
+  </tr>
+  <tr>
+   <td><strong><code>is_using_fission</code></strong>
+   </td>
+   <td><code>[link]</code> Presence of this variable indicates that files were
+       compiled with fission. Debug info is in <code>.dwo</code> files instead
+       of <code>.o</code> files and the linker needs to know this.
+   </td>
+  </tr>
+</table>
+
+
+
+### CROSSTOOL features
+
+The following is a reference of CROSSTOOL features and their activation
+conditions.
+
+<table>
+  <col width="300">
+  <col width="600">
+  <tr>
+   <td><strong>Feature</strong>
+   </td>
+   <td><strong>Activation Condition</strong>
+   </td>
+  </tr>
+  <tr>
+   <td><strong><code>opt | dbg | fastbuild</code></strong>
+   </td>
+   <td>Enabled by default based on compilation mode.
+   </td>
+  </tr>
+  <tr>
+   <td><strong><code>static_linking_mode | dynamic_linking_mode</code></strong>
+   </td>
+   <td>Enabled by default based on linking mode.
+   </td>
+  </tr>
+  <tr>
+   <td><strong><code>random_seed</code></strong>
+   </td>
+   <td>Enabled by default.
+   </td>
+  </tr>
+  <tr>
+   <td><strong><code>dependency_file</code></strong>
+   </td>
+   <td>Enabled by default.
+   </td>
+  </tr>
+  <tr>
+   <td><strong><code>per_object_debug_info</code></strong>
+   </td>
+   <td>Enabled if the `supports_fission` attribute is set in the CROSSTOOL file
+       and the current compilation mode is specified in the
+       <code>--fission</code> flag.
+   </td>
+  </tr>
+  <tr>
+   <td><strong><code>pic</code></strong>
+   </td>
+   <td>Required if the target needs PIC objects for dynamic libraries, always
+       enabled, pic build variable is present when PIC compilation is requested.
+   </td>
+  </tr>
+</table>
