# 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 `needs-compiler-abi` tag is used for variants with an instrumentation
  # runtime or similar that is built to rely on the Fuchsia Compiler ABI.  This
  # can be omitted if the runtime calls will never be made by non-buggy code.
  "needs-compiler-abi",

  # The `needs-writable-globals` tag is used for variants with instrumentation
  # (via runtime or direct code) that of necessity involves making a binary
  # with a writable data segment, i.e. has mutable globals of some kind.
  "needs-writable-globals",

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

  # The `hwasan` tag is used for variants that use Hardware-assisted AddressSanitizer.
  "hwasan",

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

  # 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 `debugdata` tag is used for all instrumentation that publishes data via
  # the fuchsia.debugdata protocols.
  "debugdata",

  # The `llvm-profdata` tag is used for all instrumentation that emits the
  # `llvm-profdata` format.
  "llvm-profdata",

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

  # The `uses-shadow` tag is used for sanitizers that occupy a large region of
  # the address space with a sparse mapping for "shadow memory".
  "uses-shadow",

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

  # `fuchsia-only/excluded` are used to indicate that a given variant
  # should only/never be applied to toolchains where current_os == "fuchsia".
  "fuchsia-excluded",
  "fuchsia-only",
]
