| # Bazel Features | |
| Use this to determine the availability of a Bazel feature in your ruleset. It works under the hood by comparing the Bazel version against a known range in which the feature is available. Example usage: | |
| ```starlark | |
| load("@bazel_features//:features.bzl", "bazel_features") | |
| if bazel_features.toolchains.has_optional_toolchains: | |
| # Do something | |
| ``` | |
| The [`features.bzl`](features.bzl) file contains the list of features. | |
| ### Accessing globals | |
| References to global Starlark symbols that do not exist cause load time errors, which means that their availability in Bazel cannot be tested via a regular feature. | |
| Instead, use `bazel_features.globals.<symbol>`, which is `<symbol>` if the symbol is available and `None` else. | |
| See [`globals.bzl`](private/globals.bzl) for the list of symbols that can be checked for in this way. |