1# Copyright 2020 The ANGLE Project Authors. All rights reserved. 2# Use of this source code is governed by a BSD-style license that can be 3# found in the LICENSE file. 4 5import("//build_overrides/swiftshader.gni") 6import("../../../gni/angle.gni") 7 8if (angle_use_wayland) { 9 import("//build_overrides/wayland.gni") 10} 11 12declare_args() { 13 angle_use_custom_libvulkan = !is_android && !is_fuchsia && !is_ggp 14 15 # On real CrOS devices, we should use the system Vulkan loader. On the 16 # ChromeOS-for-Linux build, we should use the built libvulkan because the 17 # build is used for MSAN tests. Mixing the non-MSAN system libvulkan with the 18 # MSAN ANGLE build can result in false positives. 19 if (is_chromeos && is_chromeos_device) { 20 angle_use_custom_libvulkan = false 21 } 22} 23 24config("angle_libvulkan_config") { 25 if (angle_use_custom_libvulkan) { 26 defines = [ "ANGLE_USE_CUSTOM_LIBVULKAN" ] 27 } 28} 29 30angle_source_set("angle_libvulkan_loader") { 31 public_configs = [ ":angle_libvulkan_config" ] 32 sources = [ 33 "libvulkan_loader.cpp", 34 "libvulkan_loader.h", 35 ] 36 deps = [ "$angle_root:angle_common" ] 37} 38 39if (angle_enable_vulkan || angle_build_vulkan_system_info) { 40 config("angle_vulkan_headers_config") { 41 if (angle_shared_libvulkan) { 42 defines = [ "ANGLE_SHARED_LIBVULKAN=1" ] 43 } 44 if (angle_use_wayland) { 45 include_dirs = [ "$wayland_dir/src" ] 46 } 47 configs = [ "$angle_root:angle_vulkan_wayland_config" ] 48 } 49 50 angle_source_set("angle_vulkan_headers") { 51 sources = [ "vk_headers.h" ] 52 if (angle_shared_libvulkan) { 53 public_deps = [ "$angle_root/src/third_party/volk:volk" ] 54 } else { 55 public_deps = [ "$angle_vulkan_headers_dir:vulkan_headers" ] 56 } 57 public_configs = [ ":angle_vulkan_headers_config" ] 58 } 59 60 angle_source_set("angle_vulkan_icd") { 61 sources = [ 62 "vulkan_icd.cpp", 63 "vulkan_icd.h", 64 ] 65 66 defines = 67 [ "ANGLE_VK_MOCK_ICD_JSON=\"$angle_data_dir/VkICD_mock_icd.json\"" ] 68 69 # On Fuchsia use validation layer provided by the SDK. 70 if (!is_fuchsia) { 71 defines += [ "ANGLE_VK_LAYERS_DIR=\"$angle_data_dir\"" ] 72 } 73 74 data_deps = [] 75 76 if (angle_enable_swiftshader) { 77 import("$swiftshader_dir/src/Vulkan/vulkan.gni") 78 _sws_icd = "./$swiftshader_icd_file_name" 79 if (is_win) { 80 _sws_icd = ".\\\\$swiftshader_icd_file_name" 81 } else if (is_fuchsia) { 82 _sws_icd = "/pkg/$swiftshader_icd_file_name" 83 } 84 85 defines += [ "ANGLE_VK_SWIFTSHADER_ICD_JSON=\"${_sws_icd}\"" ] 86 87 data_deps += [ 88 "$swiftshader_dir/src/Vulkan:icd_file", 89 "$swiftshader_dir/src/Vulkan:swiftshader_libvulkan", 90 ] 91 } 92 93 public_deps = [ 94 ":angle_vulkan_headers", 95 "$angle_root:angle_common", 96 ] 97 98 configs += [ "$angle_root:angle_no_cfi_icall" ] 99 } 100} 101 102if (angle_enable_vulkan) { 103 group("angle_libvulkan") { 104 public_configs = [ ":angle_libvulkan_config" ] 105 data_deps = [] 106 if (angle_use_custom_libvulkan) { 107 if (angle_shared_libvulkan) { 108 data_deps += [ "$angle_vulkan_loader_dir:libvulkan" ] 109 } else { 110 public_deps = [ "$angle_vulkan_loader_dir:libvulkan" ] 111 } 112 data_deps += [ "$angle_vulkan_tools_dir:VkICD_mock_icd" ] 113 } 114 } 115 116 group("angle_vulkan_entry_points") { 117 public_deps = [ ":angle_vulkan_headers" ] 118 if (is_fuchsia) { 119 public_deps += [ 120 "$angle_root/src/common/fuchsia_egl", 121 "//third_party/fuchsia-sdk/sdk/pkg/vulkan", 122 ] 123 if (!angle_use_vulkan_null_display) { 124 public_deps += [ "//third_party/fuchsia-sdk/sdk/pkg/vulkan_layers:VkLayer_image_pipe_swapchain" ] 125 } 126 } else if (!is_android && !is_ggp) { 127 if (angle_shared_libvulkan) { 128 data_deps = [ "$angle_vulkan_loader_dir:libvulkan" ] 129 } else { 130 deps = [ "$angle_vulkan_loader_dir:libvulkan" ] 131 } 132 } 133 } 134 135 angle_source_set("vulkan") { 136 public_deps = [ 137 ":angle_libvulkan", 138 ":angle_vulkan_entry_points", 139 ":angle_vulkan_icd", 140 ] 141 } 142 143 if (angle_enable_vulkan_validation_layers) { 144 group("vulkan_validation_layers") { 145 data_deps = [] 146 if (is_fuchsia) { 147 data_deps += [ "//third_party/fuchsia-sdk/sdk/pkg/vulkan_layers:VkLayer_khronos_validation" ] 148 } else { 149 data_deps += 150 [ "$angle_vulkan_validation_layers_dir:vulkan_validation_layers" ] 151 if (!is_android) { 152 data_deps += 153 [ "$angle_vulkan_validation_layers_dir:vulkan_gen_json_files" ] 154 } 155 } 156 } 157 } 158 159 if (angle_enable_vulkan_api_dump_layer) { 160 group("lunarg_vulkantools") { 161 data_deps = [] 162 if (!is_fuchsia) { 163 data_deps += [ "$angle_lunarg_vulkantools_dir:lunarg_vulkantools" ] 164 if (!is_android) { 165 data_deps += [ "$angle_lunarg_vulkantools_dir:vulkan_gen_json_files" ] 166 } 167 } 168 } 169 } 170} 171