# 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("clock-bind") {
  rules = "clock.bind"
  bind_output = "clock.bindbc"
  tests = "bind-tests.json"
  deps = [
    "//sdk/fidl/fuchsia.hardware.clockimpl:fuchsia.hardware.clockimpl_bindlib",
    "//src/devices/bind/fuchsia.clock",
  ]
}

fuchsia_driver("clock-driver") {
  output_name = "clock"
  configs += [
    "//build/config:all_source",
    "//build/config/fuchsia:enable_zircon_asserts",
  ]
  sources = [ "clock.cc" ]
  deps = [
    ":clock-bind",
    "//sdk/banjo/fuchsia.hardware.clockimpl:fuchsia.hardware.clockimpl_banjo_cpp",
    "//sdk/fidl/fuchsia.hardware.clock:fuchsia.hardware.clock_cpp",
    "//sdk/fidl/fuchsia.hardware.clockimpl:fuchsia.hardware.clockimpl_cpp",
    "//sdk/lib/component/outgoing/cpp",
    "//src/devices/bind/fuchsia.clock:fuchsia.clock_cpp",
    "//src/devices/lib/driver",
    "//src/devices/lib/driver:driver_runtime",
    "//src/lib/ddk",
    "//src/lib/ddk:ddk-metadata-headers",
    "//src/lib/ddktl",
    "//zircon/system/ulib/fbl",
    "//zircon/system/ulib/zx",
  ]
}

fuchsia_driver_component("clock") {
  visibility = [ ":*" ]
  component_name = "clock"
  deps = [ ":clock-driver" ]
  info = "clock-info.json"
  manifest = "meta/clock.cml"
}

fuchsia_driver_package("package") {
  package_name = "clock"
  driver_components = [ ":clock" ]
}

test("clock-test-bin") {
  sources = [
    "clock-test.cc",
    "clock.cc",
  ]
  deps = [
    ":clock-bind",
    "//sdk/banjo/fuchsia.hardware.clockimpl:fuchsia.hardware.clockimpl_banjo_cpp",
    "//sdk/fidl/fuchsia.hardware.clock:fuchsia.hardware.clock_cpp",
    "//sdk/fidl/fuchsia.hardware.clockimpl:fuchsia.hardware.clockimpl_cpp",
    "//sdk/lib/async_patterns/testing/cpp",
    "//sdk/lib/component/outgoing/cpp",
    "//sdk/lib/driver/testing/cpp",
    "//src/devices/bind/fuchsia.clock:fuchsia.clock_cpp",
    "//src/devices/lib/driver",
    "//src/devices/lib/driver:driver_runtime",
    "//src/devices/testing/mock-ddk:mock-ddk",
    "//src/lib/ddk",
    "//src/lib/ddk:ddk-metadata-headers",
    "//src/lib/ddktl",
    "//zircon/system/ulib/fbl",
    "//zircon/system/ulib/zx",
    "//zircon/system/ulib/zxtest",
  ]
}

fuchsia_unittest_package("clock-test") {
  deps = [ ":clock-test-bin" ]
  test_specs = {
    environments = basic_envs
    log_settings = {
      max_severity = "ERROR"
    }
  }
}

group("tests") {
  testonly = true
  deps = [
    ":clock-bind_test",
    ":clock-test",
  ]
}
