blob: 7acacb46c6ddcfda997c732208ddf06aaf2d82fe [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",
87 "layers/generated/vk_safe_struct.h",
Mike Schuchardt0c56b412019-04-18 08:55:13 -070088 "layers/buffer_validation.cpp",
89 "layers/buffer_validation.h",
90 "layers/core_validation.cpp",
91 "layers/core_validation.h",
92 "layers/convert_to_renderpass2.cpp",
93 "layers/descriptor_sets.cpp",
94 "layers/descriptor_sets.h",
95 "layers/drawdispatch.cpp",
96 "layers/gpu_validation.cpp",
97 "layers/gpu_validation.h",
98 "layers/shader_validation.cpp",
99 "layers/shader_validation.h",
100 "layers/xxhash.c",
101 "layers/xxhash.h",
102]
103
104object_lifetimes_sources = [
Mike Schuchardtbac53782019-07-02 15:31:13 -0700105 "layers/generated/object_tracker.cpp",
106 "layers/generated/object_tracker.h",
Mike Schuchardt0c56b412019-04-18 08:55:13 -0700107 "layers/object_tracker_utils.cpp",
108]
109
110stateless_validation_sources = [
Mike Schuchardtbac53782019-07-02 15:31:13 -0700111 "layers/generated/parameter_validation.cpp",
112 "layers/generated/parameter_validation.h",
Mike Schuchardt0c56b412019-04-18 08:55:13 -0700113 "layers/parameter_validation_utils.cpp",
114]
115
116thread_safety_sources = [
Mike Schuchardtbac53782019-07-02 15:31:13 -0700117 "layers/generated/thread_safety.cpp",
118 "layers/generated/thread_safety.h",
Mike Schuchardt0c56b412019-04-18 08:55:13 -0700119]
120
121unique_objects_sources = []
122
123chassis_sources = [
Mike Schuchardtbac53782019-07-02 15:31:13 -0700124 "layers/generated/chassis.cpp",
125 "layers/generated/chassis.h",
126 "layers/generated/layer_chassis_dispatch.cpp",
127 "layers/generated/layer_chassis_dispatch.h",
Mike Schuchardt0c56b412019-04-18 08:55:13 -0700128]
129
130layers = [
131 [
132 "core_validation",
133 core_validation_sources + chassis_sources,
Mike Schuchardtbac53782019-07-02 15:31:13 -0700134 [ ":vulkan_core_validation_glslang" ],
Mike Schuchardt0c56b412019-04-18 08:55:13 -0700135 [ "BUILD_CORE_VALIDATION" ],
136 ],
137 [
138 "object_lifetimes",
139 object_lifetimes_sources + chassis_sources,
Mike Schuchardtbac53782019-07-02 15:31:13 -0700140 [],
Mike Schuchardt0c56b412019-04-18 08:55:13 -0700141 [ "BUILD_OBJECT_TRACKER" ],
142 ],
143 [
144 "stateless_validation",
145 stateless_validation_sources + chassis_sources,
Mike Schuchardtbac53782019-07-02 15:31:13 -0700146 [],
Mike Schuchardt0c56b412019-04-18 08:55:13 -0700147 [ "BUILD_PARAMETER_VALIDATION" ],
148 ],
149 [
150 "thread_safety",
151 thread_safety_sources + chassis_sources,
Mike Schuchardtbac53782019-07-02 15:31:13 -0700152 [],
Mike Schuchardt0c56b412019-04-18 08:55:13 -0700153 [ "BUILD_THREAD_SAFETY" ],
154 ],
155 [
156 "unique_objects",
157 unique_objects_sources + chassis_sources,
Mike Schuchardtbac53782019-07-02 15:31:13 -0700158 [],
Mike Schuchardt0c56b412019-04-18 08:55:13 -0700159 [ "LAYER_CHASSIS_CAN_WRAP_HANDLES" ],
160 ],
161 [
162 "khronos_validation",
163 core_validation_sources + object_lifetimes_sources +
164 stateless_validation_sources + thread_safety_sources +
165 unique_objects_sources + chassis_sources,
Mike Schuchardtbac53782019-07-02 15:31:13 -0700166 [ ":vulkan_core_validation_glslang" ],
Mike Schuchardt0c56b412019-04-18 08:55:13 -0700167 [
168 "BUILD_KHRONOS_VALIDATION",
169 "BUILD_CORE_VALIDATION",
170 "BUILD_OBJECT_TRACKER",
171 "BUILD_THREAD_SAFETY",
172 "BUILD_PARAMETER_VALIDATION",
173 "LAYER_CHASSIS_CAN_WRAP_HANDLES",
174 ],
175 ],
176]
177
178if (!is_android) {
179 action("vulkan_gen_json_files") {
180 script = "build-gn/generate_vulkan_layers_json.py"
181 public_deps = [
182 ":vulkan_clean_old_validation_layer_objects",
183 ]
184 json_names = [
185 "VkLayer_core_validation.json",
186 "VkLayer_object_lifetimes.json",
187 "VkLayer_stateless_validation.json",
188 "VkLayer_standard_validation.json",
189 "VkLayer_thread_safety.json",
190 "VkLayer_unique_objects.json",
191 "VkLayer_khronos_validation.json",
192 ]
193 sources = [
194 "$vulkan_headers_dir/include/vulkan/vulkan_core.h",
195 ]
196 outputs = []
197 foreach(json_name, json_names) {
198 sources += [ "layers/json/$json_name.in" ]
199 outputs += [ "$vulkan_data_dir/$json_name" ]
200 }
201 args = [
202 rebase_path("layers/json", root_build_dir),
203 rebase_path(vulkan_data_dir, root_build_dir),
204 ] + rebase_path(sources, root_build_dir)
205
206 # The layer JSON files are part of the necessary data deps.
207 data = outputs
208 }
209}
210
211source_set("vulkan_layer_utils") {
Mike Schuchardtbac53782019-07-02 15:31:13 -0700212 include_dirs = [
213 "layers",
214 "layers/generated",
215 ]
Mike Schuchardt0c56b412019-04-18 08:55:13 -0700216 sources = [
217 "layers/vk_format_utils.cpp",
218 "layers/vk_format_utils.h",
219 "layers/vk_layer_config.cpp",
220 "layers/vk_layer_config.h",
221 "layers/vk_layer_extension_utils.cpp",
222 "layers/vk_layer_extension_utils.h",
223 "layers/vk_layer_utils.cpp",
224 "layers/vk_layer_utils.h",
225 ]
226 public_configs = [
227 "$vulkan_headers_dir:vulkan_headers_config",
228 ":vulkan_internal_config",
229 ]
230 configs -= [ "//build/config/compiler:chromium_code" ]
231 configs += [ "//build/config/compiler:no_chromium_code" ]
Mike Schuchardtbac53782019-07-02 15:31:13 -0700232 public_deps = []
Mike Schuchardt0c56b412019-04-18 08:55:13 -0700233 configs -= vulkan_undefine_configs
234}
235
236config("vulkan_core_validation_config") {
Tobin Ehlisa194a932019-05-17 13:52:21 -0600237 include_dirs = [ "$vvl_glslang_dir" ]
Mike Schuchardt0c56b412019-04-18 08:55:13 -0700238}
239
240source_set("vulkan_core_validation_glslang") {
241 public_deps = [
Tobin Ehlisa194a932019-05-17 13:52:21 -0600242 "${vvl_spirv_tools_dir}:spvtools",
243 "${vvl_spirv_tools_dir}:spvtools_opt",
244 "${vvl_spirv_tools_dir}:spvtools_val",
Mike Schuchardt0c56b412019-04-18 08:55:13 -0700245 ]
246 public_configs = [
247 "$vulkan_headers_dir:vulkan_headers_config",
248 ":vulkan_core_validation_config",
249 ]
250}
251
252config("vulkan_stateless_validation_config") {
253 if (is_clang) {
254 cflags_cc = [ "-Wno-unused-const-variable" ]
255 }
256}
257
Mike Schuchardt0c56b412019-04-18 08:55:13 -0700258foreach(layer_info, layers) {
259 name = layer_info[0]
260 shared_library("VkLayer_$name") {
261 configs -= [ "//build/config/compiler:chromium_code" ]
262 configs += [ "//build/config/compiler:no_chromium_code" ]
263 configs -= vulkan_undefine_configs
264 public_configs = [ ":vulkan_layer_config" ]
265 deps = [
266 ":vulkan_layer_utils",
267 ]
268 if (layer_info[2] != "") {
269 deps += layer_info[2]
270 }
271 sources = layer_info[1]
272 if (is_win) {
273 sources += [ "layers/VkLayer_$name.def" ]
274 }
275 if (is_linux || is_android) {
276 ldflags = [ "-Wl,-Bsymbolic,--exclude-libs,ALL" ]
277 }
278 if (is_android) {
279 libs = [
280 "log",
281 "nativewindow",
282 ]
283 configs -= [ "//build/config/android:hide_all_but_jni_onload" ]
284 }
285 defines = layer_info[3]
286 }
287}
288
289group("vulkan_validation_layers") {
290 data_deps = []
291 foreach(layer_info, layers) {
292 name = layer_info[0]
293 data_deps += [ ":VkLayer_$name" ]
294 }
295}