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

# WARNING: This file is automatically generated.

import("//build_overrides/build.gni")

if (build_with_chromium) {
  visibility = [
    "//third_party/webrtc/*",
    "//third_party/abseil-cpp/*",
  ]
} else {
  visibility = [ "*" ]
}

source_set("stacktrace") {
  configs -= [ "//build/config/compiler:chromium_code" ]
  configs += [
    "//build/config/compiler:no_chromium_code",
    "//third_party/abseil-cpp:absl_default_cflags_cc",
  ]
  public_configs = [ "//third_party/abseil-cpp:absl_include_config" ]
  sources = [
    "stacktrace.cc",
  ]
  public = [
    "stacktrace.h",
  ]
  deps = [
    ":debugging_internal",
    "../base",
    "../base:core_headers",
  ]
}

source_set("symbolize") {
  configs -= [ "//build/config/compiler:chromium_code" ]
  configs += [
    "//build/config/compiler:no_chromium_code",
    "//third_party/abseil-cpp:absl_default_cflags_cc",
  ]
  public_configs = [ "//third_party/abseil-cpp:absl_include_config" ]
  sources = [
    "symbolize.cc",
    "symbolize_elf.inc",
    "symbolize_unimplemented.inc",
    "symbolize_win32.inc",
  ]
  public = [
    "internal/symbolize.h",
    "symbolize.h",
  ]
  deps = [
    ":debugging_internal",
    ":demangle_internal",
    "../base",
    "../base:core_headers",
    "../base:malloc_internal",
  ]
}

source_set("examine_stack") {
  configs -= [ "//build/config/compiler:chromium_code" ]
  configs += [
    "//build/config/compiler:no_chromium_code",
    "//third_party/abseil-cpp:absl_default_cflags_cc",
  ]
  public_configs = [ "//third_party/abseil-cpp:absl_include_config" ]
  sources = [
    "internal/examine_stack.cc",
  ]
  public = [
    "internal/examine_stack.h",
  ]
  visibility = []
  visibility += [ ":*" ]
  deps = [
    ":stacktrace",
    ":symbolize",
    "../base",
    "../base:core_headers",
  ]
}

source_set("failure_signal_handler") {
  configs -= [ "//build/config/compiler:chromium_code" ]
  configs += [
    "//build/config/compiler:no_chromium_code",
    "//third_party/abseil-cpp:absl_default_cflags_cc",
  ]
  public_configs = [ "//third_party/abseil-cpp:absl_include_config" ]
  sources = [
    "failure_signal_handler.cc"
  ]
  public = [
    "failure_signal_handler.h"
  ]
  deps = [
    ":examine_stack",
    ":stacktrace",
    "../base",
    "../base:config",
    "../base:core_headers",
  ]
}

source_set("debugging_internal") {
  configs -= [ "//build/config/compiler:chromium_code" ]
  configs += [
    "//build/config/compiler:no_chromium_code",
    "//third_party/abseil-cpp:absl_default_cflags_cc",
  ]
  public_configs = [ "//third_party/abseil-cpp:absl_include_config" ]
  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/stacktrace_config.h",
    "internal/vdso_support.h",
  ]
  deps = [
    "../base",
    "../base:dynamic_annotations",
  ]
}

source_set("demangle_internal") {
  configs -= [ "//build/config/compiler:chromium_code" ]
  configs += [
    "//build/config/compiler:no_chromium_code",
    "//third_party/abseil-cpp:absl_default_cflags_cc",
  ]
  public_configs = [ "//third_party/abseil-cpp:absl_include_config" ]
  sources = [
    "internal/demangle.cc",
  ]
  public = [
    "internal/demangle.h",
  ]
  deps = [
    "../base",
    "../base:core_headers",
  ]
}

source_set("leak_check") {
  configs -= [ "//build/config/compiler:chromium_code" ]
  configs += [
    "//build/config/compiler:no_chromium_code",
    "//third_party/abseil-cpp:absl_default_cflags_cc",
  ]
  public_configs = [ "//third_party/abseil-cpp:absl_include_config" ]
  if (is_ios || is_win) {
    sources = []
    public = []
  } else {
    sources = [
      "leak_check.cc",
    ]
    public = [
      "leak_check.h",
    ]
  }
  deps = [
    "../base:core_headers",
  ]
}

source_set("leak_check_disable") {
  configs -= [ "//build/config/compiler:chromium_code" ]
  configs += [
    "//build/config/compiler:no_chromium_code",
    "//third_party/abseil-cpp:absl_default_cflags_cc",
  ]
  public_configs = [ "//third_party/abseil-cpp:absl_include_config" ]
  sources = [
    "leak_check_disable.cc",
  ]
}

source_set("leak_check_api_enabled_for_testing") {
  testonly = true
  configs -= [ "//build/config/compiler:chromium_code" ]
  configs += [
    "//build/config/compiler:no_chromium_code",
    "//third_party/abseil-cpp:absl_default_cflags_cc",
  ]
  cflags_cc = [ "-DLEAK_SANITIZER" ]
  public_configs = [ "//third_party/abseil-cpp:absl_include_config" ]
  sources = [
    "leak_check.cc",
  ]
  public = [
    "leak_check.h",
  ]
  visibility = []
  visibility += [ ":*" ]
}

source_set("leak_check_api_disabled_for_testing") {
  testonly = true
  configs -= [ "//build/config/compiler:chromium_code" ]
  configs += [
    "//build/config/compiler:no_chromium_code",
    "//third_party/abseil-cpp:absl_default_cflags_cc",
  ]
  cflags_cc = [ "-ULEAK_SANITIZER" ]
  public_configs = [ "//third_party/abseil-cpp:absl_include_config" ]
  sources = [
    "leak_check.cc",
  ]
  public = [
    "leak_check.h",
  ]
  visibility = []
  visibility += [ ":*" ]
}

source_set("stack_consumption") {
  testonly = true
  configs -= [ "//build/config/compiler:chromium_code" ]
  configs += [
    "//build/config/compiler:no_chromium_code",
    "//third_party/abseil-cpp:absl_default_cflags_cc",
  ]
  public_configs = [ "//third_party/abseil-cpp:absl_include_config" ]
  sources = [
    "internal/stack_consumption.cc",
  ]
  public = [
    "internal/stack_consumption.h",
  ]
  deps = [
    "../base",
    "../base:core_headers",
  ]
  visibility = []
  visibility += [ ":*" ]
}
