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

# Definitions to build each of the Fuchsia SDKs.

import("//build/config/build_api_module.gni")
import("//build/config/fuchsia/platform_version.gni")
import("//build/config/fuchsia/target_api_level.gni")
import("//build/dart/toolchain.gni")
import("//build/fidl/toolchain.gni")
import("//build/sdk/config.gni")
import("//build/sdk/idk.gni")
import("//build/sdk/idk_archive.gni")
import("//build/sdk/sdk_collection.gni")
import("//build/sdk/sdk_documentation.gni")
import("//build/sdk/sdk_final_manifest_golden.gni")
import("//build/sdk/sdk_molecule.gni")
import("//tools/check-licenses/build/license_data.gni")
import("config.gni")

visibility = [ ":*" ]

# Verify that `override_target_api_level` is actually supported.
if (override_target_api_level != "PLATFORM") {
  _override_is_supported = false
  foreach(supported_level, platform_version.build_time_supported_api_levels) {
    if (supported_level == override_target_api_level) {
      _override_is_supported = true
    }
  }

  # TODO(https://fxbug.dev/330709069): We should actually assert this, but doing
  # so breaks some builders that are out of sync with the support levels. We
  # should remove those builders and make this an assertion.
  if (!_override_is_supported) {
    print(
        "`override_target_api_level` (${override_target_api_level}) is not one of the supported API levels: ${platform_version.build_time_supported_api_levels}")
    print("Attempting to build anyways, but this may not go well...")
  }
}

# A list of sdk_collection() targets that correspond to all
# IDK targets in the "public" and "partner" category. For now
# this is only the Fuchsia Core IDK, with the exceptional addition
# of //sdk:zircon_sysroot. See the documentation comment for the
# latter to understand why this is needed.
#
# Note that //sdk:zircon_sysroot simply depends on
# //zircon/public/sysroot/sdk:sysroot_sdk which is already
# a transitive dependency of //sdk:core, so technically adding
# this target here only ensures that `fx build sdk` will
# also create $OUTPUT_DIR/sdk/exported/zircon_sysroot/ by
# default, and should not affect other uses of _sdk_public_deps.
_sdk_public_deps = [
  ":core",
  ":zircon_sysroot",
]

# This default target should depend on all public or partner IDKs.
group("sdk") {
  visibility += [ "//:*" ]

  testonly = true

  public_deps = _sdk_public_deps
  data_deps = [ ":sdk_source_set_list" ]
}

# This file contains the list of all source files used in sdk_source_set()
# targets reachable from //sdk:sdk. The schema is simply a JSON list, where
# each item is the path to a single source file, relative to the source
# directory. Path are not sorted and appear in order of metadata walk, which
# is unstable.
build_api_module("sdk_source_set_list") {
  visibility += [ "//:*" ]
  testonly = true
  data_keys = [ "sdk_source_set_sources" ]
  deps = _sdk_public_deps
}

# Compatibility testing goldens for SDK publishable FIDLs.
# This is a list of scopes like { src = "", dst = "" } specifying which files
# to copy from the build directory into the source tree.
generated_file("compatibility_testing_goldens") {
  visibility += [ "*" ]
  testonly = true
  deps = [
    # Pulls in SDKs containing the FIDLs to generate golden files for
    "//sdk",
  ]
  outputs = [ "$root_build_dir/compatibility_testing_goldens.json" ]
  output_conversion = "json"
  data_keys = [ "compatibility_testing_goldens" ]
}

# Contains the list of all plasa fragment files, which have a dump of the
# public API surfaces.
generated_file("plasa_manifest") {
  visibility += [ "//sdk/ctf/plasa:*" ]
  testonly = true
  data_keys = [ "plasa" ]
  outputs = [ "$root_build_dir/manifest.plasa.json" ]
  output_conversion = "json"
  deps = _sdk_public_deps
}

# Generates, validates, and archive the "final" IDK, including prebuilt binaries
# for several target_cpu architectures and API levels.
group("final_fuchsia_idk") {
  visibility += [ "*" ]
  deps = [
    ":final_fuchsia_idk.archive",
    ":final_fuchsia_idk.exported",
    ":final_fuchsia_idk.validation",
  ]
  testonly = true
}

# This targets generates a "final" IDK archive, including prebuilt binaries for
# several target_cpu architectures.
idk("final_fuchsia_idk.exported") {
  visibility += [ "*" ]
  output_name = "fuchsia_idk"
  sdk_collection_label = ":core"
  target_cpus = idk_target_cpus
  api_levels = platform_version.build_time_supported_api_levels

  # TODO(https://fxbug.dev/306723826): Deal with the fact that the mac builders
  # are too slow to enable this setting, and therefore the mac IDK won't have
  # per-api-level prebuilts.
  if (host_os == "mac") {
    api_levels = []
  }
}

idk_archive("final_fuchsia_idk.archive") {
  visibility += [ "*" ]
  idk = ":final_fuchsia_idk.exported"
  idk_output_name = "fuchsia_idk"
}

group("final_fuchsia_idk.validation") {
  deps = []
  if (host_os == "linux") {
    deps += [
      # Not everything builds on the mac builders, so not everything shows up in
      # the golden files.
      #
      # TODO(https://fxbug.dev/306723826): Deal with the fact that the mac
      # builders are inconsistent.
      ":final_fuchsia_idk_manifest_golden",

      # Run the Bazel SDK test suite against the final exported directory,
      # TODO(https://fxbug.dev/42075205): Make the Bazel SDK test suite runnable on MacOS!
      "//build/bazel/bazel_sdk:bazel_sdk_tests_idk",
    ]
  }
  testonly = true
}

