# Copyright 2018 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.

# This library contains some low-level helpers that need to be shared between
# the "client" and "symbols", but which doesn't below in the symbol library
# itself.
static_library("common") {
  public = [
    "address_range.h",
    "address_ranges.h",
    "err.h",
    "file_util.h",
    "host_util.h",
    "string_util.h",
  ]

  sources = [
    "address_range.cc",
    "address_ranges.cc",
    "err.cc",
    "file_util.cc",
    "host_util.cc",
    "string_util.cc",
  ]

  public_deps = [
    "//src/lib/fxl",
  ]
}

source_set("test_support") {
  sources = [
    "test_with_loop.h",
  ]
  public_deps = [
    "//src/developer/debug/shared",
  ]
}

source_set("tests") {
  testonly = true

  sources = [
    "address_ranges_unittest.cc",
    "file_util_unittest.cc",
  ]

  deps = [
    ":common",
    "//third_party/googletest:gtest",
  ]
}

# Simple support library for writing perf tests. This is a much simpler variant
# of //zircon/system/ulib/perftest that will run on the host.
source_set("perf_test") {
  testonly = true

  sources = [
    "perf_test.cc",
    "perf_test.h",
  ]

  public_deps = [
    "//third_party/googletest:gtest",
  ]

  deps = [
    "//src/lib/fxl",
  ]
}
