# 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("$dir_pw_build/pw_executable.gni")

pw_executable("single_write_snprintf") {
  sources = [ "format_single.cc" ]
  deps = [
    "$dir_pw_bloat:bloat_this_binary",
    "..",
  ]
  defines = [ "USE_FORMAT=0" ]
}

pw_executable("single_write_format") {
  sources = [ "format_single.cc" ]
  deps = [
    "$dir_pw_bloat:bloat_this_binary",
    "..",
  ]
  defines = [ "USE_FORMAT=1" ]
}

pw_executable("multiple_writes_snprintf") {
  sources = [ "format_multiple.cc" ]
  deps = [
    "$dir_pw_bloat:bloat_this_binary",
    "..",
  ]
  defines = [ "USE_FORMAT=0" ]
}

pw_executable("multiple_writes_format") {
  sources = [ "format_multiple.cc" ]
  deps = [
    "$dir_pw_bloat:bloat_this_binary",
    "..",
  ]
  defines = [ "USE_FORMAT=1" ]
}

pw_executable("many_writes_snprintf") {
  sources = [ "format_many_without_error_handling.cc" ]
  deps = [
    "$dir_pw_bloat:bloat_this_binary",
    "..",
  ]
  defines = [ "USE_FORMAT=0" ]
}

pw_executable("many_writes_format") {
  sources = [ "format_many_without_error_handling.cc" ]
  deps = [
    "$dir_pw_bloat:bloat_this_binary",
    "..",
  ]
  defines = [ "USE_FORMAT=1" ]
}

pw_executable("build_string_with_snprintf_no_base_snprintf") {
  sources = [ "string_builder_size_report.cc" ]
  deps = [
    "$dir_pw_bloat:bloat_this_binary",
    "..",
  ]
  defines = [
    "USE_STRING_BUILDER=0",
    "PROVIDE_BASE_SNPRINTF=0",
  ]
}

pw_executable("build_string_with_string_builder_no_base_snprintf") {
  sources = [ "string_builder_size_report.cc" ]
  deps = [
    "$dir_pw_bloat:bloat_this_binary",
    "..",
  ]
  defines = [
    "USE_STRING_BUILDER=1",
    "PROVIDE_BASE_SNPRINTF=0",
  ]
}

pw_executable("build_string_with_snprintf") {
  sources = [ "string_builder_size_report.cc" ]
  deps = [
    "$dir_pw_bloat:bloat_this_binary",
    "..",
  ]
  defines = [
    "USE_STRING_BUILDER=0",
    "PROVIDE_BASE_SNPRINTF=1",
  ]
}

pw_executable("build_string_with_string_builder") {
  sources = [ "string_builder_size_report.cc" ]
  deps = [
    "$dir_pw_bloat:bloat_this_binary",
    "..",
  ]
  defines = [
    "USE_STRING_BUILDER=1",
    "PROVIDE_BASE_SNPRINTF=1",
  ]
}

pw_executable("build_string_incremental_with_snprintf") {
  sources = [ "string_builder_size_report_incremental.cc" ]
  deps = [
    "$dir_pw_bloat:bloat_this_binary",
    "..",
  ]
  defines = [ "USE_STRING_BUILDER=0" ]
}

pw_executable("build_string_incremental_with_string_builder") {
  sources = [ "string_builder_size_report_incremental.cc" ]
  deps = [
    "$dir_pw_bloat:bloat_this_binary",
    "..",
  ]
  defines = [ "USE_STRING_BUILDER=1" ]
}