sdk_final_manifest_golden("final_fuchsia_idk_manifest_golden") {
  golden = "manifests/fuchsia_idk.manifest"
  idk_name = "fuchsia_idk"
  idk_exported_label = ":final_fuchsia_idk.exported"
}

# NOTHING TO SEE HERE FOLKS.
#
# This build rule is an implementation detail. It should probably get
# consolidated with ":final_fuchsia_idk".
sdk_collection("core") {
  visibility += [ "*" ]

  category = "partner"
  id = sdk_id

  deps = [
    # NOTE: Don't add any other sdk_molecules here.  Instead, add atoms to the
    # ":fuchsia_idk_atoms" or ":fuchsia_idk_atoms_host_tools" sdk_molecule.
    ":fuchsia_idk_atoms",
  ]
}

# A "molecule" of SDK atoms exposing the stable and officially supported APIs
# and ABI of the Fuchsia platform.
#
# Due to limitations of the build system at the GN/Bazel boundary, this cannot
# contain testonly atoms. Libraries and packages for use in tests absolutely
# belong in the IDK, but unfortunately, before they can be added, the `testonly`
# attribute must be removed.
sdk_molecule("fuchsia_idk_atoms") {
  visibility += [ "//vendor/*" ]

  category = "partner"

  deps = [ ":fuchsia_idk_atoms_for_each_api_level_and_platform" ]

  if (override_target_api_level == "PLATFORM") {
    deps += [
      # Do not add to this list. Instead, add new items to
      # fuchsia_idk_atoms_independent_of_api_level, which verifies there are no
      # API level dependencies.
      ":fuchsia_idk_atoms_independent_of_api_level",

      # There are very limited exceptions that do depend on API level but are
      # only built at "PLATFORM".
      ":fuchsia_idk_atoms_for_platform_only",
    ]
  } else {
    deps += [ ":fuchsia_idk_atoms_for_each_api_level" ]
  }

  host_tools_deps = [
    # These tests are meant to run on hosts, so they are more like a "host tool"
    # than any other category.
    #
    # TODO(b/330373943): Figure out what building host tools for
    # "each API level" means when these host tests are versioned.
    ":fuchsia_idk_atoms_host_tests",
    ":fuchsia_idk_atoms_host_tools",
  ]
}

# Prebuilt libraries (including the sysroot) must be built and included for all
# API levels they support. They are also built at `PLATFORM` (a.k.a., the
# API-level-agnostic build, a.k.a., the default platform build), for backwards
# compatibility with IDK users that don't yet know about per-API-level
# prebuilts.
#
# TODO(https://fxbug.dev/310006516): Move all these into
# `fuchsia_idk_atoms_for_each_api_level` once all IDK users are using the
# per-API-level artifacts.
sdk_molecule("fuchsia_idk_atoms_for_each_api_level_and_platform") {
  category = "partner"
  deps = [
    ":core_cc_prebuilt_libraries",
    ":core_packages_for_each_api_level_and_platform",
    ":core_sysroot",
  ]

  # Successfully building the test at each API level is the test.
  non_sdk_deps = [ "//zircon/system:availability_test" ]
}

# Prebuilt libraries and packages that are built exclusively for the API levels
# SDK users can target (not `PLATFORM`).
sdk_molecule("fuchsia_idk_atoms_for_each_api_level") {
  category = "partner"
  deps = [ ":core_packages" ]
}

if (override_target_api_level == "PLATFORM") {
  # Do not add dependencies to this target without a really good reason.
  # Most dependencies should be built at every API level (add to
  # :fuchsia_idk_atoms_for_each_api_level) or be verifiably independent of the
  # API level (add to :fuchsia_idk_atoms_independent_of_api_level).
  sdk_molecule("fuchsia_idk_atoms_for_platform_only") {
    category = "partner"
    deps = [
      # The C++ source libraries must be buildable at each supported API level
      # but are only built once.
      ":core_cc_source_libraries",

      # This target compiles the FIDL files, but the output used in the SDK is
      # not specific to any API level.
      "//sdk/fidl",

      # TODO(https://fxbug.dev/327223536): `loadable_modules` (a.k.a., the
      # "Vulkan layers") support being built at individual API levels, but each
      # of the subbuilds currently puts the build files at the same path, so all
      # but one of them gets clobbered. Give `loadable_modules` the proper
      # per-API-level treatment and move this to
      # :fuchsia_idk_atoms_for_each_api_level_and_platform.
      ":core_loadable_modules",
    ]
  }

  # IDK atoms that are independent of a specific API level.
  # This is enforced by an assert_no_deps.
  sdk_molecule("fuchsia_idk_atoms_independent_of_api_level") {
    category = "partner"

    # The following serve as a proxy for the building of FIDL files. A
    # dependency on these suggests that there is a dependency on FIDL
    # interface(s), which would likely mean that the code must be built at each
    # API level and should be in a different molecule..
    assert_no_deps = [
      "//tools/fidl/fidl_api_diff:host",
      "//tools/fidl/fidl_api_summarize:fidl_api_summarize($host_toolchain)",
      "//tools/fidl/fidlc:fidl-lint.host",
    ]

    deps = [
      ":core_bindlib",
      ":core_dart_library",
      ":core_data",
      ":core_documentation",
      ":core_licenses",
      ":version_history",
      "//sdk/devices",
      "//sdk/docs",
    ]
  }
}

# IDK atoms that are host tools. These may rely on an API level because they
# are not shipped to devices.
sdk_molecule("fuchsia_idk_atoms_host_tools") {
  category = "partner"
  deps = [
    ":host_tools",
    "//tools/docsgen:ref_docs_sdk",
  ]
}

