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("//pw_unit_test:pw_cc_test.bzl", "pw_cc_test") 16 17package(default_visibility = ["//visibility:public"]) 18 19licenses(["notice"]) 20 21# Module configuration 22 23cc_library( 24 name = "config", 25 hdrs = ["public/pw_containers/config.h"], 26 strip_include_prefix = "public", 27 deps = [":config_override"], 28) 29 30label_flag( 31 name = "config_override", 32 build_setting_default = "//pw_build:default_module_config", 33) 34 35# Libraries 36 37cc_library( 38 # This group is deprecated. Prefer to depend on individual features rather 39 # than on this collection. 40 name = "pw_containers", 41 deps = [ 42 ":algorithm", 43 ":flat_map", 44 ":inline_deque", 45 ":inline_queue", 46 ":intrusive_list", 47 ":vector", 48 ], 49) 50 51cc_library( 52 name = "algorithm", 53 hdrs = [ 54 "public/pw_containers/algorithm.h", 55 "public/pw_containers/internal/algorithm_internal.h", 56 ], 57 strip_include_prefix = "public", 58) 59 60cc_library( 61 name = "intrusive_item", 62 srcs = ["intrusive_item.cc"], 63 hdrs = ["public/pw_containers/internal/intrusive_item.h"], 64 implementation_deps = ["//pw_assert"], 65 strip_include_prefix = "public", 66) 67 68cc_library( 69 name = "intrusive_list_common", 70 hdrs = [ 71 "public/pw_containers/internal/intrusive_list.h", 72 "public/pw_containers/internal/intrusive_list_item.h", 73 "public/pw_containers/internal/intrusive_list_iterator.h", 74 ], 75 strip_include_prefix = "public", 76 deps = [":intrusive_item"], 77) 78 79cc_library( 80 name = "intrusive_forward_list", 81 hdrs = ["public/pw_containers/intrusive_forward_list.h"], 82 strip_include_prefix = "public", 83 deps = [ 84 ":config", 85 ":intrusive_list_common", 86 ], 87) 88 89cc_library( 90 name = "intrusive_list", 91 hdrs = ["public/pw_containers/intrusive_list.h"], 92 strip_include_prefix = "public", 93 deps = [ 94 ":config", 95 ":intrusive_list_common", 96 ":legacy_intrusive_list", 97 ], 98) 99 100cc_library( 101 name = "legacy_intrusive_list", 102 hdrs = ["public/pw_containers/internal/legacy_intrusive_list.h"], 103 strip_include_prefix = "public", 104 visibility = [":__subpackages__"], 105 deps = [":intrusive_forward_list"], 106) 107 108cc_library( 109 name = "aa_tree", 110 srcs = [ 111 "aa_tree.cc", 112 "aa_tree_item.cc", 113 ], 114 hdrs = [ 115 "public/pw_containers/internal/aa_tree.h", 116 "public/pw_containers/internal/aa_tree_item.h", 117 "public/pw_containers/internal/aa_tree_iterator.h", 118 ], 119 strip_include_prefix = "public", 120 visibility = [":__subpackages__"], 121 deps = [ 122 ":intrusive_item", 123 "//pw_assert", 124 "//pw_bytes:packed_ptr", 125 "//pw_function", 126 ], 127) 128 129cc_library( 130 name = "intrusive_map", 131 hdrs = ["public/pw_containers/intrusive_map.h"], 132 strip_include_prefix = "public", 133 deps = [":aa_tree"], 134) 135 136cc_library( 137 name = "intrusive_multimap", 138 hdrs = ["public/pw_containers/intrusive_multimap.h"], 139 strip_include_prefix = "public", 140 deps = [":aa_tree"], 141) 142 143cc_library( 144 name = "intrusive_set", 145 hdrs = ["public/pw_containers/intrusive_set.h"], 146 strip_include_prefix = "public", 147 deps = [":aa_tree"], 148) 149 150cc_library( 151 name = "intrusive_multiset", 152 hdrs = ["public/pw_containers/intrusive_multiset.h"], 153 strip_include_prefix = "public", 154 deps = [":aa_tree"], 155) 156 157cc_library( 158 name = "iterator", 159 hdrs = ["public/pw_containers/iterator.h"], 160 strip_include_prefix = "public", 161) 162 163cc_library( 164 name = "inline_deque", 165 hdrs = [ 166 "public/pw_containers/inline_deque.h", 167 ], 168 strip_include_prefix = "public", 169 deps = [ 170 ":raw_storage", 171 "//pw_assert", 172 "//pw_preprocessor", 173 "//pw_span", 174 ], 175) 176 177cc_library( 178 name = "inline_queue", 179 hdrs = [ 180 "public/pw_containers/inline_queue.h", 181 ], 182 strip_include_prefix = "public", 183 deps = [ 184 ":inline_deque", 185 ], 186) 187 188cc_library( 189 name = "inline_var_len_entry_queue", 190 srcs = ["inline_var_len_entry_queue.c"], 191 hdrs = ["public/pw_containers/inline_var_len_entry_queue.h"], 192 strip_include_prefix = "public", 193 deps = [ 194 ":raw_storage", 195 "//pw_assert", 196 "//pw_varint", 197 ], 198) 199 200cc_library( 201 name = "vector", 202 hdrs = [ 203 "public/pw_containers/vector.h", 204 ], 205 strip_include_prefix = "public", 206 deps = [ 207 "//pw_assert", 208 "//pw_preprocessor", 209 ], 210) 211 212cc_library( 213 name = "filtered_view", 214 hdrs = ["public/pw_containers/filtered_view.h"], 215 strip_include_prefix = "public", 216 deps = [ 217 "//pw_assert", 218 "//pw_containers", 219 ], 220) 221 222cc_library( 223 name = "flat_map", 224 hdrs = ["public/pw_containers/flat_map.h"], 225 strip_include_prefix = "public", 226 deps = ["//pw_assert"], 227) 228 229cc_library( 230 name = "raw_storage", 231 hdrs = [ 232 "public/pw_containers/internal/raw_storage.h", 233 ], 234 strip_include_prefix = "public", 235 visibility = [":__subpackages__"], 236) 237 238cc_library( 239 name = "test_helpers", 240 srcs = ["test_helpers.cc"], 241 hdrs = ["pw_containers_private/test_helpers.h"], 242 visibility = [":__subpackages__"], 243) 244 245cc_library( 246 name = "to_array", 247 hdrs = ["public/pw_containers/to_array.h"], 248 strip_include_prefix = "public", 249) 250 251cc_library( 252 name = "wrapped_iterator", 253 hdrs = ["public/pw_containers/wrapped_iterator.h"], 254 strip_include_prefix = "public", 255) 256 257# Unit tests 258 259pw_cc_test( 260 name = "algorithm_test", 261 srcs = ["algorithm_test.cc"], 262 deps = [ 263 ":algorithm", 264 ":flat_map", 265 ":intrusive_list", 266 ":vector", 267 "//pw_span", 268 ], 269) 270 271pw_cc_test( 272 name = "filtered_view_test", 273 srcs = ["filtered_view_test.cc"], 274 deps = [ 275 ":algorithm", 276 ":filtered_view", 277 ":flat_map", 278 ":intrusive_list", 279 ], 280) 281 282pw_cc_test( 283 name = "flat_map_test", 284 srcs = [ 285 "flat_map_test.cc", 286 ], 287 deps = [ 288 ":pw_containers", 289 "//pw_polyfill", 290 "//pw_unit_test", 291 ], 292) 293 294pw_cc_test( 295 name = "inline_var_len_entry_queue_test", 296 srcs = [ 297 "inline_var_len_entry_queue_test.cc", 298 "pw_containers_private/inline_var_len_entry_queue_test_oracle.h", 299 ], 300 deps = [ 301 ":inline_var_len_entry_queue", 302 "//pw_assert", 303 "//pw_bytes", 304 ], 305) 306 307pw_cc_test( 308 name = "vector_test", 309 srcs = [ 310 "vector_test.cc", 311 ], 312 deps = [ 313 ":pw_containers", 314 ":test_helpers", 315 "//pw_compilation_testing:negative_compilation_testing", 316 "//pw_unit_test", 317 ], 318) 319 320pw_cc_test( 321 name = "inline_deque_test", 322 srcs = [ 323 "inline_deque_test.cc", 324 ], 325 deps = [ 326 ":algorithm", 327 ":inline_deque", 328 ":test_helpers", 329 "//pw_compilation_testing:negative_compilation_testing", 330 "//pw_unit_test", 331 ], 332) 333 334pw_cc_test( 335 name = "inline_queue_test", 336 srcs = [ 337 "inline_queue_test.cc", 338 ], 339 deps = [ 340 ":algorithm", 341 ":inline_queue", 342 ":test_helpers", 343 "//pw_compilation_testing:negative_compilation_testing", 344 "//pw_unit_test", 345 ], 346) 347 348pw_cc_test( 349 name = "raw_storage_test", 350 srcs = [ 351 "raw_storage_test.cc", 352 ], 353 deps = [ 354 ":raw_storage", 355 ":test_helpers", 356 "//pw_unit_test", 357 ], 358) 359 360pw_cc_test( 361 name = "to_array_test", 362 srcs = ["to_array_test.cc"], 363 deps = [":to_array"], 364) 365 366pw_cc_test( 367 name = "wrapped_iterator_test", 368 srcs = ["wrapped_iterator_test.cc"], 369 deps = [":wrapped_iterator"], 370) 371 372pw_cc_test( 373 name = "intrusive_forward_list_test", 374 srcs = ["intrusive_forward_list_test.cc"], 375 deps = [ 376 ":intrusive_forward_list", 377 ":vector", 378 "//pw_compilation_testing:negative_compilation_testing", 379 "//pw_unit_test", 380 ], 381) 382 383pw_cc_test( 384 name = "intrusive_list_test", 385 srcs = ["intrusive_list_test.cc"], 386 deps = [ 387 ":intrusive_list", 388 ":vector", 389 "//pw_compilation_testing:negative_compilation_testing", 390 "//pw_unit_test", 391 ], 392) 393 394pw_cc_test( 395 name = "intrusive_map_test", 396 srcs = ["intrusive_map_test.cc"], 397 deps = [ 398 ":intrusive_map", 399 ":intrusive_multimap", 400 "//pw_compilation_testing:negative_compilation_testing", 401 "//pw_span", 402 ], 403) 404 405pw_cc_test( 406 name = "intrusive_multimap_test", 407 srcs = ["intrusive_multimap_test.cc"], 408 deps = [ 409 ":intrusive_map", 410 ":intrusive_multimap", 411 "//pw_compilation_testing:negative_compilation_testing", 412 "//pw_span", 413 ], 414) 415 416pw_cc_test( 417 name = "intrusive_set_test", 418 srcs = ["intrusive_set_test.cc"], 419 deps = [ 420 ":intrusive_multiset", 421 ":intrusive_set", 422 "//pw_compilation_testing:negative_compilation_testing", 423 "//pw_span", 424 ], 425) 426 427pw_cc_test( 428 name = "intrusive_multiset_test", 429 srcs = ["intrusive_multiset_test.cc"], 430 deps = [ 431 ":intrusive_multiset", 432 ":intrusive_set", 433 "//pw_compilation_testing:negative_compilation_testing", 434 "//pw_span", 435 ], 436) 437 438pw_cc_test( 439 name = "intrusive_item_test", 440 srcs = ["intrusive_item_test.cc"], 441 deps = [ 442 ":intrusive_forward_list", 443 ":intrusive_list", 444 ":intrusive_map", 445 ":intrusive_multimap", 446 ":intrusive_multiset", 447 ":intrusive_set", 448 "//pw_compilation_testing:negative_compilation_testing", 449 "//pw_unit_test", 450 ], 451) 452 453filegroup( 454 name = "doxygen", 455 srcs = [ 456 "public/pw_containers/filtered_view.h", 457 "public/pw_containers/inline_deque.h", 458 "public/pw_containers/inline_queue.h", 459 "public/pw_containers/inline_var_len_entry_queue.h", 460 "public/pw_containers/internal/aa_tree.h", 461 "public/pw_containers/internal/intrusive_list.h", 462 "public/pw_containers/intrusive_forward_list.h", 463 "public/pw_containers/intrusive_list.h", 464 "public/pw_containers/intrusive_map.h", 465 "public/pw_containers/intrusive_multimap.h", 466 "public/pw_containers/intrusive_multiset.h", 467 "public/pw_containers/intrusive_set.h", 468 ], 469) 470