# Copyright 2021 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/bazel/export_fuchsia_package_to_bazel.gni")
import("//build/components.gni")
import("//build/drivers.gni")
import("//tools/cmc/build/expect_includes.gni")

group("driver_test_realm") {
  testonly = true
  deps = [
    ":client_includes",
    ":driver_manager_test",
    ":driver_test_realm_component",
    ":fake_resolver",
    ":test_realm_manifest",
    "//src/devices/bin/devfs:component-for-test",
    "//src/devices/bin/driver-index:component",
    "//src/devices/bin/driver_host:component",
  ]
}

group("realm_builder_version") {
  deps = [
    ":driver_manager_test",
    ":driver_test_realm_component",
    ":fake_resolver",
    ":realm_builder_includes",
    ":test_realm_manifest",
    "//src/devices/bin/devfs:component-for-test",
    "//src/devices/bin/driver-index:component",
    "//src/devices/bin/driver_host:component",
  ]
}

group("tests") {
  testonly = true
  deps = [
    ":package",
    "platform:tests",
    "simple:tests",
    "tests",
  ]
}

executable("bin") {
  output_name = "driver_test_realm"
  sources = [ "driver_test_realm.cc" ]
  deps = [
    ":driver_test_realm_config",
    "//sdk/fidl/fuchsia.boot:fuchsia.boot_cpp",
    "//sdk/fidl/fuchsia.component.decl:fuchsia.component.decl_cpp",
    "//sdk/fidl/fuchsia.component.resolution:fuchsia.component.resolution_cpp",
    "//sdk/fidl/fuchsia.device.manager:fuchsia.device.manager_cpp",
    "//sdk/fidl/fuchsia.driver.framework:fuchsia.driver.framework_cpp",
    "//sdk/fidl/fuchsia.driver.test:fuchsia.driver.test_cpp",
    "//sdk/fidl/fuchsia.io:fuchsia.io_cpp",
    "//sdk/fidl/fuchsia.kernel:fuchsia.kernel_cpp",
    "//sdk/fidl/fuchsia.pkg:fuchsia.pkg_cpp",
    "//sdk/lib/component/incoming/cpp",
    "//sdk/lib/component/outgoing/cpp",
    "//sdk/lib/sys/component/cpp/testing:cpp",
    "//sdk/lib/syslog/cpp",
    "//sdk/lib/zbi-format",
    "//src/lib/ddk",
    "//src/lib/ddk:ddk-metadata-headers",
    "//src/lib/files",
    "//src/storage/lib/vfs/cpp",
    "//zircon/system/ulib/async-loop:async-loop-cpp",
  ]
}

fuchsia_component_manifest("manifest") {
  component_name = "driver_test_realm"
  manifest = "meta/driver_test_realm.cml"
}

fuchsia_structured_config_cpp_elf_lib("driver_test_realm_config") {
  cm_label = ":manifest"
}

fuchsia_structured_config_values("driver_test_realm_config_default") {
  cm_label = ":manifest"
  values = {
    tunnel_boot_items = false
  }
}

fuchsia_component("driver_test_realm_component") {
  cm_label = ":manifest"
  deps = [
    ":bin",
    ":driver_test_realm_config_default",
  ]
}

executable("fake_resolver_bin") {
  output_name = "fake_resolver"
  sources = [ "fake_resolver.cc" ]
  data_deps = [ "fake_driver:driver_package" ]
  deps = [
    "//sdk/fidl/fuchsia.component.decl:fuchsia.component.decl_cpp",
    "//sdk/fidl/fuchsia.component.resolution:fuchsia.component.resolution_cpp",
    "//sdk/fidl/fuchsia.io:fuchsia.io_cpp",
    "//sdk/lib/component/incoming/cpp",
    "//sdk/lib/component/outgoing/cpp",
    "//sdk/lib/syslog/cpp",
    "//zircon/system/ulib/async-loop:async-loop-cpp",
    "//zircon/system/ulib/async-loop:async-loop-default",
  ]
}

fuchsia_component("fake_resolver") {
  manifest = "meta/fake_resolver.cml"
  deps = [ ":fake_resolver_bin" ]
}

fuchsia_component_manifest("driver_manager_manifest") {
  component_name = "driver_manager_test"
  manifest = "meta/driver_manager_test.cml"
}

fuchsia_structured_config_values("test_config") {
  cm_label = ":driver_manager_manifest"
  values = {
    set_root_driver_host_critical = false
    delay_fallback_until_base_drivers_indexed = true
    suspend_timeout_fallback = true
    verbose = false
    driver_host_crash_policy = "restart-driver-host"
    root_driver = "fuchsia-boot:///dtr#meta/test-parent-sys.cm"
    enable_test_shutdown_delays = false
  }
}

fuchsia_component("driver_manager_test") {
  cm_label = ":driver_manager_manifest"
  deps = [
    ":test_config",
    "//src/devices/bin/driver_manager",
  ]
}

fuchsia_component_manifest("test_realm_manifest") {
  component_name = "test_realm"
  manifest = "meta/test_realm.cml"
  restricted_features = [
    "allow_long_names",
    "config_capabilities",
  ]
}

expect_includes("client_includes") {
  includes = [ "meta/client.shard.cml" ]
}

expect_includes("realm_builder_includes") {
  includes = [ "meta/realm_builder.shard.cml" ]
}

fuchsia_package("package") {
  testonly = true
  package_name = "driver_test_realm"
  deps = [
    ":driver_test_realm",
    "//src/devices/misc/drivers/test-parent",
  ]
}

fuchsia_package("realm_builder_version-package") {
  package_name = "driver_test_realm_realm_builder_version"
  deps = [
    ":realm_builder_version",
    "//src/devices/misc/drivers/test-parent",
  ]
}

# Define Bazel input resource so it can be used
export_fuchsia_package_to_bazel("realm-builder-version-package-bazel") {
  package = ":realm_builder_version-package"
  package_name = "driver_test_realm"
}
