# 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.

import("//build_overrides/pigweed.gni")

import("$dir_pw_bloat/bloat.gni")
import("$dir_pw_build/module_config.gni")
import("$dir_pw_build/target_types.gni")
import("$dir_pw_docgen/docs.gni")
import("$dir_pw_toolchain/generate_toolchain.gni")
import("$dir_pw_unit_test/test.gni")

declare_args() {
  # The build target that overrides the default configuration options for this
  # module. This should point to a source set that provides defines through a
  # public config (which may -include a file or add defines directly).
  pw_kvs_CONFIG = pw_build_DEFAULT_MODULE_CONFIG
}

config("public_include_path") {
  include_dirs = [ "public" ]
  visibility = [ ":*" ]
}

pw_source_set("pw_kvs") {
  public_configs = [ ":public_include_path" ]
  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.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",
    "sectors.cc",
  ]
  public_deps = [
    dir_pw_assert,
    dir_pw_bytes,
    dir_pw_containers,
    dir_pw_span,
    dir_pw_status,
    dir_pw_stream,
  ]
  deps = [
    ":config",
    dir_pw_checksum,
    dir_pw_log,
  ]
  friend = [ ":*" ]
}

pw_source_set("config") {
  public_deps = [ pw_kvs_CONFIG ]
  public = [ "pw_kvs_private/config.h" ]
  visibility = [ ":*" ]
}

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

pw_source_set("flash_test_partition") {
  public = [ "public/pw_kvs/flash_test_partition.h" ]
  public_deps = [ ":pw_kvs" ]
}

pw_source_set("test_key_value_store") {
  public = [ "public/pw_kvs/test_key_value_store.h" ]
  public_deps = [
    ":pw_kvs",
    "$dir_pw_sync:borrow",
  ]
}

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

pw_source_set("flash_partition_with_logical_sectors") {
  public_configs = [ ":public_include_path" ]
  public = [ "public/pw_kvs/flash_partition_with_logical_sectors.h" ]
  public_deps = [ dir_pw_kvs ]
  deps = [ ":config" ]
}

pw_source_set("fake_flash_12_byte_partition") {
  public_configs = [ ":public_include_path" ]
  public = [ "public/pw_kvs/flash_test_partition.h" ]
  sources = [ "fake_flash_test_partition.cc" ]
  public_deps = [ ":flash_test_partition" ]
  deps = [
    ":fake_flash",
    dir_pw_kvs,
  ]
  defines = [
    "PW_FLASH_TEST_SECTORS=3",
    "PW_FLASH_TEST_SECTOR_SIZE=4",
    "PW_FLASH_TEST_ALIGNMENT=4",
  ]
}

pw_source_set("fake_flash_1_aligned_partition") {
  public_configs = [ ":public_include_path" ]
  public = [ "public/pw_kvs/flash_test_partition.h" ]
  sources = [ "fake_flash_test_partition.cc" ]
  public_deps = [ ":flash_test_partition" ]
  deps = [
    ":fake_flash",
    dir_pw_kvs,
  ]
  defines = [
    "PW_FLASH_TEST_SECTORS=6U",
    "PW_FLASH_TEST_SECTOR_SIZE=4096U",
    "PW_FLASH_TEST_ALIGNMENT=1U",
  ]
}

pw_source_set("fake_flash_16_aligned_partition") {
  public_configs = [ ":public_include_path" ]
  public = [ "public/pw_kvs/flash_test_partition.h" ]
  sources = [ "fake_flash_test_partition.cc" ]
  public_deps = [ ":flash_test_partition" ]
  deps = [
    ":fake_flash",
    dir_pw_kvs,
  ]
  defines = [
    "PW_FLASH_TEST_SECTORS=6U",
    "PW_FLASH_TEST_SECTOR_SIZE=4096U",
    "PW_FLASH_TEST_ALIGNMENT=16U",
  ]
}

pw_source_set("fake_flash_64_aligned_partition") {
  public_configs = [ ":public_include_path" ]
  public = [ "public/pw_kvs/flash_test_partition.h" ]
  sources = [ "fake_flash_test_partition.cc" ]
  public_deps = [ ":flash_test_partition" ]
  deps = [
    ":fake_flash",
    dir_pw_kvs,
  ]
  defines = [
    "PW_FLASH_TEST_SECTORS=6U",
    "PW_FLASH_TEST_SECTOR_SIZE=4096U",
    "PW_FLASH_TEST_ALIGNMENT=64U",
  ]
}

pw_source_set("fake_flash_256_aligned_partition") {
  public_configs = [ ":public_include_path" ]
  public = [ "public/pw_kvs/flash_test_partition.h" ]
  sources = [ "fake_flash_test_partition.cc" ]
  public_deps = [ ":flash_test_partition" ]
  deps = [
    ":fake_flash",
    dir_pw_kvs,
  ]
  defines = [
    "PW_FLASH_TEST_SECTORS=6U",
    "PW_FLASH_TEST_SECTOR_SIZE=4096U",
    "PW_FLASH_TEST_ALIGNMENT=256U",
  ]
}

