# 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/bind/bind.gni")
import("//build/components.gni")
import("//build/drivers.gni")
import("//build/test.gni")

driver_bind_rules("aml-pwm-init-bind") {
  rules = "aml-pwm-init.bind"
  bind_output = "aml-pwm-init.bindbc"
  tests = "bind-tests.json"
  deps = [
    "//sdk/fidl/fuchsia.hardware.gpio:fuchsia.hardware.gpio_bindlib",
    "//sdk/fidl/fuchsia.hardware.pwm:fuchsia.hardware.pwm_bindlib",
    "//src/devices/bind/fuchsia.gpio",
  ]
}

fuchsia_driver("aml-pwm-init-driver") {
  output_name = "aml-pwm-init"
  configs += [
    "//build/config:all_source",
    "//build/config/fuchsia:enable_zircon_asserts",
  ]
  sources = [ "aml-pwm-init.cc" ]
  public_deps = [ "//sdk/fidl/fuchsia.hardware.pwm:fuchsia.hardware.pwm_cpp" ]
  deps = [
    ":aml-pwm-init-bind",
    "//sdk/fidl/fuchsia.hardware.clock:fuchsia.hardware.clock_cpp",
    "//sdk/fidl/fuchsia.hardware.gpio:fuchsia.hardware.gpio_cpp",
    "//sdk/lib/driver/compat/cpp",
    "//sdk/lib/driver/component/cpp:cpp",
    "//sdk/lib/driver/runtime:driver_runtime_cpp",
    "//src/devices/bin/driver_runtime",
    "//src/devices/bind/fuchsia:fuchsia_cpp",
    "//src/devices/bind/fuchsia.pwm:fuchsia.pwm_cpp",
    "//src/devices/lib/amlogic",
    "//zircon/system/ulib/fbl",
    "//zircon/system/ulib/zircon-internal",
  ]
}

fuchsia_driver_component("aml-pwm-init") {
  info = "aml-pwm-init-info.json"
  component_name = "aml-pwm-init"
  deps = [ ":aml-pwm-init-driver" ]
  manifest = "meta/aml-pwm-init.cml"
}

fuchsia_driver_package("package") {
  package_name = "aml-pwm-init"
  driver_components = [ ":aml-pwm-init" ]
}

test("aml-pwm-init-test-bin") {
  output_name = "aml-pwm-init-test"
  sources = [
    "aml-pwm-init-test.cc",
    "aml-pwm-init.cc",
  ]
  deps = [
    ":aml-pwm-init-bind",
    "//sdk/fidl/fuchsia.hardware.clock:fuchsia.hardware.clock_cpp",
    "//sdk/fidl/fuchsia.hardware.gpio:fuchsia.hardware.gpio_cpp",
    "//sdk/fidl/fuchsia.hardware.pwm:fuchsia.hardware.pwm_cpp_testing",
    "//sdk/lib/async_patterns/testing/cpp",
    "//sdk/lib/driver/compat/cpp",
    "//sdk/lib/driver/component/cpp:cpp",
    "//sdk/lib/driver/testing/cpp:cpp",
    "//src/devices/bind/fuchsia:fuchsia_cpp",
    "//src/devices/bind/fuchsia.pwm:fuchsia.pwm_cpp",
    "//src/devices/gpio/testing/fake-gpio",
    "//src/devices/lib/amlogic",
    "//zircon/system/ulib/async-default",
    "//zircon/system/ulib/async-loop:async-loop-cpp",
    "//zircon/system/ulib/async-loop:async-loop-default",
    "//zircon/system/ulib/fbl",
    "//zircon/system/ulib/mock-function",
    "//zircon/system/ulib/zircon-internal",
    "//zircon/system/ulib/zx",
    "//zircon/system/ulib/zxtest",
  ]
}

fuchsia_unittest_package("aml-pwm-init-test") {
  deps = [ ":aml-pwm-init-test-bin" ]
  test_specs = {
    environments = basic_envs
  }
}

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