blob: 81912a5691cc274a35834724401a0d7bf7e63951 [file] [log] [blame]
# Copyright 2015 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/buildflag_header.gni")
declare_args() {
# If set to true, this will stub out and disable the entire crash key system.
use_crash_key_stubs = is_fuchsia
}
group("common") {
public_deps = [
":crash_key",
":crash_key_utils",
]
if (is_mac || is_ios) {
public_deps += [ ":zombies" ]
}
}
use_crashpad_annotation =
(is_mac || is_win || is_android) && !use_crash_key_stubs
buildflag_header("crash_buildflags") {
header = "crash_buildflags.h"
flags = [
"USE_CRASHPAD_ANNOTATION=$use_crashpad_annotation",
"USE_CRASH_KEY_STUBS=$use_crash_key_stubs",
]
}
# Crashpad's annotation system can store data on a per-module basis (i.e.,
# in different shared libraries in the component build) without issue. The
# Breakpad implementation uses a static global variable, so ensure there is
# only one instance of the symbol in the component build by making this
# target a component.
if (use_crash_key_stubs || use_crashpad_annotation) {
crash_key_target_type = "static_library"
} else {
crash_key_target_type = "component"
}
target(crash_key_target_type, "crash_key") {
sources = [
"crash_export.h",
"crash_key.cc",
"crash_key.h",
"crash_key_base_support.cc",
"crash_key_base_support.h",
]
defines = []
# This target is not always a component, depending on the implementation.
# When it is not a component, annotating functions with the standard
# CRASH_EXPORT macro causes linking errors on Windows (clients of this target
# expect it to be dllimport but it is linked statically). Instead, provide a
# wrapper macro CRASH_KEY_EXPORT that only evaluates to CRASH_EXPORT if this
# target is really a component.
if (crash_key_target_type == "component") {
defines += [
"CRASH_KEY_EXPORT=CRASH_EXPORT",
"CRASH_CORE_COMMON_IMPLEMENTATION",
]
}
deps = [
":crash_buildflags",
"//base",
]
if (use_crash_key_stubs) {
sources += [ "crash_key_stubs.cc" ]
} else if (use_crashpad_annotation) {
sources += [ "crash_key_crashpad.cc" ]
deps += [ "//third_party/crashpad/crashpad/client" ]
} else {
include_dirs = [ "//third_party/breakpad/breakpad/src" ]
if (is_ios) {
sources += [ "crash_key_breakpad_ios.mm" ]
configs += [ "//build/config/compiler:enable_arc" ]
} else {
sources += [
"crash_key_breakpad.cc",
"crash_key_internal.h",
]
}
deps += [ "//third_party/breakpad:client" ]
}
}
static_library("crash_key_utils") {
visibility = [ ":*" ]
sources = [
"crash_keys.cc",
"crash_keys.h",
]
deps = [
":crash_key",
"//base",
]
}
if (is_mac || is_ios) {
component("zombies") {
visibility = [ ":common" ]
sources = [
"objc_zombie.h",
"objc_zombie.mm",
]
defines = [ "CRASH_CORE_COMMON_IMPLEMENTATION" ]
deps = [
":crash_key",
"//base",
]
libs = [ "Foundation.framework" ]
}
}
source_set("unit_tests") {
testonly = true
sources = [
"crash_key_unittest.cc",
"crash_keys_unittest.cc",
]
deps = [
":common",
"//base",
"//testing/gtest",
]
if (is_mac || is_ios) {
sources += [ "objc_zombie_unittest.mm" ]
}
if (!is_mac && !is_win && !is_fuchsia && !is_android) {
include_dirs = [ "//third_party/breakpad/breakpad/src/" ]
sources += [ "crash_key_breakpad_unittest.cc" ]
}
if (is_fuchsia) {
sources -= [ "crash_key_unittest.cc" ]
}
}