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