# Copyright 2020 The Pigweed Authors
#
# Licensed under the Apache License, Version 2.0 (the "License"); you may not
# use this file except in compliance with the License. You may obtain a copy of
# the License at
#
#     https://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
# License for the specific language governing permissions and limitations under
# the License.

# gn-format disable
import("//build_overrides/pigweed.gni")

import("$dir_pw_build/target_types.gni")
import("$dir_pw_docgen/docs.gni")
import("$dir_pw_unit_test/test.gni")
config("default_config") {
  include_dirs = [ "public" ]
}

pw_source_set("pw_kvs") {
  public_configs = [ ":default_config" ]
  public = [
    "public/pw_kvs/alignment.h",
    "public/pw_kvs/checksum.h",
    "public/pw_kvs/flash_memory.h",
    "public/pw_kvs/format.h",
    "public/pw_kvs/io.h",
    "public/pw_kvs/key_value_store.h",
  ]
  sources = [
    "alignment.cc",
    "checksum.cc",
    "entry.cc",
    "entry_cache.cc",
    "flash_memory.cc",
    "format.cc",
    "key_value_store.cc",
    "public/pw_kvs/internal/entry.h",
    "public/pw_kvs/internal/entry_cache.h",
    "public/pw_kvs/internal/hash.h",
    "public/pw_kvs/internal/key_descriptor.h",
    "public/pw_kvs/internal/sectors.h",
    "public/pw_kvs/internal/span_traits.h",
    "pw_kvs_private/macros.h",
    "sectors.cc",
  ]
  public_deps = [
    dir_pw_containers,
    dir_pw_span,
    dir_pw_status,
  ]
  deps = [
    dir_pw_assert,
    dir_pw_checksum,
    dir_pw_log,
  ]
  friend = [ ":*" ]
}

pw_source_set("crc16") {
  public = [ "public/pw_kvs/crc16_checksum.h" ]
  public_deps = [
    ":pw_kvs",
    dir_pw_checksum,
  ]
}

pw_source_set("fake_flash") {
  public_configs = [ ":default_config" ]
  public = [ "public/pw_kvs/fake_flash_memory.h" ]
  sources = [ "fake_flash_memory.cc" ]
  public_deps = [
    dir_pw_containers,
    dir_pw_kvs,
    dir_pw_span,
    dir_pw_status,
  ]
  deps = [ dir_pw_log ]
}

pw_source_set("test_utils") {
  public_configs = [ ":default_config" ]
  public = [ "pw_kvs_private/byte_utils.h" ]
  visibility = [ ":*" ]
}

pw_source_set("test_partition") {
  public_configs = [ ":default_config" ]
  public = [ "public/pw_kvs/flash_partition_with_stats.h" ]
  sources = [ "flash_partition_with_stats.cc" ]
  visibility = [ ":*" ]
  public_deps = [
    dir_pw_kvs,
    dir_pw_log,
    dir_pw_status,
  ]
}

pw_test_group("tests") {
  tests = [
    ":alignment_test",
    ":checksum_test",
    ":entry_test",
    ":entry_cache_test",
    ":key_value_store_test",
    ":key_value_store_binary_format_test",
    ":key_value_store_fuzz_test",
    ":key_value_store_map_test",
    ":sectors_test",
    ":key_value_store_wear_test",
  ]
}

pw_test("alignment_test") {
  deps = [ ":pw_kvs" ]
  sources = [ "alignment_test.cc" ]
}

pw_test("checksum_test") {
  deps = [
    ":crc16",
    ":pw_kvs",
    dir_pw_log,
  ]
  sources = [ "checksum_test.cc" ]
}

pw_test("entry_test") {
  deps = [
    ":crc16",
    ":fake_flash",
    ":pw_kvs",
    ":test_utils",
  ]
  sources = [ "entry_test.cc" ]
}

pw_test("entry_cache_test") {
  deps = [
    ":fake_flash",
    ":pw_kvs",
    ":test_utils",
  ]
  sources = [ "entry_cache_test.cc" ]
}

pw_test("key_value_store_test") {
  deps = [
    ":crc16",
    ":fake_flash",
    ":pw_kvs",
    ":test_utils",
    dir_pw_checksum,
    dir_pw_log,
  ]
  sources = [ "key_value_store_test.cc" ]
}

pw_test("key_value_store_binary_format_test") {
  deps = [
    ":crc16",
    ":fake_flash",
    ":pw_kvs",
    ":test_utils",
    dir_pw_log,
  ]
  sources = [ "key_value_store_binary_format_test.cc" ]
}

pw_test("key_value_store_fuzz_test") {
  deps = [
    ":crc16",
    ":fake_flash",
    ":pw_kvs",
    ":test_partition",
  ]
  sources = [ "key_value_store_fuzz_test.cc" ]
}

pw_test("key_value_store_map_test") {
  deps = [
    ":crc16",
    ":fake_flash",
    ":pw_kvs",
    ":test_partition",
    dir_pw_checksum,
  ]
  sources = [ "key_value_store_map_test.cc" ]
}

pw_test("sectors_test") {
  deps = [
    ":fake_flash",
    ":pw_kvs",
  ]
  sources = [ "sectors_test.cc" ]
}

pw_test("key_value_store_wear_test") {
  deps = [
    ":fake_flash",
    ":pw_kvs",
    ":test_partition",
    dir_pw_log,
  ]
  sources = [ "key_value_store_wear_test.cc" ]
}

pw_doc_group("docs") {
  sources = [ "docs.rst" ]
}
