# Copyright 2020 The Fuchsia Authors. All rights reserved.
# Use of this source code is governed by a BSD-style license that can be
# found in the LICENSE file.

# The list of all valid variant tag strings that can appear inside a
# variant definition scope, or in `exclude_variant_tags` target or toolchain
# fields.
#
# Tags are used to specify various properties of a variant, and allows some
# filtering to happen during variant toolchain selection, or directly inside
# a target's build rules by looking at `toolchain_variant.variant_tags`.
#
all_variant_tags = [
  # The `instrumented` tag is used for variants that generate instrumented
  # machine code (e.g. profiling and sanitizers). As a special case, if this
  # tag is listed by a variant descriptor, the global
  # toolchain_variant.instrumented flag will be set to true in the
  # context of the corresponding variant toolchain.
  "instrumented",

  # The `instrumentation-runtime` tag is used for instrumented variants that
  # also require linking a specific instrumentation runtime to linkable
  # binaries. Note that any variant that has this tag should also have
  # the `instrumented` tag as well.
  "instrumentation-runtime",

  # The `asan` tag is used for variants that implement address-sanitizers.
  # These should always list `instrumented` and `instrumentation-runtime`
  # as well.
  "asan",

  # The `ubsan` tag is used for variants that implement undefined-behaviour
  # sanitizers. These should always list 'instrumented' as well.
  "ubsan",

  # The `sancov` tag is used for variants that implement code coverage
  # collection.
  "sancov",

  # The `replaces-allocator` tag is used for instrumentation runtimes that
  # provide alternative implementations of the standard C/C++ memory allocation
  # APIs.
  "replaces-allocator",

  # The `lsan` tag is used for variants that implement leak checking.
  "lsan",

  # The `fuzzer` tag is used for variants that implement fuzzers only.
  "fuzzer",

  # The `gcc` tag is used for variants that use GCC instead of Clang to
  # build C/C++ binaries. This should only be used for Zircon specific
  # toolchains.
  "gcc",

  # The `profile` tag is used for profile instrumentation.
  "profile",

  # The `coverage` tag is used for coverage instrumentation.
  "coverage",

  # The `lto` tag is used for LTO and ThinLTO.
  "lto",

  # The 'breaks-gc-sections' tag is used for variants that cannot build
  # linkable binaries properly with --gc-sections, which instructs the
  # linker to remove unused sections from the output.
  "breaks-gc-sections",

  # The 'kernel-excluded' and 'kernel-only' tags are used to indicate
  # that a given variant should never be applied to the kernel toolchains,
  # or should only be applied to them respectively. Note that these are
  # treated specially by toolchain_variant_suite(), based on the
  # presence of the 'kernel' tag in the toolchain suite's tags.
  "kernel-excluded",
  "kernel-only",
]
