# Copyright 2022 The ChromiumOS Authors
# Use of this source code is governed by a BSD-style license that can be
# found in the LICENSE file.

import("//common-mk/pkg_config.gni")

group("all") {
  deps = [
    ":install_fake_so",
    ":libcamera_hal",
  ]
}

pkg_config("target_defaults") {
  pkg_deps = [
    "libcros_camera_android_deps",
    "libyuv",
  ]
  configs = [ "//camera/build:cros_camera_common" ]
}

shared_library("libcamera_hal") {
  sources = [
    "camera_client.cc",
    "camera_hal.cc",
    "camera_hal_device_ops.cc",
    "capture_request.cc",
    "fake_stream.cc",
    "frame_buffer/cpu_memory_frame_buffer.cc",
    "frame_buffer/frame_buffer.cc",
    "frame_buffer/gralloc_frame_buffer.cc",
    "hal_spec.cc",
    "metadata_handler.cc",
    "request_handler.cc",
    "test_pattern.cc",
    "value_util.cc",
    "y4m_fake_stream.cc",
  ]
  configs += [ ":target_defaults" ]
}

install_config("install_fake_so") {
  sources = [ "${root_out_dir}/lib/libcamera_hal.so" ]
  outputs = [ "fake.so" ]
  install_path = "${libdir}/camera_hal"
  deps = [ ":libcamera_hal" ]
}
