# Copyright (C) 2018-2021 The ANGLE Project Authors.
# Copyright (C) 2019-2022 LunarG, Inc.
#
# 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_overrides/vulkan_validation_layers.gni")

# Fuchsia has non-upstream changes to the vulkan layers, so we don't want
# to build it from upstream sources.
assert(!is_fuchsia)

vulkan_undefine_configs = []
if (is_win) {
  vulkan_undefine_configs += [ "//build/config/win:unicode" ]
}

vulkan_gen_dir = "$target_gen_dir/$vulkan_gen_subdir"
raw_vulkan_gen_dir = rebase_path(vulkan_gen_dir, root_build_dir)

vulkan_data_dir = "$root_out_dir/$vulkan_data_subdir"
raw_vulkan_data_dir = rebase_path(vulkan_data_dir, root_build_dir)

raw_root_out_dir = rebase_path(root_out_dir, root_build_dir)

# This special action is needed to remove old VVL objects that are now renamed.
action("vulkan_clean_old_validation_layer_objects") {
  script = "build-gn/remove_files.py"

  # inputs is a (random) new file since the vvl roll, used to ensure the cleanup is done only once
  inputs = [ "layers/gpu_validation.cpp" ]
  outputs = [ "$vulkan_gen_dir/old_vvl_files_are_removed" ]
  args = [
    "$raw_vulkan_gen_dir/old_vvl_files_are_removed",
    "$raw_root_out_dir/libVkLayer*",
    "$raw_root_out_dir/VkLayer*",
    "$raw_vulkan_data_dir/VkLayer*.json",
  ]
}

config("vulkan_internal_config") {
  defines = [
    "VULKAN_NON_CMAKE_BUILD",
    "API_NAME=\"Vulkan\"",
    "VK_ENABLE_BETA_EXTENSIONS",
  ]

  cflags = []
  if (is_clang || !is_win) {
    cflags += [ "-Wno-unused-function" ]
  }
  if (is_clang && is_mac) {
    cflags += [ "-Wno-unguarded-availability-new" ]
  }
  if (is_linux) {
    defines += [
      "SYSCONFDIR=\"/etc\"",
      "FALLBACK_CONFIG_DIRS=\"/etc/xdg\"",
      "FALLBACK_DATA_DIRS=\"/usr/local/share:/usr/share\"",
    ]
  }
}

# The validation layers
# ---------------------

config("vulkan_layer_config") {
  include_dirs = [
    "layers",
    "layers/generated",
  ]
}

core_validation_sources = [
  "layers/android_ndk_types.h",
  "layers/base_node.cpp",
  "layers/base_node.h",
  "layers/buffer_state.cpp",
  "layers/buffer_state.h",
  "layers/buffer_validation.cpp",
  "layers/buffer_validation.h",
  "layers/convert_to_renderpass2.cpp",
  "layers/convert_to_renderpass2.h",
  "layers/core_validation.cpp",
  "layers/core_validation.h",
  "layers/core_validation_error_enums.h",
  "layers/cmd_buffer_state.h",
  "layers/cmd_buffer_state.cpp",
  "layers/device_memory_state.h",
  "layers/device_memory_state.cpp",
  "layers/device_state.h",
  "layers/image_state.h",
  "layers/image_state.cpp",
  "layers/pipeline_state.h",
  "layers/pipeline_state.cpp",
  "layers/qfo_transfer.h",
  "layers/query_state.h",
  "layers/queue_state.cpp",
  "layers/queue_state.h",
  "layers/ray_tracing_state.h",
  "layers/render_pass_state.h",
  "layers/render_pass_state.cpp",
  "layers/sampler_state.h",
  "layers/core_error_location.cpp",
  "layers/core_error_location.h",
  "layers/descriptor_sets.cpp",
  "layers/descriptor_sets.h",
  "layers/drawdispatch.cpp",
  "layers/generated/corechecks_optick_instrumentation.cpp",
  "layers/generated/corechecks_optick_instrumentation.h",
  "layers/generated/spirv_validation_helper.cpp",
  "layers/generated/spirv_grammar_helper.cpp",
  "layers/generated/spirv_grammar_helper.h",
  "layers/generated/command_validation.cpp",
  "layers/generated/command_validation.h",
  "layers/generated/gpu_pre_draw_shader.h",
  "layers/generated/synchronization_validation_types.cpp",
  "layers/generated/synchronization_validation_types.h",
  "layers/sync_utils.cpp",
  "layers/sync_utils.h",
  "layers/sync_vuid_maps.cpp",
  "layers/sync_vuid_maps.h",
  "layers/gpu_pre_draw_constants.h",
  "layers/gpu_utils.cpp",
  "layers/gpu_utils.h",
  "layers/gpu_validation.cpp",
  "layers/gpu_validation.h",
  "layers/gpu_vuids.h",
  "layers/image_layout_map.cpp",
  "layers/image_layout_map.h",
  "layers/range_vector.h",
  "layers/shader_module.cpp",
  "layers/shader_module.h",
  "layers/shader_validation.cpp",
  "layers/shader_validation.h",
  "layers/state_tracker.cpp",
  "layers/state_tracker.h",
  "layers/subresource_adapter.cpp",
  "layers/subresource_adapter.h",
  "layers/synchronization_validation.cpp",
  "layers/synchronization_validation.h",
]

