# 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/config/fuchsia/rules.gni")
import("//build/test.gni")
import("//build/test/test_package.gni")
import("//build/unification/images/migrated_manifest.gni")

driver_module("virtio_input") {
  defines = [ "_ALL_SOURCE" ]
  configs += [ "//build/config/fuchsia:enable_zircon_asserts" ]
  configs -= [ "//build/config/fuchsia:no_cpp_standard_library" ]
  configs += [ "//build/config/fuchsia:static_cpp_standard_library" ]
  if (is_fuchsia) {
    configs += [ "//build/unification/config:zircon-migrated" ]
  }
  sources = [
    "input.cc",
    "input_driver.cc",
    "input_kbd.cc",
    "input_touch.cc",
  ]
  deps = [
    "//src/devices/bus/lib/virtio",
    "//src/devices/lib/driver",
    "//zircon/public/lib/ddktl",
    "//zircon/public/lib/hid",
    "//zircon/system/banjo/ddk.protocol.hidbus",
    "//zircon/system/fidl/fuchsia-hardware-pty:c",
  ]
}

test("virtio-input-test") {
  if (is_fuchsia) {
    configs += [ "//build/unification/config:zircon-migrated" ]
  }
  if (is_fuchsia) {
    fdio_config = [ "//build/config/fuchsia:fdio_config" ]
    if (configs + fdio_config - fdio_config != configs) {
      configs -= fdio_config
    }
  }
  sources = [
    "input_kbd.cc",
    "input_test.cc",
    "input_touch.cc",
  ]
  deps = [
    "//src/devices/bus/lib/virtio",
    "//src/ui/input/lib/hid-input-report",
    "//zircon/public/lib/async-loop-cpp",
    "//zircon/public/lib/async-loop-default",
    "//zircon/public/lib/fake-bti",
    "//zircon/public/lib/fake_ddk",
    "//zircon/public/lib/fidl-async-cpp",
    "//zircon/public/lib/unittest",
    "//zircon/public/lib/zxtest",
    "//zircon/system/fidl/fuchsia-hardware-pty:c",
    "//zircon/system/ulib/hid-parser",
  ]

  # TODO(47498): Fix the leaks and remove this.
  deps += [ "//build/config/sanitizers:suppress-lsan.DO-NOT-USE-THIS" ]
}

migrated_manifest("virtio_input-manifest") {
  deps = [ ":virtio_input" ]
}

unittest_package("virtio-input-test-package") {
  package_name = "virtio-input-test"
  deps = [ ":virtio-input-test" ]

  tests = [
    {
      name = "virtio-input-test"
      environments = basic_envs
    },
  ]
}
group("tests") {
  testonly = true
  deps = [ ":virtio-input-test-package" ]
}
