# Copyright 2018 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("session_spec") {
  sources = [
    "session_spec.cc",
    "session_spec.h",
  ]

  public_deps = [
    "//src/lib/fxl:fxl_cli",
    "//src/lib/json_parser",
    "//src/performance/lib/perfmon",
    "//third_party/rapidjson",
    "//zircon/system/ulib/zircon-internal",
    "//zircon/system/ulib/zx",
  ]
}

source_set("session_result_spec") {
  sources = [
    "session_result_spec.cc",
    "session_result_spec.h",
  ]

  public_deps = [
    "//src/lib/fxl:fxl_cli",
    "//src/lib/json_parser",
    "//src/performance/lib/perfmon",
    "//third_party/rapidjson",
  ]
}

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

  sources = [
    "main.cc",
    "print_tallies.cc",
    "print_tallies.h",
  ]

  deps = [
    ":session_result_spec",
    ":session_spec",
    "//src/lib/fxl:fxl_cli",
    "//src/performance/lib/perfmon",
    "//src/zircon/lib/zircon",
  ]
}

fuchsia_shell_package("cpuperf") {
  deps = [
    ":bin",
    ":cpuperf_resources",
  ]
}

resource("cpuperf_resources") {
  if (current_cpu == "x64") {
    sources = [
      "cpspec/intel/basic-cpu-memory.cpspec",
      "cpspec/intel/basic-cpu.cpspec",
      "cpspec/intel/l1.cpspec",
      "cpspec/intel/l2.cpspec",
      "cpspec/intel/l3.cpspec",
    ]
  } else if (current_cpu == "arm64") {
    sources = [
      "cpspec/arm64/cycle-counter.cpspec",
      "cpspec/arm64/l1.cpspec",
    ]
  } else {
    sources = []
  }
  outputs = [ "data/{{source_file_part}}" ]
}

source_set("unittests") {
  testonly = true

  sources = [
    "session_result_spec_unittest.cc",
    "session_spec_unittest.cc",
  ]

  deps = [
    ":session_result_spec",
    ":session_spec",
    "//src/lib/fxl:fxl_cli",
    "//third_party/googletest:gtest",
  ]
}

group("tests") {
  testonly = true

  deps = [
    "print:tests",
    "tests",
  ]
}
