blob: f3d3fae3bd46b6ef269abd5f30f837b558c732db [file] [log] [blame]
# Copyright (C) 2018-2021 The ANGLE Project Authors.
# Copyright (C) 2019-2021 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/build.gni")
import("//build_overrides/vulkan_validation_layers.gni")
vulkan_undefine_configs = []
if (is_win) {
vulkan_undefine_configs += [ "//build/config/win:unicode" ]
}
vulkan_data_dir = "$root_out_dir/$vulkan_data_subdir"
config("generated_layers_config") {
cflags = [
"-Wno-conversion",
"-Wno-deprecated-copy",
"-Wno-extra-semi",
"-Wno-implicit-fallthrough",
"-Wno-missing-field-initializers",
"-Wno-newline-eof",
"-Wno-sign-compare",
"-Wno-unused-const-variable",
]
}
config("vulkan_internal_config") {
defines = [
"VULKAN_NON_CMAKE_BUILD",
"API_NAME=\"Vulkan\"",
"VK_ENABLE_BETA_EXTENSIONS",
]
cflags = []
if (is_clang || !is_win) {
cflags += [ "-Wno-unused-function" ]
}
if (is_clang && is_mac) {
cflags += [ "-Wno-unguarded-availability-new" ]
}
if (is_linux) {
defines += [
"SYSCONFDIR=\"/etc\"",
"FALLBACK_CONFIG_DIRS=\"/etc/xdg\"",
"FALLBACK_DATA_DIRS=\"/usr/local/share:/usr/share\"",
]
}
# Suppress warnings the vulkan code doesn't comply with.
configs = [ "//build/config:Wno-unused-but-set-variable" ]
cflags += [ "-Wno-extra-semi" ]
}
# The validation layers
# ---------------------
config("vulkan_layer_config") {
include_dirs = [
"layers",
"layers/generated",
]
cflags = [ "-Wno-extra-semi" ]
}
core_validation_sources = [
"layers/android_ndk_types.h",
"layers/base_node.h",
"layers/buffer_state.cpp",
"layers/buffer_state.h",
"layers/buffer_validation.cpp",
"layers/buffer_validation.h",
"layers/convert_to_renderpass2.cpp",
"layers/convert_to_renderpass2.h",
"layers/core_validation.cpp",
"layers/core_validation.h",
"layers/core_validation_error_enums.h",
"layers/cmd_buffer_state.h",
"layers/cmd_buffer_state.cpp",
"layers/core_error_location.cpp",
"layers/core_error_location.h",
"layers/descriptor_sets.cpp",
"layers/descriptor_sets.h",
"layers/device_memory_state.h",
"layers/device_memory_state.cpp",
"layers/device_state.h",
"layers/drawdispatch.cpp",
"layers/generated/corechecks_optick_instrumentation.cpp",
"layers/generated/corechecks_optick_instrumentation.h",
"layers/generated/spirv_validation_helper.cpp",
"layers/generated/spirv_grammar_helper.cpp",
"layers/generated/spirv_grammar_helper.h",
"layers/generated/command_validation.cpp",
"layers/generated/command_validation.h",
"layers/generated/gpu_pre_draw_shader.h",
"layers/generated/synchronization_validation_types.cpp",
"layers/generated/synchronization_validation_types.h",
"layers/gpu_pre_draw_constants.h",
"layers/gpu_utils.cpp",
"layers/gpu_utils.h",
"layers/gpu_validation.cpp",
"layers/gpu_validation.h",
"layers/gpu_vuids.h",
"layers/image_layout_map.cpp",
"layers/image_layout_map.h",
"layers/image_state.h",
"layers/image_state.cpp",
"layers/pipeline_state.h",
"layers/pipeline_state.cpp",
"layers/qfo_transfer.h",
"layers/query_state.h",
"layers/queue_state.cpp",
"layers/queue_state.h",
"layers/range_vector.h",
"layers/ray_tracing_state.h",
"layers/render_pass_state.h",
"layers/render_pass_state.cpp",
"layers/sampler_state.h",
"layers/shader_module.cpp",
"layers/shader_module.h",
"layers/shader_validation.cpp",
"layers/shader_validation.h",
"layers/state_tracker.cpp",
"layers/state_tracker.h",
"layers/subresource_adapter.cpp",
"layers/subresource_adapter.h",
"layers/sync_utils.cpp",
"layers/sync_utils.h",
"layers/sync_vuid_maps.cpp",
"layers/sync_vuid_maps.h",
"layers/synchronization_validation.cpp",
"layers/synchronization_validation.h",
]
object_lifetimes_sources = [
"layers/generated/object_tracker.cpp",
"layers/generated/object_tracker.h",
"layers/object_lifetime_validation.h",
"layers/object_tracker_utils.cpp",
]
stateless_validation_sources = [
"layers/generated/parameter_validation.cpp",
"layers/generated/parameter_validation.h",
"layers/parameter_name.h",
"layers/parameter_validation_utils.cpp",
"layers/stateless_validation.h",
]
thread_safety_sources = [
"layers/generated/thread_safety.cpp",
"layers/generated/thread_safety.h",
]
unique_objects_sources = []
best_practices_sources = [
"layers/best_practices_error_enums.h",
"layers/best_practices_utils.cpp",
"layers/best_practices_validation.h",
"layers/generated/best_practices.cpp",
"layers/generated/best_practices.h",
]
debug_printf_sources = [
"layers/debug_printf.cpp",
"layers/debug_printf.h",
]
chassis_sources = [
"$vulkan_headers_dir/include/vulkan/vk_layer.h",
"$vulkan_headers_dir/include/vulkan/vulkan.h",
"layers/generated/chassis.cpp",
"layers/generated/chassis.h",
"layers/generated/chassis_dispatch_helper.h",
"layers/generated/layer_chassis_dispatch.cpp",
"layers/generated/layer_chassis_dispatch.h",
"layers/generated/vk_dispatch_table_helper.h",
"layers/generated/vk_extension_helper.h",
"layers/generated/vk_safe_struct.cpp",
"layers/layer_options.cpp",
"layers/layer_options.h",
"layers/vk_layer_settings_ext.h",
]
layers = [ [
"khronos_validation",
core_validation_sources + object_lifetimes_sources +
stateless_validation_sources + thread_safety_sources +
unique_objects_sources + best_practices_sources +
debug_printf_sources + chassis_sources,
[ ":vulkan_core_validation_glslang" ],
[],
] ]
if (!is_android) {
action("vulkan_gen_json_files") {
script = "build-gn/generate_vulkan_layers_json.py"
json_names = [ "VkLayer_khronos_validation.json" ]
sources = [ "$vulkan_headers_dir/include/vulkan/vulkan_core.h" ]
outputs = []
foreach(json_name, json_names) {
sources += [ "layers/json/$json_name.in" ]
outputs += [ "$vulkan_data_dir/$json_name" ]
}
if (is_linux) {
_platform = "Linux"
} else if (is_win) {
_platform = "Windows"
} else if (is_mac) {
_platform = "Darwin"
} else if (is_fuchsia) {
_platform = "Fuchsia"
} else {
_platform = "Other"
}
args = [
"--platform",
_platform,
rebase_path("layers/json", root_build_dir),
rebase_path(vulkan_data_dir, root_build_dir),
] + rebase_path(sources, root_build_dir)
if (is_fuchsia) {
args += [ "--no-path-prefix" ]
}
# The layer JSON files are part of the necessary data deps.
data = outputs
}
}
source_set("vulkan_layer_utils") {
include_dirs = [
"layers",
"layers/generated",
]
sources = [
"$vulkan_headers_dir/include/vulkan/vk_layer.h",
"$vulkan_headers_dir/include/vulkan/vk_sdk_platform.h",
"$vulkan_headers_dir/include/vulkan/vulkan.h",
"layers/android_ndk_types.h",
"layers/cast_utils.h",
"layers/generated/vk_enum_string_helper.h",
"layers/generated/vk_layer_dispatch_table.h",
"layers/generated/vk_object_types.h",
"layers/generated/vk_safe_struct.h",
"layers/generated/vk_typemap_helper.h",
"layers/generated/vk_validation_error_messages.h",
"layers/hash_util.h",
"layers/hash_vk_types.h",
"layers/sparse_containers.h",
"layers/vk_format_utils.cpp",
"layers/vk_format_utils.h",
"layers/vk_layer_config.cpp",
"layers/vk_layer_config.h",
"layers/vk_layer_data.h",
"layers/vk_layer_extension_utils.cpp",
"layers/vk_layer_extension_utils.h",
"layers/vk_layer_logging.h",
"layers/vk_layer_utils.cpp",
"layers/vk_layer_utils.h",
"layers/vk_loader_platform.h",
"layers/vk_mem_alloc.h",
"layers/xxhash.c",
"layers/xxhash.h",
]
if (is_fuchsia) {
sources += [
"layers/vk_layer_utils_minimal.cpp",
"layers/vk_layer_utils_minimal.h",
]
}
public_configs = [
"$vulkan_headers_dir:vulkan_headers_config",
":vulkan_internal_config",
]
public_deps = [ "$vulkan_headers_dir:vulkan_headers" ]
configs -= vulkan_undefine_configs
if (build_with_chromium) {
configs -= [ "//build/config/compiler:chromium_code" ]
configs += [ "//build/config/compiler:no_chromium_code" ]
}
}
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" ]
}
}
if (is_fuchsia) {
library_type = "loadable_module"
} else {
library_type = "shared_library"
}
foreach(layer_info, layers) {
name = layer_info[0]
target(library_type, "VkLayer_$name") {
defines = []
ldflags = []
if (is_fuchsia) {
configs -= [ "//build/config/fuchsia:thread_safety_annotations" ]
ldflags += [ "-static-libstdc++" ]
} else if (build_with_chromium) {
configs -= [ "//build/config/compiler:chromium_code" ]
configs += [ "//build/config/compiler:no_chromium_code" ]
}
configs += [ "//build/config:rtti" ]
configs -= vulkan_undefine_configs
configs += [ ":generated_layers_config" ]
public_configs = [ ":vulkan_layer_config" ]
deps = [ ":vulkan_layer_utils" ]
if (layer_info[2] != "") {
deps += layer_info[2]
}
sources = layer_info[1]
if (is_win) {
defines += [ "NOMINMAX" ]
sources += [ "layers/VkLayer_$name.def" ]
}
if (is_linux || is_android || is_fuchsia) {
ldflags += [ "-Wl,-Bsymbolic,--exclude-libs,ALL" ]
}
if (!is_fuchsia && (defined(use_x11) && use_x11)) {
defines += [ "VK_USE_PLATFORM_XLIB_KHR" ]
}
if (is_android) {
libs = [
"log",
"nativewindow",
]
configs -= [ "//build/config/android:hide_all_but_jni_onload" ]
}
defines += layer_info[3]
}
}
group("vulkan_validation_layers") {
public_deps = []
data_deps = []
foreach(layer_info, layers) {
name = layer_info[0]
if (is_fuchsia) {
public_deps += [ ":VkLayer_$name" ]
} else {
data_deps += [ ":VkLayer_$name" ]
}
}
}
source_set("micro_layer_common") {
# For layers defined outside this repo
public_configs = [ ":vulkan_layer_config" ]
sources = [
"$vulkan_headers_dir/include/vulkan/vk_layer.h",
"$vulkan_headers_dir/include/vulkan/vk_sdk_platform.h",
"$vulkan_headers_dir/include/vulkan/vulkan.h",
"layers/generated/vk_dispatch_table_helper.h",
"layers/vk_format_utils.cpp",
"layers/vk_format_utils.h",
"layers/vk_layer_data.h",
"layers/vk_layer_extension_utils.cpp",
"layers/vk_layer_extension_utils.h",
"layers/vk_layer_utils_minimal.cpp",
"layers/vk_layer_utils_minimal.h",
]
public_configs += [ ":vulkan_internal_config" ]
public_deps = [ "$vulkan_headers_dir:vulkan_headers" ]
configs -= vulkan_undefine_configs
if (build_with_chromium) {
configs -= [ "//build/config/compiler:chromium_code" ]
configs += [ "//build/config/compiler:no_chromium_code" ]
}
}
group("tests") {
# TODO(fxbug.dev/13288)
}