sdk_molecule("fuchsia_idk_atoms_host_tests") {
  category = "partner"
  deps = [ ":core_experimental_python_e2e_tests" ]
}

group("tests_no_e2e") {
  visibility += [ "*" ]
  testonly = true
  assert_no_deps = e2e_test_libs

  deps = [
    "//sdk/ctf/plasa:tests",
    "//sdk/lib:tests",
  ]
}

group("tests") {
  visibility += [ "*" ]
  testonly = true

  deps = [
    ":tests_no_e2e",

    # `testing:tests` contains unit tests for sl4f, which depend on sl4f so it
    # can't live inside `test_no_e2e`.
    "//sdk/testing:tests",
  ]
}

sdk_atom("version_history") {
  id = "sdk://version_history"
  category = "partner"
  meta = {
    dest = "version_history.json"
    source = "version_history.json"
    schema = "version_history-22rnd667"
    type = "version_history"
  }
}

# License/rights related information for the SDK.
sdk_documentation("open_source") {
  name = "open_source"

  category = "public"

  files = []
  foreach(file,
          [
            "AUTHORS",
            "LICENSE",
            "PATENTS",
          ]) {
    files += [
      {
        source = "//$file"
        dest = file
      },
    ]
  }
}

# Licensing information for the 'libc'-style musl library.
sdk_documentation("musl_license") {
  name = "musl_license"

  category = "public"

  files = [
    {
      source = "//zircon/third_party/ulib/musl/COPYRIGHT"
      dest = "COPYRIGHT.musl"
    },
  ]
}

# Build this target to generate a NOTICE file for the SDK.
# Uncomment the next line, build it, then manually copy the output
# to "//tools/check-licenses/assets/sdk/NOTICE.fuchsia"
# TODO(https://fxbug.dev/42053181): Build the NOTICE file automatically during SDK generation.
#
#license_data("sdk_notice_gen") {
#  target = "//sdk"
#}

# Notice file for all contents in the Fuchsia SDK.
# TODO(https://fxbug.dev/42053181): Replace this with individual notices for each SDK element.
sdk_documentation("sdk_notice") {
  name = "sdk_notice"

  category = "public"

  files = [
    {
      source = "//tools/check-licenses/assets/sdk/NOTICE.fuchsia"
      dest = "NOTICE.fuchsia"
    },
  ]
}

# A tiny SDK collection used to export the content of the Zircon sysroot
# This is only needed because several other parts of the Fuchsia build
# depend on $OUTPUT_DIR/sdk/exported/zircon_sysroot/ to be available
# and properly populated, see [1] for all details.
#
# Note that //zircon/public/sysroot/sdk:sysroot_sdk is already
# a transitive dependency of //sdk:core, so using the content of
# $OUTPUT_DIR/sdk/exported/core/ would be equivalent, except that
# this directory is much longer to build (since it contains host tools).
#
# [1] https://cs.opensource.google/search?q=zircon_sysroot&ss=fuchsia%2Ffuchsia
sdk_collection("zircon_sysroot") {
  # This collection is not included in any SDK and could be a standard `group()`
  # except that there are shell scripts that expect
  # `$OUTPUT_DIR/sdk/exported/zircon_sysroot/` to be populated,
  # TODO(https://fxbug.dev/331962496): Find a solution that doesn't depend on
  # sdk_* templates.
  category = "excluded"

  deps = [ "//zircon/public/sysroot/sdk:sysroot_sdk" ]
}

# Tools and data used on a 'host' development machine; where host is often
# Linux or Mac OS.
sdk_molecule("host_tools") {
  visibility += [ "//tools/docsgen:invoke_clidoc" ]

  category = "partner"

  _host_tools = [
    "//src/developer/debug/zxdb:zxdb_sdk",
    "//src/developer/ffx:bin_sdk",
    "//src/developer/ffx/plugins/agis:sdk",
    "//src/developer/ffx/plugins/assembly:sdk",
    "//src/developer/ffx/plugins/audio:sdk",
    "//src/developer/ffx/plugins/driver:sdk",
    "//src/developer/ffx/plugins/fuzz:sdk",
    "//src/developer/ffx/plugins/emulator:uefi_internal",
    "//src/developer/ffx/plugins/coverage:sdk",
    "//src/developer/ffx/plugins/emulator:sdk",
    "//src/developer/ffx/plugins/inspect:sdk",
    "//src/developer/ffx/plugins/log:sdk",
    "//src/developer/ffx/plugins/package:sdk",
    "//src/developer/ffx/plugins/profile:sdk",
    "//src/developer/ffx/plugins/product:sdk",
    "//src/developer/ffx/plugins/process:sdk",
    "//src/developer/ffx/plugins/setui:sdk",
    "//src/developer/ffx/plugins/scrutiny:sdk",
    "//src/developer/ffx/plugins/test:sdk",
    "//src/developer/ffx/plugins/trace:sdk",
    "//src/developer/ffx/tools/starnix:sdk",
    "//src/developer/ffx/plugins/wlan:sdk",
    "//src/performance/trace2json:bin_sdk",
    "//src/storage/bin/fvm:fvm_sdk",
    "//src/storage/blobfs/tools:blobfs_sdk",
    "//src/storage/minfs/tools:minfs_sdk",
    "//src/storage/tools/blobfs-compression:blobfs-compression_sdk",
    "//src/sys/pkg/bin/far:bin_sdk",
    "//src/sys/pkg/bin/pm:pm_bin_sdk",
    "//src/sys/pkg/testing/fake-omaha-client:bin_sdk",
    "//tools/bindc:bindc_sdk",
    "//tools/bootserver_old:bootserver_sdk",
    "//tools/cmc:cmc_sdk",
    "//tools/configc:configc_sdk",
    "//tools/fidl/fidlc:fidl-format_sdk",
    "//tools/fidl/fidlc:fidlc_sdk",
    "//tools/fidl/fidlgen_cpp:fidlgen_cpp_sdk",
    "//tools/fidl/fidlgen_hlcpp:fidlgen_hlcpp_sdk",
    "//tools/fidl/fidlgen_rust:fidlgen_rust_sdk",
    "//tools/fidlcat:fidlcat_sdk",
    "//tools/funnel:funnel_sdk",
    "//tools/fuchsia-sdk-run:fuchsia-sdk-run_sdk",
    "//tools/net/device-finder:device-finder_sdk",
    "//tools/sdk-tools/fpublish:fpublish_sdk",
    "//tools/sdk-tools/fserve:fserve_sdk",
    "//tools/sdk-tools/fssh:fssh_sdk",
    "//tools/symbolizer:sdk",
    "//zircon/tools/merkleroot:merkleroot_sdk",
    "//zircon/tools/zbi:zbi_sdk",

    # TODO(https://fxbug.dev/42177692): Remove these once the emulators are available independently.
    "//src/developer/ffx/plugins/emulator:aemu_internal",
    "//src/developer/ffx/plugins/emulator:qemu_internal",
  ]

  _toolchains = []
  if (host_os == "linux" && sdk_cross_compile_host_tools) {
    _toolchains += [
      host_x64_toolchain,
      host_arm64_toolchain,
    ]
  } else {
    _toolchains = [ host_toolchain ]
  }

  deps = []
  foreach(toolchain, _toolchains) {
    foreach(dep, _host_tools) {
      deps += [ "$dep($toolchain)" ]
    }
  }
}

