diff options
-rw-r--r-- | BUILD.gn | 4 | ||||
-rw-r--r-- | breakpad/BUILD.gn | 639 | ||||
-rw-r--r-- | tools/gn/secondary/testing/gtest/BUILD.gn | 5 |
3 files changed, 648 insertions, 0 deletions
@@ -101,6 +101,10 @@ group("root") { "//webkit/child", ] + if (!is_win) { + deps += [ "//breakpad:symupload" ] + } + if (is_linux) { deps += [ "//dbus", diff --git a/breakpad/BUILD.gn b/breakpad/BUILD.gn new file mode 100644 index 0000000..ef6a1ad --- /dev/null +++ b/breakpad/BUILD.gn @@ -0,0 +1,639 @@ +# 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. + +config("tools_config") { + include_dirs = [ "src", "src/third_party" ] + if (is_android) { + defines = [ "__ANDROID__" ] + } + if (is_clang) { + cflags = [ "-Wno-tautological-constant-out-of-range-compare" ] + } +} + +config("internal_config") { + include_dirs = [ "src" ] + defines = [] + if (is_debug) { + # This is needed for GTMLogger to work correctly. + defines += [ "DEBUG" ] + } + if (is_android) { + defines += [ "__ANDROID__" ] + } +} + +# minidump_stackwalk and minidump_dump are tool-type executables that do +# not build on iOS. +if (current_toolchain == host_toolchain && !is_win) { + executable("minidump_stackwalk") { + sources = [ + "src/processor/basic_code_module.h", + "src/processor/basic_code_modules.cc", + "src/processor/basic_code_modules.h", + "src/processor/basic_source_line_resolver.cc", + "src/processor/binarystream.cc", + "src/processor/binarystream.h", + "src/processor/call_stack.cc", + "src/processor/cfi_frame_info.cc", + "src/processor/cfi_frame_info.h", + "src/processor/disassembler_x86.cc", + "src/processor/disassembler_x86.h", + "src/processor/exploitability.cc", + "src/processor/logging.cc", + "src/processor/logging.h", + "src/processor/minidump.cc", + "src/processor/minidump_processor.cc", + "src/processor/minidump_stackwalk.cc", + "src/processor/pathname_stripper.cc", + "src/processor/pathname_stripper.h", + "src/processor/process_state.cc", + "src/processor/simple_symbol_supplier.cc", + "src/processor/simple_symbol_supplier.h", + "src/processor/source_line_resolver_base.cc", + "src/processor/stack_frame_cpu.cc", + "src/processor/stack_frame_symbolizer.cc", + "src/processor/stackwalker.cc", + "src/processor/stackwalker_amd64.cc", + "src/processor/stackwalker_amd64.h", + "src/processor/stackwalker_arm.cc", + "src/processor/stackwalker_arm.h", + "src/processor/stackwalker_arm64.cc", + "src/processor/stackwalker_arm64.h", + "src/processor/stackwalker_mips.cc", + "src/processor/stackwalker_mips.h", + "src/processor/stackwalker_ppc.cc", + "src/processor/stackwalker_ppc.h", + "src/processor/stackwalker_ppc64.cc", + "src/processor/stackwalker_ppc64.h", + "src/processor/stackwalker_sparc.cc", + "src/processor/stackwalker_sparc.h", + "src/processor/stackwalker_x86.cc", + "src/processor/stackwalker_x86.h", + "src/processor/tokenize.cc", + "src/processor/tokenize.h", + # libdisasm + "src/third_party/libdisasm/ia32_implicit.c", + "src/third_party/libdisasm/ia32_implicit.h", + "src/third_party/libdisasm/ia32_insn.c", + "src/third_party/libdisasm/ia32_insn.h", + "src/third_party/libdisasm/ia32_invariant.c", + "src/third_party/libdisasm/ia32_invariant.h", + "src/third_party/libdisasm/ia32_modrm.c", + "src/third_party/libdisasm/ia32_modrm.h", + "src/third_party/libdisasm/ia32_opcode_tables.c", + "src/third_party/libdisasm/ia32_opcode_tables.h", + "src/third_party/libdisasm/ia32_operand.c", + "src/third_party/libdisasm/ia32_operand.h", + "src/third_party/libdisasm/ia32_reg.c", + "src/third_party/libdisasm/ia32_reg.h", + "src/third_party/libdisasm/ia32_settings.c", + "src/third_party/libdisasm/ia32_settings.h", + "src/third_party/libdisasm/libdis.h", + "src/third_party/libdisasm/qword.h", + "src/third_party/libdisasm/x86_disasm.c", + "src/third_party/libdisasm/x86_format.c", + "src/third_party/libdisasm/x86_imm.c", + "src/third_party/libdisasm/x86_imm.h", + "src/third_party/libdisasm/x86_insn.c", + "src/third_party/libdisasm/x86_misc.c", + "src/third_party/libdisasm/x86_operand_list.c", + "src/third_party/libdisasm/x86_operand_list.h", + ] + + defines = [ "BPLOG_MINIMUM_SEVERITY=SEVERITY_ERROR" ] + + configs -= [ "//build/config/compiler:chromium_code" ] + configs += [ "//build/config/compiler:no_chromium_code" ] + configs += [ ":tools_config" ] + + # Always want these files included regardless of platform. + set_sources_assignment_filter([]) + sources += [ + "src/processor/exploitability_linux.cc", + "src/processor/exploitability_linux.h", + "src/processor/exploitability_win.cc", + "src/processor/exploitability_win.h", + ] + } + + executable("minidump_dump") { + sources = [ + "src/processor/basic_code_module.h", + "src/processor/basic_code_modules.cc", + "src/processor/basic_code_modules.h", + "src/processor/logging.cc", + "src/processor/logging.h", + "src/processor/minidump.cc", + "src/processor/minidump_dump.cc", + "src/processor/pathname_stripper.cc", + "src/processor/pathname_stripper.h", + ] + + configs += [ ":tools_config" ] + } +} + +# Mac -------------------------------------------------------------------------- + +if (current_toolchain == host_toolchain && is_mac) { + # TODO(GYP) This should be only 64-bit on Mac. From .gypi: + # Like ld, dump_syms needs to operate on enough data that it may + # actually need to be able to address more than 4GB. Use x86_64. + # Don't worry! An x86_64 dump_syms is perfectly able to dump + # 32-bit files. + executable("dump_syms") { + sources = [ + "src/common/dwarf/bytereader.cc", + "src/common/dwarf_cfi_to_module.cc", + "src/common/dwarf_cu_to_module.cc", + "src/common/dwarf/dwarf2diehandler.cc", + "src/common/dwarf/dwarf2reader.cc", + "src/common/dwarf_line_to_module.cc", + "src/common/language.cc", + "src/common/mac/arch_utilities.cc", + "src/common/mac/arch_utilities.h", + "src/common/mac/dump_syms.mm", + "src/common/mac/file_id.cc", + "src/common/mac/macho_id.cc", + "src/common/mac/macho_reader.cc", + "src/common/mac/macho_utilities.cc", + "src/common/mac/macho_walker.cc", + "src/common/md5.cc", + "src/common/module.cc", + "src/common/stabs_reader.cc", + "src/common/stabs_to_module.cc", + "src/tools/mac/dump_syms/dump_syms_tool.mm", + ] + + # For src/common/stabs_reader.h. + defines = [ "HAVE_MACH_O_NLIST_H" ] + include_dirs = [ "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" ] + + libs = [ "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. + # http://code.google.com/p/google-breakpad/issues/detail?id=329 + configs -= [ "//build/config/compiler:optimize" ] + cflags += [ "-O0" ] + } + } + + executable("symupload") { + sources = [ + "src/common/mac/HTTPMultipartUpload.m", + "src/tools/mac/symupload/symupload.m", + ] + + libs = [ "Foundaction.framework" ] + } +} + +if (is_mac) { + static_library("breakpad_utilities") { + sources = [ + "src/client/mac/handler/breakpad_nlist_64.cc", + "src/client/mac/handler/dynamic_images.cc", + "src/client/mac/handler/minidump_generator.cc", + "src/client/minidump_file_writer.cc", + "src/common/convert_UTF.c", + "src/common/mac/MachIPC.mm", + "src/common/mac/arch_utilities.cc", + "src/common/mac/bootstrap_compat.cc", + "src/common/mac/file_id.cc", + "src/common/mac/macho_id.cc", + "src/common/mac/macho_utilities.cc", + "src/common/mac/macho_walker.cc", + "src/common/mac/string_utilities.cc", + "src/common/md5.cc", + "src/common/simple_string_dictionary.cc", + "src/common/string_conversion.cc", + ] + + configs += [ ":internal_config" ] + } + + executable("crash_inspector") { + sources = [ + "src/client/mac/crash_generation/ConfigFile.mm", + "src/client/mac/crash_generation/Inspector.mm", + "src/client/mac/crash_generation/InspectorMain.mm", + ] + + # TODO(GYP): 'mac_real_dsym': 1, + + include_dirs = [ + "src/client/apple/Framework", + "src/common/mac", + ] + libs = [ + "CoreServices.framework", + "Foundation.framework", + ] + + deps = [ + ":breakpad_utilities" + ] + } + + executable("crash_report_sender") { + # TODO(GYP) this target has some mac_bundle_resources stuff. + } + + config("breakpad_config") { + include_dirs = [ "src/client/apple/Framework" ] + } + + static_library("breakpad") { + sources = [ + "src/client/mac/crash_generation/crash_generation_client.cc", + "src/client/mac/crash_generation/crash_generation_client.h", + "src/client/mac/handler/protected_memory_allocator.cc", + "src/client/mac/handler/exception_handler.cc", + "src/client/mac/Framework/Breakpad.mm", + "src/client/mac/Framework/OnDemandServer.mm", + ] + + configs += [ ":internal_config" ] + direct_dependent_configs = [ ":breakpad_config" ] + + defines = [ "USE_PROTECTED_ALLOCATIONS=1" ] + include_dirs = [ + "src/client/apple/Framework", + ] + + deps = [ + ":breakpad_utilities", + ":crash_inspector", + ":crash_report_sender", + ] + } +} + +if (is_linux || is_android) { + executable("symupload") { + sources = [ + "src/tools/linux/symupload/sym_upload.cc", + "src/common/linux/http_upload.cc", + "src/common/linux/http_upload.h", + ] + + include_dirs = [ + "src", + "src/third_party", + ] + + configs += [ ":tools_config" ] + + libs = [ "dl" ] + } +} + +if (is_linux && current_toolchain == host_toolchain) { + executable("dump_syms") { + sources = [ + "src/common/dwarf/bytereader.cc", + "src/common/dwarf_cfi_to_module.cc", + "src/common/dwarf_cfi_to_module.h", + "src/common/dwarf_cu_to_module.cc", + "src/common/dwarf_cu_to_module.h", + "src/common/dwarf/dwarf2diehandler.cc", + "src/common/dwarf/dwarf2reader.cc", + "src/common/dwarf_line_to_module.cc", + "src/common/dwarf_line_to_module.h", + "src/common/language.cc", + "src/common/language.h", + "src/common/linux/crc32.cc", + "src/common/linux/crc32.h", + "src/common/linux/dump_symbols.cc", + "src/common/linux/dump_symbols.h", + "src/common/linux/elf_symbols_to_module.cc", + "src/common/linux/elf_symbols_to_module.h", + "src/common/linux/elfutils.cc", + "src/common/linux/elfutils.h", + "src/common/linux/file_id.cc", + "src/common/linux/file_id.h", + "src/common/linux/linux_libc_support.cc", + "src/common/linux/linux_libc_support.h", + "src/common/linux/memory_mapped_file.cc", + "src/common/linux/memory_mapped_file.h", + "src/common/linux/guid_creator.h", + "src/common/module.cc", + "src/common/module.h", + "src/common/stabs_reader.cc", + "src/common/stabs_reader.h", + "src/common/stabs_to_module.cc", + "src/common/stabs_to_module.h", + "src/tools/linux/dump_syms/dump_syms.cc", + ] + + # 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 = [ "src" ] + } + + config("breakpad_client_config") { + if (is_android) { + include_dirs = [ "src/common/android/include" ] + } + } + + static_library("breakpad_client") { + sources = [ + "src/client/linux/crash_generation/crash_generation_client.cc", + "src/client/linux/crash_generation/crash_generation_client.h", + "src/client/linux/handler/exception_handler.cc", + "src/client/linux/handler/exception_handler.h", + "src/client/linux/handler/minidump_descriptor.cc", + "src/client/linux/handler/minidump_descriptor.h", + "src/client/linux/log/log.cc", + "src/client/linux/log/log.h", + "src/client/linux/minidump_writer/cpu_set.h", + "src/client/linux/minidump_writer/directory_reader.h", + "src/client/linux/minidump_writer/line_reader.h", + "src/client/linux/minidump_writer/linux_core_dumper.cc", + "src/client/linux/minidump_writer/linux_core_dumper.h", + "src/client/linux/minidump_writer/linux_dumper.cc", + "src/client/linux/minidump_writer/linux_dumper.h", + "src/client/linux/minidump_writer/linux_ptrace_dumper.cc", + "src/client/linux/minidump_writer/linux_ptrace_dumper.h", + "src/client/linux/minidump_writer/minidump_writer.cc", + "src/client/linux/minidump_writer/minidump_writer.h", + "src/client/linux/minidump_writer/proc_cpuinfo_reader.h", + "src/client/minidump_file_writer-inl.h", + "src/client/minidump_file_writer.cc", + "src/client/minidump_file_writer.h", + "src/common/convert_UTF.c", + "src/common/convert_UTF.h", + "src/common/linux/elf_core_dump.cc", + "src/common/linux/elf_core_dump.h", + "src/common/linux/elfutils.cc", + "src/common/linux/elfutils.h", + "src/common/linux/file_id.cc", + "src/common/linux/file_id.h", + "src/common/linux/google_crashdump_uploader.cc", + "src/common/linux/google_crashdump_uploader.h", + "src/common/linux/guid_creator.cc", + "src/common/linux/guid_creator.h", + "src/common/linux/libcurl_wrapper.cc", + "src/common/linux/libcurl_wrapper.h", + "src/common/linux/linux_libc_support.cc", + "src/common/linux/linux_libc_support.h", + "src/common/linux/memory_mapped_file.cc", + "src/common/linux/memory_mapped_file.h", + "src/common/linux/safe_readlink.cc", + "src/common/linux/safe_readlink.h", + "src/common/memory.h", + "src/common/simple_string_dictionary.cc", + "src/common/simple_string_dictionary.h", + "src/common/string_conversion.cc", + "src/common/string_conversion.h", + ] + + direct_dependent_configs = [ ":breakpad_client_config" ] + + # Android NDK toolchain doesn't support -mimplicit-it=always + if (cpu_arch == "arm" && !is_android) { + cflags = [ "-Wa,-mimplicit-it=always" ] + } + if (cpu_arch == "arm" && is_chromeos) { + # Avoid running out of registers in + # linux_syscall_support.h:sys_clone()'s inline assembly. + cflags = [ "-marm" ] + } + + if (is_android) { + sources += [ "src/common/android/breakpad_getcontext.S" ] + } + + libs = [ "dl" ] + + include_dirs = [ + ".", + "src", + "src/client", + "src/third_party/linux/include", + ] + } + + static_library("breakpad_processor_support") { + sources = [ + "src/common/scoped_ptr.h", + "src/processor/basic_code_modules.cc", + "src/processor/basic_code_modules.h", + "src/processor/logging.cc", + "src/processor/logging.h", + "src/processor/minidump.cc", + "src/processor/pathname_stripper.cc", + "src/processor/pathname_stripper.h", + ] + + include_dirs = [ + "src", + "src/client", + "src/third_party/linux/include", + ".", + ] + } + + executable("breakpad_unittests") { + sources = [ + "linux/breakpad_googletest_includes.h", + "src/client/linux/handler/exception_handler_unittest.cc", + "src/client/linux/minidump_writer/cpu_set_unittest.cc", + "src/client/linux/minidump_writer/directory_reader_unittest.cc", + "src/client/linux/minidump_writer/line_reader_unittest.cc", + "src/client/linux/minidump_writer/linux_core_dumper_unittest.cc", + "src/client/linux/minidump_writer/linux_ptrace_dumper_unittest.cc", + "src/client/linux/minidump_writer/minidump_writer_unittest.cc", + "src/client/linux/minidump_writer/minidump_writer_unittest_utils.cc", + "src/client/linux/minidump_writer/proc_cpuinfo_reader_unittest.cc", + "src/common/linux/elf_core_dump_unittest.cc", + "src/common/linux/file_id_unittest.cc", + "src/common/linux/linux_libc_support_unittest.cc", + "src/common/linux/synth_elf.cc", + "src/common/linux/tests/auto_testfile.h", + "src/common/linux/tests/crash_generator.cc", + "src/common/linux/tests/crash_generator.h", + "src/common/memory_range.h", + "src/common/memory_unittest.cc", + "src/common/simple_string_dictionary_unittest.cc", + "src/common/test_assembler.cc", + "src/common/tests/file_utils.cc", + "src/common/tests/file_utils.h", + "src/tools/linux/md2core/minidump_memory_range.h", + "src/tools/linux/md2core/minidump_memory_range_unittest.cc", + ] + + deps = [ + ":breakpad_client", + ":breakpad_processor_support", + ":linux_dumper_unittest_helper", + "//testing/gtest", + "//testing/gtest:gtest_main", + "//testing/gmock", + ] + + include_dirs = [ + "linux", # Use our copy of breakpad_googletest_includes.h + "src", + ".", + ] + + # There are some warnings in this code. + configs -= [ "//build/config/compiler:chromium_code" ] + configs += [ "//build/config/compiler:no_chromium_code" ] + + if (is_clang) { + # See http://crbug.com/138571#c18 + cflags += [ "-Wno-unused-value" ] + } + + + if (is_android) { + sources += [ "src/common/android/breakpad_getcontext_unittest.cc" ] + libs = [ "log" ] + include_dirs = [ "src/common/android/include" ] + } + } + + executable("linux_dumper_unittest_helper") { + sources = [ + "src/client/linux/minidump_writer/linux_dumper_unittest_helper.cc", + ] + deps = [ + ":breakpad_processor_support", + ] + + include_dirs = [ + "src", + ] + + if (cpu_arch == "mipsel" && is_android) { + include_dirs += [ "src/common/android/include" ] + } + } + + + executable("generate_test_dump") { + sources = [ + "linux/generate-test-dump.cc", + ] + + # This file has an unused variable warning. + cflags = [ "-Wno-unused-variable" ] + + deps = [ ":breakpad_client" ] + + include_dirs = [ "src" ] + + if (is_android) { + libs = [ "log" ] + include_dirs += [ "src/common/android/include" ] + } + } + + executable("minidump-2-core") { + sources = [ "src/tools/linux/md2core/minidump-2-core.cc" ] + + include_dirs = [ "src" ] + + deps = [ ":breakpad_client" ] + } + + executable("core-2-minidump") { + sources = [ + "src/tools/linux/core2md/core2md.cc", + ] + + deps = [ + ":breakpad_client", + ] + + include_dirs = [ "src" ] + } +} + +if (is_ios) { + static_library("breakpad_client") { + sources = [ + "src/client/ios/Breakpad.h", + "src/client/ios/Breakpad.mm", + "src/client/ios/BreakpadController.h", + "src/client/ios/BreakpadController.mm", + "src/client/ios/handler/ios_exception_minidump_generator.mm", + "src/client/ios/handler/ios_exception_minidump_generator.h", + "src/client/mac/crash_generation/ConfigFile.h", + "src/client/mac/crash_generation/ConfigFile.mm", + "src/client/mac/handler/breakpad_nlist_64.cc", + "src/client/mac/handler/breakpad_nlist_64.h", + "src/client/mac/handler/dynamic_images.cc", + "src/client/mac/handler/dynamic_images.h", + "src/client/mac/handler/protected_memory_allocator.cc", + "src/client/mac/handler/protected_memory_allocator.h", + "src/client/mac/handler/exception_handler.cc", + "src/client/mac/handler/exception_handler.h", + "src/client/mac/handler/minidump_generator.cc", + "src/client/mac/handler/minidump_generator.h", + "src/client/mac/sender/uploader.h", + "src/client/mac/sender/uploader.mm", + "src/client/minidump_file_writer.cc", + "src/client/minidump_file_writer.h", + "src/client/minidump_file_writer-inl.h", + "src/common/convert_UTF.c", + "src/common/convert_UTF.h", + "src/common/mac/file_id.cc", + "src/common/mac/file_id.h", + "src/common/mac/HTTPMultipartUpload.m", + "src/common/mac/macho_id.cc", + "src/common/mac/macho_id.h", + "src/common/mac/macho_utilities.cc", + "src/common/mac/macho_utilities.h", + "src/common/mac/macho_walker.cc", + "src/common/mac/macho_walker.h", + "src/common/mac/string_utilities.cc", + "src/common/mac/string_utilities.h", + "src/common/md5.cc", + "src/common/md5.h", + "src/common/simple_string_dictionary.cc", + "src/common/simple_string_dictionary.h", + "src/common/string_conversion.cc", + "src/common/string_conversion.h", + "src/google_breakpad/common/minidump_format.h", + ] + + include_dirs = [ + "src", + "src/client/mac/Framework", + "src/common/mac", + ] + } + + # TODO(GYP) There is some XCode-only targets like ninja-breakpad. +} diff --git a/tools/gn/secondary/testing/gtest/BUILD.gn b/tools/gn/secondary/testing/gtest/BUILD.gn index 44307fa..d596279 100644 --- a/tools/gn/secondary/testing/gtest/BUILD.gn +++ b/tools/gn/secondary/testing/gtest/BUILD.gn @@ -102,3 +102,8 @@ static_library("gtest") { configs -= [ "//build/config/compiler:chromium_code" ] configs += [ "//build/config/compiler:no_chromium_code" ] } + +source_set("gtest_main") { + sources = [ "src/gtest_main.cc" ] + deps = [ ":gtest" ] +} |