# 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("//src/sys/build/components.gni")

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

  public_deps = [
    "//garnet/lib/perfmon",
    "//src/lib/fxl",
    "//src/lib/json_parser",
    "//third_party/rapidjson",
    "//zircon/public/lib/zircon-internal",
    "//zircon/public/lib/zx",
  ]

  # TODO(fxbug.dev/58162): delete the below and fix compiler warnings
  configs += [ "//build/config:Wno-conversion" ]
}

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

  public_deps = [
    "//garnet/lib/perfmon",
    "//src/lib/fxl",
    "//src/lib/json_parser",
    "//third_party/rapidjson",
  ]
  configs += [
    # TODO(fxbug.dev/58162): delete the below and fix compiler warnings
    "//build/config:Wno-conversion",
  ]
}

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

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

  deps = [
    ":session_result_spec",
    ":session_spec",
    "//garnet/lib/debugger_utils",
    "//garnet/lib/perfmon",
    "//src/lib/fxl",
    "//src/zircon/lib/zircon",
  ]

  # TODO(fxbug.dev/58162): delete the below and fix compiler warnings
  configs += [ "//build/config:Wno-conversion" ]
}

fuchsia_shell_package("cpuperf") {
  manifest = "meta/cpuperf.cmx"
  deps = [
    ":bin",
    ":cpuperf_resources",
  ]
}

resource("cpuperf_resources") {
  if (current_cpu == "x64") {
    sources = [
      "cpspec/intel/basic-cpu-memory.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",
  ]
}