sdk_molecule("core_bindlib") {
  category = "partner"
  deps = [
    "//src/devices/bind/fuchsia:fuchsia_sdk",
    "//src/devices/bind/fuchsia.acpi:fuchsia.acpi_sdk",
    "//src/devices/bind/fuchsia.adc:fuchsia.adc_sdk",
    "//src/devices/bind/fuchsia.amlogic.platform:fuchsia.amlogic.platform_sdk",
    "//src/devices/bind/fuchsia.amlogic.platform.a311d:fuchsia.amlogic.platform.a311d_sdk",
    "//src/devices/bind/fuchsia.amlogic.platform.meson:fuchsia.amlogic.platform.meson_sdk",
    "//src/devices/bind/fuchsia.arm.platform:fuchsia.arm.platform_sdk",
    "//src/devices/bind/fuchsia.block:fuchsia.block_sdk",
    "//src/devices/bind/fuchsia.broadcom.platform:fuchsia.broadcom.platform_sdk",
    "//src/devices/bind/fuchsia.broadcom.platform.sdio:fuchsia.broadcom.platform.sdio_sdk",
    "//src/devices/bind/fuchsia.clock:fuchsia.clock_sdk",
    "//src/devices/bind/fuchsia.designware.platform:fuchsia.designware.platform_sdk",
    "//src/devices/bind/fuchsia.devicetree:fuchsia.devicetree_sdk",
    "//src/devices/bind/fuchsia.ethernet:fuchsia.ethernet_sdk",
    "//src/devices/bind/fuchsia.focaltech.platform:fuchsia.focaltech.platform_sdk",
    "//src/devices/bind/fuchsia.google.platform:fuchsia.google.platform_sdk",
    "//src/devices/bind/fuchsia.gpio:fuchsia.gpio_sdk",
    "//src/devices/bind/fuchsia.i2c:fuchsia.i2c_sdk",
    "//src/devices/bind/fuchsia.khadas.platform:fuchsia.khadas.platform_sdk",
    "//src/devices/bind/fuchsia.nxp.platform:fuchsia.nxp.platform_sdk",
    "//src/devices/bind/fuchsia.pci:fuchsia.pci_sdk",
    "//src/devices/bind/fuchsia.platform:fuchsia.platform_sdk",
    "//src/devices/bind/fuchsia.power:fuchsia.power_sdk",
    "//src/devices/bind/fuchsia.pwm:fuchsia.pwm_sdk",
    "//src/devices/bind/fuchsia.realtek.platform:fuchsia.realtek.platform_sdk",
    "//src/devices/bind/fuchsia.register:fuchsia.register_sdk",
    "//src/devices/bind/fuchsia.regulator:fuchsia.regulator_sdk",
    "//src/devices/bind/fuchsia.sdio:fuchsia.sdio_sdk",
    "//src/devices/bind/fuchsia.serial:fuchsia.serial_sdk",
    "//src/devices/bind/fuchsia.sysmem:fuchsia.sysmem_sdk",
    "//src/devices/bind/fuchsia.test:fuchsia.test_sdk",
    "//src/devices/bind/fuchsia.test.platform:fuchsia.test.platform_sdk",
    "//src/devices/bind/fuchsia.ti.platform:fuchsia.ti.platform_sdk",
    "//src/devices/bind/fuchsia.usb.phy:fuchsia.usb.phy_sdk",
    "//src/devices/bind/fuchsia.verisilicon.platform:fuchsia.verisilicon.platform_sdk",
  ]
}

