# 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/symlink.gni")
import("//testing/libfuzzer/fuzzer_test.gni")
import("//testing/test.gni")

if (is_android) {
  import("//build/config/android/rules.gni")
}

if (is_win) {
  import("//build/config/win/visual_studio_version.gni")
}

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) {
    defines = [ "ANDROID_NDK_MAJOR_VERSION=${android_ndk_major_version}" ]
    include_dirs += [ "src/common/android/include" ]
  }
  if (is_chromeos) {
    defines = [ "__CHROMEOS__" ]
  }
}

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

config("sender_config") {
  include_dirs = [ "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" ]
}

# {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") {
      # Always want these files included regardless of platform.
      set_sources_assignment_filter([])
      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/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/logging.cc",
        "src/processor/logging.h",
        "src/processor/pathname_stripper.cc",
        "src/processor/pathname_stripper.h",
        "src/processor/proc_maps_linux.cc",
        "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/stackwalk_common.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" ]
    }

    fuzzer_test("minidump_fuzzer") {
      sources = [
        "minidump_fuzzer.cc",
        "src/processor/exploitability.cc",
        "src/processor/minidump.cc",
        "src/processor/minidump_processor.cc",
      ]

      deps = [
        ":stackwalk_common",
        "//base",
      ]

      defines = [ "BPLOG_MINIMUM_SEVERITY=SEVERITY_ERROR" ]
      include_dirs = [ "src" ]
      dict = "minidump_fuzzer.dict"

      libfuzzer_options = [
        "close_fd_mask=3",
        "max_len=128000",
      ]

      # 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",
        "src/processor/symbolic_constants_win.cc",
        "src/processor/symbolic_constants_win.h",
      ]
    }

    executable("microdump_stackwalk") {
      sources = [
        "src/processor/microdump.cc",
        "src/processor/microdump_processor.cc",
        "src/processor/microdump_stackwalk.cc",
      ]

      deps = [
        ":stackwalk_common",
        "//build/config/sanitizers:deps",
      ]

      defines = [ "BPLOG_MINIMUM_SEVERITY=SEVERITY_ERROR" ]

      configs -= [ "//build/config/compiler:chromium_code" ]
      configs += [ "//build/config/compiler:no_chromium_code" ]
      configs += [ ":tools_config" ]
    }

    executable("minidump_stackwalk") {
      sources = [
        "src/processor/exploitability.cc",
        "src/processor/minidump.cc",
        "src/processor/minidump_processor.cc",
        "src/processor/minidump_stackwalk.cc",
      ]

      deps = [
        ":stackwalk_common",
        "//build/config/sanitizers:deps",
      ]

      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",
        "src/processor/symbolic_constants_win.cc",
        "src/processor/symbolic_constants_win.h",
      ]
    }

    executable("minidump_dump") {
      set_sources_assignment_filter([])
      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",
        "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" ]

      deps = [
        "//build/config/sanitizers:deps",
      ]
    }
  } 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) {
    # 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/dwarf2diehandler.cc",
        "src/common/dwarf/dwarf2reader.cc",
        "src/common/dwarf/elf_reader.cc",
        "src/common/dwarf/elf_reader.h",
        "src/common/dwarf_cfi_to_module.cc",
        "src/common/dwarf_cu_to_module.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.cc",
        "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.cc",
      ]

      # 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:default_optimization" ]
        cflags += [ "-O0" ]
      }

      deps = [
        "//build/config/sanitizers:deps",
      ]
    }

    executable("symupload") {
      sources = [
        "src/common/mac/HTTPMultipartUpload.m",
        "src/tools/mac/symupload/symupload.m",
      ]

      include_dirs = [ "src/common/mac" ]

      libs = [ "Foundation.framework" ]

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

      deps = [
        "//build/config/sanitizers:deps",
      ]
    }
  } 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 = [
      "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" ]

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

  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",
      "//build/config/sanitizers:deps",
    ]
  }

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

  config("breakpad_config") {
    include_dirs = [ "src/client/apple/Framework" ]
  }

  static_library("breakpad") {
    sources = [
      "src/client/mac/Framework/Breakpad.mm",
      "src/client/mac/Framework/OnDemandServer.mm",
      "src/client/mac/crash_generation/crash_generation_client.cc",
      "src/client/mac/crash_generation/crash_generation_client.h",
      "src/client/mac/handler/exception_handler.cc",
      "src/client/mac/handler/protected_memory_allocator.cc",
    ]

    configs += [ ":internal_config" ]
    public_configs = [ ":breakpad_config" ]

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

    deps = [
      ":crash_inspector",
      ":crash_report_sender",
      ":utilities",
    ]
  }

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

