# 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/flash_test_partition.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/config.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("fake_flash_small_partition") {
  public_configs = [ ":default_config" ]
  public = [ "public/pw_kvs/flash_test_partition.h" ]
  sources = [ "fake_flash_test_partition.cc" ]
  deps = [
    ":fake_flash",
    dir_pw_kvs,
  ]
}

pw_source_set("fake_flash_64_aligned_partition") {
  public_configs = [ ":default_config" ]
  public = [ "public/pw_kvs/flash_test_partition.h" ]
  sources = [ "fake_flash_test_partition.cc" ]
  deps = [
    ":fake_flash",
    dir_pw_kvs,
  ]
  defines = [ "PW_FLASH_TEST_ALIGNMENT=64" ]
}

pw_source_set("fake_flash_256_aligned_partition") {
  public_configs = [ ":default_config" ]
  public = [ "public/pw_kvs/flash_test_partition.h" ]
  sources = [ "fake_flash_test_partition.cc" ]
  deps = [
    ":fake_flash",
    dir_pw_kvs,
  ]
  defines = [ "PW_FLASH_TEST_ALIGNMENT=256" ]
}

pw_source_set("flash_partition_test_100_iterations") {
  deps = [
    dir_pw_kvs,
    dir_pw_log,
    dir_pw_unit_test,
  ]
  sources = [ "flash_partition_test.cc" ]
  defines = [ "PW_FLASH_TEST_ITERATIONS=100" ]
}

pw_source_set("flash_partition_test_2_iterations") {
  deps = [
    dir_pw_kvs,
    dir_pw_log,
    dir_pw_unit_test,
  ]
  sources = [ "flash_partition_test.cc" ]
  defines = [ "PW_FLASH_TEST_ITERATIONS=2" ]
}

pw_source_set("key_value_store_initialized_test") {
  deps = [
    ":crc16",
    ":pw_kvs",
    ":test_utils",
    dir_pw_checksum,
    dir_pw_log,
    dir_pw_unit_test,
  ]
  sources = [ "key_value_store_initialized_test.cc" ]
}

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",
    ":flash_partition_small_test",
    ":flash_partition_64_alignment_test",
    ":flash_partition_256_alignment_test",
    ":key_value_store_test",
    ":key_value_store_small_flash_test",
    ":key_value_store_64_alignment_flash_test",
    ":key_value_store_256_alignment_flash_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("flash_partition_small_test") {
  deps = [
    ":fake_flash",
    ":fake_flash_small_partition",
    ":flash_partition_test_100_iterations",
    dir_pw_log,
  ]
}

pw_test("flash_partition_64_alignment_test") {
  deps = [
    ":fake_flash",
    ":fake_flash_64_aligned_partition",
    ":flash_partition_test_100_iterations",
    dir_pw_log,
  ]
}

pw_test("flash_partition_256_alignment_test") {
  deps = [
    ":fake_flash",
    ":fake_flash_256_aligned_partition",
    ":flash_partition_test_100_iterations",
    dir_pw_log,
  ]
}

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_small_flash_test") {
  deps = [
    ":fake_flash_small_partition",
    ":key_value_store_initialized_test",
  ]
}

pw_test("key_value_store_64_alignment_flash_test") {
  deps = [
    ":fake_flash_64_aligned_partition",
    ":key_value_store_initialized_test",
  ]
}

pw_test("key_value_store_256_alignment_flash_test") {
  deps = [
    ":fake_flash_256_aligned_partition",
    ":key_value_store_initialized_test",
  ]
}

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" ]
}
