# 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/package.gni")

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

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

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

  public_deps = [
    "//garnet/lib/perfmon",
    "//garnet/public/lib/rapidjson_utils",
    "//src/lib/fxl",
    "//third_party/rapidjson",
  ]
}

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",
  ]

  libs = [ "zircon" ]
}

package("cpuperf") {
  deps = [
    ":bin",
  ]

  binaries = [
    {
      name = "cpuperf"
      shell = true
    },
  ]

  meta = [
    {
      path = rebase_path("meta/cpuperf.cmx")
      dest = "cpuperf.cmx"
    },
  ]

  resources = []

  if (current_cpu == "x64") {
    resources += [
      {
        path = rebase_path("cpspec/intel/basic-cpu-memory.cpspec")
        dest = "basic-cpu-memory.cpspec"
      },
      {
        path = rebase_path("cpspec/intel/l1.cpspec")
        dest = "l1.cpspec"
      },
      {
        path = rebase_path("cpspec/intel/l2.cpspec")
        dest = "l2.cpspec"
      },
      {
        path = rebase_path("cpspec/intel/l3.cpspec")
        dest = "l3.cpspec"
      },
    ]
  }

  if (current_cpu == "arm64") {
    resources += [
      {
        path = rebase_path("cpspec/arm64/cycle-counter.cpspec")
        dest = "cycle-counter.cpspec"
      },
      {
        path = rebase_path("cpspec/arm64/l1.cpspec")
        dest = "l1.cpspec"
      },
    ]
  }
}

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",
  ]
}
