# 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/generate-dbus-adaptors.gni")
import("//common-mk/pkg_config.gni")
import("//common-mk/proto_library.gni")

group("all") {
  deps = [
    ":bt_usb_disconnect_helper",
    ":capture_packets",
    ":cups_uri_helper",
    ":debugd",
    ":debugd-adaptors",
    ":debugd_dbus_utils",
    ":dev_features_chrome_remote_debugging",
    ":dev_features_password",
    ":dev_features_rootfs_verification",
    ":dev_features_ssh",
    ":dev_features_usb_boot",
    ":external-proto",
    ":generate_logs",
    ":icmp",
    ":libdebugd",
    ":netif",
    ":network_status",
    ":scheduler_configuration_helper",
    ":usb4_devinfo_helper",
  ]
  if (use.test) {
    deps += [ ":debugd_testrunner" ]
  }
}

pkg_config("target_defaults") {
  defines = [
    "USE_CELLULAR=${use.cellular}",
    "USE_IWLWIFI_DUMP=${use.iwlwifi_dump}",
    "USE_TPM=${use.tpm}",
    "USE_ARCVM=${use.arcvm}",
  ]

  pkg_deps = [
    "dbus-1",
    "libbrillo",
    "libchrome",
    "libcryptohome-client",
    "liblzma",
    "libminijail",
    "vboot_host",
  ]
}

proto_library("external-proto") {
  proto_in_dir = "${sysroot}/usr/include/chromeos/dbus/cryptohome"
  proto_out_dir = "include"
  sources = [
    "${proto_in_dir}/key.proto",
    "${proto_in_dir}/rpc.proto",
  ]
}

generate_dbus_adaptors("debugd-adaptors") {
  dbus_service_config = "dbus_bindings/dbus-service-config.json"
  dbus_adaptors_out_dir = "include/debugd/dbus_adaptors"
  sources = [ "dbus_bindings/org.chromium.debugd.xml" ]
}

pkg_config("libdebugd_dependent_config") {
  # NOSORT
  pkg_deps = [
    "libshill-client",
    "libuser_data_auth-client",

    # system_api depends on protobuf. It must appear before protobuf here so the
    # linker flags are in the right order.
    "system_api",
    "protobuf",
  ]
}

static_library("libdebugd") {
  sources = [
    "src/battery_tool.cc",
    "src/bluetooth_utils.cc",
    "src/constants.cc",
    "src/container_tool.cc",
    "src/crash_sender_tool.cc",
    "src/cros_healthd_tool.cc",
    "src/cups_tool.cc",
    "src/debug_logs_tool.cc",
    "src/debug_mode_tool.cc",
    "src/debugd_dbus_adaptor.cc",
    "src/dev_features_tool.cc",
    "src/dev_mode_no_owner_restriction.cc",
    "src/dmesg_tool.cc",
    "src/ec_typec_tool.cc",
    "src/ectool_util.cc",
    "src/example_tool.cc",
    "src/helper_utils.cc",
    "src/icmp_tool.cc",
    "src/ipaddrs_tool.cc",
    "src/kernel_feature_tool.cc",
    "src/log_tool.cc",
    "src/memory_tool.cc",
    "src/netif_tool.cc",
    "src/network_status_tool.cc",
    "src/oom_adj_tool.cc",
    "src/packet_capture_tool.cc",
    "src/perf_tool.cc",
    "src/ping_tool.cc",
    "src/probe_tool.cc",
    "src/process_with_id.cc",
    "src/process_with_output.cc",
    "src/route_tool.cc",
    "src/sandboxed_process.cc",
    "src/scheduler_configuration_tool.cc",
    "src/session_manager_proxy.cc",
    "src/shill_scripts_tool.cc",
    "src/simple_service_tool.cc",
    "src/storage_tool.cc",
    "src/subprocess_tool.cc",
    "src/swap_tool.cc",
    "src/sysrq_tool.cc",
    "src/systrace_tool.cc",
    "src/tracepath_tool.cc",
    "src/u2f_tool.cc",
    "src/variant_utils.cc",
    "src/verify_ro_tool.cc",
    "src/wifi_fw_dump_tool.cc",
    "src/wifi_power_tool.cc",
  ]
  configs += [ ":target_defaults" ]
  all_dependent_configs = [ ":libdebugd_dependent_config" ]
  libs = [ "policy" ]
  deps = [
    ":debugd-adaptors",
    ":external-proto",
  ]
}

static_library("debugd_dbus_utils") {
  sources = [
    "src/helpers/shill_proxy.cc",
    "src/helpers/system_service_proxy.cc",
  ]
  configs += [ ":target_defaults" ]
}

