# 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("aml-light") {
  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 = [ "aml-light.cc" ]
  deps = [
    "//sdk/banjo/ddk.protocol.composite",
    "//sdk/banjo/ddk.protocol.gpio",
    "//sdk/banjo/ddk.protocol.pwm",
    "//sdk/fidl/fuchsia.hardware.light:fuchsia.hardware.light_llcpp",
    "//src/devices/lib/amlogic",
    "//src/devices/lib/driver",
    "//zircon/public/lib/ddk",
    "//zircon/public/lib/ddktl",
    "//zircon/public/lib/fbl",
    "//zircon/public/lib/fidl",
    "//zircon/public/lib/sync",
    "//zircon/public/lib/zx",
  ]
}

test("aml-light-test") {
  configs += [ "//build/unification/config:zircon-migrated" ]
  output_name = "aml-light-test"
  sources = [
    "aml-light-test.cc",
    "aml-light.cc",
  ]
  deps = [
    "//sdk/banjo/ddk.protocol.composite",
    "//sdk/banjo/ddk.protocol.gpio",
    "//sdk/banjo/ddk.protocol.gpio:ddk.protocol.gpio_mock",
    "//sdk/banjo/ddk.protocol.pwm",
    "//sdk/banjo/ddk.protocol.pwm:ddk.protocol.pwm_mock",
    "//sdk/fidl/fuchsia.hardware.light:fuchsia.hardware.light_llcpp",
    "//src/devices/lib/amlogic",
    "//src/devices/testing/fake_ddk",
    "//zircon/public/lib/async-loop-default",
    "//zircon/public/lib/ddk",
    "//zircon/public/lib/ddktl",
    "//zircon/public/lib/fbl",
    "//zircon/public/lib/fidl",
    "//zircon/public/lib/fidl-async-cpp",
    "//zircon/public/lib/mock-function",
    "//zircon/public/lib/sync",
    "//zircon/public/lib/zx",
    "//zircon/public/lib/zxtest",
  ]
}

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

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

  tests = [
    {
      name = "aml-light-test"
      environments = basic_envs
    },
  ]
}

group("tests") {
  testonly = true
  deps = [ ":aml-light-test-package" ]
}
