# 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/build.gni")
import("//build_overrides/vulkan_validation_layers.gni")

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

vulkan_data_dir = "$root_out_dir/$vulkan_data_subdir"

config("generated_layers_config") {
  cflags = [
    "-Wno-newline-eof",
    "-Wno-missing-field-initializers",
    "-Wno-unused-const-variable",
    "-Wno-sign-compare",
    "-Wno-conversion",
  ]
}

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/buffer_validation.cpp",
  "layers/buffer_validation.h",
  "layers/convert_to_renderpass2.cpp",
  "layers/convert_to_renderpass2.h",
  "layers/core_error_location.cpp",
  "layers/core_error_location.h",
  "layers/core_validation.cpp",
  "layers/core_validation.h",
  "layers/core_validation_error_enums.h",
  "layers/core_validation_types.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/synchronization_validation_types.cpp",
  "layers/generated/synchronization_validation_types.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_validation.cpp",
  "layers/shader_validation.h",
  "layers/state_tracker.cpp",
  "layers/state_tracker.h",
  "layers/subresource_adapter.cpp",
  "layers/subresource_adapter.h",
  "layers/sync_utils.cpp",
  "layers/sync_utils.h",
  "layers/sync_vuid_maps.cpp",
  "layers/sync_vuid_maps.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",
]

command_counter_sources = [
  "layers/command_counter.h",
  "layers/generated/command_counter_helper.cpp",
  "layers/generated/command_counter_helper.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 + command_counter_sources + chassis_sources,
      [ ":vulkan_core_validation_glslang" ],
      [],
    ] ]

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

    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 if (is_fuchsia) {
      _platform = "Fuchsia"
    } 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)
    if (is_fuchsia) {
      args += [ "--no-path-prefix" ]
    }

    # 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",
  ]
  if (is_fuchsia) {
    sources += [
      "layers/vk_layer_utils_minimal.cpp",
      "layers/vk_layer_utils_minimal.h",
    ]
  }
  public_configs = [
    "$vulkan_headers_dir:vulkan_headers_config",
    ":vulkan_internal_config",
  ]
  public_deps = [ "$vulkan_headers_dir:vulkan_headers" ]

  configs -= vulkan_undefine_configs
  if (is_fuchsia) {
    public_deps += [ "//third_party/Vulkan-Loader:dlopen_fuchsia" ]
  } else if (build_with_chromium) {
    configs -= [ "//build/config/compiler:chromium_code" ]
    configs += [ "//build/config/compiler:no_chromium_code" ]
  }
}

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" ]
  }
}

if (is_fuchsia) {
  library_type = "loadable_module"
} else {
  library_type = "shared_library"
}

foreach(layer_info, layers) {
  name = layer_info[0]
  target(library_type, "VkLayer_$name") {
    defines = []
    ldflags = []
    if (is_fuchsia) {
      configs -= [ "//build/config/fuchsia:thread_safety_annotations" ]
      ldflags += [ "-static-libstdc++" ]
    } else if (build_with_chromium) {
      configs -= [ "//build/config/compiler:chromium_code" ]
      configs += [ "//build/config/compiler:no_chromium_code" ]
    }
    configs += [ "//build/config:rtti" ]
    configs -= vulkan_undefine_configs
    configs += [ ":generated_layers_config" ]
    public_configs = [ ":vulkan_layer_config" ]
    deps = [ ":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 || is_fuchsia) {
      ldflags += [ "-Wl,-Bsymbolic,--exclude-libs,ALL" ]
    }
    if (!is_fuchsia && (defined(use_x11) && 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") {
  public_deps = []
  data_deps = []
  foreach(layer_info, layers) {
    name = layer_info[0]
    if (is_fuchsia) {
      public_deps += [ ":VkLayer_$name" ]
    } else {
      data_deps += [ ":VkLayer_$name" ]
    }
  }
}

group("tests") {
  # TODO(MA-684)
}
