# Copyright 2018 The Chromium OS 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("//common-mk/pkg_config.gni")
import("//common-mk/proto_library.gni")

group("all") {
  deps = [
    ":anomaly_detector",
    ":crash_reporter",
    ":crash_sender",
    ":libcrash",
    ":libcrash_reporter",
  ]
  if (use.cheets) {
    deps += [ ":core_collector" ]
  }
  if (use.test) {
    deps += [
      ":anomaly_detector_log_reader_test",
      ":anomaly_detector_test",
      ":anomaly_detector_text_file_reader_test",
      ":crash_reporter_test",
    ]
  }
  if (use.fuzzer) {
    deps += [
      ":anomaly_detector_fuzzer",
      ":crash_sender_fuzzer",
    ]
  }
}

pkg_config("libcrash_config") {
  pkg_deps = [
    "libchrome-${libbase_ver}",
    "libsession_manager-client",
    "re2",
    "vboot_host",
    "zlib",
  ]
}

static_library("libcrash") {
  all_dependent_configs = [ ":libcrash_config" ]
  sources = [
    "paths.cc",
    "util.cc",
  ]

  defines = [ "USE_DIRENCRYPTION=${use.direncryption}" ]

  if (use.direncryption) {
    libs = [ "keyutils" ]
  }
}

pkg_config("libcrash_reporter_config") {
  pkg_deps = [
    "libbrillo",
    "libchrome-${libbase_ver}",
    "libdebugd-client",
    "libpcrecpp",
    "libsession_manager-client",
  ]
}

static_library("libcrash_reporter") {
  all_dependent_configs = [ ":libcrash_reporter_config" ]
  sources = [
    "bert_collector.cc",
    "chrome_collector.cc",
    "crash_collector.cc",
    "crash_reporter_failure_collector.cc",
    "ec_collector.cc",
    "ephemeral_crash_collector.cc",
    "generic_failure_collector.cc",
    "kernel_collector.cc",
    "kernel_warning_collector.cc",
    "missed_crash_collector.cc",
    "mount_failure_collector.cc",
    "selinux_violation_collector.cc",
    "udev_collector.cc",
    "unclean_shutdown_collector.cc",
    "user_collector.cc",
    "user_collector_base.cc",
    "vm_collector.cc",
    "vm_support.cc",
  ]
  defines = [
    "USE_DIRENCRYPTION=${use.direncryption}",
    "USE_KVM_GUEST=${use.kvm_guest}",
  ]

  if (use.cheets) {
    sources += [
      "arc_collector.cc",
      "arc_util.cc",
    ]
  }

  if (use.kvm_guest) {
    sources += [ "vm_support_proper.cc" ]
  }
}

pkg_config("crash_reporter_config") {
  pkg_deps = [
    "dbus-1",
    "libmetrics-${libbase_ver}",
    "libminijail",
    "protobuf",
    "vm_protos",
  ]

  if (use.kvm_guest) {
    pkg_deps += [ "grpc++" ]
  }
}

executable("crash_reporter") {
  configs += [ ":crash_reporter_config" ]
  sources = [ "crash_reporter.cc" ]
  defines = [
    "USE_CHEETS=${use.cheets}",
    "USE_KVM_GUEST=${use.kvm_guest}",
  ]
  deps = [
    ":libcrash",
    ":libcrash_reporter",
  ]
}

pkg_config("libcrash_sender_config") {
  pkg_deps = [
    "libbrillo",
    "libchrome-${libbase_ver}",
    "libmetrics-${libbase_ver}",
    "libminijail",
    "libsession_manager-client",
    "libshill-client",
  ]
  if (use.fuzzer) {
    pkg_deps += [ "protobuf" ]
  } else {
    pkg_deps += [ "protobuf-lite" ]
  }
}

proto_library("crash_sender_proto") {
  proto_in_dir = "./proto"
  proto_out_dir = "include/crash-reporter"
  sources = [ "${proto_in_dir}/crash_sender.proto" ]
}

static_library("libcrash_sender") {
  all_dependent_configs = [ ":libcrash_sender_config" ]
  sources = [ "crash_sender_util.cc" ]
  defines = [ "USE_CHROMELESS_TTY=${use.chromeless_tty}" ]
  deps = [ ":crash_sender_proto" ]
}

executable("crash_sender") {
  sources = [ "crash_sender.cc" ]
  deps = [
    ":libcrash",
    ":libcrash_sender",
  ]
}

pkg_config("anomaly_detector_config") {
  # NOSORT
  pkg_deps = [
    "libbrillo",
    "libchrome-${libbase_ver}",
    "libmetrics-${libbase_ver}",
    "re2",

    # system_api depends on protobuf (or protobuf-lite). It must appear
    # before protobuf here or the linker flags won't be in the right
    # order.
    "system_api",
  ]
  if (use.fuzzer) {
    pkg_deps += [ "protobuf" ]
  } else {
    pkg_deps += [ "protobuf-lite" ]
  }
}

executable("anomaly_detector") {
  configs += [ ":anomaly_detector_config" ]
  sources = [
    "anomaly_detector.cc",
    "anomaly_detector_log_reader.cc",
    "anomaly_detector_main.cc",
    "anomaly_detector_text_file_reader.cc",
    "crash_reporter_parser.cc",
  ]
  deps = [ ":libcrash" ]
  libs = [
    "system_api-metrics_event-protos",
    "system_api-anomaly_detector-protos",
  ]
}

