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

driver_module("hid") {
  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" ]
  configs += [ "//build/unification/config:zircon-migrated" ]
  sources = [
    "hid-fifo.c",
    "hid-instance.cc",
    "hid-parser-lib.cc",
    "hid.cc",
  ]
  deps = [
    "//sdk/banjo/ddk.protocol.hiddevice",
    "//src/devices/lib/driver",
    "//zircon/public/lib/ddk",
    "//zircon/public/lib/fbl",
    "//zircon/public/lib/hid",
    "//zircon/public/lib/trace-driver",
    "//zircon/system/banjo/ddk.protocol.hidbus",
    "//zircon/system/fidl/fuchsia-hardware-input:llcpp",
    "//zircon/system/ulib/hid-parser",
  ]
}

test("hid-test") {
  configs += [ "//build/unification/config:zircon-migrated" ]
  sources = [
    "hid-fifo.c",
    "hid-instance.cc",
    "hid-parser-lib.cc",
    "hid-test.cc",
    "hid.cc",
  ]
  deps = [
    "//sdk/banjo/ddk.protocol.hiddevice",
    "//zircon/public/lib/ddk",
    "//zircon/public/lib/fake_ddk",
    "//zircon/public/lib/fbl",
    "//zircon/public/lib/hid",
    "//zircon/public/lib/trace-driver",
    "//zircon/public/lib/zxtest",
    "//zircon/system/banjo/ddk.protocol.hidbus",
    "//zircon/system/fidl/fuchsia-hardware-input:llcpp",
    "//zircon/system/ulib/hid-parser",
  ]

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

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

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

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