# Copyright 2015 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.

static_library("minidump") {
  deps = [
    "../compat",
    "../snapshot",
    "../util",
    "//third_party/mini_chromium/base",
  ]

  include_dirs = [ ".." ]

  if (is_win) {
    cflags = [
      "/wd4201",
      "/wd4324",
    ]
  }

  sources = [
    "minidump_context.h",
    "minidump_context_writer.cc",
    "minidump_context_writer.h",
    "minidump_crashpad_info_writer.cc",
    "minidump_crashpad_info_writer.h",
    "minidump_exception_writer.cc",
    "minidump_exception_writer.h",
    "minidump_extensions.cc",
    "minidump_extensions.h",
    "minidump_file_writer.cc",
    "minidump_file_writer.h",
    "minidump_handle_writer.cc",
    "minidump_handle_writer.h",
    "minidump_memory_info_writer.cc",
    "minidump_memory_info_writer.h",
    "minidump_memory_writer.cc",
    "minidump_memory_writer.h",
    "minidump_misc_info_writer.cc",
    "minidump_misc_info_writer.h",
    "minidump_module_crashpad_info_writer.cc",
    "minidump_module_crashpad_info_writer.h",
    "minidump_module_writer.cc",
    "minidump_module_writer.h",
    "minidump_rva_list_writer.cc",
    "minidump_rva_list_writer.h",
    "minidump_simple_string_dictionary_writer.cc",
    "minidump_simple_string_dictionary_writer.h",
    "minidump_stream_writer.cc",
    "minidump_stream_writer.h",
    "minidump_string_writer.cc",
    "minidump_string_writer.h",
    "minidump_system_info_writer.cc",
    "minidump_system_info_writer.h",
    "minidump_thread_id_map.cc",
    "minidump_thread_id_map.h",
    "minidump_thread_writer.cc",
    "minidump_thread_writer.h",
    "minidump_unloaded_module_writer.cc",
    "minidump_unloaded_module_writer.h",
    "minidump_user_extension_stream_data_source.cc",
    "minidump_user_extension_stream_data_source.h",
    "minidump_user_stream_writer.cc",
    "minidump_user_stream_writer.h",
    "minidump_writable.cc",
    "minidump_writable.h",
    "minidump_writer_util.cc",
    "minidump_writer_util.h",
  ]
}

static_library("test_lib") {
  testonly = true

  deps = [
    ":minidump",
    "../compat",
    "../third_party/gtest",
    "//third_party/mini_chromium/base",
  ]

  include_dirs = [ ".." ]

  sources = [
    "test/minidump_context_test_util.cc",
    "test/minidump_context_test_util.h",
    "test/minidump_file_writer_test_util.cc",
    "test/minidump_file_writer_test_util.h",
    "test/minidump_memory_writer_test_util.cc",
    "test/minidump_memory_writer_test_util.h",
    "test/minidump_rva_list_test_util.cc",
    "test/minidump_rva_list_test_util.h",
    "test/minidump_string_writer_test_util.cc",
    "test/minidump_string_writer_test_util.h",
    "test/minidump_user_extension_stream_util.cc",
    "test/minidump_user_extension_stream_util.h",
    "test/minidump_writable_test_util.cc",
    "test/minidump_writable_test_util.h",
  ]
}

# GN orders target flags before config flags. These flags need to be after
# the -Wall added by the default config, so they can't live on the executable
# target (whose flags appear before the default config).
config("minidump_test_config") {
  visibility = [ "./*" ]
  # Allows initializers like "MINIDUMP_STRING x = {0}" which don't provide
  # values for all fields. Normally we would use "= {}", but MSVC doesn't like
  # it, possibly because of the zero-length array in MINIDUMP_STRING.
  # TODO: if(fuchsia)
  cflags = [
    "-Wno-missing-field-initializers"
  ]
}

executable("minidump_test") {
  testonly = true

  deps = [
    "../third_party/gtest",
    "../snapshot:test_lib",
    "../test",
    "../test:gtest_main",
    "../util",
    "//third_party/mini_chromium/base",
    ":minidump",
    ":test_lib",
  ]

  include_dirs = [ ".." ]

  sources = [
    "minidump_context_writer_test.cc",
    "minidump_crashpad_info_writer_test.cc",
    "minidump_exception_writer_test.cc",
    "minidump_file_writer_test.cc",
    "minidump_handle_writer_test.cc",
    "minidump_memory_info_writer_test.cc",
    "minidump_memory_writer_test.cc",
    "minidump_misc_info_writer_test.cc",
    "minidump_module_crashpad_info_writer_test.cc",
    "minidump_module_writer_test.cc",
    "minidump_rva_list_writer_test.cc",
    "minidump_simple_string_dictionary_writer_test.cc",
    "minidump_string_writer_test.cc",
    "minidump_system_info_writer_test.cc",
    "minidump_thread_id_map_test.cc",
    "minidump_thread_writer_test.cc",
    "minidump_unloaded_module_writer_test.cc",
    "minidump_user_stream_writer_test.cc",
    "minidump_writable_test.cc",
  ]

  configs += [ ":minidump_test_config" ]
}