sdk_molecule("core_packages") {
  category = "partner"
  deps = [
    "//src/performance/memory/heapdump/collector:collector_sdk",
    # TODO(https://fxbug.dev/326231777): Uncomment this once
    # realm_builder_server can build targeting API levels.
    #
    # "//src/lib/fuchsia-component-test/realm_builder_server:realm_builder_server_sdk"
  ]
}

# TODO(https://fxbug.dev/310006516): Move the contents of this target to
# ":core_packages" once downstream customers no longer need them in "API level
# agnostic" form.
sdk_molecule("core_packages_for_each_api_level_and_platform") {
  category = "partner"
  deps = [
    "//src/graphics/magma/tests/integration:magma_conformance_tests_sdk",
    "//src/graphics/tests/vkreadback:vkreadback_test_sdk",
  ]
}

sdk_molecule("core_data") {
  category = "partner"
  deps = [
    # TODO(ddorwin): Rename these to make it clear that they are data (e.g., _shards).
    "//sdk/lib/driver_component:driver_component",
    "//sdk/lib/heapdump_instrumentation:heapdump_instrumentation_shard",
    "//sdk/lib/inspect",
    "//sdk/lib/sys/component:realm_builder_shard_sdk",
    "//sdk/lib/syslog",
    "//sdk/lib/vulkan",
    "//src/developer/ffx/lib/symbol-index:symbol-index-sdk",
  ]
}

sdk_molecule("core_documentation") {
  category = "partner"
  deps = [ "//third_party/Vulkan-Loader:vulkan_license" ]
}

sdk_molecule("core_loadable_modules") {
  category = "partner"
  deps = [ "//src/lib/vulkan:vulkan_layers" ]
}

sdk_molecule("core_dart_library") {
  category = "partner"
  deps = [ "//sdk/testing/sl4f/client:client_sdk($dart_toolchain)" ]
}

sdk_molecule("core_experimental_python_e2e_tests") {
  category = "partner"
  deps =
      [ "//src/tests/end_to_end/rtc:rtc_conformance_test_sdk($host_toolchain)" ]
}

# C/C++ code that must be provided as prebuilt libraries for each supported API
# level. Must export symbols with C linkage.
sdk_molecule("core_cc_prebuilt_libraries") {
  category = "partner"
  deps = [
    "//sdk/lib/fdio:fdio_sdk",
    "//sdk/lib/magma_client:magma_client_sdk",
    "//sdk/lib/svc:svc_sdk",
    "//sdk/lib/vfs/internal:vfs_internal_sdk",
    "//sdk/lib/virtgralloc:virtgralloc_headers_sdk",
    "//src/devices/bin/driver_runtime:driver_runtime_sdk",
    "//src/performance/memory/heapdump/instrumentation:instrumentation_sdk",
    "//third_party/Vulkan-Loader:libvulkan_sdk",
    "//zircon/system/ulib/async-default:async-default_sdk",
    "//zircon/system/ulib/async-loop:async-loop-default_sdk",
    "//zircon/system/ulib/sync:sync_sdk",
    "//zircon/system/ulib/syslog:syslog_sdk",
    "//zircon/system/ulib/trace-engine:trace-engine_sdk",
    "//zircon/system/ulib/trace-provider:trace-provider-so_sdk",
    "//zircon/system/ulib/trace-vthread:trace-vthread_sdk",
  ]
}

# C++ code that is provided as source in the SDK. Must be buildable at each
# supported API level, though this is not part of the build.
# Prefer providing source code if all dependencies are available in the SDK.
sdk_molecule("core_cc_source_libraries") {
  category = "partner"
  deps = [
    "//sdk/lib/async-loop-testing/cpp:cpp_sdk",
    "//sdk/lib/async_patterns/cpp:cpp_sdk",
    "//sdk/lib/async_patterns/testing/cpp:cpp_sdk",
    "//sdk/lib/component/incoming/cpp:cpp_sdk",
    "//sdk/lib/component/outgoing/cpp:cpp_sdk",
    "//sdk/lib/driver/component/cpp:cpp_sdk",
    "//sdk/lib/driver/devfs/cpp:cpp_sdk",
    "//sdk/lib/driver/testing/cpp:cpp_sdk",
    "//sdk/lib/fidl/cpp:cpp_sdk",
    "//sdk/lib/fidl/cpp/wire:wire_sdk",
    "//sdk/lib/fidl_driver:fidl_driver_natural_sdk",
    "//sdk/lib/fidl_driver:fidl_driver_sdk",
    "//sdk/lib/fit-promise:fit-promise_sdk",
    "//sdk/lib/input_report_reader:input_report_reader_sdk",
    "//sdk/lib/inspect/component/cpp:cpp_sdk",
    "//sdk/lib/magma_common:magma_common_sdk",
    "//sdk/lib/media/cpp:cpp_sdk",
    "//sdk/lib/stdcompat:stdcompat_sdk",
    "//sdk/lib/sys/component/cpp/testing:cpp_library_sdk",
    "//sdk/lib/sys/cpp:cpp_sdk",
    "//sdk/lib/sys/cpp/testing:cpp_sdk",
    "//sdk/lib/sys/testing:testing_sdk",
    "//sdk/lib/syslog/structured_backend:structured_backend_sdk",
    "//sdk/lib/trace",
    "//sdk/lib/ui/scenic/cpp:cpp_sdk",
    "//sdk/lib/ui/scenic/cpp/testing:testing_sdk",
    "//sdk/lib/vfs/cpp:cpp_sdk",
    "//sdk/lib/zbi-format:zbi-format_sdk",
    "//src/devices/lib/mmio:mmio_sdk",
    "//src/lib/fidl/cpp:cpp_sdk",
    "//src/lib/fidl/cpp:hlcpp_conversion_sdk",
    "//src/lib/fidl/cpp:natural_ostream_sdk",
    "//zircon/system/ulib/async:async-cpp_sdk",
    "//zircon/system/ulib/async:async_sdk",
    "//zircon/system/ulib/async-loop:async-loop-cpp_sdk",
    "//zircon/system/ulib/async-loop:async-loop_sdk",
    "//zircon/system/ulib/async-testing:async-testing_sdk",
    "//zircon/system/ulib/hwreg:hwreg_sdk_sdk",
    "//zircon/system/ulib/inspect:inspect_sdk",
    "//zircon/system/ulib/trace:trace_sdk",
  ]
}

