# 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",
    ":crash_serializer_main",
    ":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",
      ":chrome_collector_fuzzer",
      ":crash_sender_fuzzer",
    ]
  }
}

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

static_library("libcrash") {
  sources = [
    "paths.cc",
    "util.cc",
  ]
  all_dependent_configs = [ ":libcrash_config" ]
  defines = [ "USE_DIRENCRYPTION=${use.direncryption}" ]

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

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

static_library("libcrash_reporter") {
  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_util.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",
  ]
  all_dependent_configs = [ ":libcrash_reporter_config" ]
  defines = [
    "USE_DIRENCRYPTION=${use.direncryption}",
    "USE_KVM_GUEST=${use.kvm_guest}",
  ]

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

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

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

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

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

pkg_config("libcrash_sender_config") {
  pkg_deps = [
    "libbrillo",
    "libchrome",
    "libmetrics",
    "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") {
  sources = [
    "crash_sender_base.cc",
    "crash_sender_util.cc",
  ]
  all_dependent_configs = [ ":libcrash_sender_config" ]
  defines = [ "USE_CHROMELESS_TTY=${use.chromeless_tty}" ]
  deps = [ ":crash_sender_proto" ]
}

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

pkg_config("crash_serializer_config") {
  pkg_deps = [
    "libbrillo",
    "libchrome",
    "libsession_manager-client",
    "protobuf",
  ]
}

static_library("libcrash_serializer") {
  sources = [ "crash_serializer.cc" ]
  all_dependent_configs = [ ":crash_serializer_config" ]
  deps = [
    ":crash_serializer_proto",
    ":libcrash",
    ":libcrash_sender",
  ]
}

executable("crash_serializer_main") {
  output_name = "crash_serializer"
  sources = [ "crash_serializer_main.cc" ]
  deps = [
    ":libcrash",
    ":libcrash_sender",
    ":libcrash_serializer",
  ]
}

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

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

    # system_api depends on protobuf. It must appear before protobuf
    # here or the linker flags won't be in the right order.
    "system_api",
    "vm_protos",

    "protobuf",
  ]
}

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

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

  executable("core_collector") {
    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) {
      # We link the C & C++ runtime statically because dynamic libs for these
      # (multilib) ABIs aren't installed.  The eclasses handle forcing -static,
      # and that doesn't work with PIE linking
      configs -= [ "//common-mk:pie" ]
    }

    # This condition matches the "use_arm64" helper in the "cros-arm64"
    # eclass. The "arm" check allows the "cros_arm64" USE flag to be
    # enabled for an overlay inherited by non-arm boards.
    if (use.cros_arm64 && use.arm) {
      # We link the C & C++ runtime statically because dynamic libs for these
      # (multilib) ABIs aren't installed.  The eclasses handle forcing -static,
      # and that doesn't work with PIE linking
      configs -= [ "//common-mk:pie" ]
    }
    configs += [ ":core_collector_config" ]
  }
}

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

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

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

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

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

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

  executable("crash_reporter_test") {
    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_base_test.cc",
      "crash_sender_util_test.cc",
      "crash_serializer_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_util_test.cc",
      "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",
    ]
    configs += [
      "//common-mk:test",
      ":crash_reporter_test_config",
    ]
    defines = [
      "USE_KVM_GUEST=${use.kvm_guest}",
      "USE_CHROMELESS_TTY=${use.chromeless_tty}",
    ]
    deps = [
      ":crash_serializer_proto",
      ":hold_lock_file",
      ":libcrash",
      ":libcrash_reporter",
      ":libcrash_sender",
      ":libcrash_serializer",
      ":libcrash_test_util",
      ":lock_file_tester",
    ]

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

  executable("anomaly_detector_test") {
    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",
    ]
    configs += [
      "//common-mk:test",
      ":anomaly_detector_config",
      ":crash_reporter_test_config",
    ]
    libs = [ "system_api-anomaly_detector-protos" ]
    deps = [
      ":libcrash",
      "//common-mk/testrunner:testrunner",
    ]
  }

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

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

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

  executable("chrome_collector_fuzzer") {
    sources = [ "chrome_collector_fuzzer.cc" ]
    configs += [
      "//common-mk/common_fuzzer:common_fuzzer",
      ":crash_reporter_test_config",
    ]
    deps = [
      ":libcrash",
      ":libcrash_reporter",
      ":libcrash_test_util",
    ]
  }

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