if (use.cheets) {
  pkg_config("core_collector_config") {
    pkg_deps = [ "breakpad-client" ]
  }

  executable("core_collector") {
    configs += [ ":core_collector_config" ]
    sources = [
      "core-collector/core_collector.cc",
      "core-collector/coredump_writer.cc",
      "core-collector/coredump_writer.h",
    ]

    # This condition matches the "use_i686" helper in the "cros-i686"
    # eclass. The "amd64" check allows the "cros_i686" USE flag to be
    # enabled for an overlay inherited by non-x86 boards.
    if (use.cros_i686 && use.amd64) {
      configs -= [ "//common-mk:pie" ]
    }
  }
}

if (use.test || use.fuzzer) {
  pkg_config("crash_reporter_test_config") {
    pkg_deps = [
      "libchrome-test-${libbase_ver}",
      "libdebugd-client-test",
      "libmetrics-${libbase_ver}",
      "libsession_manager-client-test",
      "libshill-client-test",
      "protobuf",
      "vm_protos",
    ]

    if (use.kvm_guest) {
      pkg_deps += [ "grpc++" ]
    }
  }

  static_library("libcrash_test_util") {
    all_dependent_configs = [
      ":crash_reporter_test_config",
      ":libcrash_config",
    ]
    configs += [
      "//common-mk:test",
      ":libcrash_reporter_config",
    ]
    sources = [ "test_util.cc" ]
  }
}

if (use.test) {
  pkg_config("test_helper_config") {
    pkg_deps = [
      "libbrillo",
      "libchrome-${libbase_ver}",
      "libchrome-test-${libbase_ver}",
    ]
  }

  executable("lock_file_tester") {
    configs += [
      "//common-mk:test",
      ":test_helper_config",
    ]
    sources = [ "lock_file_tester.cc" ]
  }

  executable("hold_lock_file") {
    configs += [
      "//common-mk:test",
      ":test_helper_config",
    ]
    sources = [ "hold_lock_file.cc" ]
  }

  executable("crash_reporter_test") {
    configs += [
      "//common-mk:test",
      ":crash_reporter_test_config",
    ]
    sources = [
      "bert_collector_test.cc",
      "chrome_collector_test.cc",
      "crash_collector_test.cc",
      "crash_collector_test.h",
      "crash_reporter_failure_collector_test.cc",
      "crash_reporter_logs_test.cc",
      "crash_sender_util_test.cc",
      "ec_collector_test.cc",
      "ephemeral_crash_collector_test.cc",
      "generic_failure_collector_test.cc",
      "kernel_collector_test.cc",
      "kernel_collector_test.h",
      "kernel_warning_collector_test.cc",
      "missed_crash_collector_test.cc",
      "mount_failure_collector_test.cc",
      "paths_test.cc",
      "selinux_violation_collector_test.cc",
      "testrunner.cc",
      "udev_collector_test.cc",
      "unclean_shutdown_collector_test.cc",
      "user_collector_test.cc",
      "util_test.cc",
    ]
    defines = [
      "USE_KVM_GUEST=${use.kvm_guest}",
      "USE_CHROMELESS_TTY=${use.chromeless_tty}",
    ]
    deps = [
      ":hold_lock_file",
      ":libcrash",
      ":libcrash_reporter",
      ":libcrash_sender",
      ":libcrash_test_util",
      ":lock_file_tester",
    ]

    if (use.cheets) {
      sources += [
        "arc_collector_test.cc",
        "arc_util_test.cc",
      ]
    }
  }

  executable("anomaly_detector_test") {
    configs += [
      "//common-mk:test",
      ":anomaly_detector_config",
      ":crash_reporter_test_config",
    ]
    sources = [
      "anomaly_detector.cc",
      "anomaly_detector_test.cc",
      "anomaly_detector_test_utils.cc",
      "crash_reporter_parser.cc",
      "crash_reporter_parser_test.cc",
      "test_util.cc",
    ]
    deps = [
      ":libcrash",
      "//common-mk/testrunner:testrunner",
    ]
    libs = [ "system_api-anomaly_detector-protos" ]
  }

  executable("anomaly_detector_text_file_reader_test") {
    configs += [
      "//common-mk:test",
      ":anomaly_detector_config",
      ":crash_reporter_test_config",
    ]
    sources = [
      "anomaly_detector_text_file_reader.cc",
      "anomaly_detector_text_file_reader_test.cc",
      "test_util.cc",
    ]
    deps = [
      ":libcrash",
      "//common-mk/testrunner:testrunner",
    ]
    libs = [ "system_api-anomaly_detector-protos" ]
  }

  executable("anomaly_detector_log_reader_test") {
    configs += [
      "//common-mk:test",
      ":anomaly_detector_config",
      ":crash_reporter_test_config",
    ]
    sources = [
      "anomaly_detector_log_reader.cc",
      "anomaly_detector_log_reader_test.cc",
      "anomaly_detector_text_file_reader.cc",
      "test_util.cc",
    ]
    deps = [
      ":libcrash",
      "//common-mk/testrunner:testrunner",
    ]
    libs = [ "system_api-anomaly_detector-protos" ]
  }
}

if (use.fuzzer) {
  executable("crash_sender_fuzzer") {
    configs += [ "//common-mk/common_fuzzer:common_fuzzer" ]
    deps = [
      ":libcrash",
      ":libcrash_sender",
      ":libcrash_test_util",
    ]
    sources = [ "crash_sender_fuzzer.cc" ]
  }

  executable("anomaly_detector_fuzzer") {
    configs += [
      "//common-mk/common_fuzzer:common_fuzzer",
      ":anomaly_detector_config",
    ]
    deps = [
      ":libcrash",
      ":libcrash_test_util",
    ]
    sources = [
      "anomaly_detector.cc",
      "anomaly_detector_fuzzer.cc",
      "crash_reporter_parser.cc",
    ]
    libs = [ "system_api-anomaly_detector-protos" ]
  }
}
