# 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/dist/component_manifest_resources.gni")
import("//build/test.gni")
import("//src/sys/build/components.gni")

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

# Common source files and dependencies between :coordinator and :test
source_set("lib") {
  visibility = [ ":*" ]

  sources = [
    "binding.cc",
    "binding_internal.h",
    "component_lifecycle.cc",
    "component_lifecycle.h",
    "composite_device.cc",
    "coordinator.cc",
    "coordinator.h",
    "devfs.cc",
    "devfs.h",
    "device.cc",
    "device.h",
    "driver.cc",
    "driver.h",
    "driver_host.cc",
    "driver_host.h",
    "driver_host_loader_service.cc",
    "driver_host_loader_service.h",
    "driver_test_reporter.cc",
    "driver_test_reporter.h",
    "env.cc",
    "fdio.cc",
    "fidl.cc",
    "init_task.cc",
    "inspect.cc",
    "resume_task.cc",
    "suspend_task.cc",
    "system_instance.cc",
    "system_instance.h",
    "system_state_manager.cc",
    "system_state_manager.h",
    "task.cc",
    "unbind_task.cc",
    "vmo_writer.cc",
  ]

  public_deps = [
    "//sdk/fidl/fuchsia.boot",
    "//sdk/fidl/fuchsia.boot:fuchsia.boot_llcpp",
    "//sdk/fidl/fuchsia.device.manager",
    "//sdk/fidl/fuchsia.device.manager:fuchsia.device.manager_c",
    "//sdk/fidl/fuchsia.device.manager:fuchsia.device.manager_llcpp",
    "//sdk/fidl/fuchsia.driver.test:fuchsia.driver.test_c",
    "//sdk/fidl/fuchsia.fshost:fuchsia.fshost_llcpp",
    "//sdk/fidl/fuchsia.hardware.power.statecontrol",
    "//sdk/fidl/fuchsia.hardware.power.statecontrol:fuchsia.hardware.power.statecontrol_c",
    "//sdk/fidl/fuchsia.hardware.power.statecontrol:fuchsia.hardware.power.statecontrol_llcpp",
    "//sdk/fidl/fuchsia.hardware.virtioconsole:fuchsia.hardware.virtioconsole_llcpp",
    "//sdk/fidl/fuchsia.io:fuchsia.io_c",
    "//sdk/fidl/fuchsia.kernel",
    "//sdk/fidl/fuchsia.kernel:fuchsia.kernel_llcpp",
    "//sdk/fidl/fuchsia.ldsvc:fuchsia.ldsvc_llcpp",
    "//sdk/fidl/fuchsia.mem:fuchsia.mem_c",
    "//sdk/fidl/fuchsia.power.manager:fuchsia.power.manager_llcpp",
    "//sdk/fidl/fuchsia.process.lifecycle:fuchsia.process.lifecycle_llcpp",
    "//sdk/lib/fdio",
    "//sdk/lib/fdio:fdio-spawn-actions",
    "//sdk/lib/fidl/cpp",
    "//sdk/lib/sys/cpp",
    "//src/devices/lib/log",
    "//src/lib/ddk",
    "//src/lib/files",
    "//src/lib/loader_service",
    "//src/storage/deprecated-fs-fidl-handler",
    "//zircon/public/lib/fbl",
    "//zircon/public/lib/fidl",
    "//zircon/public/lib/fit",
    "//zircon/public/lib/zircon-internal",
    "//zircon/public/lib/zx",
    "//zircon/public/lib/zxc",
    "//zircon/system/ulib/async-default",
    "//zircon/system/ulib/async-loop:async-loop-cpp",
    "//zircon/system/ulib/async-loop:async-loop-default",
    "//zircon/system/ulib/devmgr-launcher",
    "//zircon/system/ulib/driver-info",
    "//zircon/system/ulib/fidl-async",
    "//zircon/system/ulib/fidl-async:fidl-async-cpp",
    "//zircon/system/ulib/fs",
    "//zircon/system/ulib/fzl",
    "//zircon/system/ulib/inspect",
    "//zircon/system/ulib/inspector",
    "//zircon/system/ulib/memfs",
    "//zircon/system/ulib/memfs:memfs-cpp",
    "//zircon/system/ulib/svc",

    # TODO(fxb/38132): Migrate to the new bind rules and delete the below
    "//src/lib/ddk:ddk-deprecated-binding-headers",
  ]

  configs += [ "//build/config:all_source" ]
}

