# 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-conversion",
    "-Wno-deprecated-copy",
    "-Wno-extra-semi",
    "-Wno-implicit-fallthrough",
    "-Wno-missing-field-initializers",
    "-Wno-newline-eof",
    "-Wno-sign-compare",
    "-Wno-unused-const-variable",
  ]
}

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

  # Suppress warnings the vulkan code doesn't comply with.
  configs = [ "//build/config:Wno-unused-but-set-variable" ]
  cflags += [ "-Wno-extra-semi" ]
}

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

config("vulkan_layer_config") {
  include_dirs = [
    "layers",
    "layers/generated",
  ]
  cflags = [ "-Wno-extra-semi" ]
}

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/core_error_location.cpp",
  "layers/core_error_location.h",
  "layers/descriptor_sets.cpp",
  "layers/descriptor_sets.h",
  "layers/device_memory_state.h",
  "layers/device_memory_state.cpp",
  "layers/device_state.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/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/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/range_vector.h",
  "layers/ray_tracing_state.h",
  "layers/render_pass_state.h",
  "layers/render_pass_state.cpp",
  "layers/sampler_state.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/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",
]

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"

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

source_set("micro_layer_common") {
  # For layers defined outside this repo
  public_configs = [ ":vulkan_layer_config" ]

  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/generated/vk_dispatch_table_helper.h",
    "layers/vk_format_utils.cpp",
    "layers/vk_format_utils.h",
    "layers/vk_layer_data.h",
    "layers/vk_layer_extension_utils.cpp",
    "layers/vk_layer_extension_utils.h",
    "layers/vk_layer_utils_minimal.cpp",
    "layers/vk_layer_utils_minimal.h",
  ]
  public_configs += [ ":vulkan_internal_config" ]
  public_deps = [ "$vulkan_headers_dir:vulkan_headers" ]
  configs -= vulkan_undefine_configs
  if (build_with_chromium) {
    configs -= [ "//build/config/compiler:chromium_code" ]
    configs += [ "//build/config/compiler:no_chromium_code" ]
  }
}

group("tests") {
  # TODO(fxbug.dev/13288)
}