pw_source_set("fake_flash_1_aligned_4_logical_partition") {
  public_configs = [ ":public_include_path" ]
  public = [ "public/pw_kvs/flash_test_partition.h" ]
  sources = [ "fake_flash_test_logical_sector_partition.cc" ]
  public_deps = [ ":flash_test_partition" ]
  deps = [
    ":fake_flash",
    ":flash_partition_with_logical_sectors",
    dir_pw_kvs,
  ]
  defines = [
    "PW_FLASH_TEST_SECTORS=24U",
    "PW_FLASH_TEST_SECTOR_SIZE=4096U",
    "PW_FLASH_TEST_ALIGNMENT=1U",
    "PW_FLASH_TEST_SECTORS_PER_LOGICAL_SECTOR=4U",
  ]
}

pw_source_set("fake_flash_test_key_value_store") {
  public_configs = [ ":public_include_path" ]
  sources = [ "fake_flash_test_key_value_store.cc" ]
  public_deps = [ ":test_key_value_store" ]
  deps = [
    ":crc16",
    ":fake_flash",
    dir_pw_kvs,
  ]
}

pw_source_set("flash_partition_stream_test") {
  public_configs = [ ":public_include_path" ]
  public = [ "public/pw_kvs/flash_memory.h" ]
  sources = [ "flash_partition_stream_test.cc" ]
  public_deps = [
    "$dir_pw_sync:borrow",
    dir_pw_bytes,
    dir_pw_kvs,
    dir_pw_polyfill,
    dir_pw_preprocessor,
    dir_pw_status,
    dir_pw_stream,
  ]
  deps = [
    ":config",
    ":fake_flash",
    ":flash_test_partition",
    dir_pw_kvs,
    dir_pw_log,
    dir_pw_random,
    dir_pw_unit_test,
  ]
}

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

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

pw_source_set("flash_partition_test_100_iterations_256_write") {
  deps = [
    ":config",
    ":flash_test_partition",
    dir_pw_kvs,
    dir_pw_log,
    dir_pw_unit_test,
  ]
  sources = [ "flash_partition_test.cc" ]
  defines = [
    "PW_FLASH_TEST_ITERATIONS=100",
    "PW_FLASH_TEST_WRITE_SIZE=256",
  ]
}

pw_source_set("flash_partition_test_2_iterations_256_write") {
  deps = [
    ":config",
    ":flash_test_partition",
    dir_pw_kvs,
    dir_pw_log,
    dir_pw_unit_test,
  ]
  sources = [ "flash_partition_test.cc" ]
  defines = [
    "PW_FLASH_TEST_ITERATIONS=2",
    "PW_FLASH_TEST_WRITE_SIZE=256",
  ]
}

pw_source_set("key_value_store_initialized_test") {
  deps = [
    ":crc16",
    ":flash_test_partition",
    ":pw_kvs",
    "$dir_pw_string:builder",
    dir_pw_bytes,
    dir_pw_checksum,
    dir_pw_log,
    dir_pw_unit_test,
  ]
  sources = [ "key_value_store_initialized_test.cc" ]
}

pw_source_set("key_value_store_fuzz_test") {
  deps = [
    ":config",
    ":crc16",
    ":flash_test_partition",
    ":pw_kvs",
    "$dir_pw_string:builder",
    dir_pw_bytes,
    dir_pw_checksum,
    dir_pw_log,
    dir_pw_unit_test,
  ]
  sources = [ "key_value_store_fuzz_test.cc" ]
}

pw_source_set("test_key_value_store_test") {
  deps = [
    ":pw_kvs",
    ":test_key_value_store",
    "$dir_pw_string:builder",
    "$dir_pw_sync:borrow",
    dir_pw_unit_test,
  ]
  sources = [ "test_key_value_store_test.cc" ]
}

pw_source_set("test_partition") {
  public_configs = [ ":public_include_path" ]
  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,
  ]
  deps = [ ":config" ]
}

