# 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/fidl/fidl.gni")
import("//build/package.gni")
import("//src/camera/debug.gni")

source_set("lib") {
  sources = [
    "device_instance.cc",
    "device_instance.h",
    "device_watcher_impl.cc",
    "device_watcher_impl.h",
  ]

  public_deps = [
    ":fuchsia.camera.test",
    "//sdk/fidl/fuchsia.camera2.hal",
    "//sdk/fidl/fuchsia.camera3",
    "//sdk/fidl/fuchsia.hardware.camera",
    "//sdk/fidl/fuchsia.io",
    "//sdk/fidl/fuchsia.sys",
    "//sdk/lib/fdio",
    "//sdk/lib/fidl/cpp",
    "//sdk/lib/sys/cpp",
    "//sdk/lib/syslog/cpp",
    "//sdk/lib/vfs/cpp",
    "//src/lib/fsl",
    "//zircon/public/lib/fbl",
    "//zircon/public/lib/fit",
    "//zircon/system/ulib/async-loop:async-loop-cpp",
    "//zircon/system/ulib/async-loop:async-loop-default",
  ]

  defines = [ camera_debug_define ]
}

executable("bin") {
  output_name = "device_watcher"

  sources = [ "main.cc" ]

  deps = [ ":lib" ]

  defines = [ camera_debug_define ]
}

fidl("fuchsia.camera.test") {
  sdk_category = "internal"

  sources = [ "device_watcher_tester.test.fidl" ]

  public_deps = [ "//sdk/fidl/fuchsia.hardware.camera" ]
}

package("camera_device_watcher") {
  deps = [ ":bin" ]

  binaries = [
    {
      name = "device_watcher"
    },
  ]
  meta = [
    {
      path = "${target_name}.cmx"
      dest = "${target_name}.cmx"
    },
  ]
}

group("device_watcher") {
  public_deps = [ ":camera_device_watcher" ]
}
