# Copyright 2019 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/traits.gni") import("$dir_pw_unit_test/test.gni") # Module configuration 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_containers_CONFIG = pw_build_DEFAULT_MODULE_CONFIG } config("public_include_path") { include_dirs = [ "public" ] visibility = [ ":*" ] } pw_source_set("config") { public = [ "public/pw_containers/config.h" ] public_configs = [ ":public_include_path" ] public_deps = [ pw_containers_CONFIG ] } # Libraries group("pw_containers") { public_deps = [ ":algorithm", ":flat_map", ":inline_deque", ":inline_queue", ":intrusive_list", ":vector", ] } pw_source_set("algorithm") { public_configs = [ ":public_include_path" ] public = [ "public/pw_containers/algorithm.h", "public/pw_containers/internal/algorithm_internal.h", ] } pw_source_set("filtered_view") { public_configs = [ ":public_include_path" ] public = [ "public/pw_containers/filtered_view.h" ] public_deps = [ dir_pw_assert, dir_pw_preprocessor, ] } pw_source_set("flat_map") { public_configs = [ ":public_include_path" ] public = [ "public/pw_containers/flat_map.h" ] public_deps = [ "$dir_pw_assert:assert" ] } pw_source_set("inline_deque") { public_configs = [ ":public_include_path" ] public_deps = [ ":raw_storage", "$dir_pw_toolchain:constexpr_tag", dir_pw_assert, dir_pw_preprocessor, dir_pw_span, ] public = [ "public/pw_containers/inline_deque.h" ] } pw_source_set("inline_queue") { public_configs = [ ":public_include_path" ] public_deps = [ ":inline_deque" ] public = [ "public/pw_containers/inline_queue.h" ] } pw_source_set("iterator") { public_configs = [ ":public_include_path" ] public_deps = [ dir_pw_polyfill ] public = [ "public/pw_containers/iterator.h" ] } pw_source_set("raw_storage") { public_configs = [ ":public_include_path" ] public = [ "public/pw_containers/internal/raw_storage.h" ] visibility = [ ":*" ] } pw_source_set("test_helpers") { public = [ "pw_containers_private/test_helpers.h" ] sources = [ "test_helpers.cc" ] deps = [ dir_pw_assert ] visibility = [ ":*" ] } pw_source_set("to_array") { public_configs = [ ":public_include_path" ] public = [ "public/pw_containers/to_array.h" ] } pw_source_set("inline_var_len_entry_queue") { public_configs = [ ":public_include_path" ] public_deps = [ "$dir_pw_toolchain:constexpr_tag", dir_pw_varint, ] deps = [ dir_pw_assert ] public = [ "public/pw_containers/inline_var_len_entry_queue.h" ] sources = [ "inline_var_len_entry_queue.c" ] # TODO: b/259746255 - Remove this when everything compiles with -Wconversion. configs = [ "$dir_pw_build:conversion_warnings" ] } pw_source_set("vector") { public_configs = [ ":public_include_path" ] public_deps = [ "$dir_pw_toolchain:constexpr_tag", dir_pw_assert, dir_pw_preprocessor, ] public = [ "public/pw_containers/vector.h" ] } pw_source_set("wrapped_iterator") { public_configs = [ ":public_include_path" ] public = [ "public/pw_containers/wrapped_iterator.h" ] } pw_source_set("intrusive_item") { public_configs = [ ":public_include_path" ] public = [ "public/pw_containers/internal/intrusive_item.h" ] sources = [ "intrusive_item.cc" ] deps = [ dir_pw_assert ] } pw_source_set("intrusive_list_common") { public_configs = [ ":public_include_path" ] public = [ "public/pw_containers/internal/intrusive_list.h", "public/pw_containers/internal/intrusive_list_item.h", "public/pw_containers/internal/intrusive_list_iterator.h", ] public_deps = [ ":intrusive_item" ] } pw_source_set("intrusive_forward_list") { public_configs = [ ":public_include_path" ] public = [ "public/pw_containers/intrusive_forward_list.h" ] public_deps = [ ":config", ":intrusive_list_common", ] } pw_source_set("intrusive_list") { public_configs = [ ":public_include_path" ] public = [ "public/pw_containers/intrusive_list.h" ] public_deps = [ ":config", ":intrusive_list_common", ":legacy_intrusive_list", ] } pw_source_set("legacy_intrusive_list") { public_configs = [ ":public_include_path" ] public = [ "public/pw_containers/internal/legacy_intrusive_list.h" ] public_deps = [ ":intrusive_forward_list" ] visibility = [ "./*" ] } pw_source_set("aa_tree") { public_configs = [ ":public_include_path" ] public = [ "public/pw_containers/internal/aa_tree.h", "public/pw_containers/internal/aa_tree_item.h", "public/pw_containers/internal/aa_tree_iterator.h", ] public_deps = [ ":intrusive_item", "$dir_pw_bytes:packed_ptr", dir_pw_assert, dir_pw_function, ] sources = [ "aa_tree.cc", "aa_tree_item.cc", ] visibility = [ "./*" ] } pw_source_set("intrusive_map") { public_configs = [ ":public_include_path" ] public = [ "public/pw_containers/intrusive_map.h" ] public_deps = [ ":aa_tree" ] } pw_source_set("intrusive_multimap") { public_configs = [ ":public_include_path" ] public = [ "public/pw_containers/intrusive_multimap.h" ] public_deps = [ ":aa_tree" ] } pw_source_set("intrusive_set") { public_configs = [ ":public_include_path" ] public = [ "public/pw_containers/intrusive_set.h" ] public_deps = [ ":aa_tree" ] } pw_source_set("intrusive_multiset") { public_configs = [ ":public_include_path" ] public = [ "public/pw_containers/intrusive_multiset.h" ] public_deps = [ ":aa_tree" ] } pw_test_group("tests") { tests = [ ":algorithm_test", ":filtered_view_test", ":flat_map_test", ":inline_deque_test", ":inline_queue_test", ":intrusive_forward_list_test", ":intrusive_item_test", ":intrusive_list_test", ":intrusive_map_test", ":intrusive_multimap_test", ":intrusive_set_test", ":intrusive_multiset_test", ":raw_storage_test", ":to_array_test", ":inline_var_len_entry_queue_test", ":vector_test", ":wrapped_iterator_test", ] group_deps = [ "examples" ] } pw_test("algorithm_test") { sources = [ "algorithm_test.cc" ] deps = [ ":algorithm", ":flat_map", ":intrusive_list", ":vector", dir_pw_span, ] # TODO: b/259746255 - Remove this when everything compiles with -Wconversion. configs = [ "$dir_pw_build:conversion_warnings" ] } pw_test("filtered_view_test") { sources = [ "filtered_view_test.cc" ] deps = [ ":algorithm", ":filtered_view", ":flat_map", ":intrusive_list", dir_pw_span, ] # TODO: b/259746255 - Remove this when everything compiles with -Wconversion. configs = [ "$dir_pw_build:conversion_warnings" ] } pw_test("flat_map_test") { sources = [ "flat_map_test.cc" ] deps = [ ":flat_map", dir_pw_polyfill, ] # TODO: b/259746255 - Remove this when everything compiles with -Wconversion. configs = [ "$dir_pw_build:conversion_warnings" ] } pw_test("inline_deque_test") { sources = [ "inline_deque_test.cc" ] deps = [ ":algorithm", ":inline_deque", ":test_helpers", ] negative_compilation_tests = true # TODO: b/259746255 - Remove this when everything compiles with -Wconversion. configs = [ "$dir_pw_build:conversion_warnings" ] } pw_test("inline_queue_test") { sources = [ "inline_queue_test.cc" ] deps = [ ":algorithm", ":inline_queue", ":test_helpers", ] negative_compilation_tests = true # TODO: b/259746255 - Remove this when everything compiles with -Wconversion. configs = [ "$dir_pw_build:conversion_warnings" ] } pw_test("raw_storage_test") { sources = [ "raw_storage_test.cc" ] deps = [ ":raw_storage", ":test_helpers", ] # TODO: b/259746255 - Remove this when everything compiles with -Wconversion. configs = [ "$dir_pw_build:conversion_warnings" ] } pw_test("to_array_test") { sources = [ "to_array_test.cc" ] deps = [ ":to_array" ] # TODO: b/259746255 - Remove this when everything compiles with -Wconversion. configs = [ "$dir_pw_build:conversion_warnings" ] } pw_test("inline_var_len_entry_queue_test") { sources = [ "inline_var_len_entry_queue_test.cc", "pw_containers_private/inline_var_len_entry_queue_test_oracle.h", ] deps = [ ":inline_var_len_entry_queue", dir_pw_assert, dir_pw_bytes, ] # TODO: b/259746255 - Remove this when everything compiles with -Wconversion. configs = [ "$dir_pw_build:conversion_warnings" ] } pw_test("vector_test") { sources = [ "vector_test.cc" ] deps = [ ":test_helpers", ":vector", ] negative_compilation_tests = true # TODO: b/259746255 - Remove this when everything compiles with -Wconversion. configs = [ "$dir_pw_build:conversion_warnings" ] } pw_test("wrapped_iterator_test") { sources = [ "wrapped_iterator_test.cc" ] deps = [ ":wrapped_iterator" ] # TODO: b/259746255 - Remove this when everything compiles with -Wconversion. configs = [ "$dir_pw_build:conversion_warnings" ] } pw_test("intrusive_forward_list_test") { sources = [ "intrusive_forward_list_test.cc" ] deps = [ ":intrusive_forward_list", ":vector", ] negative_compilation_tests = true # TODO: b/259746255 - Remove this when everything compiles with -Wconversion. configs = [ "$dir_pw_build:conversion_warnings" ] } pw_test("intrusive_list_test") { sources = [ "intrusive_list_test.cc" ] deps = [ ":intrusive_list", ":vector", ] negative_compilation_tests = true # TODO: b/259746255 - Remove this when everything compiles with -Wconversion. configs = [ "$dir_pw_build:conversion_warnings" ] } pw_test("intrusive_map_test") { sources = [ "intrusive_map_test.cc" ] deps = [ ":intrusive_map", ":intrusive_multimap", dir_pw_span, ] negative_compilation_tests = true } pw_test("intrusive_multimap_test") { sources = [ "intrusive_multimap_test.cc" ] deps = [ ":intrusive_map", ":intrusive_multimap", dir_pw_span, ] negative_compilation_tests = true } pw_test("intrusive_set_test") { sources = [ "intrusive_set_test.cc" ] deps = [ ":intrusive_multiset", ":intrusive_set", dir_pw_span, ] negative_compilation_tests = true } pw_test("intrusive_multiset_test") { sources = [ "intrusive_multiset_test.cc" ] deps = [ ":intrusive_multiset", ":intrusive_set", dir_pw_span, ] negative_compilation_tests = true } pw_test("intrusive_item_test") { sources = [ "intrusive_item_test.cc" ] deps = [ ":intrusive_forward_list", ":intrusive_list", ":intrusive_map", ":intrusive_multimap", ":intrusive_multiset", ":intrusive_set", ] negative_compilation_tests = true } pw_doc_group("docs") { inputs = [ "Kconfig", "examples/flat_map.cc", "examples/intrusive_forward_list.cc", "examples/intrusive_list.cc", "examples/intrusive_map.cc", "examples/intrusive_multimap.cc", "examples/intrusive_multiset.cc", "examples/intrusive_set.cc", "examples/multiple_containers.cc", "examples/vector.cc", "examples/wrapped_iterator.cc", ] sources = [ "docs.rst", "lists.rst", "maps.rst", "multiple_containers.rst", "queues.rst", "sets.rst", "utilities.rst", "vectors.rst", ] report_deps = [ ":lists_size_report", ":maps_size_report", ":queues_size_report", ":sets_size_report", ":vectors_size_report", ] } pw_size_diff("lists_size_report") { title = "Sizes of Pigweed's list containers" binaries = [ { base = "size_report:base" target = "size_report:intrusive_list_base" label = "IntrusiveList" }, { base = "size_report:intrusive_list_base" target = "size_report:intrusive_list_alternate_type" label = "Additional IntrusiveList with different item type" }, { base = "size_report:base" target = "size_report:intrusive_forward_list_base" label = "IntrusiveForwardList" }, { base = "size_report:intrusive_forward_list_base" target = "size_report:intrusive_forward_list_alternate_type" label = "Additional IntrusiveForwardList with different item type" }, { base = "size_report:base" target = "size_report:intrusive_list_and_forward_list" label = "IntrusiveForwardList and IntrusiveList" }, ] } pw_size_diff("maps_size_report") { title = "Sizes of Pigweed's map containers" binaries = [ { base = "size_report:base" target = "size_report:flat_map_base" label = "FlatMap" }, { base = "size_report:flat_map_base" target = "size_report:flat_map_alternate_types" label = "Additional FlatMap with different key and value types" }, { base = "size_report:base" target = "size_report:intrusive_map_base" label = "IntrusiveMap" }, { base = "size_report:intrusive_map_base" target = "size_report:intrusive_map_alternate_key" label = "Additional IntrusiveMap with different key type" }, { base = "size_report:intrusive_map_base" target = "size_report:intrusive_map_alternate_types" label = "Additional IntrusiveMap with different key and value types" }, { base = "size_report:base" target = "size_report:intrusive_multimap_base" label = "IntrusiveMultiMap" }, { base = "size_report:intrusive_multimap_base" target = "size_report:intrusive_multimap_alternate_key" label = "Additional IntrusiveMultiMap with different key type" }, { base = "size_report:intrusive_multimap_base" target = "size_report:intrusive_multimap_alternate_types" label = "Additional IntrusiveMultiMap with different key and value types" }, { base = "size_report:base" target = "size_report:intrusive_map_and_multimap" label = "IntrusiveMap and IntrusiveMultiMap" }, ] } pw_size_diff("queues_size_report") { title = "Sizes of Pigweed's queue containers" binaries = [ { base = "size_report:base" target = "size_report:inline_deque_base" label = "InlineDeque" }, { base = "size_report:inline_deque_base" target = "size_report:inline_deque_alternate_type" label = "Additional InlineDeque with different item type" }, { base = "size_report:base" target = "size_report:inline_queue_base" label = "InlineQueue" }, { base = "size_report:inline_queue_base" target = "size_report:inline_queue_alternate_type" label = "Additional InlineQueue with different item type" }, { base = "size_report:base" target = "size_report:inline_deque_and_queue" label = "InlineDeque and InlineQueue" }, ] } pw_size_diff("sets_size_report") { title = "Sizes of Pigweed's set containers" binaries = [ { base = "size_report:base" target = "size_report:intrusive_set_base" label = "IntrusiveSet" }, { base = "size_report:intrusive_set_base" target = "size_report:intrusive_set_alternate_type" label = "Additional IntrusiveSet with different item type" }, { base = "size_report:base" target = "size_report:intrusive_multiset_base" label = "IntrusiveMultiSet" }, { base = "size_report:intrusive_multiset_base" target = "size_report:intrusive_multiset_alternate_type" label = "Additional IntrusiveMultiSet with different item type" }, { base = "size_report:base" target = "size_report:intrusive_set_and_multiset" label = "IntrusiveSet and IntrusiveMultiSet" }, ] } pw_size_diff("vectors_size_report") { title = "Size of Pigweed's vector container" binaries = [ { base = "size_report:base" target = "size_report:vector_base" label = "Vector" }, { base = "size_report:vector_base" target = "size_report:vector_alternate_size" label = "Additional Vector with the same item type but different size" }, { base = "size_report:vector_base" target = "size_report:vector_alternate_type" label = "Additional Vector with different item type but same size" }, ] }