# 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/mojom_bindings_generator.gni")
import("//common-mk/pkg_config.gni")
import("//common-mk/proto_library.gni")

group("all") {
  deps = [
    ":mps_main",
    ":rtanalytics_main",
  ]
  if (use.test) {
    deps += [ ":media_perception_service_test" ]
  }
}

pkg_config("target_defaults") {
  pkg_deps = [ "protobuf" ]
}

proto_library("media_perception_protos") {
  proto_in_dir = "proto/"
  proto_out_dir = "include/media_perception"
  sources = [
    "${proto_in_dir}/common.proto",
    "${proto_in_dir}/device_management.proto",
    "${proto_in_dir}/frame_perception.proto",
    "${proto_in_dir}/hotword_detection.proto",
    "${proto_in_dir}/huddly.proto",
    "${proto_in_dir}/media_perception_mojom.proto",
    "${proto_in_dir}/occupancy_trigger.proto",
    "${proto_in_dir}/perception_interface.proto",
    "${proto_in_dir}/pipeline.proto",
    "${proto_in_dir}/presence_perception.proto",
  ]
}

generate_mojom_bindings("media_perception_mojo_bindings") {
  mojo_root = "${platform2_root}"
  sources = [
    "mojom/appearances.mojom",
    "mojom/buffer_types.mojom",
    "mojom/color_space.mojom",
    "mojom/common.mojom",
    "mojom/constants.mojom",
    "mojom/device.mojom",
    "mojom/device_factory.mojom",
    "mojom/device_management.mojom",
    "mojom/devices_changed_observer.mojom",
    "mojom/frame_perception.mojom",
    "mojom/geometry.mojom",
    "mojom/hdr_metadata.mojom",
    "mojom/hotword_detection.mojom",
    "mojom/image_capture.mojom",
    "mojom/mailbox.mojom",
    "mojom/mailbox_holder.mojom",
    "mojom/media_perception.mojom",
    "mojom/media_perception_service.mojom",
    "mojom/media_types.mojom",
    "mojom/native_handle_types.mojom",
    "mojom/occupancy_trigger.mojom",
    "mojom/one_touch_autozoom.mojom",
    "mojom/pipeline.mojom",
    "mojom/presence_perception.mojom",
    "mojom/producer.mojom",
    "mojom/scoped_access_permission.mojom",
    "mojom/shared_memory.mojom",
    "mojom/software_autozoom.mojom",
    "mojom/sync_token.mojom",
    "mojom/time.mojom",
    "mojom/unguessable_token.mojom",
    "mojom/values.mojom",
    "mojom/video_capture_buffer.mojom",
    "mojom/video_capture_types.mojom",
    "mojom/video_frame_handler.mojom",
    "mojom/video_source.mojom",
    "mojom/video_source_provider.mojom",
    "mojom/virtual_device.mojom",
    "mojom/vulkan_ycbcr_info.mojom",
  ]
}

static_library("media_perception_service_lib") {
  all_dependent_pkg_deps = [
    "libbrillo",
    "libchrome",
    "libmojo",
  ]
  sources = [
    "audio_receiver.cc",
    "chrome_audio_service_client_impl.cc",
    "cras_client_impl.cc",
    "cros_dbus_service.cc",
    "media_perception_controller_impl.cc",
    "media_perception_impl.cc",
    "media_perception_service_impl.cc",
    "mojo_connector.cc",
    "output_manager.cc",
    "producer_impl.cc",
    "proto_mojom_conversion.cc",
    "video_capture_service_client_impl.cc",
    "video_frame_handler_impl.cc",
  ]
  pkg_deps = [
    "dbus-1",
    "libcras",
  ]
  configs += [ ":target_defaults" ]
  deps = [
    ":media_perception_mojo_bindings",
    ":media_perception_protos",
  ]
}

executable("rtanalytics_main") {
  sources = [ "main.cc" ]
  configs += [ ":target_defaults" ]
  libs = [
    "rtanalytics",
    "dl",
  ]

  # librtanalytics.so is imported to the build directory by mri_package ebuild.
  lib_dirs = [ root_build_dir ]
  deps = [ ":media_perception_service_lib" ]
}

executable("mps_main") {
  sources = [ "mps_main.cc" ]
  configs += [ ":target_defaults" ]
  libs = [
    "rtanalytics",
    "dl",
  ]

  # librtanalytics.so is imported to the build directory by mri_package ebuild.
  lib_dirs = [ root_build_dir ]
  deps = [ ":media_perception_service_lib" ]
}

if (use.test) {
  executable("media_perception_service_test") {
    sources = [
      "fake_chrome_audio_service_client.cc",
      "fake_rtanalytics.cc",
      "fake_video_capture_service_client.cc",
      "media_perception_impl_test.cc",
      "output_manager_test.cc",
      "proto_mojom_conversion_test.cc",
      "testrunner.cc",
    ]
    configs += [
      "//common-mk:test",
      ":target_defaults",
    ]
    deps = [ ":media_perception_service_lib" ]
  }
}
