# 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")

# We follow the conventions of ../BUILD.gn for the organization of the sources,
# build rules, and packages, with the following modifications:
#
# 1. All the binaries used in tests are run through a basemgr invocation
#    configured in the .tspec file of the benchmark subdirectory.
#
# 2. The component binary as well as its package is named with a prefix that
#    tells the benchmark it belongs to, followed by "_benchmark", followed by
#    more name components as described in ../BUILD.gn. The tspec file is also
#    named like the benchmark, followed by "_benchmark", followed by ".tspec".
#
# 3. [unchanged]
#
# 4. [unchanged]
#
# 5. [unchanged]
#
#
# HOW TO ADD A NEW BENCHMARK
#
# 1. Add a new subdirectory with rules for the test components (session shells,
#    modules, agents). Define all test components as executable_package()s.
#
# 2. Add the newly defined packages for all test components to
#    //peridot/packages/benchmarks/modular.
#
# 3. Add a tspec file for the benchmark in the newly added subdirectory.
#
# 4. Add an entry for the tspec file to the resources = field of the
#    modular_benchmarks build rule.
#
# 5. Add an entry for the test to run_modular_benchmarks.sh.

group("benchmarks") {
  testonly = true
  deps = [
    ":peridot_benchmarks_bin",
    "story",
  ]
}

package("modular_benchmarks") {
  testonly = true

  binaries = [
    {
      name = rebase_path("run_modular_benchmarks.sh")
      dest = "run_modular_benchmarks.sh"
    },
  ]

  resources = [
    {
      path = rebase_path("story/modular_benchmark_story.tspec")
      dest = "modular_benchmark_story.tspec"
    },
  ]
}

executable("peridot_benchmarks_bin") {
  output_name = "peridot_benchmarks"

  sources = [
    "benchmarks.cc",
  ]

  deps = [
    "//garnet/testing/benchmarking:benchmarking",
  ]
}

package("peridot_benchmarks") {
  testonly = true

  binaries = [
    {
      name = rebase_path("benchmarks.sh")
      dest = "benchmarks.sh"
    },
    {
      shell = true
      name = "peridot_benchmarks"
    },
  ]

  deps = [
    ":peridot_benchmarks_bin",
  ]
}
