1# Copyright 2016 The Chromium Authors. All rights reserved.
2# Use of this source code is governed by a BSD-style license that can be
3# found in the LICENSE file.
4
5import("//build/buildflag_header.gni")
6import("//build/config/dcheck_always_on.gni")
7import("//build/config/jumbo.gni")
8import("//build/config/ui.gni")
9import("//testing/test.gni")
10import("//ui/ozone/ozone.gni")
11import("features.gni")
12
13# Generate a buildflag header for compile-time checking of Vulkan support.
14buildflag_header("buildflags") {
15  header = "buildflags.h"
16  flags = [ "ENABLE_VULKAN=$enable_vulkan" ]
17}
18
19if (enable_vulkan) {
20  use_vulkan_xlib = use_x11 || ozone_platform_x11
21  config("vulkan_config") {
22    if (use_vulkan_xlib) {
23      defines = [ "USE_VULKAN_XLIB" ]
24    }
25    if (is_android) {
26      defines = [ "VK_USE_PLATFORM_ANDROID_KHR" ]
27    }
28    if (is_fuchsia) {
29      defines = [ "VK_USE_PLATFORM_FUCHSIA" ]
30    }
31  }
32
33  jumbo_component("vulkan") {
34    output_name = "vulkan_wrapper"
35
36    sources = [
37      "semaphore_handle.cc",
38      "semaphore_handle.h",
39      "vulkan_command_buffer.cc",
40      "vulkan_command_buffer.h",
41      "vulkan_command_pool.cc",
42      "vulkan_command_pool.h",
43      "vulkan_device_queue.cc",
44      "vulkan_device_queue.h",
45      "vulkan_export.h",
46      "vulkan_fence_helper.cc",
47      "vulkan_fence_helper.h",
48      "vulkan_function_pointers.cc",
49      "vulkan_function_pointers.h",
50      "vulkan_image.cc",
51      "vulkan_image.h",
52      "vulkan_implementation.cc",
53      "vulkan_implementation.h",
54      "vulkan_instance.cc",
55      "vulkan_instance.h",
56      "vulkan_surface.cc",
57      "vulkan_surface.h",
58      "vulkan_swap_chain.cc",
59      "vulkan_swap_chain.h",
60      "vulkan_util.cc",
61      "vulkan_util.h",
62    ]
63
64    configs += [ "//build/config:precompiled_headers" ]
65    public_configs = [ ":vulkan_config" ]
66
67    defines = [ "VULKAN_IMPLEMENTATION" ]
68
69    all_dependent_configs = [ "//third_party/vulkan:vulkan_config" ]
70
71    deps = [
72      "//base",
73      "//base/util/type_safety",
74      "//gpu/ipc/common:vulkan_ycbcr_info",
75      "//ui/gfx",
76    ]
77    public_deps = [ "//gpu/config:vulkan_info" ]
78    data_deps = []
79
80    if (is_posix) {
81      sources += [
82        "vulkan_image_linux.cc",
83        "vulkan_posix_util.cc",
84        "vulkan_posix_util.h",
85      ]
86    }
87
88    if (is_android) {
89      sources += [ "vulkan_image_android.cc" ]
90    }
91
92    if (is_win) {
93      sources += [ "vulkan_image_win.cc" ]
94    }
95
96    if (is_fuchsia) {
97      sources += [
98        "fuchsia/vulkan_fuchsia_ext.h",
99        "vulkan_image_fuchsia.cc",
100      ]
101
102      public_deps += [ "//third_party/fuchsia-sdk/sdk/pkg/zx" ]
103
104      data_deps += [ "//third_party/fuchsia-sdk:vulkan_base" ]
105
106      # VulkanInstance enables validation layer in Debug builds and when DCHECKs
107      # are enabled in Release builds. In these cases the validation layer
108      # libraries and configs need to be included in the generated Fuchsia
109      # package.
110      if (is_debug || dcheck_always_on) {
111        data_deps += [ "//third_party/fuchsia-sdk:vulkan_validation" ]
112      }
113    }
114  }
115
116  jumbo_static_library("test_support") {
117    testonly = true
118    sources = [ "tests/native_window.h" ]
119
120    deps = [
121      "//ui/gfx",
122      "//ui/gfx:native_widget_types",
123    ]
124
125    if (use_x11 && !use_ozone) {
126      sources += [ "tests/native_window.cc" ]
127      deps += [
128        "//ui/platform_window",
129        "//ui/platform_window/x11",
130      ]
131    }
132
133    if (is_win) {
134      sources += [ "tests/native_window_win.cc" ]
135    }
136
137    if (use_ozone) {
138      sources += [ "tests/native_window.cc" ]
139      deps += [
140        "//ui/ozone",
141        "//ui/platform_window",
142      ]
143    }
144
145    if (is_android) {
146      sources += [ "tests/native_window_android.cc" ]
147      deps += [
148        "//ui/android:ui_java",
149        "//ui/gl",
150      ]
151    }
152  }
153
154  # TODO(penghuang): support more platforms
155  # https://crbug.com/1065499
156  if (is_android || use_x11 || is_win || use_ozone) {
157    test("vulkan_tests") {
158      sources = [
159        "tests/basic_vulkan_test.cc",
160        "tests/basic_vulkan_test.h",
161        "tests/vulkan_test.cc",
162        "tests/vulkan_tests_main.cc",
163        "vulkan_fence_helper_unittest.cc",
164      ]
165
166      deps = [
167        ":test_support",
168        "//base:base",
169        "//base/test:test_support",
170        "//components/viz/common:vulkan_context_provider",
171        "//gpu/vulkan/init",
172        "//testing/gmock",
173        "//testing/gtest",
174        "//ui/events/platform",
175        "//ui/gfx",
176        "//ui/gfx:native_widget_types",
177        "//ui/gfx/geometry",
178      ]
179
180      if (use_x11) {
181        deps += [ "//ui/events/platform/x11" ]
182      }
183
184      if (use_ozone) {
185        deps += [ "//ui/ozone" ]
186      }
187    }
188  }
189}
190