# 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 `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",
]
