# 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/target_types.gni")
import("$dir_pw_docgen/docs.gni")
import("$dir_pw_toolchain/traits.gni")
import("$dir_pw_unit_test/test.gni")

config("public_include_path") {
  include_dirs = [ "public" ]
}

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" ]
}

pw_source_set("inline_deque") {
  public_configs = [ ":public_include_path" ]
  public_deps = [
    ":raw_storage",
    dir_pw_assert,
    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" ]
  visibility = [ ":*" ]
}

pw_source_set("to_array") {
  public_configs = [ ":public_include_path" ]
  public = [ "public/pw_containers/to_array.h" ]
}

pw_source_set("vector") {
  public_configs = [ ":public_include_path" ]
  public_deps = [
    dir_pw_assert,
    dir_pw_polyfill,
  ]
  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_list") {
  public_configs = [ ":public_include_path" ]
  public = [
    "public/pw_containers/internal/intrusive_list_impl.h",
    "public/pw_containers/intrusive_list.h",
  ]
  sources = [ "intrusive_list.cc" ]
  deps = [ dir_pw_assert ]
}

pw_test_group("tests") {
  tests = [
    ":algorithm_test",
    ":filtered_view_test",
    ":flat_map_test",
    ":inline_deque_test",
    ":inline_queue_test",
    ":intrusive_list_test",
    ":raw_storage_test",
    ":to_array_test",
    ":vector_test",
    ":wrapped_iterator_test",
  ]
}

pw_test("algorithm_test") {
  sources = [ "algorithm_test.cc" ]
  deps = [
    ":algorithm",
    ":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 = [
    ":filtered_view",
    ":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("vector_test") {
  sources = [ "vector_test.cc" ]
  deps = [
    ":test_helpers",
    ":vector",
  ]

  # 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_list_test") {
  sources = [ "intrusive_list_test.cc" ]
  deps = [
    ":intrusive_list",
    ":vector",
    "$dir_pw_preprocessor",
  ]
  negative_compilation_tests = true

  # TODO(b/259746255): Remove this when everything compiles with -Wconversion.
  configs = [ "$dir_pw_build:conversion_warnings" ]
}

pw_doc_group("docs") {
  sources = [ "docs.rst" ]
  report_deps = [ ":containers_size_report" ]
}

pw_size_diff("containers_size_report") {
  title = "Pigweed containers size report"
  binaries = [
    {
      target = "size_report:linked_list_one_item"
      base = "size_report:base"
      label = "linked list one item"
    },
    {
      target = "size_report:linked_list_two_item"
      base = "size_report:base"
      label = "linked list two item"
    },
    {
      target = "size_report:linked_list_four_item"
      base = "size_report:base"
      label = "linked list four item"
    },
    {
      target = "size_report:intrusive_list_one_item"
      base = "size_report:base"
      label = "intrusive list one item"
    },
    {
      target = "size_report:intrusive_list_two_item"
      base = "size_report:base"
      label = "intrusive list two item"
    },
    {
      target = "size_report:intrusive_list_four_item"
      base = "size_report:base"
      label = "intrusive list four item"
    },
  ]
}
