# 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.

# gn-format disable
import("//build_overrides/pigweed.gni")

import("$dir_pigweed/legacy_target.gni")
import("$dir_pw_bloat/bloat.gni")
import("$dir_pw_build/target_types.gni")
import("$dir_pw_docgen/docs.gni")
import("$dir_pw_unit_test/test.gni")
config("default_config") {
  include_dirs = [ "public" ]
}

pw_source_set("pw_string") {
  public_configs = [ ":default_config" ]
  public = [
    "public/pw_string/format.h",
    "public/pw_string/string_builder.h",
    "public/pw_string/to_string.h",
    "public/pw_string/type_to_string.h",
    "public/pw_string/util.h",
  ]
  sources = [
    "format.cc",
    "string_builder.cc",
    "type_to_string.cc",
  ]
  sources += public
  public_deps = [
    "$dir_pw_preprocessor",
    "$dir_pw_span",
    "$dir_pw_status",
  ]
}

pw_test_group("tests") {
  tests = [
    ":format_test",
    ":string_builder_test",
    ":to_string_test",
    ":type_to_string_test",
    ":util_test",
  ]
  group_deps = [
    "$dir_pw_preprocessor:tests",
    "$dir_pw_span:tests",
    "$dir_pw_status:tests",
  ]
}

pw_test("format_test") {
  deps = [ ":pw_string" ]
  sources = [ "format_test.cc" ]
}

pw_test("string_builder_test") {
  deps = [ ":pw_string" ]
  sources = [ "string_builder_test.cc" ]
}

pw_test("to_string_test") {
  deps = [ ":pw_string" ]
  sources = [ "to_string_test.cc" ]
}

pw_test("type_to_string_test") {
  deps = [ ":pw_string" ]
  sources = [ "type_to_string_test.cc" ]
}

pw_test("util_test") {
  deps = [ ":pw_string" ]
  sources = [ "util_test.cc" ]
}

pw_doc_group("docs") {
  sources = [ "docs.rst" ]
  report_deps = [
    ":format_size_report",
    ":string_builder_size_report",
  ]
}

pw_size_report("format_size_report") {
  title = "Using pw::string::Format instead of snprintf"

  binaries = [
    {
      target = "size_report:single_write_format"
      base = "size_report:single_write_snprintf"
      label = "Format instead of snprintf once, return size"
    },
    {
      target = "size_report:multiple_writes_format"
      base = "size_report:multiple_writes_snprintf"
      label = "Format instead of snprintf 10 times, handle errors"
    },
    {
      target = "size_report:many_writes_format"
      base = "size_report:many_writes_snprintf"
      label = "Format instead of snprintf 50 times, no error handling"
    },
  ]
}

pw_size_report("string_builder_size_report") {
  title = "Using pw::StringBuilder instead of snprintf"

  binaries = [
    {
      target = "size_report:build_string_with_string_builder"
      base = "size_report:build_string_with_snprintf"
      label = "Total StringBuilder cost when used alongside snprintf"
    },
    {
      target = "size_report:build_string_with_string_builder_no_base_snprintf"
      base = "size_report:build_string_with_snprintf_no_base_snprintf"
      label = "StringBuilder cost when completely replacing snprintf"
    },
    {
      target = "size_report:build_string_incremental_with_string_builder"
      base = "size_report:build_string_incremental_with_snprintf"
      label = "Incremental cost relative to snprintf for 10 strings"
    },
  ]
}
