# Copyright 2019 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/python/python_binary.gni")
import("//build/python/python_host_test.gni")

group("tests") {
  testonly = true

  deps = [
    "generate_idk:tests",
    "meta:tests($host_toolchain)",
    "sdk_common:tests",
    "tests",
  ]
}

# Contains all the source sets distributed with the partner or public SDK.
_sdk_source_sets_list = [
  # sdk_source_set() targets:
  # keep-sorted: begin
  "//sdk/lib/async-loop-testing/cpp",
  "//sdk/lib/component/incoming/cpp",
  "//sdk/lib/async_patterns/cpp",
  "//sdk/lib/async_patterns/testing/cpp",
  "//sdk/lib/component/outgoing/cpp",
  "//sdk/lib/driver/component/cpp",
  "//sdk/lib/driver/node/cpp",
  "//sdk/lib/driver/devfs/cpp",
  "//sdk/lib/driver/incoming/cpp",
  "//sdk/lib/driver/logging/cpp",
  "//sdk/lib/driver/outgoing/cpp",
  "//sdk/lib/driver/runtime:driver_runtime_cpp",
  "//sdk/lib/driver/runtime:driver_runtime_env_cpp",
  "//sdk/lib/driver/runtime:driver_runtime_env",
  "//sdk/lib/driver/runtime:driver_runtime_testing",
  "//sdk/lib/driver/runtime:driver_runtime",
  "//sdk/lib/driver/runtime/testing/cpp",
  "//sdk/lib/driver/symbols",
  "//sdk/lib/driver/testing/cpp",
  "//sdk/lib/fdio:constants",
  "//sdk/lib/fdio:fdio-spawn-actions",
  "//sdk/lib/fidl_base",
  "//sdk/lib/fidl_driver:fidl_driver_natural",
  "//sdk/lib/fidl_driver:fidl_driver_transport",
  "//sdk/lib/fidl_driver",
  "//sdk/lib/fidl",
  "//sdk/lib/fidl/cpp:cpp_base",
  "//sdk/lib/fidl/cpp:cpp_sync",
  "//sdk/lib/fidl/cpp",
  "//sdk/lib/fidl/cpp/wire",
  "//sdk/lib/fit-promise",
  "//sdk/lib/fit",
  "//sdk/lib/images/cpp",
  "//sdk/lib/input_report_reader",
  "//sdk/lib/inspect/component/cpp",
  "//sdk/lib/magma_common",
  "//sdk/lib/media/cpp:no_converters",
  "//sdk/lib/media/cpp",
  "//sdk/lib/stdcompat",
  "//sdk/lib/sys/component/cpp/testing:cpp_library",
  "//sdk/lib/sys/cpp",
  "//sdk/lib/sys/cpp/testing:cpp",
  "//sdk/lib/sys/service/cpp",
  "//sdk/lib/syslog/structured_backend",
  "//sdk/lib/ui/scenic/cpp",
  "//sdk/lib/ui/scenic/cpp/testing:testing",
  "//sdk/lib/utf-utils",
  "//sdk/lib/vfs/cpp",
  "//sdk/lib/virtgralloc:virtgralloc_headers",
  "//sdk/lib/zbi-format",
  "//src/devices/lib/mmio",
  "//src/lib/fidl/cpp:cpp_base",
  "//src/lib/fidl/cpp:hlcpp_conversion",
  "//src/lib/fidl/cpp:natural_ostream",
  "//src/lib/fidl/cpp",
  "//zircon/system/ulib/async-loop:async-loop-cpp",
  "//zircon/system/ulib/async-loop",
  "//zircon/system/ulib/async-testing:async-testing",
  "//zircon/system/ulib/async:async-cpp",
  "//zircon/system/ulib/async",
  "//zircon/system/ulib/ddk-platform-defs",
  "//zircon/system/ulib/hwreg:hwreg_sdk",
  "//zircon/system/ulib/inspect",
  "//zircon/system/ulib/mmio-ptr",
  "//zircon/system/ulib/sync:sync-cpp",
  "//zircon/system/ulib/trace",
  "//zircon/system/ulib/trace-engine:trace-engine-headersonly",
  "//zircon/system/ulib/trace:trace-headersonly",
  "//zircon/system/ulib/trace-vthread",
  "//zircon/system/ulib/trace-vthread:trace-vthread-headersonly",
  "//zircon/system/ulib/zx",

  # keep-sorted: end

  # dart_library() targets:
  "//sdk/testing/sl4f/client",
]

# TODO(https://fxbug.dev/330709069): Replace this with another mechanism that ensure these targets
# are built at all supported API levels. See https://fxbug.dev/42083950.
group("deprecated_sdk_source_sets_to_build_at_all_supported_api_levels") {
  visibility = [ ":*" ]
  deps = _sdk_source_sets_list
}

# All `sdk_shared_library()` targets depend on this target to ensure that they are in the allowlist.
group("sdk_source_sets_allowlist") {
  visibility = _sdk_source_sets_list
}

# Contains all the shared libraries distributed with the partner or public SDK.
_sdk_versioned_shared_libraries_list = [
  # sdk_shared_library() targets:
  # keep-sorted: begin
  "//sdk/lib/fdio:fdio",
  "//sdk/lib/syslog/cpp:backend_fuchsia_globals",
  "//sdk/lib/svc:svc",
  "//sdk/lib/vfs/internal:vfs_internal",
  "//src/devices/bin/driver_runtime:driver_runtime",
  "//src/performance/memory/heapdump/instrumentation:instrumentation",
  "//third_party/Vulkan-Loader:libvulkan",
  "//zircon/system/ulib/async-default:async-default",
  "//zircon/system/ulib/syslog:syslog",
  "//zircon/system/ulib/trace-engine:trace-engine",
  "//zircon/system/ulib/trace-provider:trace-provider-so",

  # keep-sorted: end
]

# TODO(https://fxbug.dev/330709069): Replace this with another mechanism that ensure these targets
# are built at all supported API levels. See https://fxbug.dev/42083950.
group("deprecated_sdk_shared_libraries_to_build_at_all_supported_api_levels") {
  visibility = [ ":*" ]
  deps = _sdk_versioned_shared_libraries_list
}

group("sdk_shared_libraries_allowlist") {
  visibility = _sdk_versioned_shared_libraries_list
}

# TODO(https://fxbug.dev/330709069): Remove these once the bots no longer use them.
group("sdk_versioned_source_sets") {
  visibility = [ "//:root_targets" ]
  deps = [ ":deprecated_sdk_source_sets_to_build_at_all_supported_api_levels" ]
}
group("sdk_versioned_shared_libraries") {
  visibility = [ "//:root_targets" ]
  deps = [
    ":deprecated_sdk_shared_libraries_to_build_at_all_supported_api_levels",
  ]
}

python_binary("create_atom_manifest") {
  visibility = [ "*" ]
  main_source = "create_atom_manifest.py"
  deps = [ "//build/sdk/sdk_common" ]
}

python_binary("create_molecule_manifest") {
  visibility = [ "*" ]
  main_source = "create_molecule_manifest.py"
  deps = [ "//build/sdk/sdk_common" ]
}

python_binary("generate_archive_manifest") {
  visibility = [ "*" ]
  main_source = "generate_archive_manifest.py"
  deps = [ "//build/sdk/sdk_common" ]
}

python_binary("generate_idk_archive_manifest") {
  visibility = [ "*" ]
  main_source = "generate_idk_archive_manifest.py"
}

python_binary("generate_meta") {
  visibility = [ "*" ]
  main_source = "generate_meta.py"
  deps = [ "//build/sdk/sdk_common" ]
}
