# 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-with-fdio",
    "//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",
    "//src/lib/fxl/test:gtest_main",
  ]
}

if (current_cpu == "x64") {
  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",
      "//src/lib/fxl",
      "//src/lib/fxl/test:test_settings",
      "//third_party/googletest:gtest",
      "//zircon/public/lib/trace-reader",
      "//zircon/public/lib/zx",
    ]
  }
}

test_package("cpuperf_provider_tests") {
  deprecated_shell = "//build"

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