# Copyright 2013 The Chromium Authors
# Use of this source code is governed by a BSD-style license that can be
# found in the LICENSE file.

import("//build/config/compiler/compiler.gni")

declare_args() {
  # Stack traces will not include function names. Instead they will contain
  # file and offset information that can be used with
  # tools/valgrind/asan/asan_symbolize.py. By piping stderr through this script,
  # and also enabling symbol_level = 2, you can get much more detailed stack
  # traces with file names and line numbers, even in non-ASAN builds.
  print_unsymbolized_stack_traces = is_asan || is_lsan || is_msan || is_tsan
}

config("symbolize_config") {
  defines = [
    # Only built for Linux and ChromeOS so no special export magic needed.
    "GLOG_EXPORT=",
  ]
}

static_library("symbolize") {
  visibility = [ "//base/*" ]
  sources = [
    "config.h",
    "demangle.cc",
    "demangle.h",
    "glog/logging.h",
    "glog/raw_logging.h",
    "symbolize.cc",
    "symbolize.h",
    "utilities.h",
  ]

  defines = []

  if (print_unsymbolized_stack_traces) {
    defines += [ "PRINT_UNSYMBOLIZED_STACK_TRACES" ]
  }

  configs -= [ "//build/config/compiler:chromium_code" ]
  configs += [ "//build/config/compiler:no_chromium_code" ]

  public_configs = [ ":symbolize_config" ]
}
