# 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.

import("//build/toolchain/variant_tags.gni")

# The list of all valid toolchain tag strings that can appear inside a
# `tags` definition when calling variant_toolchain_suite(). Note that the
# `toolchain_variant.tags` value will contain both the tags from the
# base toolchain, and those from the corresponding variant descriptor, if any.
#
# Tags are used to specify various properties of a toolchain, and allows some
# filtering to happen during variant toolchain selection, or directly inside
# a target's build rules by looking at `toolchain_variant.tags`.
#
all_toolchain_tags = all_variant_tags
all_toolchain_tags += [
  # This tag is used for toolchains that are only used to build parts of the
  # Zircon kernel. Generally this means there is no C standard library. Some
  # Zircon targets affect their build settings based on the presence of this
  # tag.
  "kernel",

  # This tag is used by Zircon toolchains that generate static PIE executable
  # binaries.
  "static-pie",

  # This tag is used by Zircon toolchains that generate code that assumes that
  # unaligned access will crash the system.
  "strict-align",

  # This tag is used by Zircon toolchain that generate code that doesn't link
  # to any system runtime (e.g. the C library).
  "standalone",

  # This tag is used by Zircon toolchains that enables the 'tiny' code generation
  # model (i.e. the program and its statically defined symbols must be within 1 GiB).
  "tiny",
]
