# Copyright (C) 2018-2023 The ANGLE Project Authors.
# Copyright (C) 2019-2023 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_headers.gni")

config("vulkan_headers_config") {
  include_dirs = [ "include" ]
  defines = []

  if (is_win) {
    defines += [ "VK_USE_PLATFORM_WIN32_KHR" ]
  }
  if (defined(vulkan_use_x11) && vulkan_use_x11) {
    defines += [ "VK_USE_PLATFORM_XCB_KHR" ]
  }
  if (defined(vulkan_use_wayland) && vulkan_use_wayland) {
    defines += [ "VK_USE_PLATFORM_WAYLAND_KHR" ]
    if (defined(vulkan_wayland_include_dirs)) {
      include_dirs += vulkan_wayland_include_dirs
    }
  }
  if (is_android) {
    defines += [ "VK_USE_PLATFORM_ANDROID_KHR" ]
  }
  if (is_fuchsia) {
    defines += [ "VK_USE_PLATFORM_FUCHSIA" ]
  }
  if (is_mac) {
    defines += [ "VK_USE_PLATFORM_METAL_EXT" ]
  }
  if (defined(is_ggp) && is_ggp) {
    defines += [ "VK_USE_PLATFORM_GGP" ]
  }
  if (is_clang) {
    cflags = [
      "-Wno-redundant-parens",
    ]
  }
}

# Vulkan headers only, no compiled sources.
source_set("vulkan_headers") {
  sources = [
    "include/vulkan/vk_icd.h",
    "include/vulkan/vk_layer.h",
    "include/vulkan/vk_platform.h",
    "include/vulkan/vulkan.h",
    "include/vulkan/vulkan.hpp",
    "include/vulkan/vulkan_core.h",
    "include/vulkan/vulkan_screen.h",
    "include/vk_video/vulkan_video_codec_h264std_decode.h",
    "include/vk_video/vulkan_video_codec_h264std_encode.h",
    "include/vk_video/vulkan_video_codec_h264std.h",
    "include/vk_video/vulkan_video_codec_h265std_decode.h",
    "include/vk_video/vulkan_video_codec_h265std_encode.h",
    "include/vk_video/vulkan_video_codec_h265std.h",
    "include/vk_video/vulkan_video_codecs_common.h",
  ]
  public_configs = [ ":vulkan_headers_config" ]
}
