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

group("cmx_allowlist") {
  #  ________  _________  ________  ________
  # |\   ____\|\___   ___\\   __  \|\   __  \
  # \ \  \___|\|___ \  \_\ \  \|\  \ \  \|\  \
  #  \ \_____  \   \ \  \ \ \  \\\  \ \   ____\
  #   \|____|\  \   \ \  \ \ \  \\\  \ \  \___|
  #     ____\_\  \   \ \__\ \ \_______\ \__\
  #    |\_________\   \|__|  \|_______|\|__|
  #    \|_________|
  # This is an allowlist of targets that use CMX (.cmx) files.
  # CMX is the component manifest v1 syntax. There is a migration in progress
  # to CML files, the component manifest v2 syntax. See:
  # https://fuchsia.dev/fuchsia-src/concepts/components/v2/migration
  #
  # Developers are encouraged to migrate to v2. See the migration guide:
  # https://fuchsia.dev/fuchsia-src/development/components/v2/migration
  #
  # The policy at this time is:
  # 1. Use of CMX files outside of fuchsia.git is unrestricted.
  # 2. Pre-existing use of CMX files in fuchsia.git is allowlisted.
  # 3. New usage of CMX files in fuchsia.git is discouraged.
  #    Please see the self-service migration guide.
  # 4. Requests to allowlist new CMX files will be respected, no questions
  #    asked. Please use your best judgement.
  #
  # To add items to the allowlist, please send a change to one of the OWNERS of
  # this file to add an element to the visibility list below.
  # Please allowlist entire directories rather than individual targets as it
  # requires less allowlist churn over time.
  #
  # To regenerate:
  # fx gn refs $(fx get-build-dir) //build/components:cmx_allowlist | sed 's|\(.*\):.*|"\1/*",|' | sort | uniq
  #
  # To trim:
  # scripts/gn/trim_visibility.py --target="//build/components:cmx_allowlist"
  visibility = [
    # TODO(shayba): populate the allowlist with grandfathered targets.
    # Allow unrestricted out of tree usage.
    "*",
    "//third_party/*",
    "//vendor/*",
  ]
}
