# Copyright 2019 The Fuchsia Authors. All rights reserved.
# Use of this source code is governed by a BSD-style license that can be
# found in the LICENSE file.

import("//build/toolchain/toolchain_environment.gni")
import("//build/zircon/zx_library.gni")

zx_library("fbl") {
  sdk = "source"
  sdk_publishable = "cts"
  sdk_headers = [
    "fbl/algorithm.h",
    "fbl/alloc_checker.h",
    "fbl/array.h",
    "fbl/auto_lock.h",
    "fbl/bits.h",
    "fbl/conditional_select_nospec.h",
    "fbl/condition_variable.h",
    "fbl/confine_array_index.h",
    "fbl/enum_bits.h",
    "fbl/hard_int.h",
    "fbl/inline_array.h",
    "fbl/intrusive_container_node_utils.h",
    "fbl/intrusive_container_utils.h",
    "fbl/intrusive_double_list.h",
    "fbl/intrusive_hash_table.h",
    "fbl/intrusive_pointer_traits.h",
    "fbl/intrusive_single_list.h",
    "fbl/strong_int.h",
    "fbl/intrusive_wavl_tree.h",
    "fbl/intrusive_wavl_tree_internal.h",
    "fbl/macros.h",
    "fbl/mutex.h",
    "fbl/no_destructor.h",
    "fbl/null_lock.h",
    "fbl/recycler.h",
    "fbl/ref_counted.h",
    "fbl/ref_counted_internal.h",
    "fbl/ref_counted_upgradeable.h",
    "fbl/ref_ptr.h",
    "fbl/ring_buffer.h",
    "fbl/slab_allocator.h",
    "fbl/slab_malloc.h",
    "fbl/static_vector.h",
    "fbl/string_buffer.h",
    "fbl/string.h",
    "fbl/string_printf.h",
    "fbl/string_traits.h",
    "fbl/type_info.h",
    "fbl/unique_fd.h",
    "fbl/vector.h",
    "fbl/wavl_tree_best_node_observer.h",
  ]

  sources = [ "alloc_checker.cc" ]
  if (!is_kernel) {
    sources += [
      "string.cc",
      "string_buffer.cc",
      "string_printf.cc",
    ]
  }

  public_deps = [
    "//sdk/lib/fit",
    "//sdk/lib/stdcompat",
  ]

  deps = []

  if (is_kernel) {
    # Anything using libc++ headers in the kernel needs this.
    public_deps += [ "//zircon/kernel/lib/ktl:headers" ]
    if (toolchain_environment != "kernel") {
      deps += [
        "//zircon/kernel/lib/ktl",
        "//zircon/kernel/lib/libc",
      ]
    }
  }

  if (toolchain_environment == "kernel") {
    # Avoid circularity.
    configs -= [ "//zircon/kernel/vm:headers.config" ]
  }

  if (!is_fuchsia && !is_kernel) {
    deps += [ "//zircon/system/public" ]
  }
}

group("tests") {
  testonly = true
  deps = [ "test:tests" ]
}
