# 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("$dir_pw_docgen/docs.gni")
import("$dir_pw_unit_test/test.gni")

config("default_config") {
  include_dirs = [ "public" ]
}

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/sector_descriptor.h",
    "public/pw_kvs/internal/span_traits.h",
    "pw_kvs_private/macros.h",
  ]
  sources += public
  public_deps = [
    dir_pw_containers,
    dir_pw_span,
    dir_pw_status,
  ]
  deps = [
    dir_pw_checksum,
    dir_pw_log,
  ]
  friend = [
    ":entry_test",
    ":entry_cache_test",
    ":key_value_store_test",
    ":key_value_store_binary_format_test",
    ":key_value_store_map_test",
  ]
}

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

source_set("test_utils") {
  public_configs = [ ":default_config" ]
  public = [
    "public/pw_kvs/in_memory_fake_flash.h",
    "pw_kvs_private/byte_utils.h",
  ]
  sources = [ "in_memory_fake_flash.cc" ] + public
  visibility = [ ":*" ]
  public_deps = [
    dir_pw_kvs,
    dir_pw_log,
  ]
}

executable("debug_cli") {
  sources = [ "debug_cli.cc" ]
  deps = [
    ":crc16",
    ":pw_kvs",
    ":test_utils",
  ]
}

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

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",
    ":pw_kvs",
    ":test_utils",
  ]
  sources = [ "entry_test.cc" ]
}

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

pw_test("key_value_store_test") {
  deps = [
    ":crc16",
    ":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",
    ":pw_kvs",
    ":test_utils",
    dir_pw_log,
  ]
  sources = [ "key_value_store_binary_format_test.cc" ]
}

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

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

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