# Copyright (C) 2018-2021 The ANGLE Project Authors.
# Copyright (C) 2019-2021 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.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.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/hash_util.h",
    "layers/hash_vk_types.h",
    "layers/sparse_containers.h",
    "layers/vk_format_utils.cpp",
    "layers/vk_format_utils.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 (use_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" ]
  }
}
