# 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/dart/toolchain.gni")
import("//build/fidl/toolchain.gni")
import("//build/sdk/merged_sdk.gni")
import("//build/sdk/sdk.gni")
import("//build/sdk/sdk_documentation.gni")
import("//build/sdk/version_history_sdk_element.gni")
import("//sdk/cts/build/cts_sdk.gni")
import("config.gni")

_sdk_public_deps = [
  ":core",
  ":core_testing",
  ":e2e_testing",
  ":modular_testing",
  ":zircon_sysroot",
]

# This default target should contain all public or partner SDKs.
# Any public or partner SDKs added to this target should also be
# added to ALLOWED_CTS_SDKS in //sdk/cts/build/allowed_cts_deps.gni.
group("sdk") {
  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") {
  testonly = true
  data_keys = [ "sdk_source_set_sources" ]
  deps = _sdk_public_deps
}

# Create generated file for fidldoc to read.
generated_file("all_fidl_sdk_json") {
  deps = [ "//sdk/fidl" ]

  outputs = [ "$root_build_dir/all_fidl_sdk_json.txt" ]
  data_keys = [ "fidl_json" ]
}

# 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") {
  testonly = true
  deps = [ "//sdk" ]
  outputs = [ "$root_build_dir/compatibility_testing_goldens.json" ]
  output_conversion = "json"
  data_keys = [ "compatibility_testing_goldens" ]
}

# TODO(96110): Remove this and use //sdk/cts:plasa_manifest.
# Contains the list of all plasa fragment files, which have a dump of the
# public API surfaces.
generated_file("plasa") {
  testonly = true
  data_keys = [ "plasa" ]
  outputs = [ "$root_build_dir/manifest.plasa.json" ]
  output_conversion = "json"
  deps = _sdk_public_deps + [ "//sdk/cts/plasa:vdso_summary" ]
}

# This target is used by infra builders to build all SDK archives that
# make up the "core" SDK.
group("archives") {
  testonly = true
  public_deps = [
    ":core_archive",
    ":core_testing_archive",
    ":e2e_testing_archive",
    ":fuchsia_dart_archive",
    ":modular_testing_archive",
  ]
}

merged_sdk("merged") {
  testonly = true
  deps = [
    ":core",
    ":core_testing",
    ":e2e_testing",
    ":fuchsia_dart",
    ":modular_testing",
  ]
}

group("sdk.modular") {
  testonly = true

  public_deps = [
    ":core.modular",
    ":host_tools.all",
    ":modular_testing",
    ":zircon_sysroot",
    "//scripts/sdk/gn:gn.modular.tar.gz",
  ]
}

group("tests_no_e2e") {
  testonly = true
  assert_no_deps = e2e_test_libs

  deps = [
    "cts/plasa:tests",
    "dart:tests",
    "lib:tests",
  ]
}

