1# Copyright (C) 2023 The Android Open Source Project 2# 3# Licensed under the Apache License, Version 2.0 (the "License"); 4# you may not use this file except in compliance with the License. 5# You may obtain a copy of the License at 6# 7# http://www.apache.org/licenses/LICENSE-2.0 8# 9# Unless required by applicable law or agreed to in writing, software 10# distributed under the License is distributed on an "AS IS" BASIS, 11# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 12# See the License for the specific language governing permissions and 13# limitations under the License. 14 15import("//build/python/python_action.gni") 16import("//build/python/python_binary.gni") 17import("mesa-gn/mesa.gni") 18 19config("common_config") { 20 defines = [ 21 "LOG_TAG=\"gfxstream_vulkan\"", 22 "GOLDFISH_NO_GL", 23 "VK_GFXSTREAM_STRUCTURE_TYPE_EXT", 24 "VK_USE_PLATFORM_FUCHSIA", 25 "PAGE_SIZE=4096", 26 ] 27 28 if (is_debug) { 29 defines += [ "DEBUG=1" ] 30 } 31 32 include_dirs = [ 33 "../common/opengl/include", 34 "../common/vulkan/include", 35 "android-emu", 36 "GoldfishAddressSpace/include", 37 "iostream/include", 38 "gralloc_cb/include", 39 "qemupipe/include", 40 "qemupipe/include-types", 41 "OpenglCodecCommon", 42 "OpenglCodecCommon/include", 43 "OpenglSystemCommon", 44 "renderControl_enc", 45 "vulkan_enc", 46 "$mesa_source_root/include", 47 "platform/include", 48 ] 49 50 if (target_os == "fuchsia") { 51 include_dirs += [ "fuchsia/include" ] 52 } 53 54 cflags_cc = [ 55 "-Wno-conversion", 56 "-Wno-newline-eof", 57 "-Wno-pessimizing-move", 58 "-Wno-sign-compare", 59 "-Wno-unused-function", 60 "-Wno-unused-value", 61 "-Wno-unused-variable", 62 "-Wno-unused-but-set-parameter", 63 "-Wno-unused-but-set-variable", 64 ] 65} 66 67python_binary("vk_entrypoints_gen_bin") { 68 main_source = "$mesa_source_root/src/vulkan/util/vk_entrypoints_gen.py" 69 70 sources = [ 71 "$mesa_source_root/src/vulkan/util/vk_entrypoints.py", 72 "$mesa_source_root/src/vulkan/util/vk_extensions.py", 73 ] 74 deps = [ "//third_party/mako" ] 75} 76 77config("gfxstream_vk_entrypoints_config") { 78 include_dirs = [ "$target_gen_dir" ] 79} 80 81python_action("gfxstream_vk_entrypoints") { 82 public_configs = [ ":gfxstream_vk_entrypoints_config" ] 83 84 binary_label = ":vk_entrypoints_gen_bin" 85 86 sources = [ mesa_vk_xml ] 87 88 h_file = "$target_gen_dir/gfxstream_vk_entrypoints.h" 89 c_file = "$target_gen_dir/gfxstream_vk_entrypoints.c" 90 91 outputs = [ 92 h_file, 93 c_file, 94 ] 95 96 args = [ 97 "--xml", 98 rebase_path(mesa_vk_xml, root_build_dir), 99 "--proto", 100 "--weak", 101 "--out-h", 102 rebase_path(h_file, root_build_dir), 103 "--out-c", 104 rebase_path(c_file, root_build_dir), 105 "--prefix", 106 "gfxstream_vk", 107 "--beta", 108 "false", 109 ] 110} 111 112# These sources require access to the Fuchsia goldfish protocols. 113source_set("goldfish_srcs") { 114 configs += [ ":common_config" ] 115 116 sources = [ 117 "vulkan/gfxstream_vk_fuchsia.cpp", 118 "vulkan_enc/ResourceTracker.cpp", 119 "vulkan_enc/ResourceTracker.h", 120 ] 121 122 public_deps = [ 123 "$mesa_build_root/src/vulkan/runtime", 124 "$mesa_build_root/src/vulkan/util", 125 "//sdk/fidl/fuchsia.hardware.goldfish:fuchsia.hardware.goldfish_cpp", 126 "//sdk/fidl/fuchsia.logger:fuchsia.logger_cpp", 127 "//sdk/fidl/fuchsia.sysmem:fuchsia.sysmem_cpp", 128 "//sdk/lib/syslog/structured_backend", 129 "//third_party/Vulkan-Headers:vulkan_headers", 130 "//zircon/system/ulib/async:async-cpp", 131 "//zircon/system/ulib/async-loop:async-loop-cpp", 132 "//zircon/system/ulib/trace:trace-with-static-engine", 133 "//zircon/system/ulib/trace-provider:trace-provider-with-static-engine", 134 "//zircon/system/ulib/zx", 135 "//zircon/system/ulib/zxio", 136 ] 137 138 deps = [ ":gfxstream_vk_entrypoints" ] 139 140 defines = [ 141 "QEMU_PIPE_PATH=\"/loader-gpu-devices/class/goldfish-pipe/000\"", 142 "GOLDFISH_ADDRESS_SPACE_DEVICE_NAME=\"/loader-gpu-devices/class/goldfish-address-space/000\"", 143 ] 144} 145 146loadable_module("libvulkan_gfxstream") { 147 configs += [ ":common_config" ] 148 149 deps = [ 150 ":gfxstream_vk_entrypoints", 151 "$mesa_build_root/src/vulkan/runtime", 152 ] 153 154 sources = [ 155 "$target_gen_dir/gfxstream_vk_entrypoints.c", 156 "GoldfishAddressSpace/AddressSpaceStream.cpp", 157 "GoldfishAddressSpace/VirtioGpuAddressSpaceStream.cpp", 158 "OpenglCodecCommon/ChecksumCalculator.cpp", 159 "OpenglCodecCommon/ChecksumCalculator.h", 160 "OpenglCodecCommon/glUtils.cpp", 161 "OpenglCodecCommon/glUtils.h", 162 "OpenglSystemCommon/HostConnection.cpp", 163 "OpenglSystemCommon/HostConnection.h", 164 "OpenglSystemCommon/ProcessPipe.cpp", 165 "OpenglSystemCommon/ProcessPipe.h", 166 "OpenglSystemCommon/QemuPipeStream.cpp", 167 "OpenglSystemCommon/QemuPipeStream.h", 168 "OpenglSystemCommon/ThreadInfo.cpp", 169 "OpenglSystemCommon/ThreadInfo.h", 170 "OpenglSystemCommon/VirtioGpuPipeStream.cpp", 171 "android-emu/aemu/base/AlignedBuf.cpp", 172 "android-emu/aemu/base/AlignedBuf.h", 173 "android-emu/aemu/base/Allocator.h", 174 "android-emu/aemu/base/AndroidHealthMonitor.cpp", 175 "android-emu/aemu/base/AndroidHealthMonitor.h", 176 "android-emu/aemu/base/AndroidHealthMonitorConsumer.h", 177 "android-emu/aemu/base/AndroidHealthMonitorConsumerBasic.cpp", 178 "android-emu/aemu/base/AndroidHealthMonitorConsumerBasic.h", 179 "android-emu/aemu/base/Process.cpp", 180 "android-emu/aemu/base/Process.h", 181 "android-emu/aemu/base/Tracing.cpp", 182 "android-emu/aemu/base/Tracing.h", 183 "android-emu/aemu/base/files/MemStream.cpp", 184 "android-emu/aemu/base/files/MemStream.h", 185 "android-emu/aemu/base/files/Stream.cpp", 186 "android-emu/aemu/base/files/Stream.h", 187 "android-emu/aemu/base/files/StreamSerializing.cpp", 188 "android-emu/aemu/base/files/StreamSerializing.h", 189 "android-emu/aemu/base/fit/Defer.h", 190 "android-emu/aemu/base/fit/Function.h", 191 "android-emu/aemu/base/fit/FunctionInternal.h", 192 "android-emu/aemu/base/fit/Nullable.h", 193 "android-emu/aemu/base/fit/ThreadChecker.h", 194 "android-emu/aemu/base/fit/ThreadSafety.h", 195 "android-emu/aemu/base/fit/UtilityInternal.h", 196 "android-emu/aemu/base/ring_buffer.c", 197 "android-emu/aemu/base/synchronization/AndroidConditionVariable.h", 198 "android-emu/aemu/base/synchronization/AndroidLock.h", 199 "android-emu/aemu/base/synchronization/AndroidMessageChannel.cpp", 200 "android-emu/aemu/base/synchronization/AndroidMessageChannel.h", 201 "android-emu/aemu/base/testing/TestClock.h", 202 "android-emu/aemu/base/threads/AndroidFunctorThread.cpp", 203 "android-emu/aemu/base/threads/AndroidFunctorThread.h", 204 "android-emu/aemu/base/threads/AndroidThread.h", 205 "android-emu/aemu/base/threads/AndroidThreadStore.h", 206 "android-emu/aemu/base/threads/AndroidThreadTypes.h", 207 "android-emu/aemu/base/threads/AndroidThread_pthread.cpp", 208 "android-emu/aemu/base/threads/AndroidWorkPool.cpp", 209 "android-emu/aemu/base/threads/AndroidWorkPool.h", 210 "gralloc_cb/include/gralloc_cb_bp.h", 211 "platform/VirtGpu.cpp", 212 "platform/include/VirtGpu.h", 213 "qemupipe/include-types/qemu_pipe_types_bp.h", 214 "qemupipe/include/qemu_pipe_bp.h", 215 "qemupipe/qemu_pipe_common.cpp", 216 "qemupipe/qemu_pipe_guest.cpp", 217 "renderControl_enc/renderControl_enc.cpp", 218 "renderControl_enc/renderControl_enc.h", 219 "vulkan/gfxstream_vk_device.cpp", 220 "vulkan/gfxstream_vk_wsi_stub.cpp", 221 "vulkan_enc/CommandBufferStagingStream.cpp", 222 "vulkan_enc/CommandBufferStagingStream.h", 223 "vulkan_enc/DescriptorSetVirtualization.cpp", 224 "vulkan_enc/DescriptorSetVirtualization.h", 225 "vulkan_enc/HostVisibleMemoryVirtualization.cpp", 226 "vulkan_enc/HostVisibleMemoryVirtualization.h", 227 "vulkan_enc/Resources.cpp", 228 "vulkan_enc/Resources.h", 229 "vulkan_enc/Validation.cpp", 230 "vulkan_enc/Validation.h", 231 "vulkan_enc/VkEncoder.cpp", 232 "vulkan_enc/VkEncoder.h", 233 "vulkan_enc/VulkanHandleMapping.cpp", 234 "vulkan_enc/VulkanHandleMapping.h", 235 "vulkan_enc/VulkanStreamGuest.cpp", 236 "vulkan_enc/VulkanStreamGuest.h", 237 "vulkan_enc/func_table.cpp", 238 "vulkan_enc/gfxstream_vk_private.cpp", 239 "vulkan_enc/gfxstream_vk_private.h", 240 "vulkan_enc/goldfish_vk_counting_guest.cpp", 241 "vulkan_enc/goldfish_vk_counting_guest.h", 242 "vulkan_enc/goldfish_vk_deepcopy_guest.cpp", 243 "vulkan_enc/goldfish_vk_deepcopy_guest.h", 244 "vulkan_enc/goldfish_vk_extension_structs_guest.cpp", 245 "vulkan_enc/goldfish_vk_extension_structs_guest.h", 246 "vulkan_enc/goldfish_vk_marshaling_guest.cpp", 247 "vulkan_enc/goldfish_vk_marshaling_guest.h", 248 "vulkan_enc/goldfish_vk_reserved_marshaling_guest.cpp", 249 "vulkan_enc/goldfish_vk_reserved_marshaling_guest.h", 250 "vulkan_enc/goldfish_vk_transform_guest.cpp", 251 "vulkan_enc/goldfish_vk_transform_guest.h", 252 "vulkan_enc/vulkan_gfxstream.h", 253 "vulkan_enc/vulkan_gfxstream_structure_type.h", 254 ] 255 256 if (target_os == "fuchsia") { 257 sources -= [ 258 "OpenglSystemCommon/QemuPipeStream.cpp", 259 "qemupipe/qemu_pipe_common.cpp", 260 "qemupipe/qemu_pipe_guest.cpp", 261 ] 262 sources += [ 263 "OpenglSystemCommon/TraceProviderFuchsia.cpp", 264 "OpenglSystemCommon/TraceProviderFuchsia.h", 265 "fuchsia/fuchsia_stdio.cc", 266 "fuchsia/port.cc", 267 "fuchsia/service_connector.cc", 268 "platform/kumquat/VirtGpuKumquatStub.cpp", 269 "platform/fuchsia/FuchsiaVirtGpuBlob.cpp", 270 "platform/fuchsia/FuchsiaVirtGpuBlobMapping.cpp", 271 "platform/fuchsia/FuchsiaVirtGpuDevice.cpp", 272 "platform/fuchsia/os_dirent_fuchsia.cpp", 273 ] 274 275 include_dirs = [ 276 "fuchsia/include", 277 "platform/include", 278 "//third_party/Vulkan-Headers/include", 279 ] 280 281 deps += [ 282 ":goldfish_srcs", 283 "//sdk/fidl/fuchsia.logger:fuchsia.logger_cpp", 284 "//sdk/fidl/fuchsia.sysmem:fuchsia.sysmem_cpp", 285 "//src/graphics/lib/magma/src/libmagma", 286 "//src/zircon/lib/zircon", 287 "//zircon/system/ulib/trace:trace-with-static-engine", 288 "//zircon/system/ulib/zx", 289 "//zircon/system/ulib/zxio", 290 ] 291 292 public_deps = [ "//third_party/Vulkan-Headers:vulkan_headers" ] 293 294 # Vulkan ICDs on Fuchsia are only allowed to depend on (parts of) libc 295 # and libzircon, and no other shared libraries. 296 assert_no_deps = [ 297 "//sdk/lib/fdio", 298 "//zircon/system/ulib/async-default", 299 ] 300 } 301} 302