sdk_molecule("core_sysroot") {
  category = "partner"
  deps = [ "//zircon/public/sysroot/sdk:sysroot_sdk" ]
}

# License/copyright files for the SDK.
sdk_molecule("core_licenses") {
  category = "partner"
  deps = [
    ":musl_license",
    ":open_source",
    ":sdk_notice",
  ]
}

#
# BEGIN @internal_sdk
# DO NOT ADD anything here! This will soon be removed.
# See https://fxbug.dev/333907106.
#

sdk_molecule("platform_fidls") {
  visibility += [ ":platform" ]
  category = "internal"
  deps = [
    "//sdk/fidl/fuchsia.boot:fuchsia.boot_sdk($fidl_toolchain)",
    "//sdk/fidl/fuchsia.buttons:fuchsia.buttons_sdk($fidl_toolchain)",
    "//sdk/fidl/fuchsia.debugger:fuchsia.debugger_sdk($fidl_toolchain)",
    "//sdk/fidl/fuchsia.device:fuchsia.device_sdk($fidl_toolchain)",
    "//sdk/fidl/fuchsia.exception:fuchsia.exception_sdk($fidl_toolchain)",
    "//sdk/fidl/fuchsia.hardware.adcimpl:fuchsia.hardware.adcimpl_sdk($fidl_toolchain)",
    "//sdk/fidl/fuchsia.hardware.amlogiccanvas:fuchsia.hardware.amlogiccanvas_sdk($fidl_toolchain)",
    "//sdk/fidl/fuchsia.hardware.backlight:fuchsia.hardware.backlight_sdk($fidl_toolchain)",
    "//sdk/fidl/fuchsia.hardware.block:fuchsia.hardware.block_sdk($fidl_toolchain)",
    "//sdk/fidl/fuchsia.hardware.block.driver:fuchsia.hardware.block.driver_sdk($fidl_toolchain)",
    "//sdk/fidl/fuchsia.hardware.bluetooth:fuchsia.hardware.bluetooth_sdk($fidl_toolchain)",
    "//sdk/fidl/fuchsia.hardware.clock:fuchsia.hardware.clock_sdk($fidl_toolchain)",
    "//sdk/fidl/fuchsia.hardware.clockimpl:fuchsia.hardware.clockimpl_sdk($fidl_toolchain)",
    "//sdk/fidl/fuchsia.hardware.cpu.ctrl:fuchsia.hardware.cpu.ctrl_sdk($fidl_toolchain)",
    "//sdk/fidl/fuchsia.hardware.display:fuchsia.hardware.display_sdk($fidl_toolchain)",
    "//sdk/fidl/fuchsia.hardware.ethernet.board:fuchsia.hardware.ethernet.board_sdk($fidl_toolchain)",
    "//sdk/fidl/fuchsia.hardware.gpio:fuchsia.hardware.gpio_sdk($fidl_toolchain)",
    "//sdk/fidl/fuchsia.hardware.gpioimpl:fuchsia.hardware.gpioimpl_sdk($fidl_toolchain)",
    "//sdk/fidl/fuchsia.hardware.gpu.amlogic:fuchsia.hardware.gpu.amlogic_sdk($fidl_toolchain)",
    "//sdk/fidl/fuchsia.hardware.gpu.mali:fuchsia.hardware.gpu.mali_sdk($fidl_toolchain)",
    "//sdk/fidl/fuchsia.hardware.hrtimer:fuchsia.hardware.hrtimer_sdk($fidl_toolchain)",
    "//sdk/fidl/fuchsia.hardware.i2c.businfo:fuchsia.hardware.i2c.businfo_sdk($fidl_toolchain)",
    "//sdk/fidl/fuchsia.hardware.i2cimpl:fuchsia.hardware.i2cimpl_sdk($fidl_toolchain)",
    "//sdk/fidl/fuchsia.hardware.network.driver:fuchsia.hardware.network.driver_sdk($fidl_toolchain)",
    "//sdk/fidl/fuchsia.hardware.platform.bus:fuchsia.hardware.platform.bus_sdk($fidl_toolchain)",
    "//sdk/fidl/fuchsia.hardware.platform.device:fuchsia.hardware.platform.device_sdk($fidl_toolchain)",
    "//sdk/fidl/fuchsia.hardware.power:fuchsia.hardware.power_sdk($fidl_toolchain)",
    "//sdk/fidl/fuchsia.hardware.powersource:fuchsia.hardware.powersource_sdk($fidl_toolchain)",
    "//sdk/fidl/fuchsia.hardware.powersource.test:fuchsia.hardware.powersource.test_sdk($fidl_toolchain)",
    "//sdk/fidl/fuchsia.hardware.pwm:fuchsia.hardware.pwm_sdk($fidl_toolchain)",
    "//sdk/fidl/fuchsia.hardware.registers:fuchsia.hardware.registers_sdk($fidl_toolchain)",
    "//sdk/fidl/fuchsia.hardware.sdio:fuchsia.hardware.sdio_sdk($fidl_toolchain)",
    "//sdk/fidl/fuchsia.hardware.sdmmc:fuchsia.hardware.sdmmc_sdk($fidl_toolchain)",
    "//sdk/fidl/fuchsia.hardware.serial:fuchsia.hardware.serial_sdk($fidl_toolchain)",
    "//sdk/fidl/fuchsia.hardware.serialimpl:fuchsia.hardware.serialimpl_sdk($fidl_toolchain)",
    "//sdk/fidl/fuchsia.hardware.spi:fuchsia.hardware.spi_sdk($fidl_toolchain)",
    "//sdk/fidl/fuchsia.hardware.suspend:fuchsia.hardware.suspend_sdk($fidl_toolchain)",
    "//sdk/fidl/fuchsia.hardware.sysmem:fuchsia.hardware.sysmem_sdk($fidl_toolchain)",
    "//sdk/fidl/fuchsia.hardware.thermal:fuchsia.hardware.thermal_sdk($fidl_toolchain)",
    "//sdk/fidl/fuchsia.hardware.usb.dci:fuchsia.hardware.usb.dci_sdk($fidl_toolchain)",
    "//sdk/fidl/fuchsia.hardware.usb.hci:fuchsia.hardware.usb.hci_sdk($fidl_toolchain)",
    "//sdk/fidl/fuchsia.hardware.usb.peripheral:fuchsia.hardware.usb.peripheral_sdk($fidl_toolchain)",
    "//sdk/fidl/fuchsia.hardware.usb.phy:fuchsia.hardware.usb.phy_sdk($fidl_toolchain)",
    "//sdk/fidl/fuchsia.hardware.vreg:fuchsia.hardware.vreg_sdk($fidl_toolchain)",
    "//sdk/fidl/fuchsia.power.battery:fuchsia.power.battery_sdk($fidl_toolchain)",
    "//sdk/fidl/fuchsia.power.broker:fuchsia.power.broker_sdk($fidl_toolchain)",
    "//sdk/fidl/fuchsia.power.system:fuchsia.power.system_sdk($fidl_toolchain)",
    "//sdk/fidl/fuchsia.scheduler:fuchsia.scheduler_sdk($fidl_toolchain)",
    "//sdk/fidl/fuchsia.sys2:fuchsia.sys2_sdk($fidl_toolchain)",
    "//sdk/fidl/fuchsia.test.manager:fuchsia.test.manager_sdk($fidl_toolchain)",
    "//sdk/fidl/fuchsia.wlan.device:fuchsia.wlan.device_sdk($fidl_toolchain)",
    "//sdk/fidl/fuchsia.wlan.fullmac:fuchsia.wlan.fullmac_sdk($fidl_toolchain)",
  ]
}

