# 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") {
  # NOSORT
  pkg_deps = [
    "libbrillo",
    "libchrome",
    "libminijail",
    "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",
  ]
  configs += [ ":target_defaults" ]
}

static_library("libutils") {
  sources = [
    "utils/cbi_utils_impl.cc",
    "utils/cr50_utils_impl.cc",
    "utils/crossystem_utils_impl.cc",
    "utils/dbus_utils.cc",
    "utils/json_store.cc",
    "utils/vpd_utils_impl.cc",
  ]
  configs += [ ":target_defaults" ]
}

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/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/verify_rsu_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 = [ "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/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/verify_rsu_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",
      "utils/fake_cbi_utils.cc",
      "utils/fake_vpd_utils.cc",
      "utils/json_store_test.cc",
    ]
    configs += [
      "//common-mk:test",
      ":target_defaults",
      ":rmad_test_config",
    ]
    deps = [
      ":librmad",
      "//common-mk/testrunner",
    ]
  }
}
