# 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/test.gni")

if (is_android) {
  import("//build/config/android/rules.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" ]
    }

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