object_lifetimes_sources = [
  "layers/generated/object_tracker.cpp",
  "layers/generated/object_tracker.h",
  "layers/object_lifetime_validation.h",
  "layers/object_tracker_utils.cpp",
]

stateless_validation_sources = [
  "layers/generated/parameter_validation.cpp",
  "layers/generated/parameter_validation.h",
  "layers/parameter_name.h",
  "layers/parameter_validation_utils.cpp",
  "layers/stateless_validation.h",
]

thread_safety_sources = [
  "layers/generated/thread_safety.cpp",
  "layers/generated/thread_safety.h",
]

unique_objects_sources = []

best_practices_sources = [
  "layers/best_practices_error_enums.h",
  "layers/best_practices_utils.cpp",
  "layers/best_practices_validation.h",
  "layers/generated/best_practices.cpp",
  "layers/generated/best_practices.h",
]

debug_printf_sources = [
  "layers/debug_printf.cpp",
  "layers/debug_printf.h",
]

chassis_sources = [
  "$vulkan_headers_dir/include/vulkan/vk_layer.h",
  "$vulkan_headers_dir/include/vulkan/vulkan.h",
  "layers/generated/chassis.cpp",
  "layers/generated/chassis.h",
  "layers/generated/chassis_dispatch_helper.h",
  "layers/generated/layer_chassis_dispatch.cpp",
  "layers/generated/layer_chassis_dispatch.h",
  "layers/generated/vk_dispatch_table_helper.h",
  "layers/generated/vk_extension_helper.h",
  "layers/generated/vk_safe_struct.cpp",
  "layers/layer_options.cpp",
  "layers/layer_options.h",
  "layers/vk_layer_settings_ext.h",
]

layers = [ [
      "khronos_validation",
      core_validation_sources + object_lifetimes_sources +
          stateless_validation_sources + thread_safety_sources +
          unique_objects_sources + best_practices_sources +
          debug_printf_sources + chassis_sources,
      [ ":vulkan_core_validation_glslang" ],
      [],
    ] ]

if (!is_android) {
  action("vulkan_gen_json_files") {
    script = "build-gn/generate_vulkan_layers_json.py"

    # Make sure that the cleanup of old layer JSON files happens before the new ones are generated.
    deps = [
      ":vulkan_clean_old_validation_layer_objects",
      "$vulkan_headers_dir:vulkan_headers",
    ]
    json_names = [ "VkLayer_khronos_validation.json" ]
    sources = [ "$vulkan_headers_dir/include/vulkan/vulkan_core.h" ]
    outputs = []
    foreach(json_name, json_names) {
      sources += [ "layers/json/$json_name.in" ]
      outputs += [ "$vulkan_data_dir/$json_name" ]
    }

    if (is_linux) {
      _platform = "Linux"
    } else if (is_win) {
      _platform = "Windows"
    } else if (is_mac) {
      _platform = "Darwin"
    } else {
      _platform = "Other"
    }

    args = [
             "--platform",
             _platform,
             rebase_path("layers/json", root_build_dir),
             rebase_path(vulkan_data_dir, root_build_dir),
           ] + rebase_path(sources, root_build_dir)

    # The layer JSON files are part of the necessary data deps.
    data = outputs
  }
}

