# 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",
    "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/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/hardware_verifier_utils_impl.cc",
    "utils/json_store.cc",
    "utils/regions_utils_impl.cc",
    "utils/vpd_utils_impl.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 = [
      "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/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/json_store_test.cc",
      "utils/regions_utils_impl_test.cc",
    ]
    configs += [
      "//common-mk:test",
      ":target_defaults",
      ":rmad_test_config",
    ]
    deps = [
      ":librmad",
      "//common-mk/testrunner",
    ]
  }
}
