# Copyright 2018 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/toolchain/embedded.gni")
import("//build/toolchain/host.gni")

group("root") {
  deps = [
    "//src:hafnium(:aem_v8a_fvp_clang)",
    "//src:hafnium(:android_aarch64_clang)",
    "//src:hafnium(:qemu_aarch64_clang)",
    "//src:hafnium(:rpi4_clang)",
    "//src/arch/aarch64/qemuloader:bl(:qemu_aarch64_clang)",
  ]
}

group("test_root") {
  testonly = true

  deps = [
    "//src:unit_tests(:host_fake_clang)",
    "//test/arch(:aem_v8a_fvp_clang)",
    "//test/arch(:qemu_aarch64_clang)",
    "//test/arch(:rpi4_clang)",
    "//test/linux(:aem_v8a_fvp_vm_clang)",
    "//test/linux(:qemu_aarch64_vm_clang)",
    "//test/linux(:rpi4_vm_clang)",
    "//test/vmapi(:aem_v8a_fvp_vm_clang)",
    "//test/vmapi(:qemu_aarch64_vm_clang)",
    "//test/vmapi(:rpi4_vm_clang)",
    "//test/vmapi/arch/aarch64/gicv3:gicv3_test(:aem_v8a_fvp_vm_clang)",
    "//test/vmapi/arch/aarch64/gicv3:gicv3_test(:qemu_aarch64_vm_clang)",
  ]
}

# Describe each of the platforms used in this project.

host_toolchain("host_fake") {
  use_platform = true
  heap_pages = 60
  max_cpus = 4
  max_vms = 6
}

aarch64_toolchains("aem_v8a_fvp") {
  cpu = "cortex-a57"
  origin_address = "0x80000000"
  boot_flow = "//src/boot_flow:linux"
  console = "//src/arch/aarch64/pl011"
  iommu = "//src/iommu:absent"
  gic_version = 3
  gicd_base_address = "0x2f000000"
  gicr_base_address = "0x2f100000"
  heap_pages = 60
  max_cpus = 8
  max_vms = 16
  toolchain_args = {
    pl011_base_address = "0x1c090000"
  }
}

aarch64_toolchains("qemu_aarch64") {
  cpu = "cortex-a57"
  origin_address = "0x40001000"
  boot_flow = "//src/boot_flow:linux"
  console = "//src/arch/aarch64/pl011"
  iommu = "//src/iommu:absent"
  gic_version = 3
  gicd_base_address = "0x08000000"
  gicr_base_address = "0x080A0000"
  heap_pages = 60
  max_cpus = 8
  max_vms = 16
  toolchain_args = {
    pl011_base_address = "0x09000000"
  }
}

aarch64_toolchains("rpi4") {
  cpu = "cortex-a72"
  origin_address = "0x80000"
  boot_flow = "//src/boot_flow:linux"
  console = "//project/reference/rpi:mini_uart"
  iommu = "//src/iommu:absent"
  gic_version = 2
  heap_pages = 60
  max_cpus = 4
  max_vms = 16
  toolchain_args = {
    gpio_base_address = "0xfe200000"
    aux_base_address = "0xfe215000"
    core_freq_mhz = 500
    hftest_ctrl = "//test/hftest:ctrl_uart"
  }
}

# Generic target which uses the Android boot flow. It is not intended to run on
# any Android platform. It exists only to test building Android-specific code.
aarch64_toolchains("android_aarch64") {
  cpu = "cortex-a57"
  origin_address = "0x0"
  boot_flow = "//src/boot_flow:android"
  console = "//src/arch/aarch64/pl011"
  iommu = "//src/iommu:absent"
  gic_version = 2
  heap_pages = 60
  max_cpus = 8
  max_vms = 16
  toolchain_args = {
    pl011_base_address = "0x09000000"
  }
}
