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", |
| 87 | "layers/generated/vk_safe_struct.h", |
Mike Schuchardt | 0c56b41 | 2019-04-18 08:55:13 -0700 | [diff] [blame] | 88 | "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 | |
| 104 | object_lifetimes_sources = [ |
Mike Schuchardt | bac5378 | 2019-07-02 15:31:13 -0700 | [diff] [blame] | 105 | "layers/generated/object_tracker.cpp", |
| 106 | "layers/generated/object_tracker.h", |
Mike Schuchardt | 0c56b41 | 2019-04-18 08:55:13 -0700 | [diff] [blame] | 107 | "layers/object_tracker_utils.cpp", |
| 108 | ] |
| 109 | |
| 110 | stateless_validation_sources = [ |
Mike Schuchardt | bac5378 | 2019-07-02 15:31:13 -0700 | [diff] [blame] | 111 | "layers/generated/parameter_validation.cpp", |
| 112 | "layers/generated/parameter_validation.h", |
Mike Schuchardt | 0c56b41 | 2019-04-18 08:55:13 -0700 | [diff] [blame] | 113 | "layers/parameter_validation_utils.cpp", |
| 114 | ] |
| 115 | |
| 116 | thread_safety_sources = [ |
Mike Schuchardt | bac5378 | 2019-07-02 15:31:13 -0700 | [diff] [blame] | 117 | "layers/generated/thread_safety.cpp", |
| 118 | "layers/generated/thread_safety.h", |
Mike Schuchardt | 0c56b41 | 2019-04-18 08:55:13 -0700 | [diff] [blame] | 119 | ] |
| 120 | |
| 121 | unique_objects_sources = [] |
| 122 | |
| 123 | chassis_sources = [ |
Mike Schuchardt | bac5378 | 2019-07-02 15:31:13 -0700 | [diff] [blame] | 124 | "layers/generated/chassis.cpp", |
| 125 | "layers/generated/chassis.h", |
| 126 | "layers/generated/layer_chassis_dispatch.cpp", |
| 127 | "layers/generated/layer_chassis_dispatch.h", |
Mike Schuchardt | 0c56b41 | 2019-04-18 08:55:13 -0700 | [diff] [blame] | 128 | ] |
| 129 | |
| 130 | layers = [ |
| 131 | [ |
| 132 | "core_validation", |
| 133 | core_validation_sources + chassis_sources, |
Mike Schuchardt | bac5378 | 2019-07-02 15:31:13 -0700 | [diff] [blame] | 134 | [ ":vulkan_core_validation_glslang" ], |
Mike Schuchardt | 0c56b41 | 2019-04-18 08:55:13 -0700 | [diff] [blame] | 135 | [ "BUILD_CORE_VALIDATION" ], |
| 136 | ], |
| 137 | [ |
| 138 | "object_lifetimes", |
| 139 | object_lifetimes_sources + chassis_sources, |
Mike Schuchardt | bac5378 | 2019-07-02 15:31:13 -0700 | [diff] [blame] | 140 | [], |
Mike Schuchardt | 0c56b41 | 2019-04-18 08:55:13 -0700 | [diff] [blame] | 141 | [ "BUILD_OBJECT_TRACKER" ], |
| 142 | ], |
| 143 | [ |
| 144 | "stateless_validation", |
| 145 | stateless_validation_sources + chassis_sources, |
Mike Schuchardt | bac5378 | 2019-07-02 15:31:13 -0700 | [diff] [blame] | 146 | [], |
Mike Schuchardt | 0c56b41 | 2019-04-18 08:55:13 -0700 | [diff] [blame] | 147 | [ "BUILD_PARAMETER_VALIDATION" ], |
| 148 | ], |
| 149 | [ |
| 150 | "thread_safety", |
| 151 | thread_safety_sources + chassis_sources, |
Mike Schuchardt | bac5378 | 2019-07-02 15:31:13 -0700 | [diff] [blame] | 152 | [], |
Mike Schuchardt | 0c56b41 | 2019-04-18 08:55:13 -0700 | [diff] [blame] | 153 | [ "BUILD_THREAD_SAFETY" ], |
| 154 | ], |
| 155 | [ |
| 156 | "unique_objects", |
| 157 | unique_objects_sources + chassis_sources, |
Mike Schuchardt | bac5378 | 2019-07-02 15:31:13 -0700 | [diff] [blame] | 158 | [], |
Mike Schuchardt | 0c56b41 | 2019-04-18 08:55:13 -0700 | [diff] [blame] | 159 | [ "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 Schuchardt | bac5378 | 2019-07-02 15:31:13 -0700 | [diff] [blame] | 166 | [ ":vulkan_core_validation_glslang" ], |
Mike Schuchardt | 0c56b41 | 2019-04-18 08:55:13 -0700 | [diff] [blame] | 167 | [ |
| 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 | |
| 178 | if (!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 | |
| 211 | source_set("vulkan_layer_utils") { |
Mike Schuchardt | bac5378 | 2019-07-02 15:31:13 -0700 | [diff] [blame] | 212 | include_dirs = [ |
| 213 | "layers", |
| 214 | "layers/generated", |
| 215 | ] |
Mike Schuchardt | 0c56b41 | 2019-04-18 08:55:13 -0700 | [diff] [blame] | 216 | 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 Schuchardt | bac5378 | 2019-07-02 15:31:13 -0700 | [diff] [blame] | 232 | public_deps = [] |
Mike Schuchardt | 0c56b41 | 2019-04-18 08:55:13 -0700 | [diff] [blame] | 233 | configs -= vulkan_undefine_configs |
| 234 | } |
| 235 | |
| 236 | config("vulkan_core_validation_config") { |
Tobin Ehlis | a194a93 | 2019-05-17 13:52:21 -0600 | [diff] [blame] | 237 | include_dirs = [ "$vvl_glslang_dir" ] |
Mike Schuchardt | 0c56b41 | 2019-04-18 08:55:13 -0700 | [diff] [blame] | 238 | } |
| 239 | |
| 240 | source_set("vulkan_core_validation_glslang") { |
| 241 | public_deps = [ |
Tobin Ehlis | a194a93 | 2019-05-17 13:52:21 -0600 | [diff] [blame] | 242 | "${vvl_spirv_tools_dir}:spvtools", |
| 243 | "${vvl_spirv_tools_dir}:spvtools_opt", |
| 244 | "${vvl_spirv_tools_dir}:spvtools_val", |
Mike Schuchardt | 0c56b41 | 2019-04-18 08:55:13 -0700 | [diff] [blame] | 245 | ] |
| 246 | public_configs = [ |
| 247 | "$vulkan_headers_dir:vulkan_headers_config", |
| 248 | ":vulkan_core_validation_config", |
| 249 | ] |
| 250 | } |
| 251 | |
| 252 | config("vulkan_stateless_validation_config") { |
| 253 | if (is_clang) { |
| 254 | cflags_cc = [ "-Wno-unused-const-variable" ] |
| 255 | } |
| 256 | } |
| 257 | |
Mike Schuchardt | 0c56b41 | 2019-04-18 08:55:13 -0700 | [diff] [blame] | 258 | foreach(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 | |
| 289 | group("vulkan_validation_layers") { |
| 290 | data_deps = [] |
| 291 | foreach(layer_info, layers) { |
| 292 | name = layer_info[0] |
| 293 | data_deps += [ ":VkLayer_$name" ] |
| 294 | } |
| 295 | } |