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 "android-emu", 35 "GoldfishAddressSpace/include", 36 "iostream/include", 37 "gralloc_cb/include", 38 "qemupipe/include", 39 "qemupipe/include-types", 40 "OpenglCodecCommon", 41 "OpenglCodecCommon/include", 42 "OpenglSystemCommon", 43 "renderControl_enc", 44 "vulkan_enc", 45 "$mesa_source_root/include", 46 "platform/include", 47 ] 48 49 if (target_os == "fuchsia") { 50 include_dirs += [ "fuchsia/include" ] 51 } 52 53 cflags_cc = [ 54 "-Wno-conversion", 55 "-Wno-newline-eof", 56 "-Wno-pessimizing-move", 57 "-Wno-sign-compare", 58 "-Wno-unused-function", 59 "-Wno-unused-value", 60 "-Wno-unused-variable", 61 "-Wno-unused-but-set-parameter", 62 "-Wno-unused-but-set-variable", 63 ] 64} 65 66python_binary("vk_entrypoints_gen_bin") { 67 main_source = "$mesa_source_root/src/vulkan/util/vk_entrypoints_gen.py" 68 69 sources = [ 70 "$mesa_source_root/src/vulkan/util/vk_entrypoints.py", 71 "$mesa_source_root/src/vulkan/util/vk_extensions.py", 72 ] 73 deps = [ "//third_party/mako" ] 74} 75 76config("gfxstream_vk_entrypoints_config") { 77 include_dirs = [ "$target_gen_dir" ] 78} 79 80python_action("gfxstream_vk_entrypoints") { 81 public_configs = [ ":gfxstream_vk_entrypoints_config" ] 82 83 binary_label = ":vk_entrypoints_gen_bin" 84 85 sources = [ mesa_vk_xml ] 86 87 h_file = "$target_gen_dir/gfxstream_vk_entrypoints.h" 88 c_file = "$target_gen_dir/gfxstream_vk_entrypoints.c" 89 90 outputs = [ 91 h_file, 92 c_file, 93 ] 94 95 args = [ 96 "--xml", 97 rebase_path(mesa_vk_xml, root_build_dir), 98 "--proto", 99 "--weak", 100 "--out-h", 101 rebase_path(h_file, root_build_dir), 102 "--out-c", 103 rebase_path(c_file, root_build_dir), 104 "--prefix", 105 "gfxstream_vk", 106 "--beta", 107 "false", 108 ] 109} 110 111# These sources require access to the Fuchsia goldfish protocols. 112source_set("goldfish_srcs") { 113 configs += [ ":common_config" ] 114 115 sources = [ 116 "vulkan/gfxstream_vk_fuchsia.cpp", 117 "vulkan_enc/ResourceTracker.cpp", 118 "vulkan_enc/ResourceTracker.h", 119 ] 120 121 public_deps = [ 122 "$mesa_build_root/src/vulkan/runtime", 123 "$mesa_build_root/src/vulkan/util", 124 "//sdk/fidl/fuchsia.hardware.goldfish:fuchsia.hardware.goldfish_cpp", 125 "//sdk/fidl/fuchsia.logger:fuchsia.logger_cpp", 126 "//sdk/fidl/fuchsia.sysmem:fuchsia.sysmem_cpp", 127 "//sdk/lib/syslog/structured_backend", 128 "//third_party/Vulkan-Headers:vulkan_headers", 129 "//zircon/system/ulib/async:async-cpp", 130 "//zircon/system/ulib/async-loop:async-loop-cpp", 131 "//zircon/system/ulib/trace:trace-with-static-engine", 132 "//zircon/system/ulib/trace-provider:trace-provider-with-static-engine", 133 "//zircon/system/ulib/zx", 134 "//zircon/system/ulib/zxio", 135 ] 136 137 deps = [ ":gfxstream_vk_entrypoints" ] 138 139 defines = [ 140 "QEMU_PIPE_PATH=\"/loader-gpu-devices/class/goldfish-pipe/000\"", 141 "GOLDFISH_ADDRESS_SPACE_DEVICE_NAME=\"/loader-gpu-devices/class/goldfish-address-space/000\"", 142 ] 143} 144 145loadable_module("libvulkan_gfxstream") { 146 configs += [ ":common_config" ] 147 148 deps = [ 149 ":gfxstream_vk_entrypoints", 150 "$mesa_build_root/src/vulkan/runtime", 151 ] 152 153 sources = [ 154 "$target_gen_dir/gfxstream_vk_entrypoints.c", 155 "GoldfishAddressSpace/AddressSpaceStream.cpp", 156 "GoldfishAddressSpace/VirtioGpuAddressSpaceStream.cpp", 157 "OpenglCodecCommon/ChecksumCalculator.cpp", 158 "OpenglCodecCommon/ChecksumCalculator.h", 159 "OpenglCodecCommon/glUtils.cpp", 160 "OpenglCodecCommon/glUtils.h", 161 "OpenglSystemCommon/HostConnection.cpp", 162 "OpenglSystemCommon/HostConnection.h", 163 "OpenglSystemCommon/ProcessPipe.cpp", 164 "OpenglSystemCommon/ProcessPipe.h", 165 "OpenglSystemCommon/QemuPipeStream.cpp", 166 "OpenglSystemCommon/QemuPipeStream.h", 167 "OpenglSystemCommon/ThreadInfo.cpp", 168 "OpenglSystemCommon/ThreadInfo.h", 169 "OpenglSystemCommon/VirtioGpuPipeStream.cpp", 170 "android-emu/aemu/base/AlignedBuf.cpp", 171 "android-emu/aemu/base/AlignedBuf.h", 172 "android-emu/aemu/base/Allocator.h", 173 "android-emu/aemu/base/AndroidHealthMonitor.cpp", 174 "android-emu/aemu/base/AndroidHealthMonitor.h", 175 "android-emu/aemu/base/AndroidHealthMonitorConsumer.h", 176 "android-emu/aemu/base/AndroidHealthMonitorConsumerBasic.cpp", 177 "android-emu/aemu/base/AndroidHealthMonitorConsumerBasic.h", 178 "android-emu/aemu/base/AndroidSubAllocator.cpp", 179 "android-emu/aemu/base/AndroidSubAllocator.h", 180 "android-emu/aemu/base/BumpPool.h", 181 "android-emu/aemu/base/Pool.cpp", 182 "android-emu/aemu/base/Pool.h", 183 "android-emu/aemu/base/Process.cpp", 184 "android-emu/aemu/base/Process.h", 185 "android-emu/aemu/base/Tracing.cpp", 186 "android-emu/aemu/base/Tracing.h", 187 "android-emu/aemu/base/files/MemStream.cpp", 188 "android-emu/aemu/base/files/MemStream.h", 189 "android-emu/aemu/base/files/Stream.cpp", 190 "android-emu/aemu/base/files/Stream.h", 191 "android-emu/aemu/base/files/StreamSerializing.cpp", 192 "android-emu/aemu/base/files/StreamSerializing.h", 193 "android-emu/aemu/base/fit/Defer.h", 194 "android-emu/aemu/base/fit/Function.h", 195 "android-emu/aemu/base/fit/FunctionInternal.h", 196 "android-emu/aemu/base/fit/Nullable.h", 197 "android-emu/aemu/base/fit/ThreadChecker.h", 198 "android-emu/aemu/base/fit/ThreadSafety.h", 199 "android-emu/aemu/base/fit/UtilityInternal.h", 200 "android-emu/aemu/base/ring_buffer.c", 201 "android-emu/aemu/base/synchronization/AndroidConditionVariable.h", 202 "android-emu/aemu/base/synchronization/AndroidLock.h", 203 "android-emu/aemu/base/synchronization/AndroidMessageChannel.cpp", 204 "android-emu/aemu/base/synchronization/AndroidMessageChannel.h", 205 "android-emu/aemu/base/testing/TestClock.h", 206 "android-emu/aemu/base/threads/AndroidFunctorThread.cpp", 207 "android-emu/aemu/base/threads/AndroidFunctorThread.h", 208 "android-emu/aemu/base/threads/AndroidThread.h", 209 "android-emu/aemu/base/threads/AndroidThreadStore.h", 210 "android-emu/aemu/base/threads/AndroidThreadTypes.h", 211 "android-emu/aemu/base/threads/AndroidThread_pthread.cpp", 212 "android-emu/aemu/base/threads/AndroidWorkPool.cpp", 213 "android-emu/aemu/base/threads/AndroidWorkPool.h", 214 "gralloc_cb/include/gralloc_cb_bp.h", 215 "platform/VirtGpu.cpp", 216 "platform/include/VirtGpu.h", 217 "platform/stub/StubSync.cpp", 218 "platform/stub/StubVirtGpuBlob.cpp", 219 "platform/stub/StubVirtGpuBlobMapping.cpp", 220 "platform/stub/StubVirtGpuDevice.cpp", 221 "qemupipe/include-types/qemu_pipe_types_bp.h", 222 "qemupipe/include/qemu_pipe_bp.h", 223 "qemupipe/qemu_pipe_common.cpp", 224 "qemupipe/qemu_pipe_guest.cpp", 225 "renderControl_enc/renderControl_enc.cpp", 226 "renderControl_enc/renderControl_enc.h", 227 "vulkan/gfxstream_vk_device.cpp", 228 "vulkan/gfxstream_vk_wsi_stub.cpp", 229 "vulkan_enc/CommandBufferStagingStream.cpp", 230 "vulkan_enc/CommandBufferStagingStream.h", 231 "vulkan_enc/DescriptorSetVirtualization.cpp", 232 "vulkan_enc/DescriptorSetVirtualization.h", 233 "vulkan_enc/HostVisibleMemoryVirtualization.cpp", 234 "vulkan_enc/HostVisibleMemoryVirtualization.h", 235 "vulkan_enc/Resources.cpp", 236 "vulkan_enc/Resources.h", 237 "vulkan_enc/Validation.cpp", 238 "vulkan_enc/Validation.h", 239 "vulkan_enc/VkEncoder.cpp", 240 "vulkan_enc/VkEncoder.h", 241 "vulkan_enc/VulkanHandleMapping.cpp", 242 "vulkan_enc/VulkanHandleMapping.h", 243 "vulkan_enc/VulkanStreamGuest.cpp", 244 "vulkan_enc/VulkanStreamGuest.h", 245 "vulkan_enc/func_table.cpp", 246 "vulkan_enc/func_table.h", 247 "vulkan_enc/gfxstream_vk_private.cpp", 248 "vulkan_enc/gfxstream_vk_private.h", 249 "vulkan_enc/goldfish_vk_counting_guest.cpp", 250 "vulkan_enc/goldfish_vk_counting_guest.h", 251 "vulkan_enc/goldfish_vk_deepcopy_guest.cpp", 252 "vulkan_enc/goldfish_vk_deepcopy_guest.h", 253 "vulkan_enc/goldfish_vk_extension_structs_guest.cpp", 254 "vulkan_enc/goldfish_vk_extension_structs_guest.h", 255 "vulkan_enc/goldfish_vk_marshaling_guest.cpp", 256 "vulkan_enc/goldfish_vk_marshaling_guest.h", 257 "vulkan_enc/goldfish_vk_reserved_marshaling_guest.cpp", 258 "vulkan_enc/goldfish_vk_reserved_marshaling_guest.h", 259 "vulkan_enc/goldfish_vk_transform_guest.cpp", 260 "vulkan_enc/goldfish_vk_transform_guest.h", 261 "vulkan_enc/vulkan_gfxstream.h", 262 "vulkan_enc/vulkan_gfxstream_structure_type.h", 263 ] 264 265 if (target_os == "fuchsia") { 266 sources -= [ 267 "OpenglSystemCommon/QemuPipeStream.cpp", 268 "platform/stub/StubVirtGpuBlob.cpp", 269 "platform/stub/StubVirtGpuBlobMapping.cpp", 270 "platform/stub/StubVirtGpuDevice.cpp", 271 "qemupipe/qemu_pipe_common.cpp", 272 "qemupipe/qemu_pipe_guest.cpp", 273 ] 274 sources += [ 275 "OpenglSystemCommon/TraceProviderFuchsia.cpp", 276 "OpenglSystemCommon/TraceProviderFuchsia.h", 277 "fuchsia/fuchsia_stdio.cc", 278 "fuchsia/port.cc", 279 "fuchsia/service_connector.cc", 280 "platform/fuchsia/FuchsiaVirtGpuBlob.cpp", 281 "platform/fuchsia/FuchsiaVirtGpuBlobMapping.cpp", 282 "platform/fuchsia/FuchsiaVirtGpuDevice.cpp", 283 "platform/fuchsia/os_dirent_fuchsia.cpp", 284 ] 285 286 include_dirs = [ 287 "fuchsia/include", 288 "platform/include", 289 "//third_party/Vulkan-Headers/include", 290 ] 291 292 deps += [ 293 ":goldfish_srcs", 294 "//sdk/fidl/fuchsia.logger:fuchsia.logger_cpp", 295 "//sdk/fidl/fuchsia.sysmem:fuchsia.sysmem_cpp", 296 "//src/graphics/lib/magma/src/libmagma", 297 "//src/zircon/lib/zircon", 298 "//zircon/system/ulib/trace:trace-with-static-engine", 299 "//zircon/system/ulib/zx", 300 "//zircon/system/ulib/zxio", 301 ] 302 303 public_deps = [ "//third_party/Vulkan-Headers:vulkan_headers" ] 304 305 # Vulkan ICDs on Fuchsia are only allowed to depend on (parts of) libc 306 # and libzircon, and no other shared libraries. 307 assert_no_deps = [ 308 "//sdk/lib/fdio", 309 "//zircon/system/ulib/async-default", 310 ] 311 } 312} 313