pkg_config("debugd_config") {
  pkg_deps = [ "protobuf" ]
}

executable("debugd") {
  sources = [ "src/main.cc" ]
  configs += [
    ":debugd_config",
    ":target_defaults",
  ]
  deps = [ ":libdebugd" ]
}

pkg_config("capture_packets_config") {
  pkg_deps = [ "libcap" ]
}

executable("capture_packets") {
  sources = [ "src/helpers/capture_packets.cc" ]
  configs += [
    ":capture_packets_config",
    ":target_defaults",
  ]
  libs = [ "pcap" ]
}

executable("cups_uri_helper") {
  sources = [
    "src/helpers/cups_uri_helper.cc",
    "src/helpers/cups_uri_helper_utils.cc",
  ]
  configs += [ ":target_defaults" ]
}

executable("dev_features_chrome_remote_debugging") {
  sources = [ "src/helpers/dev_features_chrome_remote_debugging.cc" ]
  configs += [ ":target_defaults" ]
  deps = [ ":libdebugd" ]
}

executable("dev_features_password") {
  sources = [
    "src/helpers/dev_features_password.cc",
    "src/helpers/dev_features_password_utils.cc",
  ]
  configs += [ ":target_defaults" ]
  deps = [ ":libdebugd" ]
}

executable("dev_features_rootfs_verification") {
  sources = [ "src/helpers/dev_features_rootfs_verification.cc" ]
  configs += [ ":target_defaults" ]
  libs = [ "rootdev" ]
  deps = [ ":libdebugd" ]
}

executable("dev_features_ssh") {
  sources = [ "src/helpers/dev_features_ssh.cc" ]
  configs += [ ":target_defaults" ]
  deps = [ ":libdebugd" ]
}

pkg_config("dev_features_usb_boot_config") {
  pkg_deps = [ "vboot_host" ]
}

executable("dev_features_usb_boot") {
  sources = [ "src/helpers/dev_features_usb_boot.cc" ]
  configs += [
    ":dev_features_usb_boot_config",
    ":target_defaults",
  ]
  deps = [ ":libdebugd" ]
}

executable("generate_logs") {
  sources = [ "tools/generate_logs.cc" ]
  configs += [ ":target_defaults" ]
}

executable("icmp") {
  sources = [ "src/helpers/icmp.cc" ]
  configs += [ ":target_defaults" ]
}

executable("netif") {
  sources = [ "src/helpers/netif.cc" ]
  configs += [ ":target_defaults" ]
  deps = [ ":debugd_dbus_utils" ]
}

executable("network_status") {
  sources = [ "src/helpers/network_status.cc" ]
  configs += [ ":target_defaults" ]
  deps = [ ":debugd_dbus_utils" ]
}

executable("scheduler_configuration_helper") {
  sources = [
    "src/helpers/scheduler_configuration_helper.cc",
    "src/helpers/scheduler_configuration_utils.cc",
  ]
  configs += [ ":target_defaults" ]
}

pkg_config("usb4_devinfo_helper_config") {
  pkg_deps = [ "re2" ]
}

executable("usb4_devinfo_helper") {
  sources = [ "src/helpers/usb4_devinfo_helper.cc" ]
  configs += [
    ":target_defaults",
    ":usb4_devinfo_helper_config",
  ]
}

pkg_config("bt_usb_disconnect_helper_config") {
  pkg_deps = [ "re2" ]
}

executable("bt_usb_disconnect_helper") {
  sources = [ "src/helpers/bt_usb_disconnect_helper.cc" ]
  configs += [
    ":target_defaults",
    ":bt_usb_disconnect_helper_config",
  ]
}

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

  executable("debugd_testrunner") {
    sources = [
      "src/crash_sender_tool_test.cc",
      "src/dev_mode_no_owner_restriction_test.cc",
      "src/helper_utils_test.cc",
      "src/helpers/cups_uri_helper_test.cc",
      "src/helpers/cups_uri_helper_utils.cc",
      "src/helpers/dev_features_password_utils.cc",
      "src/helpers/dev_features_password_utils_test.cc",
      "src/helpers/scheduler_configuration_utils.cc",
      "src/helpers/scheduler_configuration_utils_test.cc",
      "src/log_tool_doc_test.cc",
      "src/log_tool_test.cc",
      "src/process_with_id_test.cc",
      "src/storage_tool_test.cc",
      "src/subprocess_tool_test.cc",
    ]
    configs += [
      "//common-mk:test",
      ":debugd_testrunner_config",
      ":target_defaults",
    ]
    libs = [ "m" ]
    deps = [
      ":debugd_dbus_utils",
      ":libdebugd",
      "//common-mk/testrunner",
    ]
  }
}
