# 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__" ]
  }
}

config("client_config") {
  include_dirs = [ "src" ]
  if (is_android) {
    include_dirs += [ "src/common/android/include" ]
  }
}

config("handler_config") {
  include_dirs = [
    "src",
  ]
}

# 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/dump_context.cc",
      "src/processor/dump_object.cc",
      "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/dump_context.cc",
      "src/processor/dump_object.cc",
      "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" ]

    # There are some warnings in this code.
    configs -= [ "//build/config/compiler:chromium_code" ]
    configs += [ "//build/config/compiler:no_chromium_code" ]
  }
}

# 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",
    ]

    include_dirs = [
      "src/common/mac"
    ]

    libs = [ "Foundation.framework" ]
  }
}

if (is_mac) {
  static_library("utilities") {
    sources = [
      "src/client/mac/crash_generation/ConfigFile.mm",
      "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/launch_reporter.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" ]
    
    # TODO(GYP): TODO(dpranke): Fix the compile for this.
    sources -= [
      "src/client/mac/handler/dynamic_images.cc",
    ]
  }

  executable("crash_inspector") {
    sources = [
      "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",
      "src",
    ]
    libs = [
      "CoreServices.framework",
      "Foundation.framework",
    ]

    deps = [
      ":utilities"
    ]
  }

  # TODO(GYP) this target has some mac_bundle_resources stuff.
  # executable("crash_report_sender") {
  # }

  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" ]
    public_configs = [ ":breakpad_config" ]

    defines = [ "USE_PROTECTED_ALLOCATIONS=1" ]
    include_dirs = [
      "src/client/apple/Framework",
    ]

    deps = [
      ":utilities",
      ":crash_inspector",
      # TODO(GYP): Make this link
      #":crash_report_sender",
    ]
  }

  group("client") {
    public_configs = [ ":client_config" ]
  }
}

if (is_linux) {
  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 || is_android) {
  if (current_toolchain == host_toolchain) {
    # dump_syms is a host tool, so only compile it for the host system.
    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",
      ]

      # 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 = [ "src" ]
    }
  }

  static_library("client") {
    # Want all these sources for both Linux and Android.
    set_sources_assignment_filter([])
    sources = [
      "src/client/linux/crash_generation/crash_generation_client.cc",
      "src/client/linux/crash_generation/crash_generation_client.h",
      "src/client/linux/dump_writer_common/mapping_info.h",
      "src/client/linux/dump_writer_common/seccomp_unwinder.cc",
      "src/client/linux/dump_writer_common/seccomp_unwinder.h",
      "src/client/linux/dump_writer_common/thread_info.cc",
      "src/client/linux/dump_writer_common/thread_info.h",
      "src/client/linux/dump_writer_common/ucontext_reader.cc",
      "src/client/linux/dump_writer_common/ucontext_reader.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",
    ]

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

    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("processor_support") {
    sources = [
      "src/common/scoped_ptr.h",
      "src/processor/basic_code_modules.cc",
      "src/processor/basic_code_modules.h",
      "src/processor/dump_context.cc",
      "src/processor/dump_object.cc",
      "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",
      ".",
    ]

    # There are some warnings in this code.
    configs -= [ "//build/config/compiler:chromium_code" ]
    configs += [ "//build/config/compiler:no_chromium_code" ]
  }
}

if (is_linux) {
  test("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 = [
      ":client",
      ":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") {
    testonly = true
    sources = [
      "src/client/linux/minidump_writer/linux_dumper_unittest_helper.cc",
    ]
    deps = [
      ":processor_support",
    ]

    include_dirs = [
      "src",
    ]

    if (cpu_arch == "mipsel" && is_android) {
      include_dirs += [ "src/common/android/include" ]
    }
  }


  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 += [ "//build/config/compiler:no_chromium_code" ]

    deps = [ ":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 = [ ":client" ]
  }

  executable("core-2-minidump") {
    sources = [
      "src/tools/linux/core2md/core2md.cc",
    ]

    deps = [
      ":client",
    ]

    include_dirs = [ "src" ]
  }
}

if (is_ios) {
  static_library("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.
}

if (is_win) {
  group("client") {
    public_configs = [ ":client_config" ]
  }

  source_set("breakpad_handler") {
    configs += [ ":handler_config" ]
    if (is_win) {
      public_configs = [ ":handler_config" ]
    }

    defines = [ "BREAKPAD_NO_TERMINATE_THREAD" ]

    sources = [
      "src/client/windows/crash_generation/client_info.cc",
      "src/client/windows/crash_generation/client_info.h",
      "src/client/windows/crash_generation/crash_generation_client.cc",
      "src/client/windows/crash_generation/crash_generation_client.h",
      "src/client/windows/crash_generation/crash_generation_server.cc",
      "src/client/windows/crash_generation/crash_generation_server.h",
      "src/client/windows/handler/exception_handler.cc",
      "src/client/windows/handler/exception_handler.h",
      "src/common/windows/guid_string.cc",
      "src/common/windows/guid_string.h",
      "src/google_breakpad/common/minidump_format.h",
      "src/client/windows/crash_generation/minidump_generator.cc",
      "src/client/windows/crash_generation/minidump_generator.h",
      "src/common/windows/string_utils-inl.h",
    ]
  }
}
