# Copyright 2020 The Fuchsia 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("//build/components.gni")

source_set("lib") {
  sources = [
    "args.cc",
    "cpu_stress.cc",
    "cpu_stressor.cc",
    "cpu_workloads.cc",
    "device.cc",
    "flash_stress.cc",
    "hwstress.cc",
    "light_stress.cc",
    "memory_patterns.cc",
    "memory_range.cc",
    "memory_stats.cc",
    "memory_stress.cc",
    "profile_manager.cc",
    "status.cc",
    "temperature_sensor.cc",
    "util.cc",
  ]

  public_deps = [
    "//sdk/fidl/fuchsia.hardware.block",
    "//sdk/fidl/fuchsia.hardware.block.volume",
    "//sdk/fidl/fuchsia.hardware.light",
    "//sdk/fidl/fuchsia.hardware.thermal",
    "//sdk/fidl/fuchsia.kernel",
    "//sdk/fidl/fuchsia.scheduler",
    "//sdk/lib/fdio",
    "//sdk/lib/sys/cpp",
    "//src/lib/fxl",
    "//src/lib/storage/fs_management",
    "//src/lib/uuid",
    "//zircon/public/lib/zx",
    "//zircon/public/lib/zxc",
    "//zircon/system/ulib/async-loop:async-loop-cpp",
    "//zircon/system/ulib/async-loop:async-loop-default",
    "//zircon/system/ulib/cmdline",
    "//zircon/system/ulib/fdio-caller",
  ]

  # We want to optimize as much as possible for speed, under the assumption
  # that this will also optimize for generating code that will maximise the
  # amount of stress placed on the system (e.g., more heat for CPU tests).
  configs += [ "//build/config:optimize_speed" ]
}

executable("bin") {
  output_name = "hwstress"

  sources = [ "main.cc" ]

  deps = [ ":lib" ]
}

# Traditional CLI package.
fuchsia_shell_package("hwstress_cli") {
  package_name = "hwstress-cli"
  deps = [ ":bin" ]
}

# CFv1 package.
# We generate an in-package CMX file for the top-level "hwstress"
# binary, and also for each style of test we run.
#
# This is to help automated tests seperate logs for the different
# styles of test, where currently the CFv1 component name is the
# only mechanism we have to do this.
_hwstress_binaries = [
  "hwstress",
  "cpu",
  "memory",
  "flash",
  "led",
]
_hwstress_components = []
foreach(hwstress_name, _hwstress_binaries) {
  fuchsia_component("${hwstress_name}_component") {
    component_name = "${hwstress_name}"
    manifest = "meta/hwstress.cmx"
    deps = [ ":bin" ]
  }
  _hwstress_components += [ ":${hwstress_name}_component" ]
}

fuchsia_package("hwstress_pkg") {
  package_name = "hwstress"
  deps = _hwstress_components
}

# Tests using CFv1.
executable("hwstress_test") {
  testonly = true

  sources = [
    "args_test.cc",
    "cpu_stress_test.cc",
    "cpu_stressor_test.cc",
    "cpu_workloads_test.cc",
    "hwstress_test.cc",
    "light_stress_test.cc",
    "memory_patterns_test.cc",
    "memory_range_test.cc",
    "memory_stats_test.cc",
    "memory_stress_test.cc",
    "profile_manager_test.cc",
    "status_test.cc",
    "temperature_sensor_test.cc",
    "util_test.cc",
  ]

  deps = [
    ":lib",
    "//sdk/lib/fdio",
    "//src/lib/fxl",
    "//src/lib/fxl/test:gtest_main",
    "//src/lib/testing/predicates",
    "//third_party/googletest:gmock",
    "//zircon/public/lib/zx",
    "//zircon/public/lib/zxc",
  ]
}

# Tests requiring support from the CFv2 (or requiring support from libraries that depend on CFv2).
executable("hwstress_v2_test") {
  testonly = true

  sources = [ "flash_stress_test.cc" ]

  deps = [
    ":lib",
    "//sdk/lib/fdio",
    "//src/lib/fxl",
    "//src/lib/fxl/test:gtest_main",
    "//src/lib/testing/predicates",
    "//src/storage/testing:storage_driver_test_support",  # requires CFv2.
    "//third_party/googletest:gmock",
    "//zircon/public/lib/zx",
    "//zircon/public/lib/zxc",
  ]
}

fuchsia_test_component("hwstress_v1_test_pkg") {
  manifest = "meta/hwstress_test.cmx"
  deps = [ ":hwstress_test" ]
}

fuchsia_test_component("hwstress_v2_test_pkg") {
  manifest = "meta/hwstress_v2_test.cml"
  deps = [ ":hwstress_v2_test" ]
}

fuchsia_test_package("hwstress_test_pkg") {
  package_name = "hwstress-tests"
  test_components = [
    ":hwstress_v1_test_pkg",
    ":hwstress_v2_test_pkg",
  ]
  test_specs = {
    log_settings = {
      max_severity = "ERROR"
    }
  }
}

group("tests") {
  testonly = true
  public_deps = [
    ":hwstress_test_pkg",
    "//src/storage/testing:storage-isolated-devmgr",
  ]
}

group("hwstress") {
  testonly = true
  public_deps = [
    ":hwstress_cli",
    ":hwstress_pkg",
  ]
}
