# Copyright 2016 The Chromium Authors. All rights reserved.
# Use of this source code is governed by a BSD-style license that can be
# found in the LICENSE file.

import("features.gni")
import("//build/config/ui.gni")
import("//build/buildflag_header.gni")
import("//testing/test.gni")

# Generate a buildflag header for compile-time checking of Vulkan support.
buildflag_header("features") {
  header = "features.h"
  flags = [ "ENABLE_VULKAN=$enable_vulkan" ]
}
if (enable_vulkan) {
  vulkan_lib_dir = getenv("VULKAN_SDK") + "/lib"
  component("vulkan") {
    output_name = "vulkan_wrapper"

    if (is_linux) {
      assert(use_x11, "Vulkan only support x11 at this point.")
      sources = [
        "vulkan_command_buffer.cc",
        "vulkan_command_buffer.h",
        "vulkan_command_pool.cc",
        "vulkan_command_pool.h",
        "vulkan_descriptor_layout.cc",
        "vulkan_descriptor_layout.h",
        "vulkan_descriptor_pool.cc",
        "vulkan_descriptor_pool.h",
        "vulkan_descriptor_set.cc",
        "vulkan_descriptor_set.h",
        "vulkan_device_queue.cc",
        "vulkan_device_queue.h",
        "vulkan_export.h",
        "vulkan_image_view.cc",
        "vulkan_image_view.h",
        "vulkan_implementation.cc",
        "vulkan_implementation.h",
        "vulkan_platform.h",
        "vulkan_render_pass.cc",
        "vulkan_render_pass.h",
        "vulkan_sampler.cc",
        "vulkan_sampler.h",
        "vulkan_shader_module.cc",
        "vulkan_shader_module.h",
        "vulkan_surface.cc",
        "vulkan_surface.h",
        "vulkan_swap_chain.cc",
        "vulkan_swap_chain.h",
      ]

      configs += [ "//build/config:precompiled_headers" ]
      defines = [ "VULKAN_IMPLEMENTATION" ]

      all_dependent_configs = [ "//third_party/vulkan:vulkan_headers" ]
      libs = [ "vulkan" ]

      if (current_cpu == "x64") {
        lib_dirs = [
          "/usr/lib/x86_64-linux-gnu",
          vulkan_lib_dir,
        ]
      } else {
        assert(false, "Unsupported vulkan target: " + current_cpu)
      }

      deps = [
        "//base",
        "//third_party/shaderc:libshaderc",
        "//ui/base",
        "//ui/gfx",
      ]

      if (use_x11) {
        deps += [ "//ui/gfx/x" ]
        configs += [ "//build/config/linux:x11" ]
      }
    }
  }

  test("vulkan_tests") {
    sources = [
      "tests/basic_vulkan_test.cc",
      "tests/basic_vulkan_test.h",
      "tests/native_window.h",
      "tests/shader_module_unittest.cc",
      "tests/vulkan_test.cc",
      "tests/vulkan_tests_main.cc",
    ]

    include_dirs = [ "/usr/include" ]
    if (current_cpu == "x64") {
      lib_dirs = [
        "/usr/lib/x86_64-linux-gnu",
        vulkan_lib_dir,
      ]
    } else {
      assert(false, "Unsupported vulkan target: " + current_cpu)
    }

    deps = [
      ":vulkan",
      "//base/test:test_support",
      "//testing/gmock",
      "//testing/gtest",
    ]

    if (use_x11) {
      sources += [ "tests/native_window_x11.cc" ]
      deps += [ "//ui/gfx/x" ]
      configs += [ "//build/config/linux:x11" ]
    }
  }
}