# This SDK molecule is a collection of libraries only available to the in-tree
# Bazel build. See //sdk:platform.
sdk_molecule("platform_libs") {
  visibility += [ ":platform" ]
  category = "internal"
  deps = [
    ":version_history",
    "//sdk/lib/driver/compat/cpp:cpp_sdk",
    "//sdk/lib/driver/compat/cpp:logging_sdk",
    "//sdk/lib/driver/devicetree/manager:manager_sdk",
    "//sdk/lib/driver/devicetree/testing:board-test-helper_sdk",
    "//sdk/lib/driver/devicetree/visitors:driver-visitor_sdk",
    "//sdk/lib/driver/devicetree/visitors:load-visitors_sdk",
    "//sdk/lib/driver/devicetree/visitors:registration_sdk",
    "//sdk/lib/driver/devicetree/visitors/default:default_sdk",
    "//sdk/lib/driver/devicetree/visitors/drivers:all-driver-visitors_sdk",
    "//sdk/lib/driver/testing/cpp:gtest_fixture_sdk",
    "//src/devices/registers/testing/mock-registers:mock-registers_sdk",
    "//src/devices/testing/fake-bti:fake-bti_sdk",
    "//src/devices/testing/fake-mmio-reg:fake-mmio-reg_sdk",
    "//src/devices/testing/mock-mmio-reg:mock-mmio-reg_sdk",
    "//src/lib/memory_barriers:memory_barriers_sdk",
    "//zircon/system/ulib/fzl:fzl_sdk",
  ]
}

# A collection of SDK atoms used to populate the @internal_sdk Bazel
# repository. Only used for the GN > Bazel migration of the build system.
# Content are bound to change a lot. Nothing else should rely on this.
# See https://fxrev.dev/737558 and https://fxbug.dev/42064359.
sdk_collection("platform") {
  visibility += [ "//build/bazel/*" ]

  category = "internal"
  id = sdk_id

  deps = [
    ":platform_fidls",
    ":platform_libs",
  ]
}

#
# END @internal_sdk
#

