# Copyright 2018 Google LLC
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
#     https://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.

import("//build/toolchain/platform.gni")

config("hftest_config") {
  include_dirs = [ "inc" ]
}

# Testing framework for a primary vm.
source_set("hftest_primary_vm") {
  testonly = true

  public_configs = [ ":hftest_config" ]

  sources = [
    "hftest.c",
  ]

  deps = [
    "//src:common",
    "//src:dlog",
    "//src:fdt",
    "//src:memiter",
    "//src/arch/${plat_arch}:entry",
    "//src/arch/${plat_arch}/hftest:entry",
    "//src/arch/${plat_arch}/hftest:hf_call",
    "//src/arch/${plat_arch}/hftest:power_mgmt",
  ]
}

# Testing framework for a secondary vm. It's currently just a slave VM and
# can't affect the tests directly.
source_set("hftest_secondary_vm") {
  testonly = true

  public_configs = [ ":hftest_config" ]

  sources = [
    "hftest_service.c",
  ]

  deps = [
    "//src:common",
    "//src:dlog",
    "//src:memiter",
    "//src/arch/${plat_arch}:entry",
    "//src/arch/${plat_arch}/hftest:entry",
    "//src/arch/${plat_arch}/hftest:hf_call",
    "//src/arch/${plat_arch}/hftest:power_mgmt",
  ]
}

# Testing framework for a hypervisor.
source_set("hftest_hypervisor") {
  testonly = true

  public_configs = [ ":hftest_config" ]

  sources = [
    "hftest.c",
  ]

  deps = [
    "//src:common",
    "//src:dlog",
    "//src:fdt",
    "//src:memiter",
    "//src/arch/${plat_arch}:entry",
    "//src/arch/${plat_arch}/hftest:entry",
    "//src/arch/${plat_arch}/hftest:power_mgmt",
  ]
}
