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

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

raw_vulkan_icd_dir = rebase_path("icd", root_build_dir)

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

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

if (!is_android) {
  # Vulkan Mock ICD
  # ---------------
  shared_library("VkICD_mock_icd") {
    configs -= vulkan_undefine_configs
    public_deps = [ "$vulkan_headers_dir:vulkan_headers" ]
    data_deps = [ ":vulkan_gen_icd_json_file" ]
    sources = [
      "icd/generated/mock_icd.cpp",
      "icd/generated/mock_icd.h",
    ]
    if (is_win) {
      sources += [ "icd/VkICD_mock_icd.def" ]
    }
    if (build_with_chromium) {
      configs -= [ "//build/config/compiler:chromium_code" ]
      configs += [ "//build/config/compiler:no_chromium_code" ]
    }
  }

  action("vulkan_gen_icd_json_file") {
    script = "build-gn/generate_vulkan_layers_json.py"
    sources = [ "$vulkan_headers_dir/include/vulkan/vulkan_core.h" ]
    args = [ "--icd" ]
    if (is_win) {
      sources += [ "icd/windows/VkICD_mock_icd.json" ]
      args += [ "$raw_vulkan_icd_dir/windows" ]
    }
    if (is_linux) {
      sources += [ "icd/linux/VkICD_mock_icd.json" ]
      args += [ "$raw_vulkan_icd_dir/linux" ]
    }
    if (is_fuchsia) {
      sources += [ "icd/linux/VkICD_mock_icd.json" ]
      args += [ "$raw_vulkan_icd_dir/fuchsia" ]
    }
    if (is_mac) {
      sources += [ "icd/macos/VkICD_mock_icd.json" ]
      args += [ "$raw_vulkan_icd_dir/macos" ]
    }

    # The layer JSON files are part of the necessary data deps.
    outputs = [ "$vulkan_data_dir/VkICD_mock_icd.json" ]
    data = outputs
    args += [ raw_vulkan_data_dir ] + rebase_path(sources, root_build_dir)
  }

  config("Wno-missing-field-initializers") {
    cflags = [ "-Wno-missing-field-initializers" ]
  }

  executable("vulkaninfo") {
    sources = [ "vulkaninfo/vulkaninfo.cpp" ]

    include_dirs = [
      "vulkaninfo/generated",
      "vulkaninfo",
    ]

    deps = [
      "$vulkan_headers_dir:vulkan_headers",
      "//third_party/Vulkan-Loader:libvulkan",
    ]

    configs += [
      "//build/config:Wno-conversion",
      ":Wno-missing-field-initializers",
    ]
    configs -= [ "//build/config:no_exceptions" ]

    # TODO(fxbug.dev/51937): Remove once exceptions work with shadow call stack.
    cflags = [ "-fno-sanitize=shadow-call-stack" ]
  }
}
