# Copyright 2020 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-ram") {
  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" ]
  if (is_fuchsia) {
    configs += [ "//build/unification/config:zircon-migrated" ]
  }
  sources = [ "aml-ram.cc" ]
  deps = [
    ":common",
    "//src/devices/lib/driver",
    "//zircon/public/lib/ddk",
    "//zircon/public/lib/mmio",
  ]
}

test("aml-ram-test") {
  configs += [ "//build/unification/config:zircon-migrated" ]
  output_name = "aml-ram-test"
  sources = [
    "aml-ram-test.cc",
    "aml-ram.cc",
  ]
  deps = [
    ":common",
    "//src/devices/testing/fake-bti",
    "//src/devices/testing/fake-mmio-reg",
    "//src/devices/testing/fake_ddk",
    "//zircon/public/lib/mock-function",
    "//zircon/public/lib/zxtest",
  ]
}

group("common") {
  public_deps = [
    "//sdk/fidl/fuchsia.hardware.ram.metrics:fuchsia.hardware.ram.metrics_llcpp",
    "//src/devices/bus/lib/device-protocol-pdev",
    "//src/devices/bus/lib/device-protocol-platform-device",
    "//src/devices/lib/amlogic",
    "//zircon/public/lib/ddk",
    "//zircon/public/lib/ddktl",
    "//zircon/public/lib/fbl",
    "//zircon/public/lib/hwreg",
    "//zircon/public/lib/mmio",
    "//zircon/public/lib/sync",
    "//zircon/public/lib/zircon-internal",
    "//zircon/public/lib/zx",
    "//zircon/system/fidl/fuchsia-device:llcpp",
  ]
}

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

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

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

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