# Copyright 2018 The Chromium 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/config/sanitizers/sanitizers.gni")
import("//third_party/abseil-cpp/absl.gni")

absl_source_set("stacktrace") {
  sources = [
    "internal/stacktrace_aarch64-inl.inc",
    "internal/stacktrace_arm-inl.inc",
    "internal/stacktrace_config.h",
    "internal/stacktrace_emscripten-inl.inc",
    "internal/stacktrace_generic-inl.inc",
    "internal/stacktrace_powerpc-inl.inc",
    "internal/stacktrace_riscv-inl.inc",
    "internal/stacktrace_unimplemented-inl.inc",
    "internal/stacktrace_win32-inl.inc",
    "internal/stacktrace_x86-inl.inc",
    "stacktrace.cc",
  ]
  public = [ "stacktrace.h" ]
  deps = [
    ":debugging_internal",
    "//third_party/abseil-cpp/absl/base:config",
    "//third_party/abseil-cpp/absl/base:core_headers",
    "//third_party/abseil-cpp/absl/base:raw_logging_internal",
  ]
}

absl_source_set("symbolize") {
  sources = [
    "symbolize.cc",
    "symbolize_darwin.inc",
    "symbolize_elf.inc",
    "symbolize_emscripten.inc",
    "symbolize_unimplemented.inc",
    "symbolize_win32.inc",
  ]
  public = [
    "internal/symbolize.h",
    "symbolize.h",
  ]
  deps = [
    ":debugging_internal",
    ":demangle_internal",
    "//third_party/abseil-cpp/absl/base",
    "//third_party/abseil-cpp/absl/base:config",
    "//third_party/abseil-cpp/absl/base:core_headers",
    "//third_party/abseil-cpp/absl/base:dynamic_annotations",
    "//third_party/abseil-cpp/absl/base:malloc_internal",
    "//third_party/abseil-cpp/absl/base:raw_logging_internal",
    "//third_party/abseil-cpp/absl/strings",
  ]

  # TODO(mbonadei): The bazel file has:
  #   -DEFAULTLIB:dbghelp.lib
  # evaluate if this needs to be added here as well.
}

absl_source_set("examine_stack") {
  sources = [ "internal/examine_stack.cc" ]
  public = [ "internal/examine_stack.h" ]
  visibility = [ ":*" ]
  deps = [
    ":stacktrace",
    ":symbolize",
    "//third_party/abseil-cpp/absl/base:config",
    "//third_party/abseil-cpp/absl/base:core_headers",
    "//third_party/abseil-cpp/absl/base:raw_logging_internal",
  ]
}

absl_source_set("failure_signal_handler") {
  sources = [ "failure_signal_handler.cc" ]
  public = [ "failure_signal_handler.h" ]
  deps = [
    ":examine_stack",
    ":stacktrace",
    "//third_party/abseil-cpp/absl/base",
    "//third_party/abseil-cpp/absl/base:config",
    "//third_party/abseil-cpp/absl/base:core_headers",
    "//third_party/abseil-cpp/absl/base:raw_logging_internal",
  ]
}

absl_source_set("debugging_internal") {
  sources = [
    "internal/address_is_readable.cc",
    "internal/elf_mem_image.cc",
    "internal/vdso_support.cc",
  ]
  public = [
    "internal/address_is_readable.h",
    "internal/elf_mem_image.h",
    "internal/vdso_support.h",
  ]
  visibility = [ ":*" ]
  deps = [
    "//third_party/abseil-cpp/absl/base:config",
    "//third_party/abseil-cpp/absl/base:core_headers",
    "//third_party/abseil-cpp/absl/base:dynamic_annotations",
    "//third_party/abseil-cpp/absl/base:errno_saver",
    "//third_party/abseil-cpp/absl/base:raw_logging_internal",
  ]
}

absl_source_set("demangle_internal") {
  sources = [ "internal/demangle.cc" ]
  public = [ "internal/demangle.h" ]
  visibility = [ ":*" ]
  deps = [
    "//third_party/abseil-cpp/absl/base",
    "//third_party/abseil-cpp/absl/base:config",
    "//third_party/abseil-cpp/absl/base:core_headers",
  ]
}

absl_source_set("leak_check") {
  if (is_ios || is_win) {
    sources = []
    public = []
  } else {
    sources = [ "leak_check.cc" ]
    public = [ "leak_check.h" ]
  }
  deps = [
    "//third_party/abseil-cpp/absl/base:config",
    "//third_party/abseil-cpp/absl/base:core_headers",
  ]
}

absl_source_set("stack_consumption") {
  testonly = true
  sources = [ "internal/stack_consumption.cc" ]
  public = [ "internal/stack_consumption.h" ]
  deps = [
    "//third_party/abseil-cpp/absl/base:config",
    "//third_party/abseil-cpp/absl/base:core_headers",
    "//third_party/abseil-cpp/absl/base:raw_logging_internal",
  ]
  visibility = [ ":*" ]
}