source_set("vulkan_layer_utils") {
  include_dirs = [
    "layers",
    "layers/generated",
  ]
  sources = [
    "$vulkan_headers_dir/include/vulkan/vk_layer.h",
    "$vulkan_headers_dir/include/vulkan/vk_sdk_platform.h",
    "$vulkan_headers_dir/include/vulkan/vulkan.h",
    "layers/android_ndk_types.h",
    "layers/cast_utils.h",
    "layers/generated/vk_enum_string_helper.h",
    "layers/generated/vk_layer_dispatch_table.h",
    "layers/generated/vk_object_types.h",
    "layers/generated/vk_safe_struct.h",
    "layers/generated/vk_typemap_helper.h",
    "layers/generated/vk_validation_error_messages.h",
    "layers/generated/vk_format_utils.cpp",
    "layers/generated/vk_format_utils.h",
    "layers/hash_util.h",
    "layers/hash_vk_types.h",
    "layers/sparse_containers.h",
    "layers/vk_layer_config.cpp",
    "layers/vk_layer_config.h",
    "layers/vk_layer_data.h",
    "layers/vk_layer_extension_utils.cpp",
    "layers/vk_layer_extension_utils.h",
    "layers/vk_layer_logging.h",
    "layers/vk_layer_utils.cpp",
    "layers/vk_layer_utils.h",
    "layers/vk_loader_platform.h",
    "layers/vk_mem_alloc.h",
    "layers/xxhash.c",
    "layers/xxhash.h",
  ]
  public_configs = [ ":vulkan_internal_config" ]
  configs -= [ "//build/config/compiler:chromium_code" ]
  configs += [ "//build/config/compiler:no_chromium_code" ]
  public_deps = [ "$vulkan_headers_dir:vulkan_headers" ]
  configs -= vulkan_undefine_configs
}

config("vulkan_core_validation_config") {
  include_dirs = [
    "$vvl_glslang_dir",
  ]
}

source_set("vulkan_core_validation_glslang") {
  public_deps = [
    "${vvl_spirv_tools_dir}:spvtools",
    "${vvl_spirv_tools_dir}:spvtools_opt",
    "${vvl_spirv_tools_dir}:spvtools_val",
  ]
  public_configs = [
    "$vulkan_headers_dir:vulkan_headers_config",
    ":vulkan_core_validation_config",
  ]
}

config("vulkan_stateless_validation_config") {
  if (is_clang) {
    cflags_cc = [ "-Wno-unused-const-variable" ]
  }
}

foreach(layer_info, layers) {
  name = layer_info[0]
  shared_library("VkLayer_$name") {
    defines = []
    configs -= [ "//build/config/compiler:chromium_code" ]
    configs += [ "//build/config/compiler:no_chromium_code" ]
    configs += [ "//build/config/compiler:rtti"]
    configs -= vulkan_undefine_configs
    public_configs = [ ":vulkan_layer_config" ]
    deps = [
      # Make sure the cleanup of old layers happen before the new ones are compiled.
      ":vulkan_clean_old_validation_layer_objects",
      ":vulkan_layer_utils",
    ]
    if (layer_info[2] != "") {
      deps += layer_info[2]
    }
    sources = layer_info[1]
    if (is_win) {
      defines += [ "NOMINMAX" ]
      sources += [ "layers/VkLayer_$name.def" ]
    }
    if (is_linux || is_android) {
      ldflags = [ "-Wl,-Bsymbolic,--exclude-libs,ALL" ]
    }
    if (ozone_platform_x11) {
      defines += [ "VK_USE_PLATFORM_XLIB_KHR" ]
    }
    if (is_android) {
      libs = [
        "log",
        "nativewindow",
      ]
      configs -= [ "//build/config/android:hide_all_but_jni_onload" ]
    }
    defines += layer_info[3]
  }
}

group("vulkan_validation_layers") {
  data_deps = []
  foreach(layer_info, layers) {
    name = layer_info[0]
    data_deps += [ ":VkLayer_$name" ]
  }
}
