# Copyright 2016 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/testing/environments.gni")

# A collection of utilities useful to debuggers and similar programs.
#
static_library("debugger_utils") {
  sources = [
    "build_ids.cc",
    "build_ids.h",
    "byte_block.h",
    "byte_block_file.cc",
    "byte_block_file.h",
    "elf_reader.cc",
    "elf_reader.h",
    "elf_symtab.cc",
    "elf_symtab.h",
    "ktrace_reader.cc",
    "ktrace_reader.h",
    "load_maps.cc",
    "load_maps.h",
    "util.cc",
    "util.h",
  ]

  if (is_fuchsia) {
    sources += [ "util_zx.cc" ]
  }

  if (current_cpu == "x64") {
    sources += [
      "x86_cpuid.cc",
      "x86_cpuid.h",
      "x86_pt.cc",
      "x86_pt.h",
    ]
  }

  public_deps = [
    "//src/lib/fxl",
    "//zircon/public/lib/zircon-internal",
  ]

  deps = [ "//sdk/lib/fit" ]

  if (is_fuchsia) {
    deps += [ "//zircon/system/ulib/inspector" ]
    public_deps += [
      "//garnet/lib/process",
      "//sdk/fidl/fuchsia.boot:fuchsia.boot_c",
      "//sdk/lib/fdio",
      "//zircon/public/lib/zx",
    ]
  } else {
    deps += [ "//zircon/system/public" ]
  }

  configs += [
    # TODO(fxbug.dev/58162): delete the below and fix compiler warnings
    "//build/config:Wno-conversion",
  ]
}
