You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
304 lines
8.3 KiB
304 lines
8.3 KiB
# Copyright (C) 2018-2019 The ANGLE Project Authors.
|
|
# Copyright (C) 2019 LunarG, Inc.
|
|
#
|
|
# Licensed under the Apache License, Version 2.0 (the "License");
|
|
# you may not use this file except in compliance with the License.
|
|
# You may obtain a copy of the License at
|
|
#
|
|
# https://www.apache.org/licenses/LICENSE-2.0
|
|
#
|
|
# Unless required by applicable law or agreed to in writing, software
|
|
# distributed under the License is distributed on an "AS IS" BASIS,
|
|
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
# See the License for the specific language governing permissions and
|
|
# limitations under the License.
|
|
|
|
import("//build_overrides/vulkan_validation_layers.gni")
|
|
|
|
# Fuchsia has non-upstream changes to the vulkan layers, so we don't want
|
|
# to build it from upstream sources.
|
|
assert(!is_fuchsia)
|
|
|
|
vulkan_undefine_configs = []
|
|
if (is_win) {
|
|
vulkan_undefine_configs += [
|
|
"//build/config/win:nominmax",
|
|
"//build/config/win:unicode",
|
|
]
|
|
}
|
|
|
|
vulkan_gen_dir = "$target_gen_dir/$vulkan_gen_subdir"
|
|
raw_vulkan_gen_dir = rebase_path(vulkan_gen_dir, root_build_dir)
|
|
|
|
vulkan_data_dir = "$root_out_dir/$vulkan_data_subdir"
|
|
raw_vulkan_data_dir = rebase_path(vulkan_data_dir, root_build_dir)
|
|
|
|
raw_root_out_dir = rebase_path(root_out_dir, root_build_dir)
|
|
|
|
# This special action is needed to remove old VVL objects that are now renamed.
|
|
action("vulkan_clean_old_validation_layer_objects") {
|
|
script = "build-gn/remove_files.py"
|
|
|
|
# inputs is a (random) new file since the vvl roll, used to ensure the cleanup is done only once
|
|
inputs = [
|
|
"layers/gpu_validation.cpp",
|
|
]
|
|
outputs = [
|
|
"$vulkan_gen_dir/old_vvl_files_are_removed",
|
|
]
|
|
args = [
|
|
"$raw_vulkan_gen_dir/old_vvl_files_are_removed",
|
|
"$raw_root_out_dir/libVkLayer*",
|
|
"$raw_root_out_dir/VkLayer*",
|
|
"$raw_vulkan_data_dir/VkLayer*.json",
|
|
]
|
|
}
|
|
|
|
config("vulkan_internal_config") {
|
|
defines = [
|
|
"VULKAN_NON_CMAKE_BUILD",
|
|
"API_NAME=\"Vulkan\"",
|
|
]
|
|
if (is_clang || !is_win) {
|
|
cflags = [ "-Wno-unused-function" ]
|
|
}
|
|
if (is_linux) {
|
|
defines += [
|
|
"SYSCONFDIR=\"/etc\"",
|
|
"FALLBACK_CONFIG_DIRS=\"/etc/xdg\"",
|
|
"FALLBACK_DATA_DIRS=\"/usr/local/share:/usr/share\"",
|
|
]
|
|
}
|
|
}
|
|
|
|
# The validation layers
|
|
# ---------------------
|
|
|
|
config("vulkan_layer_config") {
|
|
include_dirs = [
|
|
"layers",
|
|
"layers/generated",
|
|
]
|
|
}
|
|
|
|
core_validation_sources = [
|
|
# This file is manually included in the layer
|
|
# "layers/generated/vk_safe_struct.cpp",
|
|
"layers/buffer_validation.cpp",
|
|
"layers/buffer_validation.h",
|
|
"layers/core_validation.cpp",
|
|
"layers/core_validation.h",
|
|
"layers/convert_to_renderpass2.cpp",
|
|
"layers/descriptor_sets.cpp",
|
|
"layers/descriptor_sets.h",
|
|
"layers/drawdispatch.cpp",
|
|
"layers/gpu_validation.cpp",
|
|
"layers/gpu_validation.h",
|
|
"layers/shader_validation.cpp",
|
|
"layers/shader_validation.h",
|
|
"layers/xxhash.c",
|
|
"layers/xxhash.h",
|
|
]
|
|
|
|
object_lifetimes_sources = [
|
|
"layers/generated/object_tracker.cpp",
|
|
"layers/generated/object_tracker.h",
|
|
"layers/object_tracker_utils.cpp",
|
|
]
|
|
|
|
stateless_validation_sources = [
|
|
"layers/generated/parameter_validation.cpp",
|
|
"layers/generated/parameter_validation.h",
|
|
"layers/parameter_validation_utils.cpp",
|
|
]
|
|
|
|
thread_safety_sources = [
|
|
"layers/generated/thread_safety.cpp",
|
|
"layers/generated/thread_safety.h",
|
|
]
|
|
|
|
unique_objects_sources = []
|
|
|
|
chassis_sources = [
|
|
"layers/core_validation.h",
|
|
"layers/generated/vk_safe_struct.h",
|
|
"layers/generated/thread_safety.h",
|
|
"layers/generated/chassis.cpp",
|
|
"layers/generated/chassis.h",
|
|
"layers/generated/layer_chassis_dispatch.cpp",
|
|
"layers/generated/layer_chassis_dispatch.h",
|
|
"$vulkan_headers_dir/include/vulkan/vk_layer.h",
|
|
"$vulkan_headers_dir/include/vulkan/vulkan.h",
|
|
]
|
|
|
|
layers = [
|
|
[
|
|
"core_validation",
|
|
core_validation_sources + chassis_sources + thread_safety_sources,
|
|
[ ":vulkan_core_validation_glslang" ],
|
|
[ "BUILD_CORE_VALIDATION" ],
|
|
],
|
|
[
|
|
"object_lifetimes",
|
|
object_lifetimes_sources + chassis_sources + thread_safety_sources + core_validation_sources,
|
|
[ ":vulkan_core_validation_glslang" ],
|
|
[ "BUILD_OBJECT_TRACKER" ],
|
|
],
|
|
[
|
|
"stateless_validation",
|
|
stateless_validation_sources + chassis_sources + core_validation_sources,
|
|
[ ":vulkan_core_validation_glslang" ],
|
|
[ "BUILD_PARAMETER_VALIDATION" ],
|
|
],
|
|
[
|
|
"thread_safety",
|
|
thread_safety_sources + chassis_sources + core_validation_sources,
|
|
[ ":vulkan_core_validation_glslang" ],
|
|
[ "BUILD_THREAD_SAFETY" ],
|
|
],
|
|
[
|
|
"unique_objects",
|
|
unique_objects_sources + chassis_sources + core_validation_sources,
|
|
[ ":vulkan_core_validation_glslang" ],
|
|
[ "LAYER_CHASSIS_CAN_WRAP_HANDLES" ],
|
|
],
|
|
[
|
|
"khronos_validation",
|
|
core_validation_sources + object_lifetimes_sources +
|
|
stateless_validation_sources + thread_safety_sources +
|
|
unique_objects_sources + chassis_sources,
|
|
[ ":vulkan_core_validation_glslang" ],
|
|
[
|
|
"BUILD_KHRONOS_VALIDATION",
|
|
"BUILD_CORE_VALIDATION",
|
|
"BUILD_OBJECT_TRACKER",
|
|
"BUILD_THREAD_SAFETY",
|
|
"BUILD_PARAMETER_VALIDATION",
|
|
"LAYER_CHASSIS_CAN_WRAP_HANDLES",
|
|
],
|
|
],
|
|
]
|
|
|
|
if (!is_android) {
|
|
action("vulkan_gen_json_files") {
|
|
script = "build-gn/generate_vulkan_layers_json.py"
|
|
public_deps = [
|
|
":vulkan_clean_old_validation_layer_objects",
|
|
]
|
|
json_names = [
|
|
"VkLayer_core_validation.json",
|
|
"VkLayer_object_lifetimes.json",
|
|
"VkLayer_stateless_validation.json",
|
|
"VkLayer_standard_validation.json",
|
|
"VkLayer_thread_safety.json",
|
|
"VkLayer_unique_objects.json",
|
|
"VkLayer_khronos_validation.json",
|
|
]
|
|
sources = [
|
|
"$vulkan_headers_dir/include/vulkan/vulkan_core.h",
|
|
"$vulkan_headers_dir/include/vulkan/vk_layer.h",
|
|
]
|
|
outputs = []
|
|
foreach(json_name, json_names) {
|
|
sources += [ "layers/json/$json_name.in" ]
|
|
outputs += [ "$vulkan_data_dir/$json_name" ]
|
|
}
|
|
args = [
|
|
rebase_path("layers/json", root_build_dir),
|
|
rebase_path(vulkan_data_dir, root_build_dir),
|
|
] + rebase_path(sources, root_build_dir)
|
|
|
|
# The layer JSON files are part of the necessary data deps.
|
|
data = outputs
|
|
}
|
|
}
|
|
|
|
source_set("vulkan_layer_utils") {
|
|
include_dirs = [
|
|
"layers",
|
|
"layers/generated",
|
|
]
|
|
sources = [
|
|
"layers/vk_format_utils.cpp",
|
|
"layers/vk_format_utils.h",
|
|
"layers/vk_layer_config.cpp",
|
|
"layers/vk_layer_config.h",
|
|
"layers/vk_layer_extension_utils.cpp",
|
|
"layers/vk_layer_extension_utils.h",
|
|
"layers/vk_layer_utils.cpp",
|
|
"layers/vk_layer_utils.h",
|
|
"$vulkan_headers_dir/include/vulkan/vk_layer.h",
|
|
"$vulkan_headers_dir/include/vulkan/vulkan.h",
|
|
"$vulkan_headers_dir/include/vulkan/vk_sdk_platform.h",
|
|
]
|
|
public_configs = [
|
|
"$vulkan_headers_dir:vulkan_headers_config",
|
|
":vulkan_internal_config",
|
|
]
|
|
configs -= [ "//build/config/compiler:chromium_code" ]
|
|
configs += [ "//build/config/compiler:no_chromium_code" ]
|
|
public_deps = []
|
|
configs -= vulkan_undefine_configs
|
|
}
|
|
|
|
config("vulkan_core_validation_config") {
|
|
include_dirs = [ "$vvl_glslang_dir" ]
|
|
}
|
|
|
|
source_set("vulkan_core_validation_glslang") {
|
|
public_deps = [
|
|
"${vvl_spirv_tools_dir}:spvtools",
|
|
"${vvl_spirv_tools_dir}:spvtools_opt",
|
|
"${vvl_spirv_tools_dir}:spvtools_val",
|
|
]
|
|
public_configs = [
|
|
"$vulkan_headers_dir:vulkan_headers_config",
|
|
":vulkan_core_validation_config",
|
|
]
|
|
}
|
|
|
|
config("vulkan_stateless_validation_config") {
|
|
if (is_clang) {
|
|
cflags_cc = [ "-Wno-unused-const-variable" ]
|
|
}
|
|
}
|
|
|
|
foreach(layer_info, layers) {
|
|
name = layer_info[0]
|
|
shared_library("VkLayer_$name") {
|
|
configs -= [ "//build/config/compiler:chromium_code" ]
|
|
configs += [ "//build/config/compiler:no_chromium_code" ]
|
|
configs -= vulkan_undefine_configs
|
|
public_configs = [ ":vulkan_layer_config" ]
|
|
deps = [
|
|
":vulkan_layer_utils",
|
|
]
|
|
if (layer_info[2] != "") {
|
|
deps += layer_info[2]
|
|
}
|
|
sources = layer_info[1]
|
|
if (is_win) {
|
|
sources += [ "layers/VkLayer_$name.def" ]
|
|
}
|
|
if (is_linux || is_android) {
|
|
ldflags = [ "-Wl,-Bsymbolic,--exclude-libs,ALL" ]
|
|
}
|
|
if (is_android) {
|
|
libs = [
|
|
"log",
|
|
"nativewindow",
|
|
]
|
|
configs -= [ "//build/config/android:hide_all_but_jni_onload" ]
|
|
}
|
|
defines = layer_info[3]
|
|
}
|
|
}
|
|
|
|
group("vulkan_validation_layers") {
|
|
data_deps = []
|
|
foreach(layer_info, layers) {
|
|
name = layer_info[0]
|
|
data_deps += [ ":VkLayer_$name" ]
|
|
}
|
|
}
|