executable("driver_manager") {
  sources = [ "main.cc" ]

  deps = [
    ":lib",
    "//src/sys/lib/stdout-to-debuglog/cpp",
  ]

  configs += [ "//build/config:all_source" ]
}

test("driver_manager_test") {
  sources = [
    "autobind_tests.cc",
    "binding_test.cc",
    "composite_device_tests.cc",
    "coordinator_test_utils.cc",
    "init_tests.cc",
    "inspect_test.cc",
    "misc_tests.cc",
    "multiple_device_test.cc",
    "multiple_device_test_utils.cc",
    "resume_tests.cc",
    "suspend_tests.cc",
    "system_instance_test.cc",
    "task_test.cc",
    "unbind_tests.cc",
  ]

  deps = [
    ":lib",
    "//sdk/lib/fdio",
    "//sdk/lib/inspect/testing/cpp:zxtest",
    "//zircon/public/lib/zxtest",
    "//zircon/system/ulib/mock-boot-arguments",
  ]
}

fuchsia_unittest_component("driver-manager-test") {
  manifest = "meta/driver-manager-test.cmx"
  deps = [
    ":driver_manager_test",
    "testing:ambient_vmex_test_util",
    "testing:new_process_test_util",
    "//src/devices/bin/driver_host",
    "//src/devices/bus/drivers/platform",
    "//src/devices/internal/drivers/fragment",
    "//src/devices/tests/mock-device",
  ]
}

# This is a separate test binary because this test fixture uses gtest, not zxtest
test("driver_host_loader_service_test") {
  sources = [ "driver_host_loader_service_test.cc" ]
  deps = [
    ":lib",
    "//src/lib/loader_service:loader_service_test_fixture",
  ]
}

fuchsia_unittest_component("driver-host-loader-service-test") {
  manifest = "meta/driver-host-loader-service-test.cmx"
  deps = [ ":driver_host_loader_service_test" ]
}

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

  public_deps = [
    "//sdk/fidl/fuchsia.component.runner",
    "//sdk/fidl/fuchsia.component.runner:fuchsia.component.runner_llcpp",
    "//sdk/fidl/fuchsia.driver.framework:fuchsia.driver.framework_llcpp",
    "//sdk/fidl/fuchsia.sys2:fuchsia.sys2_llcpp",
    "//src/devices/lib/driver2:llcpp",
    "//src/devices/lib/log",
    "//zircon/public/lib/zxc",
    "//zircon/system/ulib/fs",
  ]
}

executable("driver_runner_test") {
  testonly = true
  sources = [ "driver_runner_test.cc" ]

  deps = [
    ":driver_runner",
    "//sdk/fidl/fuchsia.driver.framework",
    "//sdk/fidl/fuchsia.sys2",
    "//sdk/lib/sys/cpp/testing:unit",
    "//src/lib/fxl/test:gtest_main",
    "//src/lib/testing/loop_fixture",
    "//zircon/system/ulib/async-loop:async-loop-cpp",
    "//zircon/system/ulib/async-loop:async-loop-default",
  ]
}

fuchsia_unittest_component("driver-runner-test") {
  manifest = "meta/driver_runner_test.cml"

  deps = [ ":driver_runner_test" ]
}

fuchsia_test_package("driver-manager-tests") {
  test_components = [
    ":driver-host-loader-service-test",
    ":driver-manager-test",
    ":driver-runner-test",
  ]
}

component_manifest_resources("meta") {
  sources = [ "meta/driver_manager.cml" ]
}

group("bootfs") {
  deps = [
    ":driver_manager",
    ":meta",
  ]
}
