# Copyright 2020 The Fuchsia Authors
#
# Use of this source code is governed by a MIT-style
# license that can be found in the LICENSE file or at
# https://opensource.org/licenses/MIT

import("//build/components.gni")
import("//build/cpp/cpp_fuzzer.gni")
import("//build/test.gni")
import("//build/zircon/migrated_targets.gni")

zx_library("memalloc") {
  sdk = "source"
  sdk_headers = [
    "lib/memalloc/pool-mem-config.h",
    "lib/memalloc/pool.h",
    "lib/memalloc/range.h",
  ]

  sources = [
    "algorithm.cc",
    "pool.cc",
    "range.cc",
  ]

  deps = [
    "//sdk/lib/fit",
    "//sdk/lib/stdcompat",
    "//zircon/system/ulib/fbl",
    "//zircon/system/ulib/pretty",
    "//zircon/system/ulib/zxc",
  ]
  if (is_kernel) {
    deps += [ "//zircon/kernel/lib/libc" ]
  } else {
    sources += [ "ostream.cc" ]
  }

  public_deps = [
    "//sdk/lib/stdcompat:headers",

    # <lib/memalloc/pool.h> has #include <lib/fit/function.h>.
    # <lib/memalloc/range.h> has #include <lib/fit/function.h>.
    "//sdk/lib/fit:headers",

    # <lib/memalloc/pool.h> has #include <fbl/intrusive_double_list.h>.
    "//zircon/system/ulib/fbl:headers",

    # <lib/memalloc/pool.h> has #include <lib/fitx/result.h>.
    "//zircon/system/ulib/zxc:headers",
  ]
}

source_set("testing") {
  testonly = true
  public_deps = [
    ":memalloc",

    # test.h has #include <gtest/gtest.h>.
    "//third_party/googletest:gtest",
  ]
}

if (!is_kernel) {
  test("memalloc-test") {
    sources = [
      "algorithm-test.cc",
      "pool-mem-config-test.cc",
      "pool-test.cc",
    ]
    deps = [
      ":memalloc",
      ":testing",
      "//sdk/lib/fit",
      "//src/lib/fxl/test:gtest_main",
      "//third_party/googletest:gmock",
      "//third_party/googletest:gtest",
    ]
  }

  fuchsia_unittest_package("memalloc-test-package") {
    package_name = "memalloc-tests"
    deps = [
      ":memalloc-test",
      "//src/sys/test_runners:tmp_storage",
    ]
  }

  fuzzer_package("memalloc-fuzzers") {
    fuzz_host = true
    cpp_fuzzers = [
      ":find-fuzzer",
      ":pool-fuzzer",
    ]
  }

  cpp_fuzzer("find-fuzzer") {
    sources = [ "find-fuzzer.cc" ]
    deps = [
      ":memalloc",
      ":testing",
    ]
  }

  cpp_fuzzer("pool-fuzzer") {
    sources = [ "pool-fuzzer.cc" ]
    deps = [
      ":memalloc",
      ":testing",
      "//sdk/lib/stdcompat",
    ]
  }

  group("tests") {
    testonly = true
    deps = [
      ":memalloc-fuzzers",
      ":memalloc-test($host_toolchain)",
      ":memalloc-test-package",
    ]
  }
}
