# 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("//build/test/test_package.gni")
import("//build/testing/environments.gni")

source_set("compression-interfaces") {
  public = [
    "compressor.h",
    "decompressor.h",
  ]
  public_deps = [
    "//zircon/public/lib/fbl",
    "//zircon/public/lib/fit",
  ]
}

source_set("lz4-compression") {
  sources = [
    "lz4_compressor.cc",
    "lz4_decompressor.cc",
  ]
  public = [
    "lz4_compressor.h",
    "lz4_decompressor.h",
  ]
  public_deps = [
    ":compression-interfaces",
    "//src/storage/volume_image:options",
    "//zircon/public/lib/fbl",
    "//zircon/public/lib/fit",
    "//zircon/public/lib/lz4",
  ]

  # TODO(fxbug.dev/58162): delete the below and fix compiler warnings
  configs += [ "//build/config:Wno-conversion" ]
}

source_set("lz4-compression-test") {
  testonly = true
  sources = [
    "lz4_compressor_test.cc",
    "lz4_decompressor_test.cc",
  ]
  deps = [
    ":lz4-compression",
    "//third_party/googletest:gmock",
    "//third_party/googletest:gtest",
  ]

  # TODO(fxbug.dev/58162): delete the below and fix compiler warnings
  configs += [ "//build/config:Wno-conversion" ]
}

source_set("guid") {
  sources = [ "guid.cc" ]
  public = [ "guid.h" ]
  public_deps = [
    "//zircon/public/lib/fbl",
    "//zircon/public/lib/fit",
  ]

  # TODO(fxbug.dev/58162): delete the below and fix compiler warnings
  configs += [ "//build/config:Wno-conversion" ]
}

source_set("guid-test") {
  testonly = true
  sources = [ "guid_test.cc" ]
  deps = [
    ":guid",
    "//third_party/googletest:gtest",
    "//zircon/public/lib/fbl",
    "//zircon/public/lib/fit",
  ]

  # This double checks that the resulting guids are compatible with our existing guids.
  # Because gpt is fuchsia only, this is required.
  if (is_fuchsia) {
    sources += [ "guid_test_fuchsia.cc" ]
    deps += [ "//zircon/system/ulib/gpt" ]
  }
}

source_set("path") {
  sources = [ "path.cc" ]
  public = [ "path.h" ]
}

source_set("io-interfaces") {
  public = [
    "reader.h",
    "writer.h",
  ]
  public_deps = [
    "//zircon/public/lib/fbl",
    "//zircon/public/lib/fit",
  ]
}

source_set("fd-io") {
  sources = [
    "fd_reader.cc",
    "fd_writer.cc",
  ]
  public = [
    "fd_reader.h",
    "fd_writer.h",
  ]
  public_deps = [
    ":io-interfaces",
    "//zircon/public/lib/fbl",
    "//zircon/public/lib/fit",
  ]

  # TODO(fxbug.dev/58162): delete the below and fix compiler warnings
  configs += [ "//build/config:Wno-conversion" ]
}

source_set("fd-test-helper") {
  sources = [ "fd_test_helper.cc" ]
  public = [ "fd_test_helper.h" ]
  public_deps = [ "//zircon/public/lib/fit" ]
  deps = [ "//zircon/public/lib/fbl" ]
}

source_set("fd-io-test") {
  testonly = true
  sources = [
    "fd_reader_test.cc",
    "fd_writer_test.cc",
  ]
  deps = [
    ":fd-io",
    ":fd-test-helper",
    "//third_party/googletest:gtest",
    "//zircon/public/lib/fbl",
    "//zircon/public/lib/fit",
  ]

  # TODO(fxbug.dev/58162): delete the below and fix compiler warnings
  configs += [ "//build/config:Wno-conversion" ]
}

source_set("block-utils") {
  public = [ "block_utils.h" ]
  public_deps = [ "//zircon/public/lib/fbl" ]
}

source_set("block-utils-test") {
  testonly = true
  sources = [ "block_utils_test.cc" ]
  deps = [
    ":block-utils",
    "//third_party/googletest:gtest",
    "//zircon/public/lib/fbl",
  ]
}

group("tests") {
  testonly = true
  deps = [
    ":block-utils-test",
    ":fd-io-test",
    ":guid-test",
    ":lz4-compression-test",
  ]
}
