# Copyright 2019 The Hafnium Authors.
#
# 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/image/image.gni")
import("//build/toolchain/platform.gni")

executable("test_binary") {
  include_dirs = [
    "//driver/linux/inc/uapi",
    "//third_party/linux/include/uapi",
  ]

  testonly = true
  sources = [
    "linux.c",
  ]
  deps = [
    "//test/hftest:hftest_linux",
  ]
  output_name = "test_binary"
}

vm_kernel("socket_vm0") {
  testonly = true

  deps = [
    ":hftest_secondary_vm_socket",
  ]
}

linux_initrd("linux_test_initrd") {
  testonly = true

  # Always use the aarch64_linux_clang toolchain to build test_binary
  test_binary_target = ":test_binary(//build/toolchain:aarch64_linux_clang)"
  sources = [
    get_label_info(test_binary_target, "root_out_dir") + "/test_binary",
    get_label_info("//driver:linux", "target_out_dir") + "/hafnium.ko",
  ]
  deps = [
    "//driver:linux",
    test_binary_target,
  ]
}

initrd("linux_test") {
  testonly = true

  primary_vm = "//third_party:linux__prebuilt"
  primary_initrd = ":linux_test_initrd"
  secondary_vms = [ [
        "1048576",
        "1",
        "socket0",
        ":socket_vm0",
      ] ]
}

group("linux") {
  testonly = true

  deps = [
    ":linux_test",
  ]
}

# Testing framework for a secondary VM with socket.
source_set("hftest_secondary_vm_socket") {
  testonly = true

  configs += [ "//test/hftest:hftest_config" ]

  sources = [
    "hftest_socket.c",
  ]

  deps = [
    "//src:dlog",
    "//src:panic",
    "//src:std",
    "//src/arch/${plat_arch}:entry",
    "//src/arch/${plat_arch}/hftest:entry",
    "//src/arch/${plat_arch}/hftest:power_mgmt",
  ]
}
