# 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/cpuperf",
    "//garnet/public/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/cpuperf",
    "//garnet/public/lib/fxl",
    "//third_party/rapidjson",
  ]
}

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

  sources = [
    "main.cc",
  ]

  if (current_cpu == "x64") {
    sources += [
      "print_tallies.cc",
      "print_tallies.h",
    ]
  }

  deps = [
    ":session_spec",
    ":session_result_spec",
    "//garnet/lib/cpuperf",
    "//garnet/lib/debugger_utils",
    "//garnet/public/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/basic-cpu-memory.cpspec")
        dest = "basic-cpu-memory.cpspec"
      },
      {
        path = rebase_path("cpspec/l1.cpspec")
        dest = "l1.cpspec"
      },
      {
        path = rebase_path("cpspec/l2.cpspec")
        dest = "l2.cpspec"
      },
      {
        path = rebase_path("cpspec/l3.cpspec")
        dest = "l3.cpspec"
      }
    ]
  }
}

source_set("unittests") {
  testonly = true

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

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