# Copyright 2014 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/chromeos/ui_mode.gni")
import("//build/config/rust.gni")
import("//build/symlink.gni")
import("//build/toolchain/toolchain.gni")
import("//testing/libfuzzer/fuzzer_test.gni")
import("//testing/test.gni")
if (is_win) {
import("//build/config/win/visual_studio_version.gni")
}
# Breakpad executables are only built with the system allocator toolchains,
# because when built with PartitionAlloc-Everywhere enabled, we see that they
# OOM and crash: https://crbug.com/345514993.
#
# IMPORTANT: The executables here may almost all be built for the *host*
# machine, not the target machine. However they are still built into the
# root_build_dir where normally you'd find the outputs of the default_toolchain
# which are meant to run on the *target* machine. This is quite abnormal, but
# our GN dependencies and test scripts expect the binary to be in the
# root_build_dir, and expect to run it on the host machine any time the tests
# are run in a VM or on a device (such as IOS, Android, and ChromeOS). In other
# cases, where the test launcher is the same as the target (such as any desktop
# platform), we expect to run it on the target machine.
#
# As such, if the executables are built for the default toolchain, they will be
# built with the host or the default toolchain's settings depending on if we
# expect the tests to be launched from the target machine or from a host
# machine. Then they are copied up to the `root_out_dir` of the
# `default_toolchain.
#
# TODO(danakj): There is no support for building these on host A, launching
# tests on host B, and running tests on target C, where A and B are different
# machine types. This may become a problem on iOS for blink_web_tests, as on iOS
# we may build on x86, upload/launch tests from arm64, and run tests on iOS
# device. In that case, the host_toolchain is x86-mac, the default_toolchain
# arm64-ios. But there's a third arm64-mac toolchain which
# _tests_launcher_toolchain should point at, but it's not clear what that is
# called in GN. It's not the default or the host toolchain. One possibility to
# support this would be to make the host_system_allocator_toolchain build a
# multi architecture binary that supports both arm64 and x64 and treat the host
# as the test-launcher machine for iOS.
#
# IMPORTANT ALSO: symupload is different and special. This particular binary is
# run by official build bots after compiling. It is always run on the host
# machine, not the test-launcher machine. The official bots build and run
# `symupload` in the default toolchain, so that binary must redirect from the
# default toolchain to the *host* and not to the test laucher.
#
# TODO(danakj): It would be nice to move the host-targeting `symupload` to a
# different directory that still remains fixed. Maybe something like
# `out/Release/host/symupload`. But that will require:
# - building it into both places temporarily
# - updating a bunch of scripts in internal repositories.
# - remove it from the default toolchain's outdir.
if (is_ios || is_android || is_chromeos) {
_tests_launcher_toolchain = host_system_allocator_toolchain
_tests_launcher_toolchain_has_exe_suffix = host_os == "win"
_include_google_converter = true
} else if (is_win && (current_cpu == "arm" || current_cpu == "arm64")) {
# In a build for Windows-ARM, we choose between building things for the host
# machine, or for the target machine (Windows ARM64). If the host machine is
# Linux, then there is a problem with each of these:
# - If using the host (Linux), the `google_converter` tool can not be built as
# it only has build rules for Windows.
# - If using the target (Windows ARM64), compilation will fail as these tools
# simply do not build in that configuration.
#
# So we build these tools for the host machine. If the host is Windows-x64,
# the resulting binaries can still be run on the target. If the host is Linux,
# they can not, but we have no Linux-to-Windows-ARM builders at this time.
#
# The `google_converter` executable must be excluded from the build if the
# host is not Windows, as there's no way to build it for the host then.
#
# TODO(danakj): We could build these for "x86" cpu system-allocator instead,
# if we could find that toolchain. We don't want to do some hacky
# string-concat stuff here to invent the toolchain name, so we would want to
# add a `win_x86_system_allocator_toolchain` variable. See
# https://crrev.com/c/5690512/5 for this solution.
_tests_launcher_toolchain = host_system_allocator_toolchain
_tests_launcher_toolchain_has_exe_suffix = host_os == "win"
_include_google_converter = host_os == "win"
} else {
_tests_launcher_toolchain = default_system_allocator_toolchain
_tests_launcher_toolchain_has_exe_suffix = current_os == "win"
_include_google_converter = true
}
_symupload_toolchain = host_system_allocator_toolchain
_symupload_toolchain_has_exe_suffix = host_os == "win"
# Copies an executable target to the root directory of the current toolchain.
# Used to copy from another toolchain. This requires that the executable is
# built without component build enabled (see comment in //build/symlink.gni),
# which is true for the `host_system_allocator_toolchain` and
# `default_system_allocator_toolchain` toolchains in order to support this use
# case.
template("copy_exe") {
_build = true
if (defined(invoker.fuzzer) && invoker.fuzzer) {
# TODO(danakj): The fuzzer_test() template sometimes doesn't generate
# anything, but we can't tell from here whether it did or not. We can only
# depend on the target when it will build something. It should provide some
# way to know if it builds. For now we know that the fuzzer_test in this
# file is not built with `high_end_fuzzer_targets`.
if ((!use_libfuzzer && !use_centipede) || high_end_fuzzer_targets) {
_build = false
}
}
if (_build) {
if (invoker.has_exe_suffix) {
_exe = ".exe"
} else {
_exe = ""
}
copy(target_name) {
forward_variables_from(invoker,
TESTONLY_AND_VISIBILITY + [ "public_deps" ])
public_deps = [ invoker.target ]
sources = [ get_label_info(invoker.target, "root_out_dir") + "/" +
get_label_info(invoker.target, "name") + _exe ]
outputs = [ "$root_out_dir/{{source_file_part}}" ]
}
} else {
not_needed(invoker, "*")
not_needed([ "target_name" ])
}
}
config("tools_config") {
include_dirs = [
"breakpad/src",
"breakpad/src/third_party",
]
if (is_android) {
defines = [ "__ANDROID__" ]
}
if (is_clang) {
cflags = [ "-Wno-tautological-constant-out-of-range-compare" ]
}
}
config("internal_config") {
include_dirs = [ "breakpad/src" ]
defines = []
if (is_debug) {
# This is needed for GTMLogger to work correctly.
defines += [ "DEBUG" ]
}
if (is_android) {
defines += [ "__ANDROID__" ]
}
}
config("client_config") {
include_dirs = [ "breakpad/src" ]
if (is_android) {
include_dirs += [ "breakpad/src/common/android/include" ]
}
if (is_chromeos_ash) {
defines = [ "__CHROMEOS__" ]
}
}
config("handler_config") {
include_dirs = [ "breakpad/src" ]
}
config("sender_config") {
include_dirs = [ "breakpad/src" ]
}
config("breakpad_unittest_config") {
# One of the breakpad unit tests test that we can detect the proper build-id.
# We must override the build-id for this one target.
ldflags = [ "-Wl,--build-id=0x000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f" ]
}
config("default_logging_severity_config") {
defines = [ "BPLOG_MINIMUM_SEVERITY=SEVERITY_ERROR" ]
}
config("fuzzing_logging_severity_config") {
defines = [ "BPLOG_MINIMUM_SEVERITY=SEVERITY_CRITICAL" ]
}
default_breakpad_configs = [ ":tools_config" ]
if (use_fuzzing_engine) {
default_breakpad_configs += [ ":fuzzing_logging_severity_config" ]
} else {
default_breakpad_configs += [ ":default_logging_severity_config" ]
}
# {micro,mini}dump_stackwalk and minidump_dump are tool-type executables
# that do not build on Windows.
if (!is_win) {
if (current_toolchain == host_system_allocator_toolchain ||
current_toolchain == default_system_allocator_toolchain) {
# Contains the code shared by both {micro,mini}dump_stackwalk.
static_library("stackwalk_common") {
# Binaries that use this library are not debugged frequently and
# performance is vastly reduced without optimizations. So, force maximum
# optimization to get the lowest runtimes in Chromium tests that use these
# tools. These can be removed locally if debugging is actually needed.
configs -= [ "//build/config/compiler:default_optimization" ]
configs += [ "//build/config/compiler:optimize_max" ]
sources = [
"breakpad/src/common/path_helper.cc",
"breakpad/src/common/path_helper.h",
"breakpad/src/common/scoped_ptr.h",
"breakpad/src/processor/basic_code_module.h",
"breakpad/src/processor/basic_code_modules.cc",
"breakpad/src/processor/basic_code_modules.h",
"breakpad/src/processor/basic_source_line_resolver.cc",
"breakpad/src/processor/call_stack.cc",
"breakpad/src/processor/cfi_frame_info.cc",
"breakpad/src/processor/cfi_frame_info.h",
"breakpad/src/processor/convert_old_arm64_context.cc",
"breakpad/src/processor/convert_old_arm64_context.h",
"breakpad/src/processor/disassembler_x86.cc",
"breakpad/src/processor/disassembler_x86.h",
"breakpad/src/processor/dump_context.cc",
"breakpad/src/processor/dump_object.cc",
"breakpad/src/processor/logging.cc",
"breakpad/src/processor/logging.h",
"breakpad/src/processor/pathname_stripper.cc",
"breakpad/src/processor/pathname_stripper.h",
"breakpad/src/processor/proc_maps_linux.cc",
"breakpad/src/processor/process_state.cc",
"breakpad/src/processor/simple_symbol_supplier.cc",
"breakpad/src/processor/simple_symbol_supplier.h",
"breakpad/src/processor/source_line_resolver_base.cc",
"breakpad/src/processor/stack_frame_cpu.cc",
"breakpad/src/processor/stack_frame_symbolizer.cc",
"breakpad/src/processor/stackwalk_common.cc",
"breakpad/src/processor/stackwalker.cc",
"breakpad/src/processor/stackwalker_amd64.cc",
"breakpad/src/processor/stackwalker_amd64.h",
"breakpad/src/processor/stackwalker_arm.cc",
"breakpad/src/processor/stackwalker_arm.h",
"breakpad/src/processor/stackwalker_arm64.cc",
"breakpad/src/processor/stackwalker_arm64.h",
"breakpad/src/processor/stackwalker_mips.cc",
"breakpad/src/processor/stackwalker_mips.h",
"breakpad/src/processor/stackwalker_ppc.cc",
"breakpad/src/processor/stackwalker_ppc.h",
"breakpad/src/processor/stackwalker_ppc64.cc",
"breakpad/src/processor/stackwalker_ppc64.h",
"breakpad/src/processor/stackwalker_riscv.cc",
"breakpad/src/processor/stackwalker_riscv.h",
"breakpad/src/processor/stackwalker_riscv64.cc",
"breakpad/src/processor/stackwalker_riscv64.h",
"breakpad/src/processor/stackwalker_sparc.cc",
"breakpad/src/processor/stackwalker_sparc.h",
"breakpad/src/processor/stackwalker_x86.cc",
"breakpad/src/processor/stackwalker_x86.h",
"breakpad/src/processor/tokenize.cc",
"breakpad/src/processor/tokenize.h",
# libdisasm
"breakpad/src/third_party/libdisasm/ia32_implicit.c",
"breakpad/src/third_party/libdisasm/ia32_implicit.h",
"breakpad/src/third_party/libdisasm/ia32_insn.c",
"breakpad/src/third_party/libdisasm/ia32_insn.h",
"breakpad/src/third_party/libdisasm/ia32_invariant.c",
"breakpad/src/third_party/libdisasm/ia32_invariant.h",
"breakpad/src/third_party/libdisasm/ia32_modrm.c",
"breakpad/src/third_party/libdisasm/ia32_modrm.h",
"breakpad/src/third_party/libdisasm/ia32_opcode_tables.c",
"breakpad/src/third_party/libdisasm/ia32_opcode_tables.h",
"breakpad/src/third_party/libdisasm/ia32_operand.c",
"breakpad/src/third_party/libdisasm/ia32_operand.h",
"breakpad/src/third_party/libdisasm/ia32_reg.c",
"breakpad/src/third_party/libdisasm/ia32_reg.h",
"breakpad/src/third_party/libdisasm/ia32_settings.c",
"breakpad/src/third_party/libdisasm/ia32_settings.h",
"breakpad/src/third_party/libdisasm/libdis.h",
"breakpad/src/third_party/libdisasm/qword.h",
"breakpad/src/third_party/libdisasm/x86_disasm.c",
"breakpad/src/third_party/libdisasm/x86_format.c",
"breakpad/src/third_party/libdisasm/x86_imm.c",
"breakpad/src/third_party/libdisasm/x86_imm.h",
"breakpad/src/third_party/libdisasm/x86_insn.c",
"breakpad/src/third_party/libdisasm/x86_misc.c",
"breakpad/src/third_party/libdisasm/x86_operand_list.c",
"breakpad/src/third_party/libdisasm/x86_operand_list.h",
]
if (is_linux || is_chromeos) {
sources += [
"breakpad/src/common/linux/scoped_pipe.cc",
"breakpad/src/common/linux/scoped_pipe.h",
"breakpad/src/common/linux/scoped_tmpfile.cc",
"breakpad/src/common/linux/scoped_tmpfile.h",
]
}
configs -= [ "//build/config/compiler:chromium_code" ]
configs += [ "//build/config/compiler:no_chromium_code" ]
configs += default_breakpad_configs
}
fuzzer_test("minidump_fuzzer") {
sources = [
"breakpad/src/processor/exploitability.cc",
"breakpad/src/processor/minidump.cc",
"breakpad/src/processor/minidump_processor.cc",
"minidump_fuzzer.cc",
]
deps = [
":stackwalk_common",
"//base",
]
additional_configs = [ ":fuzzing_logging_severity_config" ]
include_dirs = [ "breakpad/src" ]
libfuzzer_options = [
# Suppress stdout from stackwalk_common, as it uses printf() directly.
"close_fd_mask=1",
"max_len=128000",
]
sources += [
"breakpad/src/processor/exploitability_linux.cc",
"breakpad/src/processor/exploitability_linux.h",
"breakpad/src/processor/exploitability_win.cc",
"breakpad/src/processor/exploitability_win.h",
"breakpad/src/processor/symbolic_constants_win.cc",
"breakpad/src/processor/symbolic_constants_win.h",
]
if (is_linux || is_chromeos) {
sources += [
"breakpad/src/processor/disassembler_objdump.cc",
"breakpad/src/processor/disassembler_objdump.h",
]
}
}
executable("microdump_stackwalk") {
sources = [
"breakpad/src/processor/microdump.cc",
"breakpad/src/processor/microdump_processor.cc",
"breakpad/src/processor/microdump_stackwalk.cc",
]
deps = [ ":stackwalk_common" ]
configs -= [ "//build/config/compiler:chromium_code" ]
configs += [ "//build/config/compiler:no_chromium_code" ]
configs += default_breakpad_configs
}
executable("minidump_stackwalk") {
sources = [
"breakpad/src/processor/exploitability.cc",
"breakpad/src/processor/minidump.cc",
"breakpad/src/processor/minidump_processor.cc",
"breakpad/src/processor/minidump_stackwalk.cc",
]
deps = [ ":stackwalk_common" ]
configs -= [ "//build/config/compiler:chromium_code" ]
configs += [ "//build/config/compiler:no_chromium_code" ]
configs += default_breakpad_configs
sources += [
"breakpad/src/processor/exploitability_linux.cc",
"breakpad/src/processor/exploitability_linux.h",
"breakpad/src/processor/exploitability_win.cc",
"breakpad/src/processor/exploitability_win.h",
"breakpad/src/processor/symbolic_constants_win.cc",
"breakpad/src/processor/symbolic_constants_win.h",
]
if (is_linux || is_chromeos) {
sources += [
"breakpad/src/processor/disassembler_objdump.cc",
"breakpad/src/processor/disassembler_objdump.h",
]
}
}
executable("minidump_dump") {
sources = [
"breakpad/src/common/path_helper.cc",
"breakpad/src/common/path_helper.h",
"breakpad/src/common/scoped_ptr.h",
"breakpad/src/processor/basic_code_module.h",
"breakpad/src/processor/basic_code_modules.cc",
"breakpad/src/processor/basic_code_modules.h",
"breakpad/src/processor/convert_old_arm64_context.cc",
"breakpad/src/processor/convert_old_arm64_context.h",
"breakpad/src/processor/dump_context.cc",
"breakpad/src/processor/dump_object.cc",
"breakpad/src/processor/logging.cc",
"breakpad/src/processor/logging.h",
"breakpad/src/processor/minidump.cc",
"breakpad/src/processor/minidump_dump.cc",
"breakpad/src/processor/pathname_stripper.cc",
"breakpad/src/processor/pathname_stripper.h",
"breakpad/src/processor/proc_maps_linux.cc",
]
configs += [ ":tools_config" ]
# There are some warnings in this code.
configs -= [ "//build/config/compiler:chromium_code" ]
configs += [ "//build/config/compiler:no_chromium_code" ]
}
} else if (current_toolchain == default_toolchain) {
# The default toolchain builds the system-allocator binaries, which are
# placed in the output dir of the default toolchain.
copy_exe("microdump_stackwalk") {
has_exe_suffix = _tests_launcher_toolchain_has_exe_suffix
target = ":$target_name($_tests_launcher_toolchain)"
}
copy_exe("minidump_stackwalk") {
has_exe_suffix = _tests_launcher_toolchain_has_exe_suffix
target = ":$target_name($_tests_launcher_toolchain)"
}
copy_exe("minidump_dump") {
has_exe_suffix = _tests_launcher_toolchain_has_exe_suffix
target = ":$target_name($_tests_launcher_toolchain)"
}
copy_exe("minidump_fuzzer") {
testonly = true
fuzzer = true
has_exe_suffix = _tests_launcher_toolchain_has_exe_suffix
target = ":$target_name($_tests_launcher_toolchain)"
}
}
}
# Mac --------------------------------------------------------------------------
if (is_mac) {
if (current_toolchain == host_system_allocator_toolchain ||
current_toolchain == default_system_allocator_toolchain) {
source_set("common") {
sources = [
"breakpad/src/common/dwarf/bytereader.cc",
"breakpad/src/common/dwarf/dwarf2diehandler.cc",
"breakpad/src/common/dwarf/dwarf2reader.cc",
"breakpad/src/common/dwarf/elf_reader.cc",
"breakpad/src/common/dwarf/elf_reader.h",
"breakpad/src/common/dwarf_cfi_to_module.cc",
"breakpad/src/common/dwarf_cu_to_module.cc",
"breakpad/src/common/dwarf_line_to_module.cc",
"breakpad/src/common/dwarf_range_list_handler.cc",
"breakpad/src/common/dwarf_range_list_handler.h",
"breakpad/src/common/language.cc",
"breakpad/src/common/mac/arch_utilities.cc",
"breakpad/src/common/mac/arch_utilities.h",
"breakpad/src/common/mac/dump_syms.cc",
"breakpad/src/common/mac/file_id.cc",
"breakpad/src/common/mac/macho_id.cc",
"breakpad/src/common/mac/macho_reader.cc",
"breakpad/src/common/mac/macho_utilities.cc",
"breakpad/src/common/mac/macho_walker.cc",
"breakpad/src/common/md5.cc",
"breakpad/src/common/memory_range.h",
"breakpad/src/common/module.cc",
"breakpad/src/common/path_helper.cc",
"breakpad/src/common/path_helper.h",
"breakpad/src/common/scoped_ptr.h",
"breakpad/src/common/stabs_reader.cc",
"breakpad/src/common/stabs_to_module.cc",
]
include_dirs = [ "breakpad/src/common/mac" ]
configs += [ ":internal_config" ]
# The DWARF utilities require -funsigned-char.
cflags = [ "-funsigned-char" ]
# dwarf2reader.cc uses dynamic_cast.
configs -= [ "//build/config/compiler:no_rtti" ]
configs += [ "//build/config/compiler:rtti" ]
configs -= [ "//build/config/compiler:chromium_code" ]
configs += [ "//build/config/compiler:no_chromium_code" ]
# For breakpad/src/common/stabs_reader.h.
defines = [ "HAVE_MACH_O_NLIST_H" ]
if (enable_rust_crash) {
deps = [ "//third_party/rust/rustc_demangle_capi/v0_1:lib" ]
defines += [ "HAVE_RUSTC_DEMANGLE" ]
include_dirs += [ "//third_party/rust/chromium_crates_io/vendor/rustc-demangle-capi-0.1.0/include" ]
sources += [ "//third_party/rust/chromium_crates_io/vendor/rustc-demangle-capi-0.1.0/include/rustc_demangle.h" ]
}
}
test("breakpad_unittests") {
sources = [ "breakpad/src/common/module_unittest.cc" ]
deps = [
":common",
"//testing/gmock",
"//testing/gtest",
"//testing/gtest:gtest_main",
]
include_dirs = [
"breakpad/src",
"chromium", # Use our copy of breakpad_googletest_includes.h
".",
]
}
executable("dump_syms") {
sources = [ "breakpad/src/tools/mac/dump_syms/dump_syms_tool.cc" ]
configs -= [ "//build/config/compiler:chromium_code" ]
configs += [ "//build/config/compiler:no_chromium_code" ]
configs += [ ":internal_config" ]
frameworks = [ "Foundation.framework" ]
deps = [ ":common" ]
}
executable("symupload") {
sources = [
"breakpad/src/common/mac/HTTPGetRequest.m",
"breakpad/src/common/mac/HTTPMultipartUpload.m",
"breakpad/src/common/mac/HTTPPutRequest.m",
"breakpad/src/common/mac/HTTPRequest.m",
"breakpad/src/common/mac/HTTPSimplePostRequest.m",
"breakpad/src/common/mac/SymbolCollectorClient.m",
"breakpad/src/common/mac/encoding_util.m",
"breakpad/src/tools/mac/symupload/symupload.mm",
]
include_dirs = [ "breakpad/src/common/mac" ]
configs += [ ":internal_config" ]
frameworks = [ "Foundation.framework" ]
configs -= [ "//build/config/compiler:chromium_code" ]
configs += [ "//build/config/compiler:no_chromium_code" ]
# Do not compile with ARC because Breakpad code is not compatible with
# being compiled with ARC.
configs -= [ "//build/config/compiler:enable_arc" ]
deps = [ ":common" ]
}
} else if (current_toolchain == default_toolchain) {
# The default toolchain builds the system-allocator binaries, which are
# placed in the output dir of the default toolchain.
copy_exe("dump_syms") {
has_exe_suffix = _tests_launcher_toolchain_has_exe_suffix
target = ":$target_name($_tests_launcher_toolchain)"
}
copy_exe("symupload") {
has_exe_suffix = _symupload_toolchain_has_exe_suffix
target = ":$target_name($_symupload_toolchain)"
}
copy_exe("breakpad_unittests") {
testonly = true
has_exe_suffix = _tests_launcher_toolchain_has_exe_suffix
target = ":$target_name($_tests_launcher_toolchain)"
}
} else if (current_toolchain == host_toolchain && current_cpu == "arm64") {
# TODO(crbug.com/349268750): This alias exists because the official Mac
# arm64 builders (which cross-build the x64 binaries) use the hardcoded
# path of the `$host_toolchain/symupload` to build and run the symupload
# binary. And the same recipes are used on all branches!! So we would break
# the stable branch builders by changing the recipe to build and run the
# binary from the root_build_dir.
#
# Once this code is in stable, we can land the following CLs to change how
# symupload is built and run on Mac arm64 official builders, and then this
# alias can be removed.
# Build: https://chrome-internal-review.googlesource.com/c/chrome/src-internal/+/7430844
# Run: https://chrome-internal-review.googlesource.com/c/chrome/tools/release/scripts/+/7430843
copy_exe("symupload") {
has_exe_suffix = _symupload_toolchain_has_exe_suffix
target = ":$target_name($_symupload_toolchain)"
}
}
action("gen_symbol_tools_packager") {
testonly = true
script = "scripts/gen_symbol_tools_packager.py"
_go_source_dir = "breakpad/src/tools/mac/upload_system_symbols"
_extra_sources = [
"breakpad/src/tools/mac/upload_system_symbols/upload_system_symbols.sh",
]
sources = [ "scripts/package_symbol_tools.py.template" ] +
[ _go_source_dir ] + _extra_sources
outputs = [ "$root_out_dir/package_symbol_tools.py" ]
deps = [
":dump_syms",
":symupload",
"//tools/mac:dsc_extractor",
]
args = [
"-a",
target_cpu,
"-t",
rebase_path("scripts/package_symbol_tools.py.template",
root_build_dir),
"-go_src",
rebase_path(_go_source_dir, root_build_dir),
"-extra",
] + rebase_path(_extra_sources, root_build_dir)
}
}
if (is_ios) {
if (current_toolchain == default_toolchain) {
copy_exe("dump_syms") {
has_exe_suffix = _tests_launcher_toolchain_has_exe_suffix
target = ":$target_name($_tests_launcher_toolchain)"
}
copy_exe("symupload") {
has_exe_suffix = _symupload_toolchain_has_exe_suffix
target = ":$target_name($_symupload_toolchain)"
}
}
}
if (is_linux || is_chromeos || is_android) {
if (current_toolchain == host_system_allocator_toolchain ||
current_toolchain == default_system_allocator_toolchain) {
executable("symupload") {
sources = [
"breakpad/src/common/linux/http_upload.cc",
"breakpad/src/common/linux/http_upload.h",
"breakpad/src/common/linux/libcurl_wrapper.cc",
"breakpad/src/common/linux/libcurl_wrapper.h",
"breakpad/src/common/linux/symbol_collector_client.cc",
"breakpad/src/common/linux/symbol_collector_client.h",
"breakpad/src/common/linux/symbol_upload.cc",
"breakpad/src/common/linux/symbol_upload.h",
"breakpad/src/common/path_helper.cc",
"breakpad/src/common/path_helper.h",
"breakpad/src/common/scoped_ptr.h",
"breakpad/src/tools/linux/symupload/sym_upload.cc",
]
include_dirs = [
"breakpad/src",
"breakpad/src/third_party",
]
configs += [ ":tools_config" ]
libs = [ "dl" ]
}
# dump_syms is a host tool, so only compile it for the host system.
executable("dump_syms") {
sources = [
"breakpad/src/common/dwarf/bytereader.cc",
"breakpad/src/common/dwarf/dwarf2diehandler.cc",
"breakpad/src/common/dwarf/dwarf2reader.cc",
"breakpad/src/common/dwarf/elf_reader.cc",
"breakpad/src/common/dwarf/elf_reader.h",
"breakpad/src/common/dwarf_cfi_to_module.cc",
"breakpad/src/common/dwarf_cfi_to_module.h",
"breakpad/src/common/dwarf_cu_to_module.cc",
"breakpad/src/common/dwarf_cu_to_module.h",
"breakpad/src/common/dwarf_line_to_module.cc",
"breakpad/src/common/dwarf_line_to_module.h",
"breakpad/src/common/dwarf_range_list_handler.cc",
"breakpad/src/common/dwarf_range_list_handler.h",
"breakpad/src/common/language.cc",
"breakpad/src/common/language.h",
"breakpad/src/common/linux/crc32.cc",
"breakpad/src/common/linux/crc32.h",
"breakpad/src/common/linux/dump_symbols.cc",
"breakpad/src/common/linux/dump_symbols.h",
"breakpad/src/common/linux/elf_symbols_to_module.cc",
"breakpad/src/common/linux/elf_symbols_to_module.h",
"breakpad/src/common/linux/elfutils.cc",
"breakpad/src/common/linux/elfutils.h",
"breakpad/src/common/linux/file_id.cc",
"breakpad/src/common/linux/file_id.h",
"breakpad/src/common/linux/guid_creator.h",
"breakpad/src/common/linux/linux_libc_support.cc",
"breakpad/src/common/linux/linux_libc_support.h",
"breakpad/src/common/linux/memory_mapped_file.cc",
"breakpad/src/common/linux/memory_mapped_file.h",
"breakpad/src/common/memory_allocator.h",
"breakpad/src/common/memory_range.h",
"breakpad/src/common/module.cc",
"breakpad/src/common/module.h",
"breakpad/src/common/path_helper.cc",
"breakpad/src/common/path_helper.h",
"breakpad/src/common/scoped_ptr.h",
"breakpad/src/common/stabs_reader.cc",
"breakpad/src/common/stabs_reader.h",
"breakpad/src/common/stabs_to_module.cc",
"breakpad/src/common/stabs_to_module.h",
"breakpad/src/tools/linux/dump_syms/dump_syms.cc",
]
# There are some warnings in this code.
configs -= [ "//build/config/compiler:chromium_code" ]
configs += [ "//build/config/compiler:no_chromium_code" ]
# dwarf2reader.cc uses dynamic_cast. Because we don't typically
# don't support RTTI, we enable it for this single target. Since
# dump_syms doesn't share any object files with anything else,
# this doesn't end up polluting Chrome itself.
configs -= [ "//build/config/compiler:no_rtti" ]
configs += [ "//build/config/compiler:rtti" ]
# Breakpad rev 583 introduced this flag.
# Using this define, stabs_reader.h will include a.out.h to
# build on Linux.
defines = [ "HAVE_A_OUT_H" ]
include_dirs = [ "breakpad/src" ]
if (enable_rust_crash) {
deps = [ "//third_party/rust/rustc_demangle_capi/v0_1:lib" ]
defines += [ "HAVE_RUSTC_DEMANGLE" ]
include_dirs += [ "//third_party/rust/chromium_crates_io/vendor/rustc-demangle-capi-0.1.0/include" ]
sources += [ "//third_party/rust/chromium_crates_io/vendor/rustc-demangle-capi-0.1.0/include/rustc_demangle.h" ]
}
libs = [ "z" ]
}
} else if (current_toolchain == default_toolchain) {
# The default toolchain builds the system-allocator binaries, which are
# placed in the output dir of the default toolchain.
copy_exe("dump_syms") {
has_exe_suffix = _tests_launcher_toolchain_has_exe_suffix
target = ":$target_name($_tests_launcher_toolchain)"
}
copy_exe("symupload") {
has_exe_suffix = _symupload_toolchain_has_exe_suffix
target = ":$target_name($_symupload_toolchain)"
}
}
static_library("client") {
sources = [
"breakpad/src/client/linux/crash_generation/crash_generation_client.cc",
"breakpad/src/client/linux/crash_generation/crash_generation_client.h",
"breakpad/src/client/linux/dump_writer_common/mapping_info.h",
"breakpad/src/client/linux/dump_writer_common/thread_info.cc",
"breakpad/src/client/linux/dump_writer_common/thread_info.h",
"breakpad/src/client/linux/dump_writer_common/ucontext_reader.cc",
"breakpad/src/client/linux/dump_writer_common/ucontext_reader.h",
"breakpad/src/client/linux/handler/exception_handler.cc",
"breakpad/src/client/linux/handler/exception_handler.h",
"breakpad/src/client/linux/handler/minidump_descriptor.cc",
"breakpad/src/client/linux/handler/minidump_descriptor.h",
"breakpad/src/client/linux/log/log.cc",
"breakpad/src/client/linux/log/log.h",
"breakpad/src/client/linux/microdump_writer/microdump_writer.cc",
"breakpad/src/client/linux/microdump_writer/microdump_writer.h",
"breakpad/src/client/linux/minidump_writer/cpu_set.h",
"breakpad/src/client/linux/minidump_writer/directory_reader.h",
"breakpad/src/client/linux/minidump_writer/line_reader.h",
"breakpad/src/client/linux/minidump_writer/linux_core_dumper.cc",
"breakpad/src/client/linux/minidump_writer/linux_core_dumper.h",
"breakpad/src/client/linux/minidump_writer/linux_dumper.cc",
"breakpad/src/client/linux/minidump_writer/linux_dumper.h",
"breakpad/src/client/linux/minidump_writer/linux_ptrace_dumper.cc",
"breakpad/src/client/linux/minidump_writer/linux_ptrace_dumper.h",
"breakpad/src/client/linux/minidump_writer/minidump_writer.cc",
"breakpad/src/client/linux/minidump_writer/minidump_writer.h",
"breakpad/src/client/linux/minidump_writer/pe_file.cc",
"breakpad/src/client/linux/minidump_writer/pe_file.h",
"breakpad/src/client/linux/minidump_writer/pe_structs.h",
"breakpad/src/client/linux/minidump_writer/proc_cpuinfo_reader.h",
"breakpad/src/client/minidump_file_writer-inl.h",
"breakpad/src/client/minidump_file_writer.cc",
"breakpad/src/client/minidump_file_writer.h",
"breakpad/src/common/convert_UTF.cc",
"breakpad/src/common/convert_UTF.h",
"breakpad/src/common/linux/breakpad_getcontext.S",
"breakpad/src/common/linux/elf_core_dump.cc",
"breakpad/src/common/linux/elf_core_dump.h",
"breakpad/src/common/linux/elfutils.cc",
"breakpad/src/common/linux/elfutils.h",
"breakpad/src/common/linux/file_id.cc",
"breakpad/src/common/linux/file_id.h",
"breakpad/src/common/linux/google_crashdump_uploader.cc",
"breakpad/src/common/linux/google_crashdump_uploader.h",
"breakpad/src/common/linux/guid_creator.cc",
"breakpad/src/common/linux/guid_creator.h",
"breakpad/src/common/linux/libcurl_wrapper.cc",
"breakpad/src/common/linux/libcurl_wrapper.h",
"breakpad/src/common/linux/linux_libc_support.cc",
"breakpad/src/common/linux/linux_libc_support.h",
"breakpad/src/common/linux/memory_mapped_file.cc",
"breakpad/src/common/linux/memory_mapped_file.h",
"breakpad/src/common/linux/safe_readlink.cc",
"breakpad/src/common/linux/safe_readlink.h",
"breakpad/src/common/memory_allocator.h",
"breakpad/src/common/memory_range.h",
"breakpad/src/common/scoped_ptr.h",
"breakpad/src/common/simple_string_dictionary.cc",
"breakpad/src/common/simple_string_dictionary.h",
"breakpad/src/common/string_conversion.cc",
"breakpad/src/common/string_conversion.h",
]
configs -= [ "//build/config/compiler:chromium_code" ]
configs += [ "//build/config/compiler:no_chromium_code" ]
public_configs = [ ":client_config" ]
if (current_cpu == "arm" && is_chromeos_ash) {
# Avoid running out of registers in
# linux_syscall_support.h:sys_clone()'s inline assembly.
cflags = [ "-marm" ]
}
libs = [ "dl" ]
include_dirs = [
".",
"breakpad/src",
"breakpad/src/client",
"breakpad/src/third_party/linux/include",
]
}
static_library("processor_support") {
sources = [
"breakpad/src/common/scoped_ptr.h",
"breakpad/src/processor/basic_code_module.h",
"breakpad/src/processor/basic_code_modules.cc",
"breakpad/src/processor/basic_code_modules.h",
"breakpad/src/processor/convert_old_arm64_context.cc",
"breakpad/src/processor/convert_old_arm64_context.h",
"breakpad/src/processor/dump_context.cc",
"breakpad/src/processor/dump_object.cc",
"breakpad/src/processor/logging.cc",
"breakpad/src/processor/logging.h",
"breakpad/src/processor/minidump.cc",
"breakpad/src/processor/pathname_stripper.cc",
"breakpad/src/processor/pathname_stripper.h",
"breakpad/src/processor/proc_maps_linux.cc",
]
include_dirs = [
"breakpad/src",
"breakpad/src/client",
"breakpad/src/third_party/linux/include",
".",
]
# There are some warnings in this code.
configs -= [ "//build/config/compiler:chromium_code" ]
configs += [ "//build/config/compiler:no_chromium_code" ]
}
test("breakpad_unittests") {
sources = [
"breakpad/src/client/linux/handler/exception_handler_unittest.cc",
"breakpad/src/client/linux/minidump_writer/cpu_set_unittest.cc",
"breakpad/src/client/linux/minidump_writer/directory_reader_unittest.cc",
"breakpad/src/client/linux/minidump_writer/line_reader_unittest.cc",
"breakpad/src/client/linux/minidump_writer/linux_core_dumper_unittest.cc",
"breakpad/src/client/linux/minidump_writer/linux_ptrace_dumper_unittest.cc",
"breakpad/src/client/linux/minidump_writer/minidump_writer_unittest.cc",
"breakpad/src/client/linux/minidump_writer/minidump_writer_unittest_utils.cc",
"breakpad/src/client/linux/minidump_writer/proc_cpuinfo_reader_unittest.cc",
"breakpad/src/common/linux/breakpad_getcontext_unittest.cc",
"breakpad/src/common/linux/elf_core_dump_unittest.cc",
"breakpad/src/common/linux/file_id_unittest.cc",
"breakpad/src/common/linux/linux_libc_support_unittest.cc",
"breakpad/src/common/linux/scoped_pipe.cc",
"breakpad/src/common/linux/scoped_pipe.h",
"breakpad/src/common/linux/scoped_pipe_unittest.cc",
"breakpad/src/common/linux/scoped_tmpfile.cc",
"breakpad/src/common/linux/scoped_tmpfile.h",
"breakpad/src/common/linux/scoped_tmpfile_unittest.cc",
"breakpad/src/common/linux/synth_elf.cc",
"breakpad/src/common/linux/tests/crash_generator.cc",
"breakpad/src/common/linux/tests/crash_generator.h",
"breakpad/src/common/memory_allocator_unittest.cc",
"breakpad/src/common/memory_range.h",
"breakpad/src/common/simple_string_dictionary_unittest.cc",
"breakpad/src/common/test_assembler.cc",
"breakpad/src/common/tests/file_utils.cc",
"breakpad/src/common/tests/file_utils.h",
"breakpad/src/tools/linux/md2core/minidump_memory_range.h",
"breakpad/src/tools/linux/md2core/minidump_memory_range_unittest.cc",
"chromium/breakpad_googletest_includes.h",
]
deps = [
":client",
":processor_support",
"//testing/gmock",
"//testing/gtest",
"//testing/gtest:gtest_main",
]
data_deps = [ ":linux_dumper_unittest_helper" ]
include_dirs = [
"chromium", # Use our copy of breakpad_googletest_includes.h
".",
]
# There are some warnings in this code.
configs -= [ "//build/config/compiler:chromium_code" ]
configs += [
":client_config",
"//build/config/compiler:no_chromium_code",
]
if (is_clang) {
# See https://crbug.com/138571#c18
cflags = [ "-Wno-unused-value" ]
}
if (is_android) {
use_raw_android_executable = true
libs = [ "log" ]
extra_dist_files = [ "$root_out_dir/linux_dumper_unittest_helper" ]
}
# Add the breakpad unittest config at the end to override all configs.
configs += [ ":breakpad_unittest_config" ]
}
if (current_toolchain == host_system_allocator_toolchain ||
current_toolchain == default_system_allocator_toolchain) {
executable("linux_dumper_unittest_helper") {
testonly = true
sources = [ "breakpad/src/client/linux/minidump_writer/linux_dumper_unittest_helper.cc" ]
deps = [ ":processor_support" ]
configs += [ ":client_config" ]
if (is_component_build) {
ldflags = [ "-Wl,-rpath,\$ORIGIN" ]
}
}
executable("generate_test_dump") {
testonly = true
sources = [ "linux/generate-test-dump.cc" ]
# This file has an unused variable warning.
configs -= [ "//build/config/compiler:chromium_code" ]
configs += [
":client_config",
"//build/config/compiler:no_chromium_code",
]
deps = [ ":client" ]
if (is_android) {
libs = [ "log" ]
}
}
executable("minidump-2-core") {
sources = [
"breakpad/src/common/path_helper.cc",
"breakpad/src/common/path_helper.h",
"breakpad/src/tools/linux/md2core/minidump-2-core.cc",
"breakpad/src/tools/linux/md2core/minidump_memory_range.h",
]
include_dirs = [ "breakpad/src" ]
deps = [ ":client" ]
}
executable("core-2-minidump") {
sources = [
"breakpad/src/common/path_helper.cc",
"breakpad/src/common/path_helper.h",
"breakpad/src/tools/linux/core2md/core2md.cc",
]
deps = [ ":client" ]
include_dirs = [ "breakpad/src" ]
}
} else if (current_toolchain == default_toolchain) {
# The default toolchain builds the system-allocator binaries, which are
# linked from the output dir of the default toolchain.
# Most breakpad binaries are only built for the `_tests_launcher_toolchain`.
# This is different, as it's used _inside_ a test, and thus needs to be
# built for the target machine, not the test-launcher machine.
copy_exe("linux_dumper_unittest_helper") {
testonly = true
has_exe_suffix = false
target = ":$target_name($default_system_allocator_toolchain)"
}
copy_exe("generate_test_dump") {
testonly = true
has_exe_suffix = _tests_launcher_toolchain_has_exe_suffix
target = ":$target_name($_tests_launcher_toolchain)"
}
copy_exe("minidump-2-core") {
has_exe_suffix = _tests_launcher_toolchain_has_exe_suffix
target = ":$target_name($_tests_launcher_toolchain)"
}
copy_exe("core-2-minidump") {
has_exe_suffix = _tests_launcher_toolchain_has_exe_suffix
target = ":$target_name($_tests_launcher_toolchain)"
}
}
}
if (is_win) {
if (current_toolchain == host_system_allocator_toolchain ||
current_toolchain == default_system_allocator_toolchain) {
static_library("common_windows") {
include_dirs = [
"$visual_studio_path/DIA SDK/include",
"breakpad/src",
]
sources = [
"breakpad/src/common/windows/dia_util.cc",
"breakpad/src/common/windows/dia_util.h",
"breakpad/src/common/windows/guid_string.cc",
"breakpad/src/common/windows/guid_string.h",
"breakpad/src/common/windows/http_upload.cc",
"breakpad/src/common/windows/http_upload.h",
"breakpad/src/common/windows/module_info.h",
"breakpad/src/common/windows/omap.cc",
"breakpad/src/common/windows/omap.h",
"breakpad/src/common/windows/omap_internal.h",
"breakpad/src/common/windows/pdb_source_line_writer.cc",
"breakpad/src/common/windows/pdb_source_line_writer.h",
"breakpad/src/common/windows/pe_source_line_writer.cc",
"breakpad/src/common/windows/pe_source_line_writer.h",
"breakpad/src/common/windows/pe_util.cc",
"breakpad/src/common/windows/pe_util.h",
"breakpad/src/common/windows/string_utils-inl.h",
"breakpad/src/common/windows/string_utils.cc",
"breakpad/src/common/windows/sym_upload_v2_protocol.cc",
"breakpad/src/common/windows/sym_upload_v2_protocol.h",
"breakpad/src/common/windows/symbol_collector_client.cc",
"breakpad/src/common/windows/symbol_collector_client.h",
]
defines = [ "HAVE_ZLIB" ]
deps = [ "//third_party/zlib" ]
}
static_library("ms_symbol_server_converter") {
include_dirs = [
"$visual_studio_path/DIA SDK/include",
"breakpad/src",
]
sources = [
"breakpad/src/tools/windows/converter/ms_symbol_server_converter.cc",
]
deps = [ "//third_party/breakpad:common_windows" ]
libs = [ "Pathcch.lib" ]
}
executable("dump_syms") {
# TODO(scottmg) using this with VS2015 may break the crash server.
# https://crbug.com/696671
include_dirs = [
"$visual_studio_path/DIA SDK/include",
"breakpad/src",
]
sources = [ "breakpad/src/tools/windows/dump_syms/dump_syms.cc" ]
deps = [ "//third_party/breakpad:common_windows" ]
lib_dirs = []
if (current_cpu == "x64") {
lib_dirs += [ "$visual_studio_path/DIA SDK/lib/amd64" ]
} else {
lib_dirs += [ "$visual_studio_path/DIA SDK/lib" ]
}
libs = [
"diaguids.lib",
"imagehlp.lib",
]
if (is_clang) {
# clang complains about microsoft-specific goto extensions. Instead of
# rewriting decade-old, goto-ridden code, disable the warning.
cflags = [ "-Wno-microsoft-goto" ]
}
}
executable("symupload") {
include_dirs = [
"$visual_studio_path/DIA SDK/include",
"breakpad/src",
]
sources = [ "breakpad/src/tools/windows/symupload/symupload.cc" ]
deps = [ "//third_party/breakpad:common_windows" ]
ldflags = [ "/LARGEADDRESSAWARE" ]
lib_dirs = []
if (current_cpu == "x64") {
lib_dirs += [ "$visual_studio_path/DIA SDK/lib/amd64" ]
} else {
lib_dirs += [ "$visual_studio_path/DIA SDK/lib" ]
}
libs = [
"diaguids.lib",
"imagehlp.lib",
]
if (is_clang) {
# clang complains about microsoft-specific goto extensions. Instead of
# rewriting decade-old, goto-ridden code, disable the warning.
cflags = [ "-Wno-microsoft-goto" ]
}
}
executable("google_converter") {
include_dirs = [
"$visual_studio_path/DIA SDK/include",
"breakpad/src",
]
sources = [
"breakpad/src/tools/windows/converter_exe/converter.cc",
"breakpad/src/tools/windows/converter_exe/escaping.cc",
"breakpad/src/tools/windows/converter_exe/escaping.h",
"breakpad/src/tools/windows/converter_exe/http_download.cc",
"breakpad/src/tools/windows/converter_exe/tokenizer.cc",
"breakpad/src/tools/windows/converter_exe/winhttp_client.cc",
"breakpad/src/tools/windows/converter_exe/wininet_client.cc",
]
deps = [
"//third_party/breakpad:common_windows",
"//third_party/breakpad:ms_symbol_server_converter",
]
ldflags = [
"/DELAYLOAD:dbghelp.dll",
"/DELAYLOAD:dwmapi.dll",
"/DELAYLOAD:uxtheme.dll",
]
lib_dirs = []
if (current_cpu == "x64") {
lib_dirs += [ "$visual_studio_path/DIA SDK/lib/amd64" ]
} else {
lib_dirs += [ "$visual_studio_path/DIA SDK/lib" ]
}
libs = [
"diaguids.lib",
"imagehlp.lib",
]
if (is_clang) {
# clang complains about microsoft-specific goto extensions. Instead of
# rewriting decade-old, goto-ridden code, disable the warning.
cflags = [ "-Wno-microsoft-goto" ]
}
}
} else if (current_toolchain == default_toolchain) {
# The default toolchain builds the system-allocator binaries, which are
# placed in the output dir of the default toolchain.
if (_include_google_converter) {
copy_exe("google_converter") {
has_exe_suffix = _tests_launcher_toolchain_has_exe_suffix
target = ":$target_name($_tests_launcher_toolchain)"
}
}
copy_exe("symupload") {
has_exe_suffix = _symupload_toolchain_has_exe_suffix
target = ":$target_name($_symupload_toolchain)"
}
copy_exe("dump_syms") {
has_exe_suffix = _tests_launcher_toolchain_has_exe_suffix
target = ":$target_name($_tests_launcher_toolchain)"
}
}
}
if (is_ios) {
static_library("client") {
sources = [
"breakpad/src/client/ios/Breakpad.h",
"breakpad/src/client/ios/Breakpad.mm",
"breakpad/src/client/ios/BreakpadController.h",
"breakpad/src/client/ios/BreakpadController.mm",
"breakpad/src/client/ios/handler/ios_exception_minidump_generator.h",
"breakpad/src/client/ios/handler/ios_exception_minidump_generator.mm",
"breakpad/src/client/mac/crash_generation/ConfigFile.h",
"breakpad/src/client/mac/crash_generation/ConfigFile.mm",
"breakpad/src/client/mac/handler/breakpad_nlist_64.cc",
"breakpad/src/client/mac/handler/breakpad_nlist_64.h",
"breakpad/src/client/mac/handler/dynamic_images.cc",
"breakpad/src/client/mac/handler/dynamic_images.h",
"breakpad/src/client/mac/handler/exception_handler.cc",
"breakpad/src/client/mac/handler/exception_handler.h",
"breakpad/src/client/mac/handler/minidump_generator.cc",
"breakpad/src/client/mac/handler/minidump_generator.h",
"breakpad/src/client/mac/handler/protected_memory_allocator.cc",
"breakpad/src/client/mac/handler/protected_memory_allocator.h",
"breakpad/src/client/mac/sender/uploader.h",
"breakpad/src/client/mac/sender/uploader.mm",
"breakpad/src/client/minidump_file_writer-inl.h",
"breakpad/src/client/minidump_file_writer.cc",
"breakpad/src/client/minidump_file_writer.h",
"breakpad/src/common/convert_UTF.cc",
"breakpad/src/common/convert_UTF.h",
"breakpad/src/common/long_string_dictionary.cc",
"breakpad/src/common/mac/HTTPMultipartUpload.m",
"breakpad/src/common/mac/HTTPRequest.m",
"breakpad/src/common/mac/arch_utilities.cc",
"breakpad/src/common/mac/arch_utilities.h",
"breakpad/src/common/mac/encoding_util.m",
"breakpad/src/common/mac/file_id.cc",
"breakpad/src/common/mac/file_id.h",
"breakpad/src/common/mac/macho_id.cc",
"breakpad/src/common/mac/macho_id.h",
"breakpad/src/common/mac/macho_utilities.cc",
"breakpad/src/common/mac/macho_utilities.h",
"breakpad/src/common/mac/macho_walker.cc",
"breakpad/src/common/mac/macho_walker.h",
"breakpad/src/common/mac/string_utilities.cc",
"breakpad/src/common/mac/string_utilities.h",
"breakpad/src/common/md5.cc",
"breakpad/src/common/md5.h",
"breakpad/src/common/simple_string_dictionary.cc",
"breakpad/src/common/simple_string_dictionary.h",
"breakpad/src/common/string_conversion.cc",
"breakpad/src/common/string_conversion.h",
"breakpad/src/google_breakpad/common/minidump_format.h",
]
include_dirs = [
"breakpad/src",
"breakpad/src/client/mac/Framework",
"breakpad/src/common/mac",
]
public_configs = [ ":client_config" ]
# Do not compile with ARC because Breakpad code is not compatible with being
# compiled with ARC.
configs -= [ "//build/config/compiler:enable_arc" ]
if (is_clang) {
# See https://crbug.com/google-breakpad/675.
cflags = [ "-Wno-deprecated-declarations" ]
}
}
}
if (is_win) {
group("client") {
public_configs = [ ":client_config" ]
}
config("breakpad_handler_warnings") {
if (is_clang) {
# See https://crbug.com/google-breakpad/658.
cflags = [ "-Wno-reorder" ]
}
}
static_library("breakpad_handler") {
configs += [ ":handler_config" ]
if (is_win) {
public_configs = [ ":handler_config" ]
}
defines = [ "BREAKPAD_NO_TERMINATE_THREAD" ]
sources = [
"breakpad/src/client/windows/crash_generation/client_info.cc",
"breakpad/src/client/windows/crash_generation/client_info.h",
"breakpad/src/client/windows/crash_generation/crash_generation_client.cc",
"breakpad/src/client/windows/crash_generation/crash_generation_client.h",
"breakpad/src/client/windows/crash_generation/crash_generation_server.cc",
"breakpad/src/client/windows/crash_generation/crash_generation_server.h",
"breakpad/src/client/windows/crash_generation/minidump_generator.cc",
"breakpad/src/client/windows/crash_generation/minidump_generator.h",
"breakpad/src/client/windows/handler/exception_handler.cc",
"breakpad/src/client/windows/handler/exception_handler.h",
"breakpad/src/common/windows/guid_string.cc",
"breakpad/src/common/windows/guid_string.h",
"breakpad/src/common/windows/string_utils-inl.h",
"breakpad/src/google_breakpad/common/minidump_format.h",
]
configs += [ ":breakpad_handler_warnings" ]
}
source_set("breakpad_sender") {
sources = [
"breakpad/src/client/windows/sender/crash_report_sender.cc",
"breakpad/src/client/windows/sender/crash_report_sender.h",
"breakpad/src/common/windows/http_upload.cc",
"breakpad/src/common/windows/http_upload.h",
"breakpad/src/common/windows/string_utils-inl.h",
]
configs += [ ":sender_config" ]
public_configs = [ ":sender_config" ]
}
}