# 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/image/image.gni")

group("tests") {
  testonly = true

  deps = [
    ":unit_tests",
    ":vm_tests",
  ]
}

group("unit_tests") {
  testonly = true

  deps = [
    "//src:unit_tests($fake_toolchain)",
  ]
}

group("vm_tests") {
  testonly = true

  deps = [
    ":hypervisor",
    "//test/vm/:primary_only_test($arch_toolchain)",
    "//test/vm/:primary_with_secondaries_test($arch_toolchain)",
  ]
}

group("hypervisor") {
  deps = [
    ":hafnium($arch_toolchain)",
  ]
}

# Only build the image for the arch
if (current_toolchain == arch_toolchain) {
  hypervisor("hafnium") {
    deps = [
      "//src",
      "//src/arch/${arch}",
    ]
  }
}
