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

group("tests") {
  testonly = true
  deps = [
    ":sysmem-unittest",
    ":sysmem_bind_test",
  ]
}

driver_bind_rules("sysmem_bind") {
  rules = "sysmem.bind"
  bind_output = "sysmem.bindbc"
  tests = "bind_tests.json"
  deps = [
    "//sdk/fidl/fuchsia.hardware.platform.device:fuchsia.hardware.platform.device_bindlib",
    "//src/devices/bind/fuchsia.devicetree",
    "//src/devices/bind/fuchsia.platform",
  ]
}

source_set("sysmem_common_srcs") {
  sources = [
    "allocator.cc",
    "buffer_collection.cc",
    "buffer_collection_token.cc",
    "buffer_collection_token_group.cc",
    "contiguous_pooled_memory_allocator.cc",
    "device.cc",
    "driver.cc",
    "external_memory_allocator.cc",
    "indent.cc",
    "koid_util.cc",
    "logging.cc",
    "logical_buffer_collection.cc",
    "memory_allocator.cc",
    "node.cc",
    "node_properties.cc",
    "orphaned_node.cc",
    "protected_ranges.cc",
    "sysmem_metrics.cc",
    "usage_pixel_format_cost.cc",
    "utils.cc",
  ]
  public_deps = [
    ":fuchsia.sysmem2.internal_cpp",
    "//sdk/fidl/fuchsia.hardware.platform.device:fuchsia.hardware.platform.device_cpp",
    "//sdk/fidl/fuchsia.hardware.sysmem:fuchsia.hardware.sysmem_cpp",
    "//sdk/fidl/fuchsia.sysmem:fuchsia.sysmem_cpp",
    "//sdk/fidl/fuchsia.sysmem2:fuchsia.sysmem2_cpp",
    "//sdk/lib/async_patterns/cpp",
    "//sdk/lib/component/outgoing/cpp",
    "//sdk/lib/fidl",
    "//sdk/lib/fit",
    "//sdk/lib/sys/cpp:cpp",
    "//src/devices/bind/fuchsia.sysmem.heap:fuchsia.sysmem.heap_cpp",

    # TODO(b/42113093): Remove this dep on AmLogic-specific heap names in sysmem code. The dep is
    # currently needed for secure heap names only, which is why a dep for goldfish heap names isn't
    # here.
    "//src/devices/bind/fuchsia.amlogic.platform.sysmem.heap:fuchsia.amlogic.platform.sysmem.heap_cpp",
    "//src/devices/sysmem/metrics",
    "//src/lib/ddk",
    "//src/lib/ddktl",
    "//src/lib/memory_barriers",
    "//src/lib/metrics_buffer",
    "//zircon/system/ulib/async:async-cpp",
    "//zircon/system/ulib/async-loop:async-loop-cpp",
    "//zircon/system/ulib/closure-queue",
    "//zircon/system/ulib/fbl",
    "//zircon/system/ulib/image-format",
    "//zircon/system/ulib/inspect",
    "//zircon/system/ulib/region-alloc",
    "//zircon/system/ulib/sync",
    "//zircon/system/ulib/sysmem-version",
    "//zircon/system/ulib/trace",
    "//zircon/system/ulib/zx",
  ]

  deps = [
    "//zircon/system/ulib/image-format",
    "//zircon/system/ulib/region-alloc",
    "//zircon/third_party/ulib/safemath",
  ]
}

fuchsia_driver("sysmem-driver") {
  output_name = "sysmem"
  configs += [
    "//build/config:all_source",
    "//build/config/fuchsia:enable_zircon_asserts",
  ]
  if (is_fuchsia) {
    fdio_config = [ "//build/config/fuchsia:fdio_config" ]
    if (configs + fdio_config - fdio_config != configs) {
      configs -= fdio_config
    }
  }
  sources = [ "binding.cc" ]
  deps = [
    ":sysmem_bind",
    ":sysmem_common_srcs",
    "//sdk/lib/driver/runtime:driver_runtime_cpp",
    "//src/devices/lib/driver",
    "//src/devices/lib/driver:driver_runtime",
    "//zircon/system/ulib/sysmem-version",
  ]
}

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

fuchsia_driver_package("package") {
  package_name = "sysmem-driver"
  driver_components = [ ":sysmem" ]
}

test("sysmem-unittest-bin") {
  if (is_fuchsia) {
    fdio_config = [ "//build/config/fuchsia:fdio_config" ]
    if (configs + fdio_config - fdio_config != configs) {
      configs -= fdio_config
    }
  }
  output_name = "sysmem-unittest"
  sources = [
    "test/contiguous_pooled_memory_allocator_test.cc",
    "test/device_test.cc",
    "test/pixel_format_cost_test.cc",
    "test/protected_ranges_test.cc",
  ]
  include_dirs = [ "." ]
  deps = [
    ":sysmem_common_srcs",
    "//sdk/fidl/fuchsia.sysmem:fuchsia.sysmem_cpp",
    "//sdk/lib/fidl",
    "//sdk/lib/fit",
    "//src/devices/bus/testing/fake-pdev",
    "//src/devices/testing/fake-bti",
    "//src/devices/testing/mock-ddk",
    "//src/lib/ddk",
    "//src/lib/ddktl",
    "//zircon/system/ulib/async:async-cpp",
    "//zircon/system/ulib/async-default",
    "//zircon/system/ulib/async-loop:async-loop-cpp",
    "//zircon/system/ulib/async-loop:async-loop-default",
    "//zircon/system/ulib/async-testing",
    "//zircon/system/ulib/closure-queue",
    "//zircon/system/ulib/fbl",
    "//zircon/system/ulib/image-format",
    "//zircon/system/ulib/region-alloc",
    "//zircon/system/ulib/sync",
    "//zircon/system/ulib/sysmem-version",
    "//zircon/system/ulib/zx",
    "//zircon/system/ulib/zxtest",
    "//zircon/third_party/ulib/safemath",
  ]
}

fuchsia_unittest_package("sysmem-unittest") {
  deps = [ ":sysmem-unittest-bin" ]
  test_specs = {
    log_settings = {
      max_severity = "ERROR"
    }
  }
}

fidl("fuchsia.sysmem2.internal") {
  sdk_category = "internal"
  api = "fuchsia.sysmem2.internal.api"
  sources = [ "combined_token.fidl" ]
  public_deps = [
    "//sdk/fidl/fuchsia.sysmem",
    "//sdk/fidl/fuchsia.sysmem2",
  ]
}
