# 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/config/fuchsia/rules.gni")
import("//src/sys/build/components.gni")

group("tests") {
  testonly = true
  deps = [
    ":ge2d_bind_test",
    ":ge2d_task_unittest",
  ]
}

bind_rules("ge2d_bind") {
  rules = "ge2d.bind"
  output = "bind.h"
  tests = "bind_tests.json"
  deps = [ "//src/devices/bind/amlogic.platform" ]
}

source_set("lib") {
  sources = [
    "ge2d.cc",
    "ge2d.h",
    "ge2d_regs.h",
    "ge2d_task.cc",
    "ge2d_task.h",
  ]
  public_deps = [
    "//sdk/banjo/fuchsia.hardware.amlogiccanvas",
    "//sdk/banjo/fuchsia.hardware.ge2d",
    "//sdk/banjo/fuchsia.hardware.platform.bus:fuchsia.hardware.platform.bus_banjo_cpp",
    "//sdk/banjo/fuchsia.hardware.platform.device:fuchsia.hardware.platform.device_banjo_cpp",
    "//sdk/banjo/fuchsia.hardware.sysmem",
    "//sdk/fidl/fuchsia.sysmem:fuchsia.sysmem_c",
    "//sdk/lib/syslog/cpp",
    "//src/camera/drivers/hw_accel/task:camera-task",
    "//src/devices/bus/lib/device-protocol-pdev",
    "//src/devices/bus/lib/device-protocol-platform-device",
    "//src/devices/lib/mmio",
    "//src/lib/ddk",
    "//src/lib/ddktl",
    "//zircon/public/lib/fbl",
    "//zircon/public/lib/hwreg",
  ]
  deps = [
    "//src/devices/lib/driver",
    "//zircon/public/lib/zx",
    "//zircon/system/ulib/fzl",
    "//zircon/system/ulib/image-format",
    "//zircon/system/ulib/trace:trace-driver",
  ]
  configs += [ "//build/config/fuchsia:enable_zircon_asserts" ]
}

driver_module("ge2d-driver") {
  output_name = "ge2d"
  sources = [ "bind.cc" ]
  deps = [
    ":ge2d_bind",
    ":ge2d_on_device_test",
    ":lib",
    "//sdk/lib/syslog/cpp:backend_legacy",
    "//zircon/system/ulib/driver-unit-test",
  ]
  configs += [ "//build/config/fuchsia:enable_zircon_asserts" ]
}

fuchsia_system_package("ge2d") {
  deps = [ ":ge2d-driver" ]
  allowed_in_extra_deps = true
}

source_set("ge2d_on_device_test") {
  sources = [ "ge2d_on_device_test.cc" ]
  deps = [
    "//sdk/lib/fit",
    "//src/camera/drivers/hw_accel/ge2d:lib",
    "//src/camera/drivers/test_utils",
    "//src/lib/ddk",
    "//zircon/public/lib/safemath",
    "//zircon/public/lib/sync",
    "//zircon/public/lib/zxtest",
    "//zircon/system/ulib/driver-unit-test",
    "//zircon/system/ulib/fzl",
    "//zircon/system/ulib/image-format",
  ]
}

executable("ge2d_task_unittest_bin") {
  testonly = true
  sources = [ "ge2d_task_unittest.cc" ]
  deps = [
    ":lib",
    "//sdk/banjo/fuchsia.hardware.amlogiccanvas",
    "//sdk/banjo/fuchsia.hardware.ge2d",
    "//sdk/banjo/fuchsia.hardware.sysmem",
    "//sdk/fidl/fuchsia.sysmem:fuchsia.sysmem_c",
    "//src/camera/drivers/test_utils",
    "//src/devices/lib/driver",
    "//src/devices/lib/mmio",
    "//src/devices/lib/sysmem",
    "//src/devices/testing/fake-bti",
    "//src/devices/testing/mock-mmio-reg",
    "//src/devices/testing/no_ddk",
    "//src/lib/ddk",
    "//zircon/public/lib/fbl",
    "//zircon/public/lib/zx",
    "//zircon/public/lib/zxtest",
  ]
}

fuchsia_unittest_package("ge2d_task_unittest") {
  deps = [ ":ge2d_task_unittest_bin" ]
  test_specs = {
    log_settings = {
      max_severity = "ERROR"
    }
  }
}
