1# Copyright 2020 The Pigweed Authors 2# 3# Licensed under the Apache License, Version 2.0 (the "License"); you may not 4# use this file except in compliance with the License. You may obtain a copy of 5# the License at 6# 7# https://www.apache.org/licenses/LICENSE-2.0 8# 9# Unless required by applicable law or agreed to in writing, software 10# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT 11# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the 12# License for the specific language governing permissions and limitations under 13# the License. 14 15load( 16 "//pw_build:pigweed.bzl", 17 "pw_cc_test", 18) 19 20package(default_visibility = ["//visibility:public"]) 21 22licenses(["notice"]) 23 24cc_library( 25 name = "pw_kvs", 26 srcs = [ 27 "alignment.cc", 28 "checksum.cc", 29 "entry.cc", 30 "entry_cache.cc", 31 "flash_memory.cc", 32 "format.cc", 33 "key_value_store.cc", 34 "public/pw_kvs/internal/entry.h", 35 "public/pw_kvs/internal/entry_cache.h", 36 "public/pw_kvs/internal/hash.h", 37 "public/pw_kvs/internal/key_descriptor.h", 38 "public/pw_kvs/internal/sectors.h", 39 "public/pw_kvs/internal/span_traits.h", 40 "pw_kvs_private/config.h", 41 "sectors.cc", 42 ], 43 hdrs = [ 44 "public/pw_kvs/alignment.h", 45 "public/pw_kvs/checksum.h", 46 "public/pw_kvs/crc16_checksum.h", 47 "public/pw_kvs/flash_memory.h", 48 "public/pw_kvs/format.h", 49 "public/pw_kvs/io.h", 50 "public/pw_kvs/key.h", 51 "public/pw_kvs/key_value_store.h", 52 ], 53 includes = ["public"], 54 deps = [ 55 ":config_override", 56 "//pw_assert", 57 "//pw_bytes", 58 "//pw_bytes:alignment", 59 "//pw_checksum", 60 "//pw_containers", 61 "//pw_log", 62 "//pw_log:pw_log.facade", 63 "//pw_polyfill", 64 "//pw_span", 65 "//pw_status", 66 "//pw_stream", 67 ], 68) 69 70label_flag( 71 name = "config_override", 72 build_setting_default = "//pw_build:default_module_config", 73) 74 75cc_library( 76 name = "crc16", 77 hdrs = [ 78 "public/pw_kvs/crc16_checksum.h", 79 ], 80 deps = [ 81 ":pw_kvs", 82 "//pw_checksum", 83 "//pw_span", 84 ], 85) 86 87cc_library( 88 name = "flash_test_partition", 89 hdrs = ["public/pw_kvs/flash_test_partition.h"], 90 deps = [":pw_kvs"], 91) 92 93cc_library( 94 name = "test_key_value_store", 95 hdrs = ["public/pw_kvs/test_key_value_store.h"], 96 deps = [ 97 ":pw_kvs", 98 "//pw_sync:borrow", 99 ], 100) 101 102cc_library( 103 name = "fake_flash", 104 srcs = [ 105 "fake_flash_memory.cc", 106 ], 107 hdrs = [ 108 "public/pw_kvs/fake_flash_memory.h", 109 ], 110 includes = ["public"], 111 deps = [ 112 ":pw_kvs", 113 "//pw_containers", 114 "//pw_log", 115 "//pw_log:pw_log.facade", 116 "//pw_span", 117 "//pw_status", 118 ], 119) 120 121cc_library( 122 name = "flash_partition_with_logical_sectors", 123 hdrs = [ 124 "public/pw_kvs/flash_partition_with_logical_sectors.h", 125 ], 126 includes = ["public"], 127 deps = [ 128 ":pw_kvs", 129 ], 130) 131 132cc_library( 133 name = "fake_flash_1_aligned_partition", 134 srcs = [ 135 "fake_flash_test_partition.cc", 136 ], 137 hdrs = [ 138 "public/pw_kvs/flash_test_partition.h", 139 ], 140 defines = [ 141 "PW_FLASH_TEST_SECTORS=6U", 142 "PW_FLASH_TEST_SECTOR_SIZE=4096U", 143 "PW_FLASH_TEST_ALIGNMENT=1U", 144 ], 145 deps = [ 146 ":fake_flash", 147 ":pw_kvs", 148 ], 149) 150 151cc_library( 152 name = "fake_flash_1_aligned_4_logical_partition", 153 srcs = [ 154 "fake_flash_test_logical_sector_partition.cc", 155 ], 156 hdrs = [ 157 "public/pw_kvs/flash_test_partition.h", 158 ], 159 defines = [ 160 "PW_FLASH_TEST_SECTORS=24U", 161 "PW_FLASH_TEST_SECTOR_SIZE=4096U", 162 "PW_FLASH_TEST_ALIGNMENT=1U", 163 "PW_FLASH_TEST_SECTORS_PER_LOGICAL_SECTOR=4U", 164 ], 165 deps = [ 166 ":fake_flash", 167 ":flash_partition_with_logical_sectors", 168 ":pw_kvs", 169 ], 170) 171 172cc_library( 173 name = "fake_flash_12_byte_partition", 174 srcs = ["fake_flash_test_partition.cc"], 175 hdrs = ["public/pw_kvs/flash_test_partition.h"], 176 defines = [ 177 "PW_FLASH_TEST_SECTORS=3", 178 "PW_FLASH_TEST_SECTOR_SIZE=4", 179 "PW_FLASH_TEST_ALIGNMENT=4", 180 ], 181 deps = [ 182 ":fake_flash", 183 ":flash_test_partition", 184 ":pw_kvs", 185 ], 186) 187 188cc_library( 189 name = "fake_flash_16_aligned_partition", 190 srcs = [ 191 "fake_flash_test_partition.cc", 192 ], 193 hdrs = [ 194 "public/pw_kvs/flash_test_partition.h", 195 ], 196 defines = [ 197 "PW_FLASH_TEST_SECTORS=6U", 198 "PW_FLASH_TEST_SECTOR_SIZE=4096U", 199 "PW_FLASH_TEST_ALIGNMENT=16", 200 ], 201 deps = [ 202 ":fake_flash", 203 ":pw_kvs", 204 ], 205) 206 207cc_library( 208 name = "fake_flash_64_aligned_partition", 209 srcs = [ 210 "fake_flash_test_partition.cc", 211 ], 212 hdrs = [ 213 "public/pw_kvs/flash_test_partition.h", 214 ], 215 defines = [ 216 "PW_FLASH_TEST_SECTORS=6U", 217 "PW_FLASH_TEST_SECTOR_SIZE=4096U", 218 "PW_FLASH_TEST_ALIGNMENT=64U", 219 ], 220 deps = [ 221 ":fake_flash", 222 ":pw_kvs", 223 ], 224) 225 226cc_library( 227 name = "fake_flash_256_aligned_partition", 228 srcs = [ 229 "fake_flash_test_partition.cc", 230 ], 231 hdrs = [ 232 "public/pw_kvs/flash_test_partition.h", 233 ], 234 defines = [ 235 "PW_FLASH_TEST_SECTORS=6U", 236 "PW_FLASH_TEST_SECTOR_SIZE=4096U", 237 "PW_FLASH_TEST_ALIGNMENT=256U", 238 ], 239 deps = [ 240 ":fake_flash", 241 ":pw_kvs", 242 ], 243) 244 245cc_library( 246 name = "fake_flash_test_key_value_store", 247 srcs = [ 248 "fake_flash_test_key_value_store.cc", 249 ], 250 hdrs = [ 251 "public/pw_kvs/test_key_value_store.h", 252 ], 253 deps = [ 254 ":crc16", 255 ":fake_flash", 256 ":pw_kvs", 257 "//pw_sync:borrow", 258 ], 259) 260 261cc_library( 262 name = "test_partition", 263 srcs = [ 264 "flash_partition_with_stats.cc", 265 ], 266 hdrs = [ 267 "public/pw_kvs/flash_partition_with_stats.h", 268 ], 269 includes = ["public"], 270 visibility = ["//visibility:private"], 271 deps = [ 272 "//pw_containers", 273 "//pw_kvs", 274 "//pw_log", 275 "//pw_log:pw_log.facade", 276 "//pw_status", 277 ], 278) 279 280pw_cc_test( 281 name = "alignment_test", 282 srcs = [ 283 "alignment_test.cc", 284 ], 285 deps = [ 286 ":pw_kvs", 287 "//pw_status", 288 "//pw_unit_test", 289 ], 290) 291 292pw_cc_test( 293 name = "checksum_test", 294 srcs = ["checksum_test.cc"], 295 deps = [ 296 ":crc16", 297 ":pw_kvs", 298 "//pw_checksum", 299 "//pw_log", 300 "//pw_unit_test", 301 ], 302) 303 304pw_cc_test( 305 name = "converts_to_span_test", 306 srcs = ["converts_to_span_test.cc"], 307 deps = [":pw_kvs"], 308) 309 310pw_cc_test( 311 name = "entry_test", 312 srcs = [ 313 "entry_test.cc", 314 ], 315 deps = [ 316 ":fake_flash", 317 ":pw_kvs", 318 "//pw_log", 319 "//pw_span", 320 "//pw_unit_test", 321 ], 322) 323 324pw_cc_test( 325 name = "entry_cache_test", 326 srcs = ["entry_cache_test.cc"], 327 deps = [ 328 ":fake_flash", 329 ":pw_kvs", 330 "//pw_log", 331 "//pw_unit_test", 332 ], 333) 334 335pw_cc_test( 336 name = "flash_partition_stream_test", 337 srcs = ["flash_partition_stream_test.cc"], 338 deps = [ 339 ":fake_flash", 340 ":pw_kvs", 341 "//pw_log", 342 "//pw_random", 343 "//pw_unit_test", 344 ], 345) 346 347cc_library( 348 name = "flash_partition_test_100_iterations", 349 testonly = True, 350 srcs = ["flash_partition_test.cc"], 351 defines = [ 352 "PW_FLASH_TEST_ITERATIONS=100", 353 "PW_FLASH_TEST_WRITE_SIZE=1", 354 ], 355 deps = [ 356 ":flash_test_partition", 357 ":pw_kvs", 358 "//pw_log", 359 "//pw_unit_test", 360 ], 361) 362 363cc_library( 364 name = "flash_partition_test_2_iterations", 365 testonly = True, 366 srcs = ["flash_partition_test.cc"], 367 defines = [ 368 "PW_FLASH_TEST_ITERATIONS=2", 369 "PW_FLASH_TEST_WRITE_SIZE=1", 370 ], 371 deps = [ 372 ":flash_test_partition", 373 ":pw_kvs", 374 "//pw_log", 375 "//pw_unit_test", 376 ], 377) 378 379cc_library( 380 name = "flash_partition_test_100_iterations_256_write", 381 testonly = True, 382 srcs = ["flash_partition_test.cc"], 383 defines = [ 384 "PW_FLASH_TEST_ITERATIONS=100", 385 "PW_FLASH_TEST_WRITE_SIZE=256", 386 ], 387 deps = [ 388 ":flash_test_partition", 389 ":pw_kvs", 390 "//pw_log", 391 "//pw_unit_test", 392 ], 393) 394 395cc_library( 396 name = "flash_partition_test_2_iterations_256_write", 397 testonly = True, 398 srcs = ["flash_partition_test.cc"], 399 defines = [ 400 "PW_FLASH_TEST_ITERATIONS=2", 401 "PW_FLASH_TEST_WRITE_SIZE=256", 402 ], 403 deps = [ 404 ":flash_test_partition", 405 ":pw_kvs", 406 "//pw_log", 407 "//pw_unit_test", 408 ], 409) 410 411cc_library( 412 name = "key_value_store_initialized_test", 413 testonly = True, 414 srcs = ["key_value_store_initialized_test.cc"], 415 deps = [ 416 ":crc16", 417 ":flash_test_partition", 418 ":pw_kvs", 419 "//pw_bytes", 420 "//pw_checksum", 421 "//pw_log", 422 "//pw_string:builder", 423 "//pw_unit_test", 424 ], 425) 426 427pw_cc_test( 428 name = "flash_partition_1_alignment_test", 429 deps = [ 430 ":fake_flash_1_aligned_partition", 431 ":flash_partition_test_100_iterations", 432 ":pw_kvs", 433 "//pw_log", 434 "//pw_unit_test", 435 ], 436) 437 438pw_cc_test( 439 name = "flash_partition_1_alignment_4_logical_test", 440 deps = [ 441 ":fake_flash_1_aligned_4_logical_partition", 442 ":flash_partition_test_2_iterations", 443 ":pw_kvs", 444 "//pw_log", 445 "//pw_unit_test", 446 ], 447) 448 449pw_cc_test( 450 name = "flash_partition_16_alignment_test", 451 deps = [ 452 ":fake_flash_16_aligned_partition", 453 ":flash_partition_test_100_iterations", 454 ":pw_kvs", 455 "//pw_log", 456 "//pw_unit_test", 457 ], 458) 459 460pw_cc_test( 461 name = "flash_partition_64_alignment_test", 462 deps = [ 463 ":fake_flash_64_aligned_partition", 464 ":flash_partition_test_100_iterations", 465 ":pw_kvs", 466 "//pw_log", 467 "//pw_unit_test", 468 ], 469) 470 471pw_cc_test( 472 name = "flash_partition_256_alignment_test", 473 deps = [ 474 ":fake_flash_256_aligned_partition", 475 ":flash_partition_test_100_iterations", 476 ":pw_kvs", 477 "//pw_log", 478 "//pw_unit_test", 479 ], 480) 481 482pw_cc_test( 483 name = "flash_partition_256_write_size_test", 484 deps = [ 485 ":fake_flash_1_aligned_partition", 486 ":flash_partition_test_100_iterations_256_write", 487 ":pw_kvs", 488 "//pw_log", 489 "//pw_unit_test", 490 ], 491) 492 493pw_cc_test( 494 name = "flash_partition_4_logical_256_write_size_test", 495 deps = [ 496 ":fake_flash_1_aligned_4_logical_partition", 497 ":flash_partition_test_2_iterations_256_write", 498 ":pw_kvs", 499 "//pw_log", 500 "//pw_unit_test", 501 ], 502) 503 504pw_cc_test( 505 name = "key_test", 506 srcs = [ 507 "key_test.cc", 508 ], 509 deps = [ 510 ":pw_kvs", 511 "//pw_status", 512 "//pw_unit_test", 513 ], 514) 515 516pw_cc_test( 517 name = "key_value_store_test", 518 srcs = ["key_value_store_test.cc"], 519 deps = [ 520 ":crc16", 521 ":fake_flash", 522 ":pw_kvs", 523 "//pw_checksum", 524 "//pw_log", 525 "//pw_log:pw_log.facade", 526 "//pw_span", 527 "//pw_status", 528 "//pw_string:builder", 529 "//pw_unit_test", 530 ], 531) 532 533pw_cc_test( 534 name = "key_value_store_1_alignment_flash_test", 535 deps = [ 536 ":crc16", 537 ":fake_flash_1_aligned_partition", 538 ":key_value_store_initialized_test", 539 ":pw_kvs", 540 "//pw_checksum", 541 "//pw_log", 542 "//pw_log:pw_log.facade", 543 "//pw_span", 544 "//pw_status", 545 "//pw_string:builder", 546 "//pw_unit_test", 547 ], 548) 549 550pw_cc_test( 551 name = "key_value_store_1_alignment_4_logical_flash_test", 552 deps = [ 553 ":crc16", 554 ":fake_flash_1_aligned_4_logical_partition", 555 ":key_value_store_initialized_test", 556 ":pw_kvs", 557 "//pw_checksum", 558 "//pw_log", 559 "//pw_log:pw_log.facade", 560 "//pw_span", 561 "//pw_status", 562 "//pw_string:builder", 563 "//pw_unit_test", 564 ], 565) 566 567pw_cc_test( 568 name = "key_value_store_16_alignment_flash_test", 569 deps = [ 570 ":crc16", 571 ":fake_flash_16_aligned_partition", 572 ":key_value_store_initialized_test", 573 ":pw_kvs", 574 "//pw_checksum", 575 "//pw_log", 576 "//pw_log:pw_log.facade", 577 "//pw_span", 578 "//pw_status", 579 "//pw_string:builder", 580 "//pw_unit_test", 581 ], 582) 583 584pw_cc_test( 585 name = "key_value_store_64_alignment_flash_test", 586 deps = [ 587 ":crc16", 588 ":fake_flash_64_aligned_partition", 589 ":key_value_store_initialized_test", 590 ":pw_kvs", 591 "//pw_checksum", 592 "//pw_log", 593 "//pw_log:pw_log.facade", 594 "//pw_span", 595 "//pw_status", 596 "//pw_string:builder", 597 "//pw_unit_test", 598 ], 599) 600 601pw_cc_test( 602 name = "key_value_store_256_alignment_flash_test", 603 deps = [ 604 ":crc16", 605 ":fake_flash_256_aligned_partition", 606 ":key_value_store_initialized_test", 607 ":pw_kvs", 608 "//pw_checksum", 609 "//pw_log", 610 "//pw_log:pw_log.facade", 611 "//pw_span", 612 "//pw_status", 613 "//pw_string:builder", 614 "//pw_unit_test", 615 ], 616) 617 618pw_cc_test( 619 name = "fake_flash_test_key_value_store_test", 620 srcs = ["test_key_value_store_test.cc"], 621 deps = [ 622 ":crc16", 623 ":fake_flash_test_key_value_store", 624 ":pw_kvs", 625 "//pw_log", 626 "//pw_status", 627 "//pw_sync:borrow", 628 "//pw_unit_test", 629 ], 630) 631 632pw_cc_test( 633 name = "key_value_store_binary_format_test", 634 srcs = [ 635 "key_value_store_binary_format_test.cc", 636 ], 637 deps = [ 638 ":crc16", 639 ":fake_flash", 640 ":pw_kvs", 641 "//pw_log", 642 "//pw_unit_test", 643 ], 644) 645 646pw_cc_test( 647 name = "key_value_store_put_test", 648 srcs = ["key_value_store_put_test.cc"], 649 deps = [ 650 ":crc16", 651 ":fake_flash", 652 ":pw_kvs", 653 ":test_partition", 654 "//pw_checksum", 655 "//pw_log", 656 "//pw_unit_test", 657 ], 658) 659 660pw_cc_test( 661 name = "key_value_store_map_test", 662 srcs = ["key_value_store_map_test.cc"], 663 deps = [ 664 ":crc16", 665 ":fake_flash", 666 ":pw_kvs", 667 ":test_partition", 668 "//pw_checksum", 669 "//pw_log", 670 "//pw_log:pw_log.facade", 671 "//pw_span", 672 "//pw_unit_test", 673 ], 674) 675 676pw_cc_test( 677 name = "sectors_test", 678 srcs = ["sectors_test.cc"], 679 deps = [ 680 ":fake_flash", 681 ":pw_kvs", 682 "//pw_log", 683 "//pw_unit_test", 684 ], 685) 686 687pw_cc_test( 688 name = "key_value_store_wear_test", 689 srcs = [ 690 "key_value_store_wear_test.cc", 691 ], 692 deps = [ 693 ":fake_flash", 694 ":pw_kvs", 695 ":test_partition", 696 "//pw_log", 697 "//pw_unit_test", 698 ], 699) 700