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

executable("sysmem_connector_executable") {
  output_name = "sysmem_connector"

  sources = [
    "app.cc",
    "main.cc",
  ]

  deps = [
    "//sdk/fidl/fuchsia.sysmem",
    "//sdk/lib/sys/cpp",
    "//zircon/system/ulib/async-loop:async-loop-cpp",
    "//zircon/system/ulib/async-loop:async-loop-default",
    "//zircon/system/ulib/sysmem-connector",
    "//zircon/system/ulib/trace-provider:trace-provider-with-fdio",
  ]
}

fuchsia_package_with_single_component("sysmem_connector") {
  manifest = "meta/sysmem_connector.cmx"
  deps = [ ":sysmem_connector_executable" ]
}

executable("sysmem_connector_test_executable") {
  testonly = true
  output_name = "sysmem_connector_test"

  sources = [ "test/sysmem_connector_test.cc" ]

  deps = [
    "//sdk/fidl/fuchsia.sysmem",
    "//sdk/lib/sys/cpp",
    "//sdk/lib/syslog/cpp",
    "//src/lib/fsl",
    "//src/lib/fxl/test:gtest_main",
    "//third_party/googletest:gtest",
    "//zircon/system/ulib/async-loop:async-loop-cpp",
    "//zircon/system/ulib/async-loop:async-loop-default",
  ]
}

fuchsia_unittest_package("sysmem_connector_test") {
  manifest = "meta/sysmem_connector_test.cmx"
  deps = [ ":sysmem_connector_test_executable" ]
}
