blob: ff08295cc35449ec2004da91db68848a369a2af2 [file] [log] [blame]
Mike Schuchardt0c56b412019-04-18 08:55:13 -07001# Copyright (C) 2018-2019 The ANGLE Project Authors.
2# Copyright (C) 2019 LunarG, Inc.
3#
4# Licensed under the Apache License, Version 2.0 (the "License");
5# you may not use this file except in compliance with the License.
6# You may obtain a copy of the License at
7#
8# https://www.apache.org/licenses/LICENSE-2.0
9#
10# Unless required by applicable law or agreed to in writing, software
11# distributed under the License is distributed on an "AS IS" BASIS,
12# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13# See the License for the specific language governing permissions and
14# limitations under the License.
15
16import("//build_overrides/vulkan_validation_layers.gni")
17
18# Fuchsia has non-upstream changes to the vulkan layers, so we don't want
19# to build it from upstream sources.
20assert(!is_fuchsia)
21
Mike Schuchardt0c56b412019-04-18 08:55:13 -070022vulkan_undefine_configs = []
23if (is_win) {
24 vulkan_undefine_configs += [
25 "//build/config/win:nominmax",
26 "//build/config/win:unicode",
27 ]
28}
29
Mike Schuchardt0c56b412019-04-18 08:55:13 -070030vulkan_gen_dir = "$target_gen_dir/$vulkan_gen_subdir"
31raw_vulkan_gen_dir = rebase_path(vulkan_gen_dir, root_build_dir)
32
33vulkan_data_dir = "$root_out_dir/$vulkan_data_subdir"
34raw_vulkan_data_dir = rebase_path(vulkan_data_dir, root_build_dir)
35
36raw_root_out_dir = rebase_path(root_out_dir, root_build_dir)
37
Mike Schuchardt0c56b412019-04-18 08:55:13 -070038# This special action is needed to remove old VVL objects that are now renamed.
39action("vulkan_clean_old_validation_layer_objects") {
40 script = "build-gn/remove_files.py"
41
42 # inputs is a (random) new file since the vvl roll, used to ensure the cleanup is done only once
43 inputs = [
44 "layers/gpu_validation.cpp",
45 ]
46 outputs = [
47 "$vulkan_gen_dir/old_vvl_files_are_removed",
48 ]
49 args = [
50 "$raw_vulkan_gen_dir/old_vvl_files_are_removed",
51 "$raw_root_out_dir/libVkLayer*",
52 "$raw_root_out_dir/VkLayer*",
53 "$raw_vulkan_data_dir/VkLayer*.json",
54 ]
55}
56
Mike Schuchardt0c56b412019-04-18 08:55:13 -070057config("vulkan_internal_config") {
58 defines = [
59 "VULKAN_NON_CMAKE_BUILD",
60 "API_NAME=\"Vulkan\"",
61 ]
62 if (is_clang || !is_win) {
63 cflags = [ "-Wno-unused-function" ]
64 }
65 if (is_linux) {
66 defines += [
67 "SYSCONFDIR=\"/etc\"",
68 "FALLBACK_CONFIG_DIRS=\"/etc/xdg\"",
69 "FALLBACK_DATA_DIRS=\"/usr/local/share:/usr/share\"",
70 ]
71 }
72}
73
74# The validation layers
75# ---------------------
76
77config("vulkan_layer_config") {
Mike Schuchardtbac53782019-07-02 15:31:13 -070078 include_dirs = [
79 "layers",
80 "layers/generated",
81 ]
Mike Schuchardt0c56b412019-04-18 08:55:13 -070082}
83
84core_validation_sources = [
85 # This file is manually included in the layer
Mike Schuchardtbac53782019-07-02 15:31:13 -070086 # "layers/generated/vk_safe_struct.cpp",
Mike Schuchardt0c56b412019-04-18 08:55:13 -070087 "layers/buffer_validation.cpp",
88 "layers/buffer_validation.h",
89 "layers/core_validation.cpp",
90 "layers/core_validation.h",
91 "layers/convert_to_renderpass2.cpp",
92 "layers/descriptor_sets.cpp",
93 "layers/descriptor_sets.h",
94 "layers/drawdispatch.cpp",
95 "layers/gpu_validation.cpp",
96 "layers/gpu_validation.h",
97 "layers/shader_validation.cpp",
98 "layers/shader_validation.h",
99 "layers/xxhash.c",
100 "layers/xxhash.h",
101]
102
103object_lifetimes_sources = [
Mike Schuchardtbac53782019-07-02 15:31:13 -0700104 "layers/generated/object_tracker.cpp",
105 "layers/generated/object_tracker.h",
Mike Schuchardt0c56b412019-04-18 08:55:13 -0700106 "layers/object_tracker_utils.cpp",
107]
108
109stateless_validation_sources = [
Mike Schuchardtbac53782019-07-02 15:31:13 -0700110 "layers/generated/parameter_validation.cpp",
111 "layers/generated/parameter_validation.h",
Mike Schuchardt0c56b412019-04-18 08:55:13 -0700112 "layers/parameter_validation_utils.cpp",
113]
114
115thread_safety_sources = [
Mike Schuchardtbac53782019-07-02 15:31:13 -0700116 "layers/generated/thread_safety.cpp",
117 "layers/generated/thread_safety.h",
Mike Schuchardt0c56b412019-04-18 08:55:13 -0700118]
119
120unique_objects_sources = []
121
122chassis_sources = [
Tobin Ehlisac7cc6c2019-07-19 13:05:08 -0600123 "layers/core_validation.h",
124 "layers/generated/vk_safe_struct.h",
125 "layers/generated/thread_safety.h",
Mike Schuchardtbac53782019-07-02 15:31:13 -0700126 "layers/generated/chassis.cpp",
127 "layers/generated/chassis.h",
128 "layers/generated/layer_chassis_dispatch.cpp",
129 "layers/generated/layer_chassis_dispatch.h",
Tobin Ehlisac7cc6c2019-07-19 13:05:08 -0600130 "$vulkan_headers_dir/include/vulkan/vk_layer.h",
131 "$vulkan_headers_dir/include/vulkan/vulkan.h",
Mike Schuchardt0c56b412019-04-18 08:55:13 -0700132]
133
134layers = [
135 [
136 "core_validation",
Tobin Ehlisac7cc6c2019-07-19 13:05:08 -0600137 core_validation_sources + chassis_sources + thread_safety_sources,
Mike Schuchardtbac53782019-07-02 15:31:13 -0700138 [ ":vulkan_core_validation_glslang" ],
Mike Schuchardt0c56b412019-04-18 08:55:13 -0700139 [ "BUILD_CORE_VALIDATION" ],
140 ],
141 [
142 "object_lifetimes",
Tobin Ehlisac7cc6c2019-07-19 13:05:08 -0600143 object_lifetimes_sources + chassis_sources + thread_safety_sources + core_validation_sources,
Tobin Ehlis7dc179b2019-07-22 12:34:01 -0600144 [ ":vulkan_core_validation_glslang" ],
Mike Schuchardt0c56b412019-04-18 08:55:13 -0700145 [ "BUILD_OBJECT_TRACKER" ],
146 ],
147 [
148 "stateless_validation",
Tobin Ehlisac7cc6c2019-07-19 13:05:08 -0600149 stateless_validation_sources + chassis_sources + core_validation_sources,
Tobin Ehlis7dc179b2019-07-22 12:34:01 -0600150 [ ":vulkan_core_validation_glslang" ],
Mike Schuchardt0c56b412019-04-18 08:55:13 -0700151 [ "BUILD_PARAMETER_VALIDATION" ],
152 ],
153 [
154 "thread_safety",
Tobin Ehlisac7cc6c2019-07-19 13:05:08 -0600155 thread_safety_sources + chassis_sources + core_validation_sources,
Tobin Ehlis7dc179b2019-07-22 12:34:01 -0600156 [ ":vulkan_core_validation_glslang" ],
Mike Schuchardt0c56b412019-04-18 08:55:13 -0700157 [ "BUILD_THREAD_SAFETY" ],
158 ],
159 [
160 "unique_objects",
Tobin Ehlisac7cc6c2019-07-19 13:05:08 -0600161 unique_objects_sources + chassis_sources + core_validation_sources,
Tobin Ehlis7dc179b2019-07-22 12:34:01 -0600162 [ ":vulkan_core_validation_glslang" ],
Mike Schuchardt0c56b412019-04-18 08:55:13 -0700163 [ "LAYER_CHASSIS_CAN_WRAP_HANDLES" ],
164 ],
165 [
166 "khronos_validation",
167 core_validation_sources + object_lifetimes_sources +
168 stateless_validation_sources + thread_safety_sources +
169 unique_objects_sources + chassis_sources,
Mike Schuchardtbac53782019-07-02 15:31:13 -0700170 [ ":vulkan_core_validation_glslang" ],
Mike Schuchardt0c56b412019-04-18 08:55:13 -0700171 [
172 "BUILD_KHRONOS_VALIDATION",
173 "BUILD_CORE_VALIDATION",
174 "BUILD_OBJECT_TRACKER",
175 "BUILD_THREAD_SAFETY",
176 "BUILD_PARAMETER_VALIDATION",
177 "LAYER_CHASSIS_CAN_WRAP_HANDLES",
178 ],
179 ],
180]
181
182if (!is_android) {
183 action("vulkan_gen_json_files") {
184 script = "build-gn/generate_vulkan_layers_json.py"
185 public_deps = [
186 ":vulkan_clean_old_validation_layer_objects",
187 ]
188 json_names = [
189 "VkLayer_core_validation.json",
190 "VkLayer_object_lifetimes.json",
191 "VkLayer_stateless_validation.json",
192 "VkLayer_standard_validation.json",
193 "VkLayer_thread_safety.json",
194 "VkLayer_unique_objects.json",
195 "VkLayer_khronos_validation.json",
196 ]
197 sources = [
198 "$vulkan_headers_dir/include/vulkan/vulkan_core.h",
Tobin Ehlisac7cc6c2019-07-19 13:05:08 -0600199 "$vulkan_headers_dir/include/vulkan/vk_layer.h",
Mike Schuchardt0c56b412019-04-18 08:55:13 -0700200 ]
201 outputs = []
202 foreach(json_name, json_names) {
203 sources += [ "layers/json/$json_name.in" ]
204 outputs += [ "$vulkan_data_dir/$json_name" ]
205 }
206 args = [
207 rebase_path("layers/json", root_build_dir),
208 rebase_path(vulkan_data_dir, root_build_dir),
209 ] + rebase_path(sources, root_build_dir)
210
211 # The layer JSON files are part of the necessary data deps.
212 data = outputs
213 }
214}
215
216source_set("vulkan_layer_utils") {
Mike Schuchardtbac53782019-07-02 15:31:13 -0700217 include_dirs = [
218 "layers",
219 "layers/generated",
220 ]
Mike Schuchardt0c56b412019-04-18 08:55:13 -0700221 sources = [
222 "layers/vk_format_utils.cpp",
223 "layers/vk_format_utils.h",
224 "layers/vk_layer_config.cpp",
225 "layers/vk_layer_config.h",
226 "layers/vk_layer_extension_utils.cpp",
227 "layers/vk_layer_extension_utils.h",
228 "layers/vk_layer_utils.cpp",
229 "layers/vk_layer_utils.h",
Tobin Ehlisac7cc6c2019-07-19 13:05:08 -0600230 "$vulkan_headers_dir/include/vulkan/vk_layer.h",
231 "$vulkan_headers_dir/include/vulkan/vulkan.h",
232 "$vulkan_headers_dir/include/vulkan/vk_sdk_platform.h",
Mike Schuchardt0c56b412019-04-18 08:55:13 -0700233 ]
234 public_configs = [
235 "$vulkan_headers_dir:vulkan_headers_config",
236 ":vulkan_internal_config",
237 ]
238 configs -= [ "//build/config/compiler:chromium_code" ]
239 configs += [ "//build/config/compiler:no_chromium_code" ]
Mike Schuchardtbac53782019-07-02 15:31:13 -0700240 public_deps = []
Mike Schuchardt0c56b412019-04-18 08:55:13 -0700241 configs -= vulkan_undefine_configs
242}
243
244config("vulkan_core_validation_config") {
Tobin Ehlisa194a932019-05-17 13:52:21 -0600245 include_dirs = [ "$vvl_glslang_dir" ]
Mike Schuchardt0c56b412019-04-18 08:55:13 -0700246}
247
248source_set("vulkan_core_validation_glslang") {
249 public_deps = [
Tobin Ehlisa194a932019-05-17 13:52:21 -0600250 "${vvl_spirv_tools_dir}:spvtools",
251 "${vvl_spirv_tools_dir}:spvtools_opt",
252 "${vvl_spirv_tools_dir}:spvtools_val",
Mike Schuchardt0c56b412019-04-18 08:55:13 -0700253 ]
254 public_configs = [
255 "$vulkan_headers_dir:vulkan_headers_config",
256 ":vulkan_core_validation_config",
257 ]
258}
259
260config("vulkan_stateless_validation_config") {
261 if (is_clang) {
262 cflags_cc = [ "-Wno-unused-const-variable" ]
263 }
264}
265
Mike Schuchardt0c56b412019-04-18 08:55:13 -0700266foreach(layer_info, layers) {
267 name = layer_info[0]
268 shared_library("VkLayer_$name") {
269 configs -= [ "//build/config/compiler:chromium_code" ]
270 configs += [ "//build/config/compiler:no_chromium_code" ]
271 configs -= vulkan_undefine_configs
272 public_configs = [ ":vulkan_layer_config" ]
273 deps = [
274 ":vulkan_layer_utils",
275 ]
276 if (layer_info[2] != "") {
277 deps += layer_info[2]
278 }
279 sources = layer_info[1]
280 if (is_win) {
281 sources += [ "layers/VkLayer_$name.def" ]
282 }
283 if (is_linux || is_android) {
284 ldflags = [ "-Wl,-Bsymbolic,--exclude-libs,ALL" ]
285 }
286 if (is_android) {
287 libs = [
288 "log",
289 "nativewindow",
290 ]
291 configs -= [ "//build/config/android:hide_all_but_jni_onload" ]
292 }
293 defines = layer_info[3]
294 }
295}
296
297group("vulkan_validation_layers") {
298 data_deps = []
299 foreach(layer_info, layers) {
300 name = layer_info[0]
301 data_deps += [ ":VkLayer_$name" ]
302 }
303}