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

pkg_config("common_pkg_deps") {
  pkg_deps = [
    "libbrillo",
    "libchrome-${libbase_ver}",
  ]
}

executable("urandom") {
  configs += [ ":common_pkg_deps" ]
  sources = [ "urandom/main.cc" ]
}

pkg_config("smartctl-check_pkg_deps") {
  pkg_deps = [ "libdebugd-client" ]
}

executable("smartctl-check") {
  configs += [
    ":smartctl-check_pkg_deps",
    ":common_pkg_deps",
  ]
  sources = [
    "smartctl_check/main.cc",
    "smartctl_check/smartctl_check_utils.cc",
  ]
}

executable("floating-point-accuracy") {
  configs += [ ":common_pkg_deps" ]
  cflags_cc = [
    "-msse",
    "-mno-mmx",
  ]
  sources = [ "floating_point/main.cc" ]
}

executable("prime-search") {
  configs += [ ":common_pkg_deps" ]
  sources = [
    "prime_search/main.cc",
    "prime_search/prime_number_search.cc",
  ]
}

source_set("libdiag_routine") {
  configs += [ ":common_pkg_deps" ]
  deps = [
    "//diagnostics/common:libcommon",
    "//diagnostics/cros_healthd/utils:libcros_healthd_utils",
    "//diagnostics/mojo:cros_healthd_mojo_bindings",
  ]
  sources = [
    "ac_power/ac_power.cc",
    "battery_capacity/battery_capacity.cc",
    "battery_discharge/battery_discharge.cc",
    "battery_discharge/battery_discharge_constants.cc",
    "battery_health/battery_health.cc",
    "cpu_cache/cpu_cache.cc",
    "cpu_stress/cpu_stress.cc",
    "diag_process_adapter_impl.cc",
    "disk_read/disk_read.cc",
    "floating_point/floating_point_accuracy.cc",
    "nvme_self_test/nvme_self_test.cc",
    "nvme_wear_level/nvme_wear_level.cc",
    "prime_search/prime_search.cc",
    "smartctl_check/smartctl_check.cc",
    "subproc_routine.cc",
    "urandom/urandom.cc",
  ]
}

if (use.test) {
  source_set("libroutine_test_utils") {
    configs += [ "//common-mk:test" ]
    deps = [ "//diagnostics/mojo:cros_healthd_mojo_bindings" ]
    sources = [ "routine_test_utils.cc" ]
  }

  executable("routine_test") {
    configs += [ "//common-mk:test" ]
    deps = [
      ":libdiag_routine",
      ":libroutine_test_utils",
      "//common-mk/testrunner:testrunner",
      "//diagnostics/common:libcommon",
      "//diagnostics/common:libcommon_test_utils",
    ]
    sources = [
      "ac_power/ac_power_test.cc",
      "battery_capacity/battery_capacity_test.cc",
      "battery_discharge/battery_discharge_test.cc",
      "battery_health/battery_health_test.cc",
      "nvme_self_test/nvme_self_test_test.cc",
      "nvme_wear_level/nvme_wear_level_test.cc",
      "prime_search/prime_number_search.cc",
      "prime_search/prime_number_search_test.cc",
      "smartctl_check/smartctl_check_utils.cc",
      "smartctl_check/smartctl_check_utils_test.cc",
      "subproc_routine_test.cc",
    ]
  }
}
