# Copyright 2019 The Chromium OS 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("//common-mk/generate-dbus-adaptors.gni")
import("//common-mk/mojom_bindings_generator.gni")

group("all") {
  deps = [ ":arc_camera_service" ]
}

generate_dbus_adaptors("arc_camera_service_adaptors") {
  sources = [ "dbus_bindings/org.chromium.ArcCamera.xml" ]
  dbus_service_config = "dbus_bindings/dbus-service-config.json"
  dbus_adaptors_out_dir = "include/dbus_adaptors"
}

generate_mojom_bindings("arc_camera_service_mojom") {
  sources = [ "arc_camera.mojom" ]
  mojo_root = "//camera"
}

executable("arc_camera_service") {
  sources = [
    "arc_camera_dbus_daemon.cc",
    "arc_camera_main.cc",
    "arc_camera_service.cc",
    "camera_characteristics.cc",
    "ipc_util.cc",
    "v4l2_camera_device.cc",
  ]
  configs += [ "//camera/build:cros_camera_common" ]
  pkg_deps = [
    "libbrillo",
    "libcamera_timezone",
    "libchrome",
    "libmojo",
  ]
  deps = [
    ":arc_camera_service_adaptors",
    ":arc_camera_service_mojom",
  ]
}
