#  Import `dawn_gen_root` and `dawn_partition_alloc_dir`
import("../../../scripts/dawn_overrides_with_defaults.gni")

# This file provides Dawn, the MiraclePtr "raw_ptr" definition.
# Depending on the configuration, this is either:
# - Delegated to the `partition_alloc` library.
# - Provided by Dawn itself as "no-op" implementation.

# This define the same targets as in partition_alloc. See Chrome's file:
# - base/allocator/partition_allocator/BUILD.gn
# - base/allocator/partition_allocator/src/partition_alloc/BUILD.gn

if (defined(dawn_partition_alloc_dir)) {
  group("raw_ptr") {
    public_deps = [ "${dawn_partition_alloc_dir}:raw_ptr" ]
  }

  group("buildflags") {
    public_deps = [ "${dawn_partition_alloc_dir}:buildflags" ]
  }

  # PartitionAlloc do not fully support MSVC cl.exe compiler. The condition
  # is_clang || !is_win is the one used by partition_alloc.
  is_clang_or_gcc = is_clang || !is_win

  if (is_clang_or_gcc) {
    group("partition_alloc") {
      public_deps = [ "${dawn_partition_alloc_dir}:partition_alloc" ]
    }
  }
} else {
  config("public_includes") {
    include_dirs = [ "." ]
  }

  source_set("raw_ptr") {
    public_configs = [ ":public_includes" ]
    public = [
      "partition_alloc/pointers/raw_ptr.h",
      "partition_alloc/pointers/raw_ptr_exclusion.h",
      "partition_alloc/pointers/raw_ref.h",
    ]
  }

  source_set("buildflags") {
    public_configs = [ ":public_includes" ]
    public = [ "partition_alloc/partition_alloc_buildflags.h" ]
  }

  # The Dawn no-op implementation of PartitionAlloc only contains buildflags
  # to detect the feature is disabled.
  group("partition_alloc") {
    public_deps = [ ":buildflags" ]
  }
}
