# 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_canvas_bind") {
  rules = "aml_canvas.bind"
  bind_output = "aml-canvas.bindbc"
  tests = "bind_tests.json"
  deps = [
    "//src/devices/bind/fuchsia.amlogic.platform",
    "//src/devices/bind/fuchsia.devicetree",
    "//src/devices/bind/fuchsia.platform",
  ]
}

source_set("common_srcs") {
  configs += [
    "//build/config:all_source",
    "//build/config/fuchsia:enable_zircon_asserts",
  ]
  sources = [
    "aml-canvas-driver.cc",
    "aml-canvas-driver.h",
    "aml-canvas.cc",
    "aml-canvas.h",
    "board-resources.cc",
    "board-resources.h",
    "dmc-regs.h",
  ]
  public_deps = [
    ":aml_canvas_bind",
    "//sdk/fidl/fuchsia.hardware.amlogiccanvas:fuchsia.hardware.amlogiccanvas_cpp",
    "//sdk/fidl/fuchsia.hardware.platform.device:fuchsia.hardware.platform.device_cpp",
    "//sdk/lib/component/outgoing/cpp",
    "//sdk/lib/driver/compat/cpp",
    "//sdk/lib/driver/compat/cpp:logging",
    "//sdk/lib/driver/component/cpp",
    "//src/devices/bin/driver_runtime",
    "//src/devices/lib/mmio",
    "//zircon/system/ulib/fbl",
    "//zircon/system/ulib/hwreg",
    "//zircon/system/ulib/inspect",
    "//zircon/system/ulib/zx",
  ]
}

fuchsia_driver("aml-canvas-driver") {
  output_name = "aml-canvas"
  deps = [ ":common_srcs" ]
}

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

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

test("aml-canvas-tests") {
  sources = [
    "aml-canvas-driver-test.cc",
    "aml-canvas-test.cc",
    "board-resources-test.cc",
  ]
  deps = [
    ":common_srcs",
    "//sdk/lib/async-loop-testing/cpp",
    "//sdk/lib/async_patterns/testing/cpp",
    "//sdk/lib/driver/runtime/testing/cpp",
    "//sdk/lib/driver/testing/cpp",
    "//src/devices/bus/testing/fake-pdev",
    "//src/devices/testing/fake-bti",
    "//src/devices/testing/mock-mmio-range",
    "//src/lib/fxl/test:gtest_main",
    "//src/lib/testing/predicates",
    "//third_party/googletest:gtest",
    "//zircon/system/ulib/async-loop:async-loop-cpp",
  ]
}

group("tests") {
  testonly = true
  deps = [
    ":aml-canvas-tests-package",
    ":aml_canvas_bind_test",
  ]
}

fuchsia_unittest_package("aml-canvas-tests-package") {
  package_name = "aml-canvas-tests"
  deps = [ ":aml-canvas-tests" ]
  test_specs = {
    log_settings = {
      max_severity = "ERROR"
    }
  }
}