if (is_linux || is_android) {
  if (current_toolchain == host_toolchain) {
    executable("symupload") {
      sources = [
        "src/common/linux/http_upload.cc",
        "src/common/linux/http_upload.h",
        "src/common/linux/symbol_upload.cc",
        "src/common/linux/symbol_upload.h",
        "src/tools/linux/symupload/sym_upload.cc",
      ]

      include_dirs = [
        "src",
        "src/third_party",
      ]

      configs += [ ":tools_config" ]

      libs = [ "dl" ]

      deps = [
        "//build/config/sanitizers:deps",
      ]
    }

    # 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/dwarf2diehandler.cc",
        "src/common/dwarf/dwarf2reader.cc",
        "src/common/dwarf/elf_reader.cc",
        "src/common/dwarf/elf_reader.h",
        "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_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/guid_creator.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/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" ]

      deps = [
        "//build/config/sanitizers:deps",
      ]
    }
  } 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") {
    # 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/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/microdump_writer/microdump_writer.cc",
      "src/client/linux/microdump_writer/microdump_writer.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 (current_cpu == "arm" && is_chromeos) {
      # Avoid running out of registers in
      # linux_syscall_support.h:sys_clone()'s inline assembly.
      cflags = [ "-marm" ]
    }

    # Clang's -mstackrealign doesn't work well with
    # linux_syscall_support.h hand written asm syscalls.
    # See https://crbug.com/556393
    configs -= [ "//build/config/compiler:clang_stackrealign" ]

    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") {
    set_sources_assignment_filter([])
    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",
      "src/processor/proc_maps_linux.cc",
    ]

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

  test("breakpad_unittests") {
    set_sources_assignment_filter([])
    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",
      ":linux_dumper_unittest_helper",
      ":processor_support",
      "//build/config/sanitizers:deps",
      "//testing/gmock",
      "//testing/gtest",
      "//testing/gtest:gtest_main",
    ]

    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 http://crbug.com/138571#c18
      cflags = [ "-Wno-unused-value" ]
    }

    if (is_android) {
      use_raw_android_executable = true
      sources += [ "src/common/android/breakpad_getcontext_unittest.cc" ]
      libs = [ "log" ]
      extra_dist_files = [ "$root_out_dir/linux_dumper_unittest_helper" ]
    }

    # Clang's -mstackrealign doesn't work well with
    # linux_syscall_support.h hand written asm syscalls.
    # See https://crbug.com/556393
    configs -= [ "//build/config/compiler:clang_stackrealign" ]

    # Add the breakpad unittest config at the end to override all configs.
    configs += [ ":breakpad_unittest_config" ]
  }

  executable("linux_dumper_unittest_helper") {
    set_sources_assignment_filter([])
    testonly = true
    sources = [
      "src/client/linux/minidump_writer/linux_dumper_unittest_helper.cc",
    ]
    deps = [
      ":processor_support",
      "//build/config/sanitizers:deps",
    ]

    configs += [ ":client_config" ]
  }

  executable("generate_test_dump") {
    set_sources_assignment_filter([])
    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",
      "//build/config/sanitizers:deps",
    ]

    if (is_android) {
      libs = [ "log" ]
    }
  }

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

    include_dirs = [ "src" ]

    deps = [
      ":client",
      "//build/config/sanitizers:deps",
    ]
  }

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

    deps = [
      ":client",
      "//build/config/sanitizers:deps",
    ]

    include_dirs = [ "src" ]
  }
}

if (is_win) {
  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",
      "src",
    ]

    sources = [
      "src/common/windows/dia_util.cc",
      "src/common/windows/dia_util.h",
      "src/common/windows/guid_string.cc",
      "src/common/windows/guid_string.h",
      "src/common/windows/omap.cc",
      "src/common/windows/omap.h",
      "src/common/windows/pdb_source_line_writer.cc",
      "src/common/windows/pdb_source_line_writer.h",
      "src/common/windows/string_utils-inl.h",
      "src/common/windows/string_utils.cc",
      "src/tools/windows/dump_syms/dump_syms.cc",
    ]

    lib_dirs = []
    if (target_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" ]
    }
  }
}

if (is_ios) {
  static_library("client") {
    set_sources_assignment_filter([])
    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.h",
      "src/client/ios/handler/ios_exception_minidump_generator.mm",
      "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/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/handler/protected_memory_allocator.cc",
      "src/client/mac/handler/protected_memory_allocator.h",
      "src/client/mac/sender/uploader.h",
      "src/client/mac/sender/uploader.mm",
      "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/mac/HTTPMultipartUpload.m",
      "src/common/mac/file_id.cc",
      "src/common/mac/file_id.h",
      "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",
    ]
    set_sources_assignment_filter(sources_assignment_filter)

    include_dirs = [
      "src",
      "src/client/mac/Framework",
      "src/common/mac",
    ]

    public_configs = [ ":client_config" ]

    if (is_clang) {
      # See https://bugs.chromium.org/p/google-breakpad/issues/detail?id=675.
      cflags = [ "-Wno-deprecated-declarations" ]
    }
  }
  # TODO(GYP) There is some XCode-only targets like ninja-breakpad.
}

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

  config("breakpad_handler_warnings") {
    if (is_clang) {
      # See https://code.google.com/p/google-breakpad/issues/detail?id=658.
      cflags = [ "-Wno-reorder" ]
    }
  }

  static_library("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/crash_generation/minidump_generator.cc",
      "src/client/windows/crash_generation/minidump_generator.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/common/windows/string_utils-inl.h",
      "src/google_breakpad/common/minidump_format.h",
    ]
    configs += [ ":breakpad_handler_warnings" ]
  }

  source_set("breakpad_sender") {
    sources = [
      "src/client/windows/sender/crash_report_sender.cc",
      "src/client/windows/sender/crash_report_sender.h",
      "src/common/windows/http_upload.cc",
      "src/common/windows/http_upload.h",
    ]
    configs += [ ":sender_config" ]
    public_configs = [ ":sender_config" ]
  }
}

if (is_android) {
  # TODO(GYP_GONE) Delete this after we've converted everything to GN.
  group("breakpad_unittests_deps") {
    testonly = true
    deps = [
      ":breakpad_unittests",
    ]
  }
}
