# Copyright 2018 The Fuchsia 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/package.gni")

executable("bin") {
  output_name = "crashpad_analyzer"

  deps = [
    ":crashpad_analyzer_files",
    "//garnet/public/lib/component/cpp",
    "//garnet/public/lib/syslog/cpp",
    "//zircon/public/fidl/fuchsia-crash",
    "//zircon/public/lib/async-loop-cpp",
  ]

  sources = [
    "main.cc",
  ]
}

package("crashpad_analyzer") {
  deps = [
    ":bin",
  ]

  binary = "crashpad_analyzer"

  meta = [
    {
      path = "meta/crashpad_analyzer.cmx"
      dest = "crashpad_analyzer.cmx"
    },
  ]

  resources = [
    {
      path = "configs/default.json"
      dest = "default_config.json"
    },
  ]
}

package("upload_to_prod_server_config") {
  deprecated_system_image = true
  resources = [
    {
      path = "configs/upload_to_prod_server.json"
      dest = "crashpad_analyzer/override_config.json"
    },
  ]
}

source_set("crashpad_analyzer_files") {
  sources = [
    "config.cc",
    "config.h",
    "crashpad_analyzer_impl.cc",
    "crashpad_analyzer_impl.h",
    "report_annotations.cc",
    "report_annotations.h",
    "report_attachments.cc",
    "report_attachments.h",
    "scoped_unlink.h",
  ]

  public_deps = [
    "//garnet/public/lib/fidl/cpp",
    "//garnet/public/lib/fxl",
    "//third_party/crashpad/client",
    "//third_party/crashpad/util",
    "//zircon/public/fidl/fuchsia-crash",
    "//zircon/public/fidl/fuchsia-mem",
    "//zircon/public/lib/zx",
  ]

  deps = [
    "//garnet/public/lib/syslog/cpp",
    "//third_party/crashpad/handler",
    "//third_party/crashpad/minidump",
    "//third_party/crashpad/third_party/mini_chromium/mini_chromium/base",
    "//third_party/rapidjson",
    "//zircon/public/fidl/fuchsia-sysinfo:fuchsia-sysinfo_c",
    "//zircon/public/lib/fbl",
    "//zircon/public/lib/fdio",
    "//zircon/public/lib/inspector",
  ]
}