pw_test_group("tests") {
  tests = [
    ":alignment_test",
    ":checksum_test",
    ":converts_to_span_test",
    ":key_test",
  ]

  if (defined(pw_toolchain_SCOPE.is_host_toolchain) &&
      pw_toolchain_SCOPE.is_host_toolchain) {
    # TODO: b/234883746 - KVS tests are not compatible with device builds as they
    # use features such as std::map and are computationally expensive. Solving
    # this requires a more complex capabilities-based build and configuration
    # system which allowing enabling specific tests for targets that support
    # them and modifying test parameters for different targets.

    tests += [
      ":entry_test",
      ":entry_cache_test",
      ":flash_partition_1_stream_test",
      ":flash_partition_4_logical_stream_test",
      ":flash_partition_1_alignment_test",
      ":flash_partition_1_alignment_4_logical_test",
      ":flash_partition_16_alignment_test",
      ":flash_partition_64_alignment_test",
      ":flash_partition_256_alignment_test",
      ":flash_partition_256_write_size_test",
      ":flash_partition_4_logical_256_write_size_test",
      ":key_value_store_test",
      ":key_value_store_1_alignment_flash_test",
      ":key_value_store_1_alignment_4_logical_flash_test",
      ":key_value_store_16_alignment_flash_test",
      ":key_value_store_64_alignment_flash_test",
      ":key_value_store_256_alignment_flash_test",
      ":key_value_store_fuzz_1_alignment_flash_test",
      ":key_value_store_fuzz_64_alignment_flash_test",
      ":key_value_store_binary_format_test",
      ":key_value_store_put_test",
      ":key_value_store_map_test",
      ":key_value_store_wear_test",
      ":fake_flash_test_key_value_store_test",
      ":sectors_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("converts_to_span_test") {
  deps = [ ":pw_kvs" ]
  sources = [ "converts_to_span_test.cc" ]
}

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

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

pw_test("flash_partition_1_stream_test") {
  deps = [
    ":fake_flash",
    ":fake_flash_1_aligned_partition",
    ":flash_partition_stream_test",
    dir_pw_log,
  ]
}

pw_test("flash_partition_4_logical_stream_test") {
  deps = [
    ":fake_flash",
    ":fake_flash_1_aligned_4_logical_partition",
    ":flash_partition_stream_test",
    dir_pw_log,
  ]
}

pw_test("flash_partition_1_alignment_test") {
  deps = [
    ":fake_flash",
    ":fake_flash_1_aligned_partition",
    ":flash_partition_test_100_iterations",
    dir_pw_log,
  ]
}

pw_test("flash_partition_1_alignment_4_logical_test") {
  deps = [
    ":fake_flash",
    ":fake_flash_1_aligned_4_logical_partition",
    ":flash_partition_test_2_iterations",
    dir_pw_log,
  ]
}

pw_test("flash_partition_16_alignment_test") {
  deps = [
    ":fake_flash",
    ":fake_flash_16_aligned_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("flash_partition_256_write_size_test") {
  deps = [
    ":fake_flash",
    ":fake_flash_1_aligned_partition",
    ":flash_partition_test_100_iterations_256_write",
    dir_pw_log,
  ]
}

pw_test("flash_partition_4_logical_256_write_size_test") {
  deps = [
    ":fake_flash",
    ":fake_flash_1_aligned_4_logical_partition",
    ":flash_partition_test_2_iterations_256_write",
    dir_pw_log,
  ]
}

pw_test("key_value_store_test") {
  deps = [
    ":config",
    ":crc16",
    ":fake_flash",
    ":pw_kvs",
    "$dir_pw_string:builder",
    dir_pw_bytes,
    dir_pw_checksum,
    dir_pw_log,
  ]
  sources = [ "key_value_store_test.cc" ]
}

pw_test("key_value_store_1_alignment_flash_test") {
  deps = [
    ":fake_flash_1_aligned_partition",
    ":key_value_store_initialized_test",
  ]
}

pw_test("key_value_store_1_alignment_4_logical_flash_test") {
  deps = [
    ":fake_flash_1_aligned_4_logical_partition",
    ":key_value_store_initialized_test",
  ]
}

pw_test("key_value_store_16_alignment_flash_test") {
  deps = [
    ":fake_flash_16_aligned_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_fuzz_1_alignment_flash_test") {
  deps = [
    ":fake_flash_1_aligned_partition",
    ":key_value_store_fuzz_test",
  ]
}

pw_test("key_value_store_fuzz_64_alignment_flash_test") {
  deps = [
    ":fake_flash_64_aligned_partition",
    ":key_value_store_fuzz_test",
  ]
}

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

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

pw_test("fake_flash_test_key_value_store_test") {
  deps = [
    ":fake_flash_test_key_value_store",
    ":test_key_value_store_test",
    "$dir_pw_sync:borrow",
  ]
}

pw_test("key_value_store_map_test") {
  deps = [
    ":crc16",
    ":fake_flash",
    ":pw_kvs",
    ":test_partition",
    "$dir_pw_string:builder",
    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_test") {
  deps = [ ":pw_kvs" ]
  sources = [ "key_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" ]
  report_deps = [ ":kvs_size" ]
}

pw_size_diff("kvs_size") {
  title = "Pigweed KVS size report"

  binaries = [
    {
      target = "size_report:with_kvs"
      base = "size_report:base_with_only_flash"
      label = "KeyValueStore"
    },
  ]

  binaries += [
    {
      target = "size_report:base_with_only_flash"
      base = "size_report:base"
      label = "FlashPartition"
    },
  ]
}
