# 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/components.gni")
import("//build/cpp/sdk_source_set.gni")

group("tests") {
  testonly = true
  deps = [ ":driver2-tests" ]
}

sdk_source_set("record") {
  category = "experimental"
  sdk_name = "driver2-record"

  include_base = "//sdk"

  sources = [ "record.h" ]

  public_deps = [ "//sdk/lib/driver_runtime:driver_runtime" ]
}

source_set("devfs_exporter") {
  sources = [
    "devfs_exporter.cc",
    "devfs_exporter.h",
  ]

  deps = [ ":llcpp" ]

  public_deps = [ "//sdk/fidl/fuchsia.device.fs:fuchsia.device.fs_llcpp" ]
}

source_set("inspect") {
  sources = [
    "inspect.cc",
    "inspect.h",
  ]

  public_deps = [
    "//sdk/lib/sys/component/cpp",
    "//src/lib/storage/vfs/cpp",
    "//zircon/system/ulib/inspect",
  ]
}

sdk_source_set("llcpp") {
  category = "experimental"
  sdk_name = "driver2-llcpp"

  include_base = "//sdk"

  sources = [
    "driver2.h",
    "logger.cc",
    "logger.h",
    "logger_internal.h",
    "namespace.cc",
    "namespace.h",
    "promise.cc",
    "promise.h",
    "record_cpp.h",
    "runtime.h",
    "runtime_connector_impl.cc",
    "runtime_connector_impl.h",
    "start_args.h",
    "structured_logger.h",
  ]

  public_deps = [
    ":record",
    "//sdk/fidl/fuchsia.component.runner:fuchsia.component.runner_llcpp",
    "//sdk/fidl/fuchsia.data:fuchsia.data_llcpp",
    "//sdk/fidl/fuchsia.driver.framework:fuchsia.driver.framework_driver",
    "//sdk/fidl/fuchsia.driver.framework:fuchsia.driver.framework_llcpp",
    "//sdk/fidl/fuchsia.logger:fuchsia.logger_llcpp",
    "//sdk/lib/driver_runtime:driver_runtime_cpp",
    "//sdk/lib/fdio",
    "//sdk/lib/fit-promise",
    "//sdk/lib/syslog/structured_backend",
  ]
}

executable("llcpp_test") {
  testonly = true
  sources = [
    "devfs_exporter_test.cc",
    "logger_test.cc",
    "namespace_test.cc",
    "runtime_connector_impl_test.cc",
    "start_args_test.cc",
    "test_base.cc",
    "test_base.h",
  ]

  deps = [
    ":devfs_exporter",
    ":llcpp",
    "//sdk/fidl/fuchsia.device.fs",
    "//sdk/fidl/fuchsia.io",
    "//sdk/fidl/fuchsia.logger",
    "//sdk/lib/driver_runtime:driver_runtime_cpp",
    "//sdk/lib/fidl/cpp",
    "//sdk/lib/sys/component/cpp",
    "//src/devices/lib/driver:driver_runtime",
    "//src/diagnostics/lib/cpp-log-decoder:lib",
    "//src/lib/diagnostics/accessor2logger",
    "//src/lib/fsl",
    "//src/lib/fxl/test:gtest_main",
    "//src/lib/testing/loop_fixture",
    "//third_party/rapidjson",
    "//zircon/system/ulib/async-loop:async-loop-cpp",
    "//zircon/system/ulib/async-loop:async-loop-default",
    "//zircon/system/ulib/service:service-llcpp",
    "//zircon/system/ulib/syslog",
  ]

  # TODO(fxbug.dev/94768): This target uses mutable tables which are deprecated,
  # rather than builders.
  configs += [ "//build/cpp:fidl-wire-deprecated-mutable-tables" ]
}

fuchsia_unittest_component("driver2-llcpp-test") {
  manifest = "meta/llcpp_test.cml"

  deps = [ ":llcpp_test" ]
}

fuchsia_test_package("driver2-tests") {
  test_components = [ ":driver2-llcpp-test" ]
}
