# 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/package.gni")
import("//build/testing/environments.gni")
import("//src/lib/isolated_devmgr/devmgr_manifest.gni")

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

  public_deps = [ "//zircon/system/ulib/devmgr-integration-test" ]

  deps = [
    "//sdk/lib/sys/cpp",
    "//src/lib/ddk",
    "//src/lib/fxl",
    "//zircon/public/lib/async-cpp",
    "//zircon/public/lib/fbl",
    "//zircon/public/lib/fdio",
    "//zircon/public/lib/fit",
    "//zircon/public/lib/libzbi",
    "//zircon/public/lib/zx",
    "//zircon/system/ulib/async-loop:async-loop-cpp",
    "//zircon/system/ulib/async-loop:async-loop-default",
    "//zircon/system/ulib/fdio-caller",
    "//zircon/system/ulib/fzl",
    "//zircon/system/ulib/inspector",
  ]
}

executable("isolated_devmgr") {
  testonly = true
  output_name = "isolated_devmgr"

  sources = [ "main.cc" ]

  deps = [
    ":src",
    "//sdk/lib/sys/cpp",
    "//src/lib/ddk",
    "//src/lib/fxl",
    "//zircon/public/lib/async-cpp",
    "//zircon/public/lib/async-cpp",
    "//zircon/public/lib/fbl",
    "//zircon/public/lib/fdio",
    "//zircon/public/lib/fit",
    "//zircon/system/ulib/async-loop:async-loop-cpp",
    "//zircon/system/ulib/async-loop:async-loop-default",
    "//zircon/system/ulib/devmgr-integration-test",
  ]
}

static_library("usb-virtual-bus") {
  testonly = true
  sources = [
    "usb-virtual-bus-helper.cc",
    "usb-virtual-bus-helper.h",
    "usb-virtual-bus.cc",
    "usb-virtual-bus.h",
  ]
  public_deps = [
    "//garnet/public/lib/gtest",
    "//sdk/fidl/fuchsia.hardware.usb.peripheral:fuchsia.hardware.usb.peripheral_llcpp",
    "//sdk/fidl/fuchsia.hardware.usb.virtual.bus:fuchsia.hardware.usb.virtual.bus_llcpp",
    "//zircon/system/ulib/devmgr-integration-test",
  ]
  deps = [
    "//sdk/fidl/fuchsia.sys",
    "//sdk/lib/sys/cpp",
    "//src/lib/ddk",
    "//zircon/public/lib/fbl",
    "//zircon/public/lib/fdio",
    "//zircon/public/lib/fit",
    "//zircon/public/lib/zx",
    "//zircon/system/ulib/async-loop:async-loop-cpp",
    "//zircon/system/ulib/async-loop:async-loop-default",
    "//zircon/system/ulib/devmgr-launcher",
    "//zircon/system/ulib/fidl-async:fidl-async-cpp",
  ]
  configs += [ "//build/config/fuchsia:enable_zircon_asserts" ]
  configs += [ "//build/config/fuchsia:static_cpp_standard_library" ]
}

executable("test_bin") {
  testonly = true

  output_name = "isolated_devmgr_tests"

  sources = [ "isolated_devmgr_tests.cc" ]

  deps = [
    ":src",
    "//garnet/public/lib/gtest",
    "//sdk/fidl/fuchsia.hardware.ethertap",
    "//sdk/fidl/fuchsia.sys",
    "//sdk/fidl/fuchsia.virtualaudio",
    "//sdk/lib/sys/cpp",
    "//src/lib/ddk",
    "//src/lib/fxl/test:gtest_main",
    "//zircon/public/lib/async-cpp",
    "//zircon/public/lib/async-cpp",
    "//zircon/public/lib/fdio",
    "//zircon/public/lib/fit",
    "//zircon/system/fidl/fuchsia-io:fuchsia-io",
    "//zircon/system/ulib/async-loop:async-loop-cpp",
    "//zircon/system/ulib/async-loop:async-loop-default",
    "//zircon/system/ulib/devmgr-integration-test",
  ]
}

devmgr_manifest("devmgr-manifest") {
}

package("isolated_devmgr_tests") {
  testonly = true
  deps = [
    ":devmgr-manifest",
    ":isolated_devmgr",
    ":test_bin",
    "//src/media/audio/drivers/virtual_audio:virtual_audio_driver",
  ]

  extra = [ "$target_gen_dir/devmgr.manifest" ]

  binaries = [
    {
      name = "isolated_devmgr"
    },
  ]

  meta = [
    {
      dest = "isolated_devmgr_tests.cmx"
      path = dest
    },
    {
      dest = "isolated_devmgr.cmx"
      path = dest
    },
    {
      dest = "isolated_devmgr_virtual_audio.cmx"
      path = dest
    },
  ]

  resources = [
    {
      path = rebase_path("${root_build_dir}/virtual_audio_driver.so")
      dest = "virtual_audio_driver.so"
    },
  ]

  tests = [
    {
      name = "isolated_devmgr_tests"
      environments = basic_envs
    },
  ]
}

group("tests") {
  testonly = true
  data_deps = [ ":isolated_devmgr_tests" ]
}
