# 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/config/fuchsia/rules.gni")
import("//build/test.gni")
import("//build/unification/images/migrated_manifest.gni")

driver_module("aml-securemem") {
  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 = [
    "device.cc",
    "device.h",
    "secmem-session.cc",
    "sysmem-secure-mem-server.cc",
  ]

  deps = [
    "//sdk/banjo/ddk.protocol.composite",
    "//sdk/banjo/ddk.protocol.platform.device",
    "//sdk/banjo/ddk.protocol.sysmem",
    "//sdk/banjo/ddk.protocol.tee",
    "//sdk/fidl/fuchsia.hardware.securemem:fuchsia.hardware.securemem_llcpp",
    "//sdk/fidl/fuchsia.sysmem:fuchsia.sysmem_llcpp",
    "//sdk/fidl/fuchsia.tee",
    "//src/devices/bus/lib/device-protocol-platform-device",
    "//src/devices/lib/driver",
    "//zircon/public/lib/async-cpp",
    "//zircon/public/lib/async-loop-cpp",
    "//zircon/public/lib/async-loop-default",
    "//zircon/public/lib/ddk",
    "//zircon/public/lib/fbl",
    "//zircon/public/lib/fidl-async-cpp",
    "//zircon/public/lib/fit",
    "//zircon/public/lib/safemath",
    "//zircon/public/lib/zx",
    "//zircon/system/ulib/closure-queue",
    "//zircon/system/ulib/tee-client-api:tee-client-api-headers",
  ]
}

test("aml-securemem-test") {
  # Dependent manifests unfortunately cannot be marked as `testonly`.
  # TODO(44278): Remove when converting this file to proper GN build idioms.
  if (is_fuchsia) {
    testonly = false
  }
  if (is_fuchsia) {
    configs += [ "//build/unification/config:zircon-migrated" ]
  }
  output_name = "aml-securemem-test"
  sources = [
    "device.cc",
    "device.h",
    "secmem-session.cc",
    "sysmem-secure-mem-server.cc",
    "test/aml-securemem-test.cc",
  ]
  include_dirs = [ "." ]
  deps = [
    "//sdk/banjo/ddk.protocol.composite",
    "//sdk/banjo/ddk.protocol.platform.device",
    "//sdk/banjo/ddk.protocol.sysmem",
    "//sdk/banjo/ddk.protocol.tee",
    "//sdk/fidl/fuchsia.hardware.securemem:fuchsia.hardware.securemem_llcpp",
    "//sdk/fidl/fuchsia.sysmem:fuchsia.sysmem_llcpp",
    "//sdk/fidl/fuchsia.tee",
    "//src/devices/bus/lib/device-protocol-platform-device",
    "//src/devices/testing/fake-bti",
    "//src/devices/testing/fake_ddk",
    "//zircon/public/lib/async-cpp",
    "//zircon/public/lib/async-loop-cpp",
    "//zircon/public/lib/async-loop-default",
    "//zircon/public/lib/fbl",
    "//zircon/public/lib/fidl-async-cpp",
    "//zircon/public/lib/fit",
    "//zircon/public/lib/safemath",
    "//zircon/public/lib/zxtest",
    "//zircon/system/ulib/closure-queue",
    "//zircon/system/ulib/tee-client-api:tee-client-api-static",
  ]

  # TODO(46354): Fix the leaks and remove this.
  deps += [ "//build/config/sanitizers:suppress-lsan.DO-NOT-USE-THIS" ]
}

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

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