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