Delete file created by strangeness in import-patch.

PiperOrigin-RevId: 243690410
diff --git a/site/docs/toolchains.md.orig b/site/docs/toolchains.md.orig
deleted file mode 100644
index a74e803..0000000
--- a/site/docs/toolchains.md.orig
+++ /dev/null
@@ -1,463 +0,0 @@
----
-layout: documentation
-title: Toolchains
----
-
-# Toolchains
-
-- [Overview](#overview)
-- [Motivation](#motivation)
-- [Writing rules that use toolchains](#writing-rules-that-use-toolchains)
-- [Defining toolchains](#defining-toolchains)
-- [Registering and building with toolchains](#registering-and-building-with-toolchains)
-- [Toolchain resolution](#toolchain-resolution)
-- [Debugging toolchains](#debugging-toolchains)
-
-## Overview
-
-This page describes the toolchain framework -- a way for rule authors to
-decouple their rule logic from platform-based selection of tools. It is
-recommended to read the
-<!-- begin-block:external
-[rules](skylark/rules.html)
-end-block -->
-<!-- begin-block:internal -->
-[rules](https://g3doc.corp.google.com/devtools/blaze/rules/g3doc/rules.md)
-<!-- begin-block:shared -->
-and
-<!-- begin-block:external
-[platforms](platforms.html)
-end-block -->
-<!-- begin-block:internal -->
-[platforms](https://g3doc.corp.google.com/devtools/blaze/subteams/configurability/g3doc/platforms.md)
-<!-- begin-block:shared -->
-pages before continuing. This page covers why toolchains are needed, how to
-define and use them, and how Bazel selects an appropriate toolchain based on
-platform constraints.
-
-## Motivation
-
-Let's first look at the problem toolchains are designed to solve. Suppose you
-were writing rules to support the "bar" programming language. Your `bar_binary`
-rule would compile `*.bar` files using the `barc` compiler, a tool that itself
-is built as another target in your workspace. Since users who write `bar_binary`
-targets shouldn't have to specify a dependency on the compiler, you make it an
-implicit dependency by adding it to the rule definition as a private attribute.
-
-```python
-bar_binary = rule(
-    implementation = _bar_binary_impl,
-    attrs = {
-        "srcs": attr.label_list(allow_files = True),
-        ...
-        "_compiler": attr.label(
-            default = "//bar_tools:barc_linux",  # the compiler running on linux
-            providers = [BarcInfo],
-        ),
-    },
-)
-```
-
-`//bar_tools:barc_linux` is now a dependency of every `bar_binary` target, so
-it'll be built before any `bar_binary` target. It can be accessed by the rule's
-implementation function just like any other attribute:
-
-```python
-BarcInfo = provider(
-    doc = "Information about how to invoke the barc compiler.",
-    # In the real world, compiler_path and system_lib might hold File objects,
-    # but for simplicity we'll make them strings instead. arch_flags is a list
-    # of strings.
-    fields = ["compiler_path", "system_lib", "arch_flags"],
-)
-
-def _bar_binary_impl(ctx):
-    ...
-    info = ctx.attr._compiler[BarcInfo]
-    command = "%s -l %s %s" % (
-        info.compiler_path,
-        info.system_lib,
-        " ".join(info.arch_flags),
-    )
-    ...
-```
-
-The issue here is that the compiler's label is hardcoded into `bar_binary`, yet
-different targets may need different compilers depending on what platform they
-are being built for and what platform they are being built on -- called the
-*target platform* and *execution platform*, respectively. Furthermore, the rule
-author does not necessarily even know all the available tools and platforms, so
-it is not feasible to hardcode them in the rule's definition.
-
-A less-than-ideal solution would be to shift the burden onto users, by making
-the `_compiler` attribute non-private. Then individual targets could be
-hardcoded to build for one platform or another.
-
-```python
-bar_binary(
-    name = "myprog_on_linux",
-    srcs = ["mysrc.bar"],
-    compiler = "//bar_tools:barc_linux",
-)
-
-bar_binary(
-    name = "myprog_on_windows",
-    srcs = ["mysrc.bar"],
-    compiler = "//bar_tools:barc_windows",
-)
-```
-
-We can improve on this solution by using `select` to choose the `compiler`
-[based on the platform](configurable-attributes.html):
-
-```python
-config_setting(
-    name = "on_linux",
-    constraint_values = [
-        "@bazel_tools//platforms:linux",
-    ],
-)
-
-config_setting(
-    name = "on_windows",
-    constraint_values = [
-        "@bazel_tools//platforms:windows",
-    ],
-)
-
-bar_binary(
-    name = "myprog",
-    srcs = ["mysrc.bar"],
-    compiler = select({
-        ":on_linux": "//bar_tools:barc_linux",
-        ":on_windows": "//bar_tools:barc_windows",
-    }),
-)
-```
-
-But this is tedious and a bit much to ask of every single `bar_binary` user.
-If this style is not used consistently throughout the workspace, it leads to
-builds that work fine on a single platform but fail when extended to
-multi-platform scenarios. It also does not address the problem of adding support
-for new platforms and compilers without modifying existing rules or targets.
-
-The toolchain framework solves this problem by adding an extra level of
-indirection. Essentially, you declare that your rule has an abstract dependency
-on *some* member of a family of targets (a toolchain type), and Bazel
-automatically resolves this to a particular target (a toolchain) based on the
-applicable platform constraints. Neither the rule author nor the target author
-need know the complete set of available platforms and toolchains.
-
-## Writing rules that use toolchains
-
-Under the toolchain framework, instead of having rules depend directly on tools,
-they instead depend on *toolchain types*. A toolchain type is a simple target
-that represents a class of tools that serve the same role for different
-platforms. For instance, we can declare a type that represents the bar compiler:
-
-```python
-# By convention, toolchain_type targets are named "toolchain_type" and
-# distinguished by their package path. So the full path for this would be
-# //bar_tools:toolchain_type.
-toolchain_type(name = "toolchain_type")
-```
-
-The rule definition in the previous section is modified so that instead of
-taking in the compiler as an attribute, it declares that it consumes a
-`//bar_tools:toolchain_type` toolchain.
-
-```python
-bar_binary = rule(
-    implementation = _bar_binary_impl,
-    attrs = {
-        "srcs": attr.label_list(allow_files = True),
-        ...
-        # No `_compiler` attribute anymore.
-    },
-    toolchains = ["//bar_tools:toolchain_type"]
-)
-```
-
-The implementation function now accesses this dependency under `ctx.toolchains`
-instead of `ctx.attr`, using the toolchain type as the key.
-
-```python
-def _bar_binary_impl(ctx):
-    ...
-    info = ctx.toolchains["//bar_tools:toolchain_type"].barcinfo
-    # The rest is unchanged.
-    command = "%s -l %s %s" % (
-        info.compiler_path,
-        info.system_lib,
-        " ".join(info.arch_flags),
-    )
-    ...
-```
-
-`ctx.toolchains["//bar_tools:toolchain_type"]` returns the
-<!-- begin-block:external
-[`ToolchainInfo` provider](skylark/lib/platform_common.html#ToolchainInfo)
-end-block -->
-<!-- begin-block:internal -->
-[`ToolchainInfo` provider](http://g3doc/devtools/blaze/rules/g3doc/lib/ToolchainInfo.html)
-<!-- begin-block:shared -->
-of whatever target Bazel resolved the toolchain dependency to. The fields of the
-`ToolchainInfo` object are set by the underlying tool's rule; in the next
-section we'll define this rule such that there is a `barcinfo` field that wraps
-a `BarcInfo` object.
-
-Bazel's procedure for resolving toolchains to targets is described
-[below](#toolchain-resolution). Only the resolved toolchain target is actually
-made a dependency of the `bar_binary` target, not the whole space of candidate
-toolchains.
-
-## Defining toolchains
-
-To define some toolchains for a given toolchain type, we need three things:
-
-1. A language-specific rule representing the kind of tool or tool suite. By
-   convention this rule's name is suffixed with "\_toolchain".
-
-2. Several targets of this rule type, representing versions of the tool or tool
-   suite for different platforms.
-
-3. For each such target, an associated target of the generic
-<!-- begin-block:external
-[`toolchain`](be/platform.html#toolchain)
-end-block -->
-<!-- begin-block:internal -->
-[`toolchain`](https://g3doc.corp.google.com/devtools/blaze/g3doc/be/platform.html#toolchain)
-<!-- begin-block:shared -->
-rule, to provide metadata used by the toolchain framework.
-
-For our running example, here's a definition for a `bar_toolchain` rule. Our
-example has only a compiler, but other tools such as a linker could also be
-grouped underneath it.
-
-```python
-def _bar_toolchain_impl(ctx):
-    toolchain_info = platform_common.ToolchainInfo(
-        barcinfo = BarcInfo(
-            compiler_path = ctx.attr.compiler_path,
-            system_lib = ctx.attr.system_lib,
-            arch_flags = ctx.attr.arch_flags,
-        ),
-    )
-    return [toolchain_info]
-
-bar_toolchain = rule(
-    implementation = _bar_toolchain_impl,
-    attrs = {
-        "compiler_path": attr.string(),
-        "system_lib": attr.string(),
-        "arch_flags": attr.string(),
-    },
-)
-```
-
-The rule must return a `ToolchainInfo` provider, which becomes the object that
-the consuming rule retrieves using `ctx.toolchains` and the label of the
-toolchain type. `ToolchainInfo`, like `struct`, can hold arbitrary field-value
-pairs. The specification of exactly what fields are added to the `ToolchainInfo`
-should be clearly documented at the toolchain type. Here we have returned the
-values wrapped in a `BarcInfo` object in order to reuse the schema defined
-above; this style may be useful for validation and code reuse.
-
-Now we can define targets for specific `barc` compilers.
-
-```python
-bar_toolchain(
-    name = "barc_linux",
-    arch_flags = [
-        "--arch=Linux",
-        "--debug_everything",
-    ],
-    compiler_path = "/path/to/barc/on/linux",
-    system_lib = "/usr/lib/libbarc.so",
-)
-
-bar_toolchain(
-    name = "barc_windows",
-    arch_flags = [
-        "--arch=Windows",
-        # Different flags, no debug support on windows.
-    ],
-    compiler_path = "C:\\path\\on\\windows\\barc.exe",
-    system_lib = "C:\\path\\on\\windows\\barclib.dll",
-)
-```
-
-Finally, we create `toolchain` definitions for the two `bar_toolchain` targets.
-These definitions link the language-specific targets to the toolchain type and
-provide the constraint information that tells Bazel when the toolchain is
-appropriate for a given platform.
-
-```python
-toolchain(
-    name = "barc_linux_toolchain",
-    exec_compatible_with = [
-        "@bazel_tools//platforms:linux",
-        "@bazel_tools//platforms:x86_64",
-    ],
-    target_compatible_with = [
-        "@bazel_tools//platforms:linux",
-        "@bazel_tools//platforms:x86_64",
-    ],
-    toolchain = ":barc_linux",
-    toolchain_type = ":toolchain_type",
-)
-
-toolchain(
-    name = "barc_windows_toolchain",
-    exec_compatible_with = [
-        "@bazel_tools//platforms:windows",
-        "@bazel_tools//platforms:x86_64",
-    ],
-    target_compatible_with = [
-        "@bazel_tools//platforms:windows",
-        "@bazel_tools//platforms:x86_64",
-    ],
-    toolchain = ":barc_windows",
-    toolchain_type = ":toolchain_type",
-)
-```
-
-The use of relative path syntax above suggests these definitions are all in the
-same package, but there's no reason the toolchain type, language-specific
-toolchain targets, and `toolchain` definition targets can't all be in separate
-packages.
-
-See the [`go_toolchain`](https://github.com/bazelbuild/rules_go/blob/master/go/private/go_toolchain.bzl)
-for a real-world example.
-
-## Registering and building with toolchains
-
-At this point all the building blocks are assembled, and we just need to make
-the toolchains available to Bazel's resolution procedure. This is done by
-registering the toolchain, either in a `WORKSPACE` file using
-`register_toolchains()`, or by passing the toolchains' labels on the command
-line using the `--extra_toolchains` flag.
-
-```python
-register_toolchains(
-    "//bar_tools:barc_linux_toolchain",
-    "//bar_tools:barc_windows_toolchain",
-    # Target patterns are also permitted, so we could have also written:
-    # "//bar_tools:all",
-)
-```
-
-Now when you build a target that depends on a toolchain type, an appropriate
-toolchain will be selected based on the target and execution platforms.
-
-```python
-# my_pkg/BUILD
-
-platform(
-    name = "my_target_platform",
-    constraint_values = [
-        "@bazel_tools//platforms:linux",
-    ],
-)
-
-bar_binary(
-    name = "my_bar_binary",
-    ...
-)
-```
-
-```sh
-bazel build //my_pkg:my_bar_binary --platforms=//my_pkg:my_target_platform
-```
-
-Bazel will see that `//my_pkg:my_bar_binary` is being built with a platform that
-has `@bazel_tools//platforms:linux` and therefore resolve the
-`//bar_tools:toolchain_type` reference to `//bar_tools:barc_linux_toolchain`.
-This will end up building `//bar_tools:barc_linux` but not
-`//barc_tools:barc_windows`.
-
-## Toolchain Resolution
-
-**Note:** Some Bazel rules do not yet support toolchain resolution.
-
-For each target that uses toolchains, Bazel's toolchain resolution procedure
-determines the target's concrete toolchain dependencies. The procedure takes as input a
-set of required toolchain types, the target platform, the list of available
-execution platforms, and the list of available toolchains. Its outputs are a
-selected toolchain for each toolchain type as well as a selected execution
-platform for the current target.
-
-The available execution platforms and toolchains are gathered from the
-`WORKSPACE` file via
-<!-- begin-block:external
-[`register_execution_platforms`](skylark/lib/globals.html#register_execution_platforms)
-end-block -->
-<!-- begin-block:internal -->
-[`register_execution_platforms`](http://g3doc/devtools/blaze/rules/g3doc/lib/globals.html#register_execution_platforms)
-<!-- begin-block:shared -->
-and
-<!-- begin-block:external
-[`register_toolchains`](skylark/lib/globals.html#register_toolchains).
-end-block -->
-<!-- begin-block:internal -->
-[`register_toolchains`](http://g3doc/devtools/blaze/rules/g3doc/lib/globals.html#register_toolchains).
-<!-- begin-block:shared -->
-Additional execution platforms and toolchains may also be specified on the
-command line via
-<!-- begin-block:external
-[`--extra_execution_platforms`](command-line-reference.html#flag--extra_execution_platforms)
-end-block -->
-<!-- begin-block:internal -->
-[`--extra_execution_platforms`](http://g3doc/devtools/blaze/g3doc/user-manual.html#flag--extra_execution_platforms)
-<!-- begin-block:shared -->
-and
-<!-- begin-block:external
-[`--extra_toolchains`](command-line-reference.html#flag--extra_toolchains).
-end-block -->
-<!-- begin-block:internal -->
-[`--extra_toolchains`](http://g3doc/devtools/blaze/g3doc/user-manual.html#flag--extra_toolchains).
-<!-- begin-block:shared -->
-The host platform is automatically included as an available execution platform.
-Available platforms and toolchains are tracked as ordered lists for determinism,
-
-The resolution steps are as follows.
-
-1. If the target specifies the
-<!-- begin-block:external
-   [`exec_compatible_with` attribute](be/common-definitions.html#common.exec_compatible_with)
-end-block -->
-<!-- begin-block:internal -->
-   [`exec_compatible_with` attribute](https://g3doc.corp.google.com/devtools/blaze/g3doc/be/common-definitions.html#common.exec_compatible_with)
-<!-- begin-block:shared -->
-   (or the rule specifies the
-<!-- begin-block:external
-   [`exec_compatible_with` argument](skylark/lib/globals.html#rule.exec_compatible_with),
-end-block -->
-<!-- begin-block:internal -->
-   [`exec_compatible_with` argument](https://g3doc.corp.google.com/devtools/blaze/rules/g3doc/lib/globals.html#rule.exec_compatible_with),
-<!-- begin-block:shared -->
-   the list of available execution platforms is filtered to remove
-   any that do not match the execution constraints.
-
-2. For each available execution platform, we associate each toolchain type with
-   the first available toolchain, if any, that is compatible with this execution
-   platform and the target platform.
-
-3. Any execution platform that failed to find a compatible toolchain for one of
-   its toolchain types is ruled out. Of the remaining platforms, the first one
-   becomes the current target's execution platform, and its associated
-   toolchains become dependencies of the target.
-
-The chosen execution platform is used to run all actions that the target
-generates.
-
-In cases where the same target can be built in multiple configurations (such as
-for different CPUs) within the same build, the resolution procedure is applied
-independently to each version of the target.
-
-## Debugging toolchains
-
-When adding toolchain support to an existing rule, use the
-`--toolchain_resolution_debug` flag to make toolchain resolution verbose. Bazel
-will output names of toolchains it is checking and skipping during the
-resolution process.