# Copyright 2021 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("//src/graphics/lib/compute/gn/build_rules.gni")

_spinel_includes = "${graphics_compute_dir}/spinel/platforms/vk/include"

#
#
#
config("find_target_config") {
  include_dirs = [ _spinel_includes ]
}

#
# Mapping between Fuchsia boards and GPU targets:
#
#   astro_env      arm      bifrost4
#   nelson_env     arm      bifrost4
#   sherlock_env   arm      bifrost8
#   vim3_env       arm      bifrost8
#   default/x86    intel    gen8
#
# A host or aemu/qemu target must support multiple targets:
#
#   host/qemu      amd      gcn3
#   host/qemu      intel    gen8
#   host/qemu      mesa     lavapipe
#   host/qemu      nvidia   sm35
#   host/qemu      nvidia   sm75
#

#
# Fuchsia / ARM / Bifrost4
#
source_set("find_target_arm_bifrost4") {
  public_configs = [ ":find_target_config" ]
  public_deps = [ "${graphics_compute_dir}/spinel/platforms/vk" ]
  public = [
    "${_spinel_includes}/spinel/platforms/vk/ext/find_target/find_target.h",
  ]
  sources = [
    "${_spinel_includes}/spinel/platforms/vk/ext/find_target/find_target.h",
    "find_target.c",
  ]
  defines = [ "SPN_VK_TARGET_ARM_BIFROST4" ]
  deps = [ "${graphics_compute_dir}/spinel/platforms/vk/targets/vendors/arm/bifrost4:spinel_vk_arm_bifrost4_resource" ]
}

#
# Fuchsia / ARM / Bifrost8
#
source_set("find_target_arm_bifrost8") {
  public_configs = [ ":find_target_config" ]
  public_deps = [ "${graphics_compute_dir}/spinel/platforms/vk" ]
  public = [
    "${_spinel_includes}/spinel/platforms/vk/ext/find_target/find_target.h",
  ]
  sources = [
    "${_spinel_includes}/spinel/platforms/vk/ext/find_target/find_target.h",
    "find_target.c",
  ]
  defines = [ "SPN_VK_TARGET_ARM_BIFROST8" ]
  deps = [ "${graphics_compute_dir}/spinel/platforms/vk/targets/vendors/arm/bifrost8:spinel_vk_arm_bifrost8_resource" ]
}

#
# Fuchsia / Intel / GEN8
#
source_set("find_target_intel_gen8") {
  public_configs = [ ":find_target_config" ]
  public_deps = [ "${graphics_compute_dir}/spinel/platforms/vk" ]
  public = [
    "${_spinel_includes}/spinel/platforms/vk/ext/find_target/find_target.h",
  ]
  sources = [
    "${_spinel_includes}/spinel/platforms/vk/ext/find_target/find_target.h",
    "find_target.c",
  ]
  defines = [ "SPN_VK_TARGET_INTEL_GEN8" ]
  deps = [ "${graphics_compute_dir}/spinel/platforms/vk/targets/vendors/intel/gen8:spinel_vk_intel_gen8_resource" ]
}

#
# Fuchsia Default
#
source_set("find_target_fuchsia_default") {
  public_configs = [ ":find_target_config" ]
  public_deps = [ "${graphics_compute_dir}/spinel/platforms/vk" ]
  public = [
    "${_spinel_includes}/spinel/platforms/vk/ext/find_target/find_target.h",
  ]
  sources = [
    "${_spinel_includes}/spinel/platforms/vk/ext/find_target/find_target.h",
    "find_target.c",
  ]
  defines = [
    "SPN_VK_TARGET_AMD_GCN3",
    "SPN_VK_TARGET_INTEL_GEN8",
    "SPN_VK_TARGET_MESA_LAVAPIPE",
    "SPN_VK_TARGET_NVIDIA_SM35",
    "SPN_VK_TARGET_NVIDIA_SM75",
  ]
  deps = [
    "${graphics_compute_dir}/spinel/platforms/vk/targets/vendors/amd/gcn3:spinel_vk_amd_gcn3_resource",
    "${graphics_compute_dir}/spinel/platforms/vk/targets/vendors/intel/gen8:spinel_vk_intel_gen8_resource",
    "${graphics_compute_dir}/spinel/platforms/vk/targets/vendors/mesa/lavapipe:spinel_vk_mesa_lavapipe_resource",
    "${graphics_compute_dir}/spinel/platforms/vk/targets/vendors/nvidia/sm35:spinel_vk_nvidia_sm35_resource",
    "${graphics_compute_dir}/spinel/platforms/vk/targets/vendors/nvidia/sm75:spinel_vk_nvidia_sm75_resource",
  ]
}

#
# Host Default
#
source_set("find_target_host_default") {
  public_configs = [ ":find_target_config" ]
  public_deps = [ "${graphics_compute_dir}/spinel/platforms/vk" ]
  public = [
    "${_spinel_includes}/spinel/platforms/vk/ext/find_target/find_target.h",
  ]
  sources = [
    "${_spinel_includes}/spinel/platforms/vk/ext/find_target/find_target.h",
    "find_target.c",
  ]
  defines = [
    "SPN_VK_TARGET_ARCHIVE_LINKABLE",
    "SPN_VK_TARGET_AMD_GCN3",
    "SPN_VK_TARGET_INTEL_GEN8",
    "SPN_VK_TARGET_MESA_LAVAPIPE",
    "SPN_VK_TARGET_NVIDIA_SM35",
    "SPN_VK_TARGET_NVIDIA_SM75",
  ]
  deps = [
    "${graphics_compute_dir}/spinel/platforms/vk/targets/vendors/amd/gcn3:spinel_vk_amd_gcn3_linkable",
    "${graphics_compute_dir}/spinel/platforms/vk/targets/vendors/intel/gen8:spinel_vk_intel_gen8_linkable",
    "${graphics_compute_dir}/spinel/platforms/vk/targets/vendors/mesa/lavapipe:spinel_vk_mesa_lavapipe_linkable",
    "${graphics_compute_dir}/spinel/platforms/vk/targets/vendors/nvidia/sm35:spinel_vk_nvidia_sm35_linkable",
    "${graphics_compute_dir}/spinel/platforms/vk/targets/vendors/nvidia/sm75:spinel_vk_nvidia_sm75_linkable",
  ]
}

#
# Link or load targets based on target OS and board type.
#
group("find_target") {
  if (is_fuchsia) {
    if (board_name == "astro") {
      public_deps = [ ":find_target_arm_bifrost4" ]
    } else if (board_name == "nelson") {
      public_deps = [ ":find_target_arm_bifrost4" ]
    } else if (board_name == "sherlock") {
      public_deps = [ ":find_target_arm_bifrost8" ]
    } else if (board_name == "vim3") {
      public_deps = [ ":find_target_arm_bifrost8" ]
    } else if (board_name == "chromebook-x64") {
      public_deps = [ ":find_target_intel_gen8" ]
    } else {
      public_deps = [ ":find_target_fuchsia_default" ]
    }
  } else {
    public_deps = [ ":find_target_host_default" ]
  }
}