if (is_host) {
  # A collection that only contains host tools that are used by the
  # Fuchsia build system itself. In particular, this is where
  # `ffx` will pick companion host tools when running in-tree.
  sdk_collection("host_tools.internal") {
    # This (sorta) restricts the use of this group to instances of the
    # `ffx_action()` template, which uses the group below (which doesn't have
    # visibility restrictions to have a dependency on this group.)
    visibility = []
    visibility = [ "//src/developer/ffx/build:internal_sdk_tools_for_ffx" ]

    # Though ffx_action() depends on the manifest generated by this rule, this
    # collection is not included in any SDK.
    # TODO(https://fxbug.dev/317385989): Find a solution that doesn't depend on
    # sdk_* templates.
    category = "excluded"

    id = sdk_id

    # This is a collection of host tools that are used _by_ ffx itself to
    # perform actions within the build.  As such, it CANNOT have a dependency
    # the main ffx binary, or any of the subtools, or it will cause all
    # ffx_action()'s using subtools to be dependent on the compilation of the
    # main ffx binary (and/or all subtools), adding minutes to any incremental
    # build of an ffx subtool.
    assert_no_deps = [
      "//src/developer/ffx:bin_sdk",
      "//src/developer/ffx:ffx_tool",
      "//src/developer/ffx/frontends/ffx:ffx_bin($host_toolchain)",
    ]

    deps = [
      "//src/developer/debug/zxdb:zxdb_sdk",
      "//src/storage/bin/fvm:fvm_sdk",
      "//src/storage/blobfs/tools:blobfs_sdk",
      "//src/storage/minfs/tools:minfs_sdk",
      "//src/storage/tools/blobfs-compression:blobfs-compression_sdk",
      "//src/sys/pkg/bin/far:bin_sdk",
      "//src/sys/pkg/bin/pm:pm_bin_sdk",
      "//tools/bootserver_old:bootserver_sdk",
      "//tools/cmc:cmc_sdk",
      "//tools/fidl/fidlc:fidl-format_sdk",
      "//tools/fidl/fidlc:fidlc_sdk",
      "//tools/fidl/fidlgen_hlcpp:fidlgen_hlcpp_sdk",
      "//tools/fidlcat:fidlcat_sdk",
      "//tools/net/device-finder:device-finder_sdk",
      "//tools/symbolizer:sdk",
      "//zircon/tools/merkleroot:merkleroot_sdk",
      "//zircon/tools/zbi:zbi_sdk",
    ]
  }
}

# Host tools necessary to build the IDK. Keep this minimal, so IDK subbuilds can
# start running as quickly as possible.
#
# This rule copies each of the tools listed below into
# `$root_build_dir/sdk/idk_build_tools`. For example, a tool like `cmc` will
# appear in `$root_build_dir/sdk/idk_build_tools/host_x64/cmc` on an x64 host.
# SDK subbuilds will look for host tools in that directory, so they will only
# have access to binaries that they explicitly depend on via this rule.
copy("idk_build_tools") {
  visibility += [
    "//build/*",
    "//sdk/firmware:*",
    "//vendor/*",
  ]

  sources = [
    "$host_out_dir/bindc",
    "$host_out_dir/cmc",
    "$host_out_dir/configc",
    "$host_out_dir/far",
    "$host_out_dir/ffx-package_unversioned",
    "$host_out_dir/fidl-format",
    "$host_out_dir/fidl-lint",
    "$host_out_dir/fidl_api_diff",
    "$host_out_dir/fidl_api_summarize",
    "$host_out_dir/fidlc",
    "$host_out_dir/fidlgen_cpp",
    "$host_out_dir/fidlgen_hlcpp",
    "$host_out_dir/fidlgen_rust",
    "$host_out_dir/json_merge",
    "$host_out_dir/measure-tape",
    "$host_out_dir/package-tool",
    "$host_out_dir/zither",
  ]

  # Looks like `host_x64`.
  _rebased_host_dir = rebase_path(host_out_dir, root_build_dir)
  outputs = [ "$root_build_dir/sdk/idk_build_tools/${_rebased_host_dir}/{{source_file_part}}" ]

  deps = [
    "//build/tools/json_merge($host_toolchain)",
    "//src/developer/ffx/plugins/package:ffx_package_tool($host_toolchain)",
    "//src/sys/pkg/bin/far:bin($host_toolchain)",
    "//src/sys/pkg/bin/package-tool($host_toolchain)",
    "//tools/bindc:bin($host_toolchain)",
    "//tools/cmc:cmc($host_toolchain)",
    "//tools/configc:configc($host_toolchain)",
    "//tools/fidl/fidl_api_diff($host_toolchain)",
    "//tools/fidl/fidl_api_summarize($host_toolchain)",
    "//tools/fidl/fidlc:fidl-format($host_toolchain)",
    "//tools/fidl/fidlc:fidl-lint($host_toolchain)",
    "//tools/fidl/fidlc($host_toolchain)",
    "//tools/fidl/fidlgen_cpp($host_toolchain)",
    "//tools/fidl/fidlgen_hlcpp($host_toolchain)",
    "//tools/fidl/fidlgen_rust($host_toolchain)",
    "//tools/fidl/measure-tape/src:measure-tape($host_toolchain)",
    "//zircon/tools/zither($host_toolchain)",
  ]
}

# Controls the maximum number of simultaneous subbuilds.
pool("subbuild_pool") {
  depth = sdk_max_simultaneous_sub_builds
}

# These markers are used to define dependencies on FIDL bindings
# so host tools can assert_no_deps to make sure all host tools
# in the SDK are only using FIDL libraries included in the SDK.
group("marker-cts") {
  visibility += [ "*" ]
}
group("marker-excluded") {
  visibility += [ "*" ]
}
group("marker-experimental") {
  visibility += [ "*" ]
}
group("marker-internal") {
  visibility += [ "*" ]
}
group("marker-unknown") {
  visibility += [ "*" ]
}
group("marker-partner") {
  visibility += [ "*" ]
}
group("marker-partner_internal") {
  visibility += [ "*" ]
}
group("marker-public") {
  visibility += [ "*" ]
}

# Marker for the allow list for use in a subtool.
group("marker-allowed-for-ffx-subtool") {
  visibility += [ "*" ]
}

# Marker for the allow list for use in Lacewing.
group("marker-allowed-for-host-test") {
  visibility += [ "*" ]
}
