# Copyright 2021 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")

group("all") {
  deps = [ ":rmad" ]
  if (use.test) {
    deps += [ ":rmad_test" ]
  }
}

pkg_config("target_defaults") {
  # Manually add the include path so that the generated hardware_verifier.pb.h
  # can include runtime_probe.pb.h properly.
  cflags = [ "-I${sysroot}/usr/include/runtime_probe/proto_bindings" ]

  # NOSORT
  pkg_deps = [
    "libbrillo",
    "libchrome",
    "libcros_config",
    "libmems",
    "libminijail",
    "libshill-client",
    "libtpm_manager-client",
    "libuser_data_auth-client",
    "re2",
    "vboot_host",

    # 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",
    "openssl",
    "protobuf",
  ]
}

static_library("libsystem") {
  sources = [
    "system/cros_disks_client_impl.cc",
    "system/cryptohome_client_impl.cc",
    "system/fake_cryptohome_client.cc",
    "system/fake_hardware_verifier_client.cc",
    "system/fake_power_manager_client.cc",
    "system/fake_runtime_probe_client.cc",
    "system/fake_tpm_manager_client.cc",
    "system/hardware_verifier_client_impl.cc",
    "system/power_manager_client_impl.cc",
    "system/runtime_probe_client_impl.cc",
    "system/shill_client_impl.cc",
    "system/tpm_manager_client_impl.cc",
  ]
  configs += [ ":target_defaults" ]
}

static_library("libutils") {
  sources = [
    "utils/accelerometer_calibration_utils_impl.cc",
    "utils/calibration_utils.cc",
    "utils/cbi_utils_impl.cc",
    "utils/cmd_utils_impl.cc",
    "utils/component_utils.cc",
    "utils/cr50_utils_impl.cc",
    "utils/cros_config_utils_impl.cc",
    "utils/crossystem_utils_impl.cc",
    "utils/dbus_utils.cc",
    "utils/fake_cbi_utils.cc",
    "utils/fake_cr50_utils.cc",
    "utils/fake_cros_config_utils.cc",
    "utils/fake_crossystem_utils.cc",
    "utils/fake_iio_sensor_probe_utils.cc",
    "utils/fake_regions_utils.cc",
    "utils/fake_sys_utils.cc",
    "utils/fake_vpd_utils.cc",
    "utils/flashrom_utils_impl.cc",
    "utils/gyroscope_calibration_utils_impl.cc",
    "utils/iio_ec_sensor_utils_impl.cc",
    "utils/iio_sensor_probe_utils_impl.cc",
    "utils/json_store.cc",
    "utils/regions_utils_impl.cc",
    "utils/sys_utils_impl.cc",
    "utils/vpd_utils_impl.cc",
    "utils/vpd_utils_impl_thread_safe.cc",
  ]
  configs += [ ":target_defaults" ]
  deps = [ "//hardware_verifier/proto:hardware_verifier-protos" ]
}

static_library("libmetrics") {
  sources = [
    "metrics/fake_metrics_utils.cc",
    "metrics/metrics_utils_impl.cc",
  ]
  configs += [ ":target_defaults" ]
  deps = [ "//metrics/structured:libstructuredmetrics" ]
}

static_library("libstate_handler") {
  sources = [
    "state_handler/base_state_handler.cc",
    "state_handler/check_calibration_state_handler.cc",
    "state_handler/components_repair_state_handler.cc",
    "state_handler/device_destination_state_handler.cc",
    "state_handler/finalize_state_handler.cc",
    "state_handler/provision_device_state_handler.cc",
    "state_handler/repair_complete_state_handler.cc",
    "state_handler/restock_state_handler.cc",
    "state_handler/run_calibration_state_handler.cc",
    "state_handler/setup_calibration_state_handler.cc",
    "state_handler/state_handler_manager.cc",
    "state_handler/update_device_info_state_handler.cc",
    "state_handler/update_ro_firmware_state_handler.cc",
    "state_handler/welcome_screen_state_handler.cc",
    "state_handler/write_protect_disable_complete_state_handler.cc",
    "state_handler/write_protect_disable_method_state_handler.cc",
    "state_handler/write_protect_disable_physical_state_handler.cc",
    "state_handler/write_protect_disable_rsu_state_handler.cc",
    "state_handler/write_protect_enable_physical_state_handler.cc",
  ]
  configs += [ ":target_defaults" ]
  deps = [
    ":libmetrics",
    ":libsystem",
    ":libutils",
  ]
}

static_library("librmad") {
  sources = [
    "dbus_service.cc",
    "rmad_interface_impl.cc",
  ]
  configs += [ ":target_defaults" ]
  deps = [
    ":libmetrics",
    ":libstate_handler",
    ":libutils",
  ]
}

executable("rmad") {
  sources = [ "main.cc" ]
  configs += [ ":target_defaults" ]
  deps = [ ":librmad" ]
}

if (use.test) {
  pkg_config("rmad_test_config") {
    pkg_deps = [
      "libmems_test_support",
      "libshill-client-test",
      "libtpm_manager-client-test",
      "libuser_data_auth-client-test",
    ]
  }

  executable("rmad_test") {
    sources = [
      "dbus_service_test.cc",
      "metrics/metrics_utils_impl_test.cc",
      "rmad_interface_test.cc",
      "state_handler/base_state_handler_test.cc",
      "state_handler/check_calibration_state_handler_test.cc",
      "state_handler/components_repair_state_handler_test.cc",
      "state_handler/device_destination_state_handler_test.cc",
      "state_handler/finalize_state_handler_test.cc",
      "state_handler/provision_device_state_handler_test.cc",
      "state_handler/repair_complete_state_handler_test.cc",
      "state_handler/restock_state_handler_test.cc",
      "state_handler/run_calibration_state_handler_test.cc",
      "state_handler/setup_calibration_state_handler_test.cc",
      "state_handler/state_handler_manager_test.cc",
      "state_handler/state_handler_test_common.cc",
      "state_handler/update_device_info_state_handler_test.cc",
      "state_handler/update_ro_firmware_state_handler_test.cc",
      "state_handler/welcome_screen_state_handler_test.cc",
      "state_handler/write_protect_disable_complete_state_handler_test.cc",
      "state_handler/write_protect_disable_method_state_handler_test.cc",
      "state_handler/write_protect_disable_physical_state_handler_test.cc",
      "state_handler/write_protect_disable_rsu_state_handler_test.cc",
      "state_handler/write_protect_enable_physical_state_handler_test.cc",
      "system/cros_disks_client_test.cc",
      "system/cryptohome_client_test.cc",
      "system/hardware_verifier_client_test.cc",
      "system/power_manager_client_test.cc",
      "system/runtime_probe_client_test.cc",
      "system/shill_client_test.cc",
      "system/tpm_manager_client_test.cc",
      "utils/cbi_utils_test.cc",
      "utils/cmd_utils_test.cc",
      "utils/component_utils_test.cc",
      "utils/cr50_utils_test.cc",
      "utils/cros_config_utils_test.cc",
      "utils/crossystem_utils_test.cc",
      "utils/dbus_utils_test.cc",
      "utils/flashrom_utils_test.cc",
      "utils/iio_sensor_probe_utils_test.cc",
      "utils/json_store_test.cc",
      "utils/regions_utils_test.cc",
      "utils/sys_utils_test.cc",
      "utils/vpd_utils_test.cc",
    ]
    configs += [
      "//common-mk:test",
      ":target_defaults",
      ":rmad_test_config",
    ]
    deps = [
      ":librmad",
      "//common-mk/testrunner",
    ]
  }
}
