# 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",
    "//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",
    "//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/debugger_utils",
    "//src/lib/fxl",
    "//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",
    ]
  }
  if (current_cpu == "arm64") {
    sources = [
      "cpspec/arm64/cycle-counter.cpspec",
      "cpspec/arm64/l1.cpspec",
    ]
  }
  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",
    "//third_party/googletest:gtest",
  ]
}

group("tests") {
  testonly = true

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