# 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")

#
# Vulkan Radix Sort library
#
config("config") {
  include_dirs = [ "include" ]
}

config("config_debug_utils") {  # Enables VK object labelling
  defines = [ "RADIX_SORT_VK_ENABLE_DEBUG_UTILS" ]
}

config("config_extensions") {  # Enables per pipeline timestamping
  defines = [ "RADIX_SORT_VK_ENABLE_EXTENSIONS" ]
}

#
# Headers
#
source_set("headers") {
  public_configs = [ ":config" ]
  public = [
    "include/radix_sort/platforms/vk/radix_sort_vk.h",
    "include/radix_sort/platforms/vk/radix_sort_vk_devaddr.h",
  ]
  sources = [
    "include/radix_sort/platforms/vk/radix_sort_vk.h",
    "include/radix_sort/platforms/vk/radix_sort_vk_devaddr.h",
  ]
}

#
# Default set of sources without debugging and profiling extensions
#
source_set("vk") {
  public_configs = [ ":config_debug_utils" ]
  sources = [
    "radix_sort_vk.c",
    "radix_sort_vk_ext.h",
    "shaders/push.h",
    "target.h",
    "target_requirements.c",
    "target_requirements.h",
  ]
  public_deps = [ ":headers" ]
  deps = [
    "${graphics_compute_dir}/common",
    "${graphics_compute_dir}/common/vk",
    "${graphics_compute_dir}/tools/target_archive:target_archive_headers",
    graphics_compute_vulkan_loader_target,
  ]
}

#
# A semi-private target used for testing and benchmarking.
#
# NOTE(allanmac): Is there a better way to express the same source set
# with extra configs?  A template can be used.
#
source_set("vk_tests") {
  public_configs = [
    ":config_debug_utils",
    ":config_extensions",
  ]
  sources = [
    "radix_sort_vk.c",
    "radix_sort_vk_ext.h",
    "shaders/push.h",
    "target.h",
    "target_requirements.c",
    "target_requirements.h",
  ]
  public_deps = [ ":headers" ]
  deps = [
    "${graphics_compute_dir}/common",
    "${graphics_compute_dir}/common/vk",
    "${graphics_compute_dir}/tools/target_archive:target_archive_headers",
    graphics_compute_vulkan_loader_target,
  ]
  friend = [ "tests/radix_sort_vk_bench:*" ]
}
