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

group("device") {
  deps = [ ":camera_device" ]
}

group("tests") {
  testonly = true
  deps = [ ":camera_device_unittest" ]
}

source_set("lib") {
  sources = [
    "device_impl.cc",
    "device_impl.h",
    "device_impl_client.cc",
    "metrics_reporter.cc",
    "metrics_reporter.h",
    "stream_impl.cc",
    "stream_impl.h",
    "stream_impl_client.cc",
    "sysmem_allocator.cc",
    "sysmem_allocator.h",
    "util.h",
  ]

  deps = [
    "//sdk/lib/syslog/cpp",
    "//src/camera/lib/hanging_get_helper",
    "//src/lib/fsl",
    "//zircon/public/lib/fbl",
    "//zircon/system/ulib/async-loop:async-loop-default",
  ]

  public_deps = [
    "//sdk/fidl/fuchsia.camera2.hal",
    "//sdk/fidl/fuchsia.camera3",
    "//sdk/fidl/fuchsia.sysmem",
    "//sdk/fidl/fuchsia.ui.policy",
    "//sdk/lib/fidl/cpp",
    "//sdk/lib/sys/cpp",
    "//sdk/lib/sys/inspect/cpp",
    "//zircon/public/lib/fit",
    "//zircon/system/ulib/async-loop:async-loop-cpp",
    "//zircon/system/ulib/trace",
  ]

  defines = [ camera_debug_define ]
}

executable("camera_device_bin") {
  sources = [ "main.cc" ]

  deps = [
    ":lib",
    "//sdk/lib/syslog/cpp",
    "//zircon/system/ulib/async-loop:async-loop-default",
    "//zircon/system/ulib/trace-provider:trace-provider-with-fdio",
  ]

  defines = [ camera_debug_define ]
}

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

executable("camera_device_unittest_bin") {
  testonly = true
  sources = [
    "device_impl_unittest.cc",
    "metrics_reporter_unittest.cc",
    "sysmem_allocator_unittest.cc",
    "util_unittest.cc",
  ]
  deps = [
    ":lib",
    "testing",
    "//sdk/fidl/fuchsia.camera2.hal",
    "//sdk/fidl/fuchsia.camera3",
    "//sdk/fidl/fuchsia.sysmem",
    "//sdk/lib/inspect/testing/cpp",
    "//sdk/lib/sys/cpp",
    "//sdk/lib/sys/cpp/testing:unit",
    "//src/camera/lib/fake_controller",
    "//src/lib/fsl",
    "//src/lib/fxl/test:gtest_main",
    "//src/lib/testing/loop_fixture",
    "//third_party/googletest:gmock",
  ]

  # Increase the default stack size from 256 KB because creating the configs can take up a very
  # large amount of stack and would otherwise cause crashes on ASAN builds.
  ldflags = [ "-Wl,-z,stack-size=0x100000" ]
}

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