# 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_overrides/build.gni")
import("//build/config/sanitizers/sanitizers.gni")

if (build_with_chromium) {
  visibility = [
    "//third_party/webrtc/*",
    "//third_party/abseil-cpp/*",
    "//third_party/googletest:gtest",
  ]
} 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",
  ]
}

if (is_lsan) {
  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",
    ]
    public_configs = [ "//third_party/abseil-cpp:absl_include_config" ]
    sources = [
      "leak_check.cc",
    ]
    public = [
      "leak_check.h",
    ]
    visibility = []
    visibility += [ ":*" ]
  }
} else {
  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",
    ]
    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 += [ ":*" ]
}
