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

static_library("libsystem") {
  sources = [
    "system/cryptohome_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/cr50_utils_impl.cc",
    "utils/cros_config_utils_impl.cc",
    "utils/crossystem_utils_impl.cc",
    "utils/dbus_utils.cc",
    "utils/gyroscope_calibration_utils_impl.cc",
    "utils/hardware_verifier_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/vpd_utils_impl.cc",
    "utils/vpd_utils_impl_thread_safe.cc",
  ]
  configs += [ ":target_defaults" ]
  deps = [ "//hardware_verifier/proto:hardware_verifier-protos" ]
}

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 = [
    ":libsystem",
    ":libutils",
  ]
}

static_library("librmad") {
  sources = [
    "dbus_service.cc",
    "rmad_interface_impl.cc",
  ]
  configs += [ ":target_defaults" ]
  deps = [
    ":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",
      "rmad_interface_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/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/cryptohome_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/cros_config_utils_test.cc",
      "utils/fake_hardware_verifier_utils.cc",
      "utils/iio_sensor_probe_utils_impl_test.cc",
      "utils/json_store_test.cc",
      "utils/regions_utils_impl_test.cc",
    ]
    configs += [
      "//common-mk:test",
      ":target_defaults",
      ":rmad_test_config",
    ]
    deps = [
      ":librmad",
      "//common-mk/testrunner",
    ]
  }
}
