# Copyright 2023 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_build/facade.gni")
import("$dir_pw_build/module_config.gni")
import("$dir_pw_build/target_types.gni")
import("$dir_pw_multibuf/backend.gni")
import("$dir_pw_unit_test/test.gni")

# LINT.IfChange
pw_facade("pw_multibuf") {
  backend = pw_multibuf_BACKEND
  public_configs = [ ":public_include_path" ]
  public = [
    "public/pw_multibuf/allocator.h",
    "public/pw_multibuf/chunk.h",
    "public/pw_multibuf/from_span.h",
    "public/pw_multibuf/header_chunk_region_tracker.h",
    "public/pw_multibuf/multibuf.h",
    "public/pw_multibuf/observer.h",
    "public/pw_multibuf/simple_allocator.h",
    "public/pw_multibuf/single_chunk_region_tracker.h",
  ]
  public_deps = [ ":config" ]
}

# allocator_async is kept as a separate facade to keep its dep on pw_thread via
# pw_async2 from propagating to incompatible target platforms, e.g. fuchsia,
# stm32xx, etc.
pw_facade("allocator_async") {
  backend = pw_multibuf_allocator_async_BACKEND
  public_configs = [ ":public_include_path" ]
  public = [ "public/pw_multibuf/allocator_async.h" ]
  public_deps = [
    ":allocator",
    ":config",
  ]
}

# LINT.ThenChange(BUILD.bazel, CMakeLists.txt)

### Module configuration

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

config("private_include_path") {
  include_dirs = [ "private" ]
  visibility = [ ":*" ]
}

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_multibuf_CONFIG = pw_build_DEFAULT_MODULE_CONFIG
}

# LINT.IfChange
pw_source_set("config") {
  public = [ "public/pw_multibuf/config.h" ]
  public_configs = [ ":public_include_path" ]
  public_deps = [ pw_multibuf_CONFIG ]
  visibility = [ "./*" ]
}

# LINT.ThenChange(BUILD.bazel, CMakeLists.txt)

### V1 Libraries

group("allocator") {
  public_deps = [ ":pw_multibuf" ]
}

group("chunk") {
  public_deps = [ ":pw_multibuf" ]
}

group("from_span") {
  public_deps = [ ":pw_multibuf" ]
}

group("header_chunk_region_tracker") {
  public_deps = [ ":pw_multibuf" ]
}

group("simple_allocator") {
  public_deps = [ ":pw_multibuf" ]
}

group("single_chunk_region_tracker") {
  public_deps = [ ":pw_multibuf" ]
}

# LINT.IfChange

pw_source_set("testing") {
  testonly = pw_unit_test_TESTONLY
  public = [ "public/pw_multibuf/simple_allocator_for_test.h" ]
  public_configs = [ ":public_include_path" ]
  public_deps = [
    ":config",
    ":simple_allocator",
    "$dir_pw_allocator:synchronized_allocator",
    "$dir_pw_allocator:testing",
    "$dir_pw_assert:assert",
    "$dir_pw_sync:mutex",
  ]
}

pw_source_set("chunk_testing") {
  testonly = pw_unit_test_TESTONLY
  public = [ "private/pw_multibuf_private/chunk_test_base.h" ]
  public_configs = [ ":private_include_path" ]
  visibility = [ "$dir_pw_multibuf/*" ]
  deps = [ dir_pw_unit_test ]
}

pw_source_set("test_utils") {
  testonly = pw_unit_test_TESTONLY
  public = [ "private/pw_multibuf_private/test_utils.h" ]
  public_configs = [ ":private_include_path" ]
  visibility = [ "$dir_pw_multibuf/*" ]
}

# LINT.ThenChange(BUILD.bazel, CMakeLists.txt)

## Test group

pw_test_group("tests") {
  group_deps = [
    "v1:tests",
    "v1_adapter:tests",
    "v2:tests",
  ]
}
