# 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_win) {
  import("//build/config/win/visual_studio_version.gni")
}

config("tools_config") {
  include_dirs = [
    "breakpad/src",
    "breakpad/src/third_party",
  ]
  if (is_android) {
    defines = [ "__ANDROID__" ]
  }
  if (is_clang) {
    cflags = [ "-Wno-tautological-constant-out-of-range-compare" ]
  }
}

config("internal_config") {
  include_dirs = [ "breakpad/src" ]
  defines = []
  if (is_debug) {
    # This is needed for GTMLogger to work correctly.
    defines += [ "DEBUG" ]
  }
  if (is_android) {
    defines += [ "__ANDROID__" ]
  }
}

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

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

config("sender_config") {
  include_dirs = [ "breakpad/src" ]
}

config("breakpad_unittest_config") {
  # One of the breakpad unit tests test that we can detect the proper build-id.
  # We must override the build-id for this one target.
  ldflags = [ "-Wl,--build-id=0x000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f" ]
}

# {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 = [
        "breakpad/src/common/path_helper.cc",
        "breakpad/src/common/path_helper.h",
        "breakpad/src/processor/basic_code_module.h",
        "breakpad/src/processor/basic_code_modules.cc",
        "breakpad/src/processor/basic_code_modules.h",
        "breakpad/src/processor/basic_source_line_resolver.cc",
        "breakpad/src/processor/call_stack.cc",
        "breakpad/src/processor/cfi_frame_info.cc",
        "breakpad/src/processor/cfi_frame_info.h",
        "breakpad/src/processor/disassembler_x86.cc",
        "breakpad/src/processor/disassembler_x86.h",
        "breakpad/src/processor/dump_context.cc",
        "breakpad/src/processor/dump_object.cc",
        "breakpad/src/processor/logging.cc",
        "breakpad/src/processor/logging.h",
        "breakpad/src/processor/pathname_stripper.cc",
        "breakpad/src/processor/pathname_stripper.h",
        "breakpad/src/processor/proc_maps_linux.cc",
        "breakpad/src/processor/process_state.cc",
        "breakpad/src/processor/simple_symbol_supplier.cc",
        "breakpad/src/processor/simple_symbol_supplier.h",
        "breakpad/src/processor/source_line_resolver_base.cc",
        "breakpad/src/processor/stack_frame_cpu.cc",
        "breakpad/src/processor/stack_frame_symbolizer.cc",
        "breakpad/src/processor/stackwalk_common.cc",
        "breakpad/src/processor/stackwalker.cc",
        "breakpad/src/processor/stackwalker_amd64.cc",
        "breakpad/src/processor/stackwalker_amd64.h",
        "breakpad/src/processor/stackwalker_arm.cc",
        "breakpad/src/processor/stackwalker_arm.h",
        "breakpad/src/processor/stackwalker_arm64.cc",
        "breakpad/src/processor/stackwalker_arm64.h",
        "breakpad/src/processor/stackwalker_mips.cc",
        "breakpad/src/processor/stackwalker_mips.h",
        "breakpad/src/processor/stackwalker_ppc.cc",
        "breakpad/src/processor/stackwalker_ppc.h",
        "breakpad/src/processor/stackwalker_ppc64.cc",
        "breakpad/src/processor/stackwalker_ppc64.h",
        "breakpad/src/processor/stackwalker_sparc.cc",
        "breakpad/src/processor/stackwalker_sparc.h",
        "breakpad/src/processor/stackwalker_x86.cc",
        "breakpad/src/processor/stackwalker_x86.h",
        "breakpad/src/processor/tokenize.cc",
        "breakpad/src/processor/tokenize.h",

        # libdisasm
        "breakpad/src/third_party/libdisasm/ia32_implicit.c",
        "breakpad/src/third_party/libdisasm/ia32_implicit.h",
        "breakpad/src/third_party/libdisasm/ia32_insn.c",
        "breakpad/src/third_party/libdisasm/ia32_insn.h",
        "breakpad/src/third_party/libdisasm/ia32_invariant.c",
        "breakpad/src/third_party/libdisasm/ia32_invariant.h",
        "breakpad/src/third_party/libdisasm/ia32_modrm.c",
        "breakpad/src/third_party/libdisasm/ia32_modrm.h",
        "breakpad/src/third_party/libdisasm/ia32_opcode_tables.c",
        "breakpad/src/third_party/libdisasm/ia32_opcode_tables.h",
        "breakpad/src/third_party/libdisasm/ia32_operand.c",
        "breakpad/src/third_party/libdisasm/ia32_operand.h",
        "breakpad/src/third_party/libdisasm/ia32_reg.c",
        "breakpad/src/third_party/libdisasm/ia32_reg.h",
        "breakpad/src/third_party/libdisasm/ia32_settings.c",
        "breakpad/src/third_party/libdisasm/ia32_settings.h",
        "breakpad/src/third_party/libdisasm/libdis.h",
        "breakpad/src/third_party/libdisasm/qword.h",
        "breakpad/src/third_party/libdisasm/x86_disasm.c",
        "breakpad/src/third_party/libdisasm/x86_format.c",
        "breakpad/src/third_party/libdisasm/x86_imm.c",
        "breakpad/src/third_party/libdisasm/x86_imm.h",
        "breakpad/src/third_party/libdisasm/x86_insn.c",
        "breakpad/src/third_party/libdisasm/x86_misc.c",
        "breakpad/src/third_party/libdisasm/x86_operand_list.c",
        "breakpad/src/third_party/libdisasm/x86_operand_list.h",
      ]

      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 = [
        "breakpad/src/processor/exploitability.cc",
        "breakpad/src/processor/minidump.cc",
        "breakpad/src/processor/minidump_processor.cc",
        "minidump_fuzzer.cc",
      ]

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

      defines = [ "BPLOG_MINIMUM_SEVERITY=SEVERITY_ERROR" ]
      include_dirs = [ "breakpad/src" ]

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

      # Always want these files included regardless of platform.
      set_sources_assignment_filter([])
      sources += [
        "breakpad/src/processor/exploitability_linux.cc",
        "breakpad/src/processor/exploitability_linux.h",
        "breakpad/src/processor/exploitability_win.cc",
        "breakpad/src/processor/exploitability_win.h",
        "breakpad/src/processor/symbolic_constants_win.cc",
        "breakpad/src/processor/symbolic_constants_win.h",
      ]
    }

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

      deps = [
        ":stackwalk_common",
        "//build/config:exe_and_shlib_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 = [
        "breakpad/src/processor/exploitability.cc",
        "breakpad/src/processor/minidump.cc",
        "breakpad/src/processor/minidump_processor.cc",
        "breakpad/src/processor/minidump_stackwalk.cc",
      ]

      deps = [
        ":stackwalk_common",
        "//build/config:exe_and_shlib_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 += [
        "breakpad/src/processor/exploitability_linux.cc",
        "breakpad/src/processor/exploitability_linux.h",
        "breakpad/src/processor/exploitability_win.cc",
        "breakpad/src/processor/exploitability_win.h",
        "breakpad/src/processor/symbolic_constants_win.cc",
        "breakpad/src/processor/symbolic_constants_win.h",
      ]
    }

    executable("minidump_dump") {
      set_sources_assignment_filter([])
      sources = [
        "breakpad/src/processor/basic_code_module.h",
        "breakpad/src/processor/basic_code_modules.cc",
        "breakpad/src/processor/basic_code_modules.h",
        "breakpad/src/processor/dump_context.cc",
        "breakpad/src/processor/dump_object.cc",
        "breakpad/src/processor/logging.cc",
        "breakpad/src/processor/logging.h",
        "breakpad/src/processor/minidump.cc",
        "breakpad/src/processor/minidump_dump.cc",
        "breakpad/src/processor/pathname_stripper.cc",
        "breakpad/src/processor/pathname_stripper.h",
        "breakpad/src/processor/proc_maps_linux.cc",
      ]

      configs += [ ":tools_config" ]

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

      deps = [
        "//build/config:exe_and_shlib_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) {
    executable("dump_syms") {
      sources = [
        "breakpad/src/common/dwarf/bytereader.cc",
        "breakpad/src/common/dwarf/dwarf2diehandler.cc",
        "breakpad/src/common/dwarf/dwarf2reader.cc",
        "breakpad/src/common/dwarf/elf_reader.cc",
        "breakpad/src/common/dwarf/elf_reader.h",
        "breakpad/src/common/dwarf_cfi_to_module.cc",
        "breakpad/src/common/dwarf_cu_to_module.cc",
        "breakpad/src/common/dwarf_line_to_module.cc",
        "breakpad/src/common/language.cc",
        "breakpad/src/common/mac/arch_utilities.cc",
        "breakpad/src/common/mac/arch_utilities.h",
        "breakpad/src/common/mac/dump_syms.cc",
        "breakpad/src/common/mac/file_id.cc",
        "breakpad/src/common/mac/macho_id.cc",
        "breakpad/src/common/mac/macho_reader.cc",
        "breakpad/src/common/mac/macho_utilities.cc",
        "breakpad/src/common/mac/macho_walker.cc",
        "breakpad/src/common/md5.cc",
        "breakpad/src/common/module.cc",
        "breakpad/src/common/path_helper.cc",
        "breakpad/src/common/path_helper.h",
        "breakpad/src/common/stabs_reader.cc",
        "breakpad/src/common/stabs_to_module.cc",
        "breakpad/src/tools/mac/dump_syms/dump_syms_tool.cc",
      ]

      # For breakpad/src/common/stabs_reader.h.
      defines = [ "HAVE_MACH_O_NLIST_H" ]
      include_dirs = [ "breakpad/src/common/mac" ]

      # The DWARF utilities require -funsigned-char.
      cflags = [ "-funsigned-char" ]

      configs += [ ":internal_config" ]

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

      # dwarf2reader.cc uses dynamic_cast.
      configs -= [ "//build/config/compiler:no_rtti" ]
      configs += [ "//build/config/compiler:rtti" ]

      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.
        # https://crbug.com/google-breakpad/329
        configs -= [ "//build/config/compiler:default_optimization" ]
        cflags += [ "-O0" ]
      }

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

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

      include_dirs = [ "breakpad/src/common/mac" ]

      libs = [ "Foundation.framework" ]

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

      deps = [
        "//build/config:exe_and_shlib_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 = [
      "breakpad/src/client/mac/crash_generation/ConfigFile.mm",
      "breakpad/src/client/mac/handler/breakpad_nlist_64.cc",
      "breakpad/src/client/mac/handler/dynamic_images.cc",
      "breakpad/src/client/mac/handler/minidump_generator.cc",
      "breakpad/src/client/minidump_file_writer.cc",
      "breakpad/src/common/convert_UTF.c",
      "breakpad/src/common/mac/MachIPC.mm",
      "breakpad/src/common/mac/arch_utilities.cc",
      "breakpad/src/common/mac/bootstrap_compat.cc",
      "breakpad/src/common/mac/file_id.cc",
      "breakpad/src/common/mac/launch_reporter.cc",
      "breakpad/src/common/mac/macho_id.cc",
      "breakpad/src/common/mac/macho_utilities.cc",
      "breakpad/src/common/mac/macho_walker.cc",
      "breakpad/src/common/mac/string_utilities.cc",
      "breakpad/src/common/md5.cc",
      "breakpad/src/common/simple_string_dictionary.cc",
      "breakpad/src/common/string_conversion.cc",
    ]

    configs += [ ":internal_config" ]

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

  executable("crash_inspector") {
    sources = [
      "breakpad/src/client/mac/crash_generation/Inspector.mm",
      "breakpad/src/client/mac/crash_generation/InspectorMain.mm",
    ]

    # TODO(GYP): 'mac_real_dsym': 1,

    include_dirs = [
      "breakpad/src/client/apple/Framework",
      "breakpad/src/common/mac",
      "breakpad/src",
    ]
    libs = [
      "CoreServices.framework",
      "Foundation.framework",
    ]

    deps = [
      ":utilities",
      "//build/config:exe_and_shlib_deps",
    ]
  }

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

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

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

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

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

    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 = [
        "breakpad/src/common/linux/http_upload.cc",
        "breakpad/src/common/linux/http_upload.h",
        "breakpad/src/common/linux/symbol_upload.cc",
        "breakpad/src/common/linux/symbol_upload.h",
        "breakpad/src/tools/linux/symupload/sym_upload.cc",
      ]

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

      configs += [ ":tools_config" ]

      libs = [ "dl" ]

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

    # dump_syms is a host tool, so only compile it for the host system.
    executable("dump_syms") {
      sources = [
        "breakpad/src/common/dwarf/bytereader.cc",
        "breakpad/src/common/dwarf/dwarf2diehandler.cc",
        "breakpad/src/common/dwarf/dwarf2reader.cc",
        "breakpad/src/common/dwarf/elf_reader.cc",
        "breakpad/src/common/dwarf/elf_reader.h",
        "breakpad/src/common/dwarf_cfi_to_module.cc",
        "breakpad/src/common/dwarf_cfi_to_module.h",
        "breakpad/src/common/dwarf_cu_to_module.cc",
        "breakpad/src/common/dwarf_cu_to_module.h",
        "breakpad/src/common/dwarf_line_to_module.cc",
        "breakpad/src/common/dwarf_line_to_module.h",
        "breakpad/src/common/language.cc",
        "breakpad/src/common/language.h",
        "breakpad/src/common/linux/crc32.cc",
        "breakpad/src/common/linux/crc32.h",
        "breakpad/src/common/linux/dump_symbols.cc",
        "breakpad/src/common/linux/dump_symbols.h",
        "breakpad/src/common/linux/elf_symbols_to_module.cc",
        "breakpad/src/common/linux/elf_symbols_to_module.h",
        "breakpad/src/common/linux/elfutils.cc",
        "breakpad/src/common/linux/elfutils.h",
        "breakpad/src/common/linux/file_id.cc",
        "breakpad/src/common/linux/file_id.h",
        "breakpad/src/common/linux/guid_creator.h",
        "breakpad/src/common/linux/linux_libc_support.cc",
        "breakpad/src/common/linux/linux_libc_support.h",
        "breakpad/src/common/linux/memory_mapped_file.cc",
        "breakpad/src/common/linux/memory_mapped_file.h",
        "breakpad/src/common/module.cc",
        "breakpad/src/common/module.h",
        "breakpad/src/common/path_helper.cc",
        "breakpad/src/common/path_helper.h",
        "breakpad/src/common/stabs_reader.cc",
        "breakpad/src/common/stabs_reader.h",
        "breakpad/src/common/stabs_to_module.cc",
        "breakpad/src/common/stabs_to_module.h",
        "breakpad/src/tools/linux/dump_syms/dump_syms.cc",
      ]

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

      # dwarf2reader.cc uses dynamic_cast. Because we don't typically
      # don't support RTTI, we enable it for this single target. Since
      # dump_syms doesn't share any object files with anything else,
      # this doesn't end up polluting Chrome itself.
      configs -= [ "//build/config/compiler:no_rtti" ]
      configs += [ "//build/config/compiler:rtti" ]

      # Breakpad rev 583 introduced this flag.
      # Using this define, stabs_reader.h will include a.out.h to
      # build on Linux.
      defines = [ "HAVE_A_OUT_H" ]

      include_dirs = [ "breakpad/src" ]

      deps = [
        "//build/config:exe_and_shlib_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 = [
      "breakpad/src/client/linux/crash_generation/crash_generation_client.cc",
      "breakpad/src/client/linux/crash_generation/crash_generation_client.h",
      "breakpad/src/client/linux/dump_writer_common/mapping_info.h",
      "breakpad/src/client/linux/dump_writer_common/thread_info.cc",
      "breakpad/src/client/linux/dump_writer_common/thread_info.h",
      "breakpad/src/client/linux/dump_writer_common/ucontext_reader.cc",
      "breakpad/src/client/linux/dump_writer_common/ucontext_reader.h",
      "breakpad/src/client/linux/handler/exception_handler.cc",
      "breakpad/src/client/linux/handler/exception_handler.h",
      "breakpad/src/client/linux/handler/minidump_descriptor.cc",
      "breakpad/src/client/linux/handler/minidump_descriptor.h",
      "breakpad/src/client/linux/log/log.cc",
      "breakpad/src/client/linux/log/log.h",
      "breakpad/src/client/linux/microdump_writer/microdump_writer.cc",
      "breakpad/src/client/linux/microdump_writer/microdump_writer.h",
      "breakpad/src/client/linux/minidump_writer/cpu_set.h",
      "breakpad/src/client/linux/minidump_writer/directory_reader.h",
      "breakpad/src/client/linux/minidump_writer/line_reader.h",
      "breakpad/src/client/linux/minidump_writer/linux_core_dumper.cc",
      "breakpad/src/client/linux/minidump_writer/linux_core_dumper.h",
      "breakpad/src/client/linux/minidump_writer/linux_dumper.cc",
      "breakpad/src/client/linux/minidump_writer/linux_dumper.h",
      "breakpad/src/client/linux/minidump_writer/linux_ptrace_dumper.cc",
      "breakpad/src/client/linux/minidump_writer/linux_ptrace_dumper.h",
      "breakpad/src/client/linux/minidump_writer/minidump_writer.cc",
      "breakpad/src/client/linux/minidump_writer/minidump_writer.h",
      "breakpad/src/client/linux/minidump_writer/proc_cpuinfo_reader.h",
      "breakpad/src/client/minidump_file_writer-inl.h",
      "breakpad/src/client/minidump_file_writer.cc",
      "breakpad/src/client/minidump_file_writer.h",
      "breakpad/src/common/convert_UTF.c",
      "breakpad/src/common/convert_UTF.h",
      "breakpad/src/common/linux/elf_core_dump.cc",
      "breakpad/src/common/linux/elf_core_dump.h",
      "breakpad/src/common/linux/elfutils.cc",
      "breakpad/src/common/linux/elfutils.h",
      "breakpad/src/common/linux/file_id.cc",
      "breakpad/src/common/linux/file_id.h",
      "breakpad/src/common/linux/google_crashdump_uploader.cc",
      "breakpad/src/common/linux/google_crashdump_uploader.h",
      "breakpad/src/common/linux/guid_creator.cc",
      "breakpad/src/common/linux/guid_creator.h",
      "breakpad/src/common/linux/libcurl_wrapper.cc",
      "breakpad/src/common/linux/libcurl_wrapper.h",
      "breakpad/src/common/linux/linux_libc_support.cc",
      "breakpad/src/common/linux/linux_libc_support.h",
      "breakpad/src/common/linux/memory_mapped_file.cc",
      "breakpad/src/common/linux/memory_mapped_file.h",
      "breakpad/src/common/linux/safe_readlink.cc",
      "breakpad/src/common/linux/safe_readlink.h",
      "breakpad/src/common/memory_allocator.h",
      "breakpad/src/common/simple_string_dictionary.cc",
      "breakpad/src/common/simple_string_dictionary.h",
      "breakpad/src/common/string_conversion.cc",
      "breakpad/src/common/string_conversion.h",
    ]

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

    if (current_cpu == "arm" && is_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 += [ "breakpad/src/common/android/breakpad_getcontext.S" ]
    }

    libs = [ "dl" ]

    include_dirs = [
      ".",
      "breakpad/src",
      "breakpad/src/client",
      "breakpad/src/third_party/linux/include",
    ]
  }

  static_library("processor_support") {
    set_sources_assignment_filter([])
    sources = [
      "breakpad/src/common/scoped_ptr.h",
      "breakpad/src/processor/basic_code_modules.cc",
      "breakpad/src/processor/basic_code_modules.h",
      "breakpad/src/processor/dump_context.cc",
      "breakpad/src/processor/dump_object.cc",
      "breakpad/src/processor/logging.cc",
      "breakpad/src/processor/logging.h",
      "breakpad/src/processor/minidump.cc",
      "breakpad/src/processor/pathname_stripper.cc",
      "breakpad/src/processor/pathname_stripper.h",
      "breakpad/src/processor/proc_maps_linux.cc",
    ]

    include_dirs = [
      "breakpad/src",
      "breakpad/src/client",
      "breakpad/src/third_party/linux/include",
      ".",
    ]

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

  test("breakpad_unittests") {
    set_sources_assignment_filter([])
    sources = [
      "breakpad/src/client/linux/handler/exception_handler_unittest.cc",
      "breakpad/src/client/linux/minidump_writer/cpu_set_unittest.cc",
      "breakpad/src/client/linux/minidump_writer/directory_reader_unittest.cc",
      "breakpad/src/client/linux/minidump_writer/line_reader_unittest.cc",
      "breakpad/src/client/linux/minidump_writer/linux_core_dumper_unittest.cc",
      "breakpad/src/client/linux/minidump_writer/linux_ptrace_dumper_unittest.cc",
      "breakpad/src/client/linux/minidump_writer/minidump_writer_unittest.cc",
      "breakpad/src/client/linux/minidump_writer/minidump_writer_unittest_utils.cc",
      "breakpad/src/client/linux/minidump_writer/proc_cpuinfo_reader_unittest.cc",
      "breakpad/src/common/linux/elf_core_dump_unittest.cc",
      "breakpad/src/common/linux/file_id_unittest.cc",
      "breakpad/src/common/linux/linux_libc_support_unittest.cc",
      "breakpad/src/common/linux/synth_elf.cc",
      "breakpad/src/common/linux/tests/auto_testfile.h",
      "breakpad/src/common/linux/tests/crash_generator.cc",
      "breakpad/src/common/linux/tests/crash_generator.h",
      "breakpad/src/common/memory_allocator_unittest.cc",
      "breakpad/src/common/memory_range.h",
      "breakpad/src/common/simple_string_dictionary_unittest.cc",
      "breakpad/src/common/test_assembler.cc",
      "breakpad/src/common/tests/file_utils.cc",
      "breakpad/src/common/tests/file_utils.h",
      "breakpad/src/tools/linux/md2core/minidump_memory_range.h",
      "breakpad/src/tools/linux/md2core/minidump_memory_range_unittest.cc",
      "linux/breakpad_googletest_includes.h",
    ]

    deps = [
      ":client",
      ":processor_support",
      "//build/config:exe_and_shlib_deps",
      "//testing/gmock",
      "//testing/gtest",
      "//testing/gtest:gtest_main",
    ]

    data_deps = [
      ":linux_dumper_unittest_helper",
    ]

    include_dirs = [
      "linux",  # Use our copy of breakpad_googletest_includes.h
      ".",
    ]

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

    if (is_clang) {
      # See https://crbug.com/138571#c18
      cflags = [ "-Wno-unused-value" ]
    }

    if (is_android) {
      use_raw_android_executable = true
      sources +=
          [ "breakpad/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 = [
      "breakpad/src/client/linux/minidump_writer/linux_dumper_unittest_helper.cc",
    ]
    deps = [
      ":processor_support",
      "//build/config:exe_and_shlib_deps",
    ]

    configs += [ ":client_config" ]

    if (is_component_build) {
      ldflags = [ "-Wl,-rpath,\$ORIGIN" ]
    }
  }

  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:exe_and_shlib_deps",
    ]

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

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

    include_dirs = [ "breakpad/src" ]

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

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

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

    include_dirs = [ "breakpad/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",
      "breakpad/src",
    ]

    sources = [
      "breakpad/src/common/windows/dia_util.cc",
      "breakpad/src/common/windows/dia_util.h",
      "breakpad/src/common/windows/guid_string.cc",
      "breakpad/src/common/windows/guid_string.h",
      "breakpad/src/common/windows/omap.cc",
      "breakpad/src/common/windows/omap.h",
      "breakpad/src/common/windows/pdb_source_line_writer.cc",
      "breakpad/src/common/windows/pdb_source_line_writer.h",
      "breakpad/src/common/windows/string_utils-inl.h",
      "breakpad/src/common/windows/string_utils.cc",
      "breakpad/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 = [
      "breakpad/src/client/ios/Breakpad.h",
      "breakpad/src/client/ios/Breakpad.mm",
      "breakpad/src/client/ios/BreakpadController.h",
      "breakpad/src/client/ios/BreakpadController.mm",
      "breakpad/src/client/ios/handler/ios_exception_minidump_generator.h",
      "breakpad/src/client/ios/handler/ios_exception_minidump_generator.mm",
      "breakpad/src/client/mac/crash_generation/ConfigFile.h",
      "breakpad/src/client/mac/crash_generation/ConfigFile.mm",
      "breakpad/src/client/mac/handler/breakpad_nlist_64.cc",
      "breakpad/src/client/mac/handler/breakpad_nlist_64.h",
      "breakpad/src/client/mac/handler/dynamic_images.cc",
      "breakpad/src/client/mac/handler/dynamic_images.h",
      "breakpad/src/client/mac/handler/exception_handler.cc",
      "breakpad/src/client/mac/handler/exception_handler.h",
      "breakpad/src/client/mac/handler/minidump_generator.cc",
      "breakpad/src/client/mac/handler/minidump_generator.h",
      "breakpad/src/client/mac/handler/protected_memory_allocator.cc",
      "breakpad/src/client/mac/handler/protected_memory_allocator.h",
      "breakpad/src/client/mac/sender/uploader.h",
      "breakpad/src/client/mac/sender/uploader.mm",
      "breakpad/src/client/minidump_file_writer-inl.h",
      "breakpad/src/client/minidump_file_writer.cc",
      "breakpad/src/client/minidump_file_writer.h",
      "breakpad/src/common/convert_UTF.c",
      "breakpad/src/common/convert_UTF.h",
      "breakpad/src/common/long_string_dictionary.cc",
      "breakpad/src/common/mac/HTTPMultipartUpload.m",
      "breakpad/src/common/mac/file_id.cc",
      "breakpad/src/common/mac/file_id.h",
      "breakpad/src/common/mac/macho_id.cc",
      "breakpad/src/common/mac/macho_id.h",
      "breakpad/src/common/mac/macho_utilities.cc",
      "breakpad/src/common/mac/macho_utilities.h",
      "breakpad/src/common/mac/macho_walker.cc",
      "breakpad/src/common/mac/macho_walker.h",
      "breakpad/src/common/mac/string_utilities.cc",
      "breakpad/src/common/mac/string_utilities.h",
      "breakpad/src/common/md5.cc",
      "breakpad/src/common/md5.h",
      "breakpad/src/common/simple_string_dictionary.cc",
      "breakpad/src/common/simple_string_dictionary.h",
      "breakpad/src/common/string_conversion.cc",
      "breakpad/src/common/string_conversion.h",
      "breakpad/src/google_breakpad/common/minidump_format.h",
    ]
    set_sources_assignment_filter(sources_assignment_filter)

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

    deps = [
      "//third_party/google_toolbox_for_mac",
    ]

    public_configs = [ ":client_config" ]

    if (is_clang) {
      # See https://crbug.com/google-breakpad/675.
      cflags = [ "-Wno-deprecated-declarations" ]
    }
  }
}

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

  config("breakpad_handler_warnings") {
    if (is_clang) {
      # See https://crbug.com/google-breakpad/658.
      cflags = [ "-Wno-reorder" ]
    }
  }

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

    defines = [ "BREAKPAD_NO_TERMINATE_THREAD" ]

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

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