# Copyright 2017 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")
import("//build/test/test_package.gni")

# Split out so that unittests can reference it.
source_set("categories") {
  sources = [
    "categories.cc",
    "categories.h",
    "category-db.cc",
  ]

  if (current_cpu == "arm64") {
    sources += [
      "arm64-category-db.cc",
      "arm64-events.h",
      "arm64-pm-categories.inc",
      "arm64-timebase-categories.inc",
    ]
  }

  if (current_cpu == "x64") {
    sources += [
      "intel-category-db.cc",
      "intel-events.h",
      "intel-pm-categories.inc",
      "intel-timebase-categories.inc",
      "skylake-misc-categories.inc",
      "skylake-pm-categories.inc",
    ]
  }

  deps = [
    "//src/lib/fxl",
    "//zircon/public/lib/fbl",
  ]

  public_deps = [
    "//garnet/lib/perfmon",
    "//zircon/public/lib/trace",
    "//zircon/public/lib/zircon-internal",
  ]
}

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

  sources = [
    "app.cc",
    "app.h",
    "importer.cc",
    "importer.h",
    "main.cc",
  ]

  deps = [
    ":categories",
    "//garnet/lib/perfmon",
    "//sdk/lib/sys/cpp",
    "//src/lib/fxl",
    "//zircon/public/lib/async-loop-cpp",
    "//zircon/public/lib/trace",
    "//zircon/public/lib/trace-provider",
    "//zircon/public/lib/zircon-internal",
  ]
}

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

  binary = "cpuperf_provider"

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

group("report_generators") {
  deps = [
    "//garnet/bin/cpuperf_provider/report-generators/tally",
  ]
}

executable("cpuperf_provider_tests_bin") {
  testonly = true
  output_name = "cpuperf_provider_tests"

  sources = [
    "categories_unittest.cc",
  ]

  deps = [
    ":categories",
    "//third_party/googletest:gtest_main",
  ]
}

executable("cpuperf_provider_integration_tests") {
  testonly = true
  output_name = "cpuperf_provider_integration_tests"

  sources = [
    "cpuperf_provider_integration_tests.cc"
  ]

  deps = [
    "//garnet/lib/perfmon",
    "//src/developer/tracing/lib/test_utils",
    "//third_party/googletest:gtest",
    "//zircon/public/lib/trace-reader",
    "//zircon/public/lib/zx",
  ]
}

test_package("cpuperf_provider_tests") {
  deps = [
    ":cpuperf_provider_tests_bin",
  ]

  tests = [
    {
      name = "cpuperf_provider_tests"
      environments = basic_envs
    },
  ]

  if (current_cpu == "x64") {
    deps += [
      ":cpuperf_provider_integration_tests",
    ]

    tests += [
      {
        name = "cpuperf_provider_integration_tests"
        environments = basic_envs
      },
    ]
  }
}
