Mike Schuchardt | 0c56b41 | 2019-04-18 08:55:13 -0700 | [diff] [blame] | 1 | # 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 | |
| 16 | import("//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. |
| 20 | assert(!is_fuchsia) |
| 21 | |
Mike Schuchardt | 0c56b41 | 2019-04-18 08:55:13 -0700 | [diff] [blame] | 22 | vulkan_undefine_configs = [] |
| 23 | if (is_win) { |
| 24 | vulkan_undefine_configs += [ |
| 25 | "//build/config/win:nominmax", |
| 26 | "//build/config/win:unicode", |
| 27 | ] |
| 28 | } |
| 29 | |
Mike Schuchardt | 0c56b41 | 2019-04-18 08:55:13 -0700 | [diff] [blame] | 30 | vulkan_gen_dir = "$target_gen_dir/$vulkan_gen_subdir" |
| 31 | raw_vulkan_gen_dir = rebase_path(vulkan_gen_dir, root_build_dir) |
| 32 | |
| 33 | vulkan_data_dir = "$root_out_dir/$vulkan_data_subdir" |
| 34 | raw_vulkan_data_dir = rebase_path(vulkan_data_dir, root_build_dir) |
| 35 | |
| 36 | raw_root_out_dir = rebase_path(root_out_dir, root_build_dir) |
| 37 | |
Mike Schuchardt | 0c56b41 | 2019-04-18 08:55:13 -0700 | [diff] [blame] | 38 | # This special action is needed to remove old VVL objects that are now renamed. |
| 39 | action("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 Schuchardt | 0c56b41 | 2019-04-18 08:55:13 -0700 | [diff] [blame] | 57 | config("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 | |
| 77 | config("vulkan_layer_config") { |
Mike Schuchardt | bac5378 | 2019-07-02 15:31:13 -0700 | [diff] [blame] | 78 | include_dirs = [ |
| 79 | "layers", |
| 80 | "layers/generated", |
| 81 | ] |
Mike Schuchardt | 0c56b41 | 2019-04-18 08:55:13 -0700 | [diff] [blame] | 82 | } |
| 83 | |
| 84 | core_validation_sources = [ |
| 85 | # This file is manually included in the layer |
Mike Schuchardt | bac5378 | 2019-07-02 15:31:13 -0700 | [diff] [blame] | 86 | # "layers/generated/vk_safe_struct.cpp", |
Mike Schuchardt | 0c56b41 | 2019-04-18 08:55:13 -0700 | [diff] [blame] | 87 | "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 | |
| 103 | object_lifetimes_sources = [ |
Mike Schuchardt | bac5378 | 2019-07-02 15:31:13 -0700 | [diff] [blame] | 104 | "layers/generated/object_tracker.cpp", |
| 105 | "layers/generated/object_tracker.h", |
Mike Schuchardt | 0c56b41 | 2019-04-18 08:55:13 -0700 | [diff] [blame] | 106 | "layers/object_tracker_utils.cpp", |
| 107 | ] |
| 108 | |
| 109 | stateless_validation_sources = [ |
Mike Schuchardt | bac5378 | 2019-07-02 15:31:13 -0700 | [diff] [blame] | 110 | "layers/generated/parameter_validation.cpp", |
| 111 | "layers/generated/parameter_validation.h", |
Mike Schuchardt | 0c56b41 | 2019-04-18 08:55:13 -0700 | [diff] [blame] | 112 | "layers/parameter_validation_utils.cpp", |
| 113 | ] |
| 114 | |
| 115 | thread_safety_sources = [ |
Mike Schuchardt | bac5378 | 2019-07-02 15:31:13 -0700 | [diff] [blame] | 116 | "layers/generated/thread_safety.cpp", |
| 117 | "layers/generated/thread_safety.h", |
Mike Schuchardt | 0c56b41 | 2019-04-18 08:55:13 -0700 | [diff] [blame] | 118 | ] |
| 119 | |
| 120 | unique_objects_sources = [] |
| 121 | |
| 122 | chassis_sources = [ |
Tobin Ehlis | ac7cc6c | 2019-07-19 13:05:08 -0600 | [diff] [blame] | 123 | "layers/core_validation.h", |
| 124 | "layers/generated/vk_safe_struct.h", |
| 125 | "layers/generated/thread_safety.h", |
Mike Schuchardt | bac5378 | 2019-07-02 15:31:13 -0700 | [diff] [blame] | 126 | "layers/generated/chassis.cpp", |
| 127 | "layers/generated/chassis.h", |
| 128 | "layers/generated/layer_chassis_dispatch.cpp", |
| 129 | "layers/generated/layer_chassis_dispatch.h", |
Tobin Ehlis | ac7cc6c | 2019-07-19 13:05:08 -0600 | [diff] [blame] | 130 | "$vulkan_headers_dir/include/vulkan/vk_layer.h", |
| 131 | "$vulkan_headers_dir/include/vulkan/vulkan.h", |
Mike Schuchardt | 0c56b41 | 2019-04-18 08:55:13 -0700 | [diff] [blame] | 132 | ] |
| 133 | |
| 134 | layers = [ |
| 135 | [ |
| 136 | "core_validation", |
Tobin Ehlis | ac7cc6c | 2019-07-19 13:05:08 -0600 | [diff] [blame] | 137 | core_validation_sources + chassis_sources + thread_safety_sources, |
Mike Schuchardt | bac5378 | 2019-07-02 15:31:13 -0700 | [diff] [blame] | 138 | [ ":vulkan_core_validation_glslang" ], |
Mike Schuchardt | 0c56b41 | 2019-04-18 08:55:13 -0700 | [diff] [blame] | 139 | [ "BUILD_CORE_VALIDATION" ], |
| 140 | ], |
| 141 | [ |
| 142 | "object_lifetimes", |
Tobin Ehlis | ac7cc6c | 2019-07-19 13:05:08 -0600 | [diff] [blame] | 143 | object_lifetimes_sources + chassis_sources + thread_safety_sources + core_validation_sources, |
Tobin Ehlis | 7dc179b | 2019-07-22 12:34:01 -0600 | [diff] [blame] | 144 | [ ":vulkan_core_validation_glslang" ], |
Mike Schuchardt | 0c56b41 | 2019-04-18 08:55:13 -0700 | [diff] [blame] | 145 | [ "BUILD_OBJECT_TRACKER" ], |
| 146 | ], |
| 147 | [ |
| 148 | "stateless_validation", |
Tobin Ehlis | ac7cc6c | 2019-07-19 13:05:08 -0600 | [diff] [blame] | 149 | stateless_validation_sources + chassis_sources + core_validation_sources, |
Tobin Ehlis | 7dc179b | 2019-07-22 12:34:01 -0600 | [diff] [blame] | 150 | [ ":vulkan_core_validation_glslang" ], |
Mike Schuchardt | 0c56b41 | 2019-04-18 08:55:13 -0700 | [diff] [blame] | 151 | [ "BUILD_PARAMETER_VALIDATION" ], |
| 152 | ], |
| 153 | [ |
| 154 | "thread_safety", |
Tobin Ehlis | ac7cc6c | 2019-07-19 13:05:08 -0600 | [diff] [blame] | 155 | thread_safety_sources + chassis_sources + core_validation_sources, |
Tobin Ehlis | 7dc179b | 2019-07-22 12:34:01 -0600 | [diff] [blame] | 156 | [ ":vulkan_core_validation_glslang" ], |
Mike Schuchardt | 0c56b41 | 2019-04-18 08:55:13 -0700 | [diff] [blame] | 157 | [ "BUILD_THREAD_SAFETY" ], |
| 158 | ], |
| 159 | [ |
| 160 | "unique_objects", |
Tobin Ehlis | ac7cc6c | 2019-07-19 13:05:08 -0600 | [diff] [blame] | 161 | unique_objects_sources + chassis_sources + core_validation_sources, |
Tobin Ehlis | 7dc179b | 2019-07-22 12:34:01 -0600 | [diff] [blame] | 162 | [ ":vulkan_core_validation_glslang" ], |
Mike Schuchardt | 0c56b41 | 2019-04-18 08:55:13 -0700 | [diff] [blame] | 163 | [ "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 Schuchardt | bac5378 | 2019-07-02 15:31:13 -0700 | [diff] [blame] | 170 | [ ":vulkan_core_validation_glslang" ], |
Mike Schuchardt | 0c56b41 | 2019-04-18 08:55:13 -0700 | [diff] [blame] | 171 | [ |
| 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 | |
| 182 | if (!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 Ehlis | ac7cc6c | 2019-07-19 13:05:08 -0600 | [diff] [blame] | 199 | "$vulkan_headers_dir/include/vulkan/vk_layer.h", |
Mike Schuchardt | 0c56b41 | 2019-04-18 08:55:13 -0700 | [diff] [blame] | 200 | ] |
| 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 | |
| 216 | source_set("vulkan_layer_utils") { |
Mike Schuchardt | bac5378 | 2019-07-02 15:31:13 -0700 | [diff] [blame] | 217 | include_dirs = [ |
| 218 | "layers", |
| 219 | "layers/generated", |
| 220 | ] |
Mike Schuchardt | 0c56b41 | 2019-04-18 08:55:13 -0700 | [diff] [blame] | 221 | 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 Ehlis | ac7cc6c | 2019-07-19 13:05:08 -0600 | [diff] [blame] | 230 | "$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 Schuchardt | 0c56b41 | 2019-04-18 08:55:13 -0700 | [diff] [blame] | 233 | ] |
| 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 Schuchardt | bac5378 | 2019-07-02 15:31:13 -0700 | [diff] [blame] | 240 | public_deps = [] |
Mike Schuchardt | 0c56b41 | 2019-04-18 08:55:13 -0700 | [diff] [blame] | 241 | configs -= vulkan_undefine_configs |
| 242 | } |
| 243 | |
| 244 | config("vulkan_core_validation_config") { |
Tobin Ehlis | a194a93 | 2019-05-17 13:52:21 -0600 | [diff] [blame] | 245 | include_dirs = [ "$vvl_glslang_dir" ] |
Mike Schuchardt | 0c56b41 | 2019-04-18 08:55:13 -0700 | [diff] [blame] | 246 | } |
| 247 | |
| 248 | source_set("vulkan_core_validation_glslang") { |
| 249 | public_deps = [ |
Tobin Ehlis | a194a93 | 2019-05-17 13:52:21 -0600 | [diff] [blame] | 250 | "${vvl_spirv_tools_dir}:spvtools", |
| 251 | "${vvl_spirv_tools_dir}:spvtools_opt", |
| 252 | "${vvl_spirv_tools_dir}:spvtools_val", |
Mike Schuchardt | 0c56b41 | 2019-04-18 08:55:13 -0700 | [diff] [blame] | 253 | ] |
| 254 | public_configs = [ |
| 255 | "$vulkan_headers_dir:vulkan_headers_config", |
| 256 | ":vulkan_core_validation_config", |
| 257 | ] |
| 258 | } |
| 259 | |
| 260 | config("vulkan_stateless_validation_config") { |
| 261 | if (is_clang) { |
| 262 | cflags_cc = [ "-Wno-unused-const-variable" ] |
| 263 | } |
| 264 | } |
| 265 | |
Mike Schuchardt | 0c56b41 | 2019-04-18 08:55:13 -0700 | [diff] [blame] | 266 | foreach(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 | |
| 297 | group("vulkan_validation_layers") { |
| 298 | data_deps = [] |
| 299 | foreach(layer_info, layers) { |
| 300 | name = layer_info[0] |
| 301 | data_deps += [ ":VkLayer_$name" ] |
| 302 | } |
| 303 | } |