| # 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. |
| |
| load("@rules_cc//cc:cc_library.bzl", "cc_library") |
| load("@sphinxdocs//sphinxdocs:sphinx_docs_library.bzl", "sphinx_docs_library") |
| load("//pw_bloat:pw_size_diff.bzl", "pw_size_diff") |
| load("//pw_bloat:pw_size_table.bzl", "pw_size_table") |
| load("//pw_build:compatibility.bzl", "incompatible_with_mcu") |
| load("//pw_unit_test:pw_cc_test.bzl", "pw_cc_test") |
| |
| package( |
| default_visibility = ["//visibility:public"], |
| features = ["-layering_check"], |
| ) |
| |
| licenses(["notice"]) |
| |
| cc_library( |
| name = "config", |
| hdrs = ["public/pw_string/internal/config.h"], |
| strip_include_prefix = "public", |
| deps = [":config_override"], |
| ) |
| |
| label_flag( |
| name = "config_override", |
| build_setting_default = "//pw_build:default_module_config", |
| ) |
| |
| cc_library( |
| name = "pw_string", |
| deps = [ |
| ":builder", |
| ":format", |
| ":to_string", |
| ":util", |
| ], |
| ) |
| |
| cc_library( |
| name = "builder", |
| srcs = ["string_builder.cc"], |
| hdrs = ["public/pw_string/string_builder.h"], |
| strip_include_prefix = "public", |
| deps = [ |
| ":format", |
| ":string", |
| ":to_string", |
| ":util", |
| "//pw_preprocessor", |
| "//pw_span", |
| "//pw_status", |
| ], |
| ) |
| |
| cc_library( |
| name = "format", |
| srcs = ["format.cc"], |
| hdrs = ["public/pw_string/format.h"], |
| strip_include_prefix = "public", |
| deps = [ |
| ":string", |
| "//pw_preprocessor", |
| "//pw_span", |
| "//pw_status", |
| ], |
| ) |
| |
| cc_library( |
| name = "string", |
| hdrs = [ |
| "public/pw_string/internal/string_common_functions.inc", |
| "public/pw_string/internal/string_impl.h", |
| "public/pw_string/string.h", |
| ], |
| strip_include_prefix = "public", |
| tags = ["noclangtidy"], |
| deps = [ |
| "//pw_assert:assert", |
| "//pw_containers:common", |
| "//pw_containers:iterator", |
| "//pw_preprocessor", |
| ], |
| ) |
| |
| cc_library( |
| name = "to_string", |
| srcs = ["type_to_string.cc"], |
| hdrs = [ |
| "public/pw_string/to_string.h", |
| "public/pw_string/type_to_string.h", |
| ], |
| strip_include_prefix = "public", |
| deps = [ |
| ":config", |
| ":format", |
| ":util", |
| "//pw_result", |
| "//pw_span", |
| "//pw_status", |
| "//third_party/fuchsia:stdcompat", |
| ], |
| ) |
| |
| cc_library( |
| name = "utf_codecs", |
| srcs = ["utf_codecs.cc"], |
| hdrs = ["public/pw_string/utf_codecs.h"], |
| strip_include_prefix = "public", |
| deps = [ |
| ":builder", |
| "//pw_result", |
| "//pw_span", |
| "//pw_status", |
| ], |
| ) |
| |
| cc_library( |
| name = "util", |
| hdrs = [ |
| "public/pw_string/internal/length.h", |
| "public/pw_string/util.h", |
| ], |
| strip_include_prefix = "public", |
| deps = [ |
| ":string", |
| "//pw_assert:assert", |
| "//pw_result", |
| "//pw_span", |
| "//pw_status", |
| ], |
| ) |
| |
| cc_library( |
| name = "hex", |
| hdrs = ["public/pw_string/hex.h"], |
| strip_include_prefix = "public", |
| ) |
| |
| pw_cc_test( |
| name = "format_test", |
| srcs = ["format_test.cc"], |
| deps = [ |
| ":format", |
| "//pw_span", |
| ], |
| ) |
| |
| pw_cc_test( |
| name = "string_test", |
| srcs = ["string_test.cc"], |
| has_nc_test = True, |
| deps = [ |
| ":string", |
| ], |
| ) |
| |
| pw_cc_test( |
| name = "type_to_string_test", |
| srcs = ["type_to_string_test.cc"], |
| deps = [":to_string"], |
| ) |
| |
| pw_cc_test( |
| name = "string_builder_test", |
| srcs = ["string_builder_test.cc"], |
| deps = [":builder"], |
| ) |
| |
| pw_cc_test( |
| name = "to_string_test", |
| srcs = ["to_string_test.cc"], |
| deps = [ |
| ":config", |
| ":to_string", |
| "//pw_status", |
| ], |
| ) |
| |
| pw_cc_test( |
| name = "utf_codecs_test", |
| srcs = ["utf_codecs_test.cc"], |
| deps = [":utf_codecs"], |
| ) |
| |
| pw_cc_test( |
| name = "util_test", |
| srcs = ["util_test.cc"], |
| deps = [":util"], |
| ) |
| |
| pw_cc_test( |
| name = "hex_test", |
| srcs = ["hex_test.cc"], |
| deps = [":hex"], |
| ) |
| |
| filegroup( |
| name = "doxygen", |
| srcs = [ |
| "public/pw_string/format.h", |
| "public/pw_string/internal/config.h", |
| "public/pw_string/internal/length.h", |
| "public/pw_string/internal/string_common_functions.inc", |
| "public/pw_string/internal/string_impl.h", |
| "public/pw_string/string.h", |
| "public/pw_string/string_builder.h", |
| "public/pw_string/utf_codecs.h", |
| "public/pw_string/util.h", |
| ], |
| ) |
| |
| pw_size_diff( |
| name = "build_string_with_string_builder_size_diff", |
| base = "//pw_string/size_report:build_string_with_snprintf", |
| label = "Total StringBuilder cost when used alongside snprintf", |
| target = "//pw_string/size_report:build_string_with_string_builder", |
| ) |
| |
| pw_size_diff( |
| name = "build_string_with_string_builder_no_base_snprintf_size_diff", |
| base = "//pw_string/size_report:build_string_with_snprintf_no_base_snprintf", |
| label = "StringBuilder cost when completely replacing snprintf", |
| target = "//pw_string/size_report:build_string_with_string_builder_no_base_snprintf", |
| ) |
| |
| pw_size_diff( |
| name = "build_string_incremental_with_string_builder_size_diff", |
| base = "//pw_string/size_report:build_string_incremental_with_snprintf", |
| label = "Incremental cost relative to snprintf for 10 strings", |
| target = "//pw_string/size_report:build_string_incremental_with_string_builder", |
| ) |
| |
| pw_size_table( |
| name = "string_builder_size_report", |
| reports = [ |
| ":build_string_with_string_builder_size_diff", |
| ":build_string_with_string_builder_no_base_snprintf_size_diff", |
| ":build_string_incremental_with_string_builder_size_diff", |
| ], |
| ) |
| |
| pw_size_diff( |
| name = "single_write_format_size_diff", |
| base = "//pw_string/size_report:single_write_snprintf", |
| label = "Format instead of snprintf once, return size", |
| target = "//pw_string/size_report:single_write_format", |
| ) |
| |
| pw_size_diff( |
| name = "multiple_writes_format_size_diff", |
| base = "//pw_string/size_report:multiple_writes_snprintf", |
| label = "Format instead of snprintf 10 times, handle errors", |
| target = "//pw_string/size_report:multiple_writes_format", |
| ) |
| |
| pw_size_diff( |
| name = "many_writes_format_size_diff", |
| base = "//pw_string/size_report:many_writes_snprintf", |
| label = "Format instead of snprintf 50 times, no error handling", |
| target = "//pw_string/size_report:many_writes_format", |
| ) |
| |
| pw_size_table( |
| name = "format_size_report", |
| reports = [ |
| ":single_write_format_size_diff", |
| ":multiple_writes_format_size_diff", |
| ":many_writes_format_size_diff", |
| ], |
| ) |
| |
| # DOCSTAG: [contributing-docs-examples] |
| sphinx_docs_library( |
| name = "docs", |
| srcs = [ |
| "BUILD.bazel", |
| "BUILD.gn", |
| "Kconfig", |
| "code_size.rst", |
| "design.rst", |
| "docs.rst", |
| "guide.rst", |
| ":format_size_report", |
| ":string_builder_size_report", |
| "//pw_string/examples", |
| ], |
| prefix = "pw_string/", |
| target_compatible_with = incompatible_with_mcu(), |
| ) |
| # DOCSTAG: [contributing-docs-examples] |