group("tests") {
  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`.
    "testing:tests",
  ]
}

version_history_sdk_element("version_history_sdk_element") {
  schema = "//build/sdk/meta/version_history-ef02ef45.json"
  data = "version_history.json"
}

sdk_element_adapter("version_history") {
  deps = [ ":version_history_sdk_element" ]
}

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

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

  category = "public"

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

cts_sdk("cts") {
  testonly = true
  category = "cts"
  deps = [
    ":license",
    "cts:cts_tests",
    "cts:plasa",
  ]
}

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

sdk("zircon_sysroot") {
  category = "internal"

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

sdk("e2e_testing") {
  # TODO(fxbug.dev/6128): this id should not be necessary.
  id = sdk_id

  category = "partner"

  api = "manifests/e2e_testing.manifest"

  deps = [
    ":e2e_testing_tools",
    "//sdk/testing/sl4f/client:client_sdk($dart_toolchain)",
  ]
}

sdk_molecule("e2e_testing_tools") {
  visibility = [ ":*" ]

  deps = [
    "//src/developer/trace2json:bin_sdk($host_toolchain)",
    "//src/sys/pkg/testing/fake-omaha-client:bin_sdk($host_toolchain)",
  ]
}

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

  cross_compiled = [
    "//tools/fidl/fidlgen_hlcpp:fidlgen_sdk",
    "//tools/cmc:cmc_sdk",
    "//tools/fvdl:fvdl_sdk",
    "//tools/sdk-tools/fconfig:fconfig_sdk",
    "//tools/sdk-tools/fpublish:fpublish_sdk",
    "//tools/sdk-tools/fserve:fserve_sdk",
    "//tools/sdk-tools/fssh:fssh_sdk",
    "//src/developer/debug/zxdb:zxdb_sdk",
    "//src/developer/ffx:bin_sdk",
    "//src/storage/bin/fvm:fvm_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/net/device-finder:device-finder_sdk",
    "//tools/symbol-index:symbol_index_sdk",
    "//tools/symbolizer:sdk",
    "//tools/fidl/fidlc:fidl-format_sdk",
    "//tools/fidl/fidlc:fidlc_sdk",
    "//tools/fidlcat:fidlcat_sdk",
    "//zircon/tools/blobfs:blobfs_sdk",
    "//zircon/tools/merkleroot:merkleroot_sdk",
    "//zircon/tools/minfs:minfs_sdk",
    "//zircon/tools/zbi:zbi_sdk",

    # TODO(https://fxbug.dev/95661): 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") {
    toolchains += [
      host_x64_toolchain,
      host_arm64_toolchain,
    ]
  } else if (host_os == "mac") {
    toolchains += [ host_toolchain ]
  }

  deps = []

  foreach(toolchain, toolchains) {
    foreach(dep, cross_compiled) {
      deps += [ "$dep($toolchain)" ]
      if (toolchain == host_toolchain) {
        deps += [ "${dep}_legacy($toolchain)" ]
      }
    }
  }
}

sdk_molecule("core_lib") {
  visibility = [ ":*" ]

  deps = [
    "//sdk/lib/fdio:fdio_sdk",
    "//sdk/lib/fidl/cpp:cpp_sdk",
    "//sdk/lib/fit-promise:fit-promise_sdk",
    "//sdk/lib/inspect",
    "//sdk/lib/inspect/service/cpp:cpp_sdk",
    "//sdk/lib/media/cpp:cpp_sdk",
    "//sdk/lib/modular/cpp:cpp_sdk",
    "//sdk/lib/stdcompat:stdcompat_sdk",
    "//sdk/lib/svc:svc_sdk",
    "//sdk/lib/sys/component:realm_builder_shard_sdk",
    "//sdk/lib/sys/cpp:cpp_sdk",
    "//sdk/lib/sys/inspect/cpp:cpp_sdk",
    "//sdk/lib/sys/testing:testing_sdk",
    "//sdk/lib/syslog",
    "//sdk/lib/syslog/structured_backend:structured_backend_sdk",
    "//sdk/lib/ui/scenic/cpp:cpp_sdk",
    "//sdk/lib/vfs/cpp:cpp_sdk",
    "//sdk/lib/vulkan",
    "//src/storage/memfs:memfs_sdk",
    "//zircon/system/ulib/async:async-cpp_sdk",
    "//zircon/system/ulib/async:async_sdk",
    "//zircon/system/ulib/async-default:async-default_sdk",
    "//zircon/system/ulib/async-loop:async-loop-cpp_sdk",
    "//zircon/system/ulib/async-loop:async-loop-default_sdk",
    "//zircon/system/ulib/async-loop:async-loop_sdk",
    "//zircon/system/ulib/async-loop/testing:async-loop-testing_sdk",
    "//zircon/system/ulib/inspect:inspect_sdk",
    "//zircon/system/ulib/sync:sync_sdk",
    "//zircon/system/ulib/syslog:syslog_sdk",
    "//zircon/system/ulib/trace:trace_sdk",
    "//zircon/system/ulib/trace-engine:trace-engine_sdk",
    "//zircon/system/ulib/trace-provider:trace-provider-so_sdk",
  ]
}

# Pieces of the IDK sans host tools (which are in ":host_tools").
sdk_molecule("core_idk") {
  visibility = [ ":*" ]

  deps = [
    ":core_lib",
    ":license",
    ":version_history",
    "devices",
    "docs",
    "//sdk/fidl",
    "//src/lib/vulkan:vulkan_layers",
    "//third_party/Vulkan-Loader:libvulkan_sdk",
    "//third_party/Vulkan-Loader:vulkan_license",
    "//zircon/public/sysroot/sdk:sysroot_sdk",
  ]
}

sdk_molecule("core_testing_idk") {
  visibility = [ ":*" ]

  testonly = true

  deps = [
    "//sdk/fidl:fidl_testing",
    "//sdk/lib/sys/component/cpp/testing:cpp_library_sdk",
    "//sdk/lib/sys/cpp/testing:cpp_sdk",
    "//tools/docsgen:ref_docs_sdk",
    "//zircon/system/ulib/async-testing:async-testing_sdk",
  ]
}

sdk("core") {
  id = sdk_id

  category = "partner"

  api = "manifests/core.manifest"

  deps = [
    ":core_idk",
    ":host_tools",
  ]
}

sdk("core_testing") {
  id = sdk_id

  testonly = true

  category = "partner"

  api = "manifests/core_testing.manifest"

  deps = [ ":core_testing_idk" ]
}

sdk("core.modular") {
  id = sdk_id

  category = "partner"

  api = "manifests/core.modular.manifest"

  testonly = true

  deps = [ ":core_idk" ]
}

group("host_tools.all") {
  public_deps = []
  if (host_os == "linux") {
    public_deps += [
      ":host_tools.modular($host_arm64_toolchain)",
      ":host_tools.modular($host_x64_toolchain)",
    ]
  } else if (host_os == "mac") {
    public_deps += [ ":host_tools.modular($host_toolchain)" ]
  }
}

if (is_host) {
  sdk("host_tools.modular") {
    id = sdk_id
    category = "partner"
    api = "manifests/host_tools_${current_os}_${current_cpu}.manifest"

    deps = [
      "//src/developer/debug/zxdb:zxdb_sdk",
      "//src/developer/ffx:bin_sdk",
      "//src/storage/bin/fvm:fvm_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_sdk",
      "//tools/fidlcat:fidlcat_sdk",
      "//tools/fvdl:fvdl_sdk",
      "//tools/net/device-finder:device-finder_sdk",
      "//tools/symbol-index:symbol_index_sdk",
      "//tools/symbolizer:sdk",
      "//zircon/tools/blobfs:blobfs_sdk",
      "//zircon/tools/merkleroot:merkleroot_sdk",
      "//zircon/tools/minfs:minfs_sdk",
      "//zircon/tools/zbi:zbi_sdk",
    ]
  }
}

# The `modular_testing` SDK provides FIDL protocols and C++ libraries for writing hermetic
# integration tests which use modular.
#
# The modular framework is deprecated: new products should use the session framework
# instead. See //docs/concepts/session/introduction.md.
#
# This SDK has runtime dependencies on the following fuchsia packages:
#  * environment_delegating_runner
#  * modular_test_harness
sdk("modular_testing") {
  testonly = true

  id = sdk_id

  api = "manifests/modular_testing.manifest"

  category = "partner"

  deps = [
    "//sdk/fidl/fuchsia.element:fuchsia.element_sdk($fidl_toolchain)",
    "//sdk/fidl/fuchsia.modular:fuchsia.modular_sdk($fidl_toolchain)",
    "//sdk/fidl/fuchsia.modular.testing:fuchsia.modular.testing_sdk($fidl_toolchain)",
    "//sdk/fidl/fuchsia.ui.lifecycle:fuchsia.ui.lifecycle_sdk($fidl_toolchain)",
    "//sdk/lib/modular/testing/cpp:cpp_sdk",
  ]
}

# Firmware SDK.
sdk("firmware") {
  category = "experimental"

  deps = [
    "//sdk/docs:firmware",
    "//src/firmware/lib/abr:abr_sdk",
    "//src/firmware/lib/zbi:zbi_sdk",
    "//src/firmware/lib/zircon_boot:zircon_boot_sdk",
    "//third_party/android/platform/external/avb:avb_sdk",
    "//zircon/public/sysroot/sdk:sysroot_sdk",
  ]
}

# Tools and libraries to develop for Fuchsia with Dart.
sdk("fuchsia_dart") {
  category = "partner"

  id = sdk_id

  api = "manifests/fuchsia_dart.manifest"

  deps = [
    "//sdk/dart:gen_snapshot_sdk($dart_toolchain)",
    "//sdk/dart:kernel_compiler_sdk($dart_toolchain)",
    "//sdk/docs:modular_config_schema",

    # TODO(leetodd): remove, needed to soft transition
    # https://fuchsia-review.googlesource.com/c/fuchsia/+/399537
    "//sdk/fidl/fuchsia.diagnostics:fuchsia.diagnostics_sdk",

    # TODO(viktard): remove, needed to soft transition
    # https://fuchsia-review.googlesource.com/c/fuchsia/+/295264
    "//sdk/fidl/fuchsia.ui.app:fuchsia.ui.app_sdk",

    # TODO(fxbug.dev/24537): Remove this temporary dependency.
    # Temporarily added as a direct dependency so that it can be removed from
    # //sdk/fidl/fuchsia.ui.views.
    "//sdk/fidl/fuchsia.intl:fuchsia.intl_sdk",

    # Direct FIDL deps.
    # If a FIDL deps is part of the SDK, it should be explicitly listed here.
    "//sdk/dart/fidl:fidl_sdk($dart_toolchain)",
    "//sdk/dart/fuchsia:fuchsia_sdk($dart_toolchain)",
    "//sdk/dart/fuchsia_component_test:fuchsia_component_test_sdk($dart_toolchain)",
    "//sdk/dart/fuchsia_inspect:fuchsia_inspect_sdk($dart_toolchain)",
    "//sdk/dart/fuchsia_logger:fuchsia_logger_sdk($dart_toolchain)",
    "//sdk/dart/fuchsia_modular:fuchsia_modular_sdk($dart_toolchain)",
    "//sdk/dart/fuchsia_modular_testing:fuchsia_modular_testing_sdk($dart_toolchain)",
    "//sdk/dart/fuchsia_scenic:fuchsia_scenic_sdk($dart_toolchain)",
    "//sdk/dart/fuchsia_scenic_flutter:fuchsia_scenic_flutter_sdk($dart_toolchain)",
    "//sdk/dart/fuchsia_services:fuchsia_services_sdk($dart_toolchain)",
    "//sdk/dart/fuchsia_vfs:fuchsia_vfs_sdk($dart_toolchain)",
    "//sdk/fidl/fuchsia.element:fuchsia.element_sdk",
    "//sdk/fidl/fuchsia.hardware.audio:fuchsia.hardware.audio_sdk",
    "//tools/fidl/fidlgen_dart:fidlgen_dart_sdk_legacy($host_toolchain)",
  ]

  toolchains = []
  if (host_os == "linux") {
    toolchains += [
      host_x64_toolchain,
      host_arm64_toolchain,
    ]
  } else if (host_os == "mac") {
    toolchains += [ host_toolchain ]
  }
  foreach(toolchain, toolchains) {
    deps += [ "//tools/fidl/fidlgen_dart:fidlgen_dart_sdk($toolchain)" ]
  }
}

# Tools Fuchsia driver developers used on the host platform; where host is often
# Linux or Mac OS.
sdk_molecule("ddk_host_tools") {
  visibility = [ ":*" ]

  cross_compiled = [
    "//src/devices/tools/fidlgen_banjo:fidlgen_banjo_bin_sdk",
    "//tools/bindc:bindc_sdk",
    "//tools/fidl/fidlgen_llcpp:fidlgen_llcpp_sdk",
  ]

  toolchains = []
  if (host_os == "linux") {
    toolchains += [
      host_x64_toolchain,
      host_arm64_toolchain,
    ]
  } else if (host_os == "mac") {
    toolchains += [ host_toolchain ]
  }

  deps = []

  foreach(toolchain, toolchains) {
    foreach(dep, cross_compiled) {
      deps += [ "$dep($toolchain)" ]
      if (toolchain == host_toolchain) {
        deps += [ "${dep}_legacy($toolchain)" ]
      }
    }
  }
}

sdk_molecule("bind") {
  visibility = [ ":*" ]
  deps = [
    "//src/devices/bind/fuchsia.acpi:fuchsia.acpi_sdk",
    "//src/devices/bind/fuchsia.i2c:fuchsia.i2c_sdk",
    "//src/devices/bind/fuchsia.pci:fuchsia.pci_sdk",
    "//src/devices/bind/fuchsia.test:fuchsia.test_sdk",
    "//src/devices/bind/fuchsia.usb:fuchsia.usb_sdk",
  ]
}

sdk_molecule("ddk_fidl") {
  visibility = [ ":*" ]
  deps = [
    "//sdk/fidl/fuchsia.device.fs:fuchsia.device.fs_sdk($fidl_toolchain)",
    "//sdk/fidl/fuchsia.driver.compat:fuchsia.driver.compat_sdk($fidl_toolchain)",
    "//sdk/fidl/fuchsia.driver.framework:fuchsia.driver.framework_sdk($fidl_toolchain)",
    "//sdk/fidl/fuchsia.hardware.acpi:fuchsia.hardware.acpi_sdk($fidl_toolchain)",
    "//sdk/fidl/fuchsia.hardware.ftdi:fuchsia.hardware.ftdi_sdk($fidl_toolchain)",
    "//sdk/fidl/fuchsia.hardware.i2c:fuchsia.hardware.i2c_sdk($fidl_toolchain)",
    "//sdk/fidl/fuchsia.hardware.pci:fuchsia.hardware.pci_sdk($fidl_toolchain)",
    "//sdk/fidl/fuchsia.wlan.common:fuchsia.wlan.common_sdk($fidl_toolchain)",
    "//sdk/fidl/fuchsia.wlan.ieee80211:fuchsia.wlan.ieee80211_sdk($fidl_toolchain)",
    "//sdk/fidl/fuchsia.wlan.internal:fuchsia.wlan.internal_sdk($fidl_toolchain)",
    "//sdk/fidl/fuchsia.wlan.internal:fuchsia.wlan.internal_sdk($fidl_toolchain)",
  ]
}

# An experimental SDK for developing drivers.
sdk("ddk") {
  id = sdk_id

  category = "experimental"

  api = "manifests/ddk.manifest"

  deps = [
    ":bind",
    ":ddk_fidl",
    ":ddk_host_tools",
    "//sdk/lib/driver2:llcpp_sdk",
    "//sdk/lib/driver_runtime:driver_runtime_cpp_sdk",
    "//sdk/lib/driver_runtime:driver_runtime_sdk",
    "//sdk/lib/fidl/llcpp:llcpp_sdk",
    "//sdk/lib/input_report_reader:input_report_reader_sdk",
    "//sdk/lib/sys/component/llcpp:llcpp_sdk",
    "//src/devices/lib/mmio:mmio_sdk",
    "//zircon/system/ulib/hwreg:hwreg_sdk_sdk",
  ]
}
