# Copyright 2019 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/components.gni")

group("image_utils") {
  deps = [
    ":blc",
    ":hsv_color_source",
    ":image_format_rgba",
    ":raw12_writer",
  ]
}

group("tests") {
  testonly = true
  deps = [
    ":blc_unittest",
    ":hsv_generator_unittest",
    ":image_format_rgba_unittest",
    ":raw12_writer_unittest",
  ]
}

source_set("blc") {
  sources = [ "blc.cc" ]
  public = [ "blc.h" ]
  public_deps = [ ":raw12_writer" ]
}

source_set("raw12_writer") {
  sources = [ "raw12_writer.cc" ]
  public = [
    "image_writer.h",
    "raw12_writer.h",
  ]
  public_deps = [
    "//sdk/fidl/fuchsia.sysmem:fuchsia.sysmem_hlcpp",
    "//sdk/lib/fit-promise",
    "//sdk/lib/syslog/cpp",
    "//zircon/system/ulib/fzl",
  ]
}

source_set("hsv_color_source") {
  sources = [
    "color_source.cc",
    "hsv_generator.cc",
  ]
  public = [
    "color_source.h",
    "hsv_generator.h",
  ]
  public_deps = [ ":image_format_rgba" ]
}

source_set("image_format_rgba") {
  sources = [ "image_format_rgba.cc" ]
  public = [ "image_format_rgba.h" ]
  public_deps = [
    "//sdk/fidl/fuchsia.sysmem:fuchsia.sysmem_hlcpp",
    "//sdk/lib/syslog/cpp",
    "//zircon/system/ulib/fbl",
    "//zircon/system/ulib/fzl",
    "//zircon/system/ulib/image-format",
    "//zircon/system/ulib/zx",
  ]
}

executable("blc_unittest_bin") {
  testonly = true
  sources = [ "blc_unittest.cc" ]
  deps = [
    ":blc",
    "//src/lib/fxl/test:gtest_main",
  ]
}

executable("hsv_generator_unittest_bin") {
  testonly = true
  sources = [ "hsv_generator_unittest.cc" ]
  deps = [
    ":hsv_color_source",
    "//src/lib/fxl/test:gtest_main",
  ]
}

executable("image_format_rgba_unittest_bin") {
  testonly = true
  sources = [ "image_format_rgba_unittest.cc" ]
  deps = [
    ":hsv_color_source",
    ":image_format_rgba",
    "//src/lib/fxl/test:gtest_main",
  ]
}

executable("raw12_writer_unittest_bin") {
  testonly = true
  sources = [ "raw12_writer_unittest.cc" ]
  deps = [
    ":raw12_writer",
    "//src/lib/fxl/test:gtest_main",
  ]
}

fuchsia_unittest_package("blc_unittest") {
  deps = [ ":blc_unittest_bin" ]
}

fuchsia_unittest_package("hsv_generator_unittest") {
  deps = [ ":hsv_generator_unittest_bin" ]
}

fuchsia_unittest_package("image_format_rgba_unittest") {
  deps = [ ":image_format_rgba_unittest_bin" ]
}

fuchsia_unittest_package("raw12_writer_unittest") {
  deps = [ ":raw12_writer_unittest_bin" ]
}
