# Copyright 2014 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/config/chromeos/ui_mode.gni") import("//build/symlink.gni") import("//testing/libfuzzer/fuzzer_test.gni") import("//testing/test.gni") if (is_win) { import("//build/config/win/visual_studio_version.gni") } 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_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_toolchain) { # Contains the code shared by both {micro,mini}dump_stackwalk. static_library("stackwalk_common") { sources = [ "breakpad/src/common/path_helper.cc", "breakpad/src/common/path_helper.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_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", ] 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", ] } 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", ] } executable("minidump_dump") { sources = [ "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 { # Aliases for convenience. binary_symlink("microdump_stackwalk") { binary_label = ":$target_name($host_toolchain)" } binary_symlink("minidump_stackwalk") { binary_label = ":$target_name($host_toolchain)" } binary_symlink("minidump_dump") { binary_label = ":$target_name($host_toolchain)" } } } # Mac -------------------------------------------------------------------------- if (is_mac) { if (current_toolchain == host_toolchain) { 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_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/module.cc", "breakpad/src/common/path_helper.cc", "breakpad/src/common/path_helper.h", "breakpad/src/common/stabs_reader.cc", "breakpad/src/common/stabs_to_module.cc", "breakpad/src/tools/mac/dump_syms/dump_syms_tool.cc", ] # For breakpad/src/common/stabs_reader.h. defines = [ "HAVE_MACH_O_NLIST_H" ] include_dirs = [ "breakpad/src/common/mac" ] # The DWARF utilities require -funsigned-char. cflags = [ "-funsigned-char" ] configs += [ ":internal_config" ] configs -= [ "//build/config/compiler:chromium_code" ] configs += [ "//build/config/compiler:no_chromium_code" ] # dwarf2reader.cc uses dynamic_cast. configs -= [ "//build/config/compiler:no_rtti" ] configs += [ "//build/config/compiler:rtti" ] frameworks = [ "Foundation.framework" ] if (!is_debug) { # dump_syms crashes when built at -O1, -O2, and -O3. It does # not crash at -Os. To play it safe, dump_syms is always built # at -O0 until this can be sorted out. # https://crbug.com/google-breakpad/329 configs -= [ "//build/config/compiler:default_optimization" ] cflags += [ "-O0" ] } } 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.m", ] include_dirs = [ "breakpad/src/common/mac" ] frameworks = [ "Foundation.framework" ] configs -= [ "//build/config/compiler:chromium_code" ] configs += [ "//build/config/compiler:no_chromium_code" ] } } else { binary_symlink("dump_syms") { binary_label = ":$target_name($host_toolchain)" } binary_symlink("symupload") { binary_label = ":$target_name($host_toolchain)" } } } if (is_ios) { binary_symlink("dump_syms") { binary_label = ":$target_name($host_toolchain)" } binary_symlink("symupload") { binary_label = ":$target_name($host_toolchain)" } } if (is_mac) { static_library("utilities") { sources = [ "breakpad/src/client/mac/crash_generation/ConfigFile.mm", "breakpad/src/client/mac/handler/breakpad_nlist_64.cc", "breakpad/src/client/mac/handler/dynamic_images.cc", "breakpad/src/client/mac/handler/minidump_generator.cc", "breakpad/src/client/minidump_file_writer.cc", "breakpad/src/common/convert_UTF.cc", "breakpad/src/common/mac/MachIPC.mm", "breakpad/src/common/mac/arch_utilities.cc", "breakpad/src/common/mac/bootstrap_compat.cc", "breakpad/src/common/mac/file_id.cc", "breakpad/src/common/mac/launch_reporter.cc", "breakpad/src/common/mac/macho_id.cc", "breakpad/src/common/mac/macho_utilities.cc", "breakpad/src/common/mac/macho_walker.cc", "breakpad/src/common/mac/string_utilities.cc", "breakpad/src/common/md5.cc", "breakpad/src/common/simple_string_dictionary.cc", "breakpad/src/common/string_conversion.cc", ] configs += [ ":internal_config" ] # There are some warnings in this code. configs -= [ "//build/config/compiler:chromium_code" ] configs += [ "//build/config/compiler:no_chromium_code" ] } executable("crash_inspector") { sources = [ "breakpad/src/client/mac/crash_generation/Inspector.mm", "breakpad/src/client/mac/crash_generation/InspectorMain.mm", ] # TODO(GYP): 'mac_real_dsym': 1, include_dirs = [ "breakpad/src/client/apple/Framework", "breakpad/src/common/mac", "breakpad/src", ] frameworks = [ "CoreServices.framework", "Foundation.framework", ] deps = [ ":utilities" ] } # TODO(GYP) this target has some mac_bundle_resources stuff. # executable("crash_report_sender") { # } group("crash_report_sender") { } config("breakpad_config") { include_dirs = [ "breakpad/src/client/apple/Framework" ] } static_library("breakpad") { sources = [ "breakpad/src/client/mac/Framework/Breakpad.mm", "breakpad/src/client/mac/Framework/OnDemandServer.mm", "breakpad/src/client/mac/crash_generation/crash_generation_client.cc", "breakpad/src/client/mac/crash_generation/crash_generation_client.h", "breakpad/src/client/mac/handler/exception_handler.cc", "breakpad/src/client/mac/handler/protected_memory_allocator.cc", ] configs += [ ":internal_config" ] public_configs = [ ":breakpad_config" ] defines = [ "USE_PROTECTED_ALLOCATIONS=1" ] include_dirs = [ "breakpad/src/client/apple/Framework" ] # TODO(crbug.com/841631): Breakpad uses bootstrap_subset() and # bootstrap_create_server(), both of which are deprecated starting in 10.10. cflags = [ "-Wno-deprecated-declarations" ] deps = [ ":crash_inspector", ":crash_report_sender", ":utilities", ] } group("client") { public_configs = [ ":client_config" ] } } if (is_linux || is_chromeos || is_android) { if (current_toolchain == host_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/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/module.cc", "breakpad/src/common/module.h", "breakpad/src/common/path_helper.cc", "breakpad/src/common/path_helper.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" ] } } else { # Aliases for convenience. binary_symlink("dump_syms") { binary_label = ":dump_syms($host_toolchain)" } binary_symlink("symupload") { binary_label = ":symupload($host_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/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/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_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_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/synth_elf.cc", "breakpad/src/common/linux/tests/auto_testfile.h", "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", "linux/breakpad_googletest_includes.h", ] deps = [ ":client", ":processor_support", "//testing/gmock", "//testing/gtest", "//testing/gtest:gtest_main", ] data_deps = [ ":linux_dumper_unittest_helper", "//testing/buildbot/filters:breakpad_unittests_filters", ] include_dirs = [ "linux", # 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" ] } 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", ] include_dirs = [ "breakpad/src" ] deps = [ ":client" ] } executable("core-2-minidump") { sources = [ "breakpad/src/tools/linux/core2md/core2md.cc" ] deps = [ ":client" ] include_dirs = [ "breakpad/src" ] } } if (is_win) { # Force a native symupload, since Chrome tries to be "helpful" and not really # differentiate target vs. host for x86/x64 builds. # # Normally, this would just use the (current_toolchain == host_toolchain) # condition, which would cause these targets to only be compiled for the host # CPU (i.e. to only build "native" binaries), but the Chrome Windows build # will "always use the target CPU for host builds for x86/x64": # https://crrev.com/3258ed4d9d755a3564d98bef8707bbdb5f8a7974/config/BUILDCONFIG.gn#199 # This means that host_toolchain will be x86 (32-bit) if the target is x86, # even when the host is actually x64 (64-bit), which causes this to create # 32-bit binaries, despite wanting native, 64-bit binaries. # # Adding the second condition enables this block for the "true" host # toolchain as well, which allows creating 64-bit binaries even when the host # toolchain is redefined to a 32-bit target. if (is_clang) { symupload_toolchain = "//build/toolchain/win:win_clang_$host_cpu" } else { symupload_toolchain = "//build/toolchain/win:$host_cpu" } if (current_toolchain == host_toolchain || current_toolchain == symupload_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/symbol_collector_client.cc", "breakpad/src/common/windows/symbol_collector_client.h", ] } 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" ] } } group("symupload") { deps = [ ":symupload_win($symupload_toolchain)" ] } executable("symupload_win") { include_dirs = [ "$visual_studio_path/DIA SDK/include", "breakpad/src", ] output_name = "symupload" # Invert the normal logic which puts binaries built with the default # (target) toolchain into the root output directory, and other toolchain # binaries into subdirs. This gives preference to the native symupload, # which is what's wanted in most situations. The cross-compiled binary # can still be created (by building "symupload_win" instead of # "symupload") and found in the corresponding toolchain subdir (e.g. # //out/Release/win_clang_x86/ when cross-compiling to x86). if (current_toolchain == symupload_toolchain) { output_dir = "$root_build_dir" } else { output_name = "symupload_$target_cpu" toolchain_parts = string_split(get_path_info(current_toolchain, "name"), ":") output_dir = "$root_out_dir/" + toolchain_parts[1] } 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 { # handle dump_syms appropriately for Windows cross build when necessary, # such as symlinking. } } 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/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" ] 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", ] configs += [ ":sender_config" ] public_configs = [ ":sender_config" ] } }