1menuconfig BR2_PACKAGE_MESA3D
2	bool "mesa3d"
3	depends on BR2_INSTALL_LIBSTDCPP
4	depends on !BR2_STATIC_LIBS
5	depends on BR2_TOOLCHAIN_HAS_SYNC_1
6	depends on BR2_TOOLCHAIN_HAS_THREADS_NPTL
7	depends on BR2_TOOLCHAIN_GCC_AT_LEAST_8
8	select BR2_PACKAGE_EXPAT
9	select BR2_PACKAGE_LIBDRM
10	select BR2_PACKAGE_WAYLAND_PROTOCOLS if BR2_PACKAGE_WAYLAND
11	select BR2_PACKAGE_ZLIB
12	help
13	  Mesa 3D, an open-source implementation of the OpenGL
14	  specification.
15
16	  http://mesa3d.org
17
18if BR2_PACKAGE_MESA3D
19
20# Some Gallium driver needs libelf when built with LLVM support
21config BR2_PACKAGE_MESA3D_NEEDS_ELFUTILS
22	bool
23
24config BR2_PACKAGE_MESA3D_LLVM
25	bool "llvm support"
26	depends on BR2_PACKAGE_LLVM_ARCH_SUPPORTS
27	depends on BR2_TOOLCHAIN_GCC_AT_LEAST_7
28	depends on BR2_TOOLCHAIN_HAS_THREADS
29	depends on BR2_INSTALL_LIBSTDCPP
30	depends on !BR2_TOOLCHAIN_HAS_GCC_BUG_64735 # std::shared_future
31	depends on !BR2_STATIC_LIBS
32	depends on BR2_USE_WCHAR # std::wstring
33	depends on BR2_HOST_GCC_AT_LEAST_7 # host-llvm
34	select BR2_PACKAGE_LLVM
35
36comment "llvm support needs a toolchain w/ wchar, threads, C++, gcc >= 7, dynamic library, host gcc >= 7"
37	depends on BR2_PACKAGE_LLVM_ARCH_SUPPORTS
38	depends on !BR2_TOOLCHAIN_HAS_THREADS || !BR2_INSTALL_LIBSTDCPP || \
39		!BR2_TOOLCHAIN_GCC_AT_LEAST_7 \
40		|| BR2_STATIC_LIBS || !BR2_USE_WCHAR \
41		|| !BR2_HOST_GCC_AT_LEAST_7
42
43comment "llvm support needs a toolchain not affected by GCC bug 64735"
44	depends on BR2_PACKAGE_LLVM_ARCH_SUPPORTS
45	depends on BR2_TOOLCHAIN_HAS_GCC_BUG_64735
46
47# clang and libclc dependencies are satisfied by
48# BR2_PACKAGE_MESA3D_LLVM
49config BR2_PACKAGE_MESA3D_OPENCL
50	bool "OpenCL support"
51	depends on BR2_PACKAGE_MESA3D_LLVM
52	depends on BR2_PACKAGE_MESA3D_GALLIUM_DRIVER_R600 || \
53		BR2_PACKAGE_MESA3D_GALLIUM_DRIVER_RADEONSI
54	select BR2_PACKAGE_LLVM_RTTI
55	select BR2_PACKAGE_CLANG
56	select BR2_PACKAGE_LIBCLC
57	select BR2_PACKAGE_HAS_LIBOPENCL
58
59# inform the .mk file of gallium or vulkan driver selection
60config BR2_PACKAGE_MESA3D_GALLIUM_DRIVER
61	bool
62	select BR2_PACKAGE_MESA3D_DRIVER
63
64config BR2_PACKAGE_MESA3D_VULKAN_DRIVER
65	bool
66	select BR2_PACKAGE_MESA3D_DRIVER
67
68config BR2_PACKAGE_MESA3D_DRIVER
69	bool
70	select BR2_PACKAGE_XLIB_LIBXSHMFENCE if BR2_PACKAGE_XORG7
71
72# Gallium xa state tracker.
73# Quote from mesa3d meson.build: "XA state tracker requires at least
74# one of the following gallium drivers: nouveau, freedreno, i915, svga.
75config BR2_PACKAGE_MESA3D_NEEDS_XA
76	bool
77
78# OpenGL GLX and Gallium VDPAU both needs X11
79config BR2_PACKAGE_MESA3D_NEEDS_X11
80	bool
81	depends on BR2_PACKAGE_XORG7
82	select BR2_PACKAGE_LIBXCB
83	select BR2_PACKAGE_XLIB_LIBX11
84	select BR2_PACKAGE_XLIB_LIBXDAMAGE
85	select BR2_PACKAGE_XLIB_LIBXEXT
86	select BR2_PACKAGE_XLIB_LIBXFIXES
87	select BR2_PACKAGE_XLIB_LIBXRANDR
88	select BR2_PACKAGE_XLIB_LIBXXF86VM
89	select BR2_PACKAGE_XORGPROTO
90
91comment "Gallium drivers"
92
93config BR2_PACKAGE_MESA3D_GALLIUM_DRIVER_CROCUS
94	bool "Gallium crocus driver"
95	depends on BR2_i386 || BR2_x86_64
96	select BR2_PACKAGE_MESA3D_GALLIUM_DRIVER
97	help
98	  Mesa driver for gen4-7 Intel GPUs.
99
100config BR2_PACKAGE_MESA3D_GALLIUM_DRIVER_ETNAVIV
101	bool "Gallium Etnaviv driver"
102	depends on (BR2_TOOLCHAIN_HAS_SYNC_4 && !BR2_RISCV_32) || !BR2_PACKAGE_XORG7 # libxshmfence
103	select BR2_PACKAGE_MESA3D_GALLIUM_DRIVER
104	select BR2_PACKAGE_LIBDRM_ETNAVIV
105	help
106	  Mesa driver for Vivante GPUs.
107
108config BR2_PACKAGE_MESA3D_GALLIUM_DRIVER_FREEDRENO
109	bool "Gallium freedreno driver"
110	depends on BR2_arm || BR2_aarch64 || BR2_aarch64_be # libdrm-freedreno
111	# libdrm's freedreno option depends on LIBDRM_HAS_ATOMIC. Propagating
112	# that dependency here causes a circular dependency that Kconfig
113	# can't see is just spurious. However, that dependency is about
114	# the toolchain having sync4 primitives, which is always a given
115	# for arm/aarch64.
116	select BR2_PACKAGE_MESA3D_GALLIUM_DRIVER
117	select BR2_PACKAGE_LIBDRM_FREEDRENO
118	help
119	  Mesa driver for Freedreno GPUs.
120
121config BR2_PACKAGE_MESA3D_GALLIUM_DRIVER_I915
122	bool "Gallium i915 driver"
123	depends on BR2_i386 || BR2_x86_64
124	select BR2_PACKAGE_MESA3D_GALLIUM_DRIVER
125	select BR2_PACKAGE_LIBDRM_INTEL
126	help
127	  Support for i915-based Intel GPUs.
128
129config BR2_PACKAGE_MESA3D_GALLIUM_DRIVER_IRIS
130	bool "Gallium iris driver"
131	depends on BR2_i386 || BR2_x86_64
132	select BR2_PACKAGE_MESA3D_GALLIUM_DRIVER
133	help
134	  Mesa driver for iris-based Intel GPUs.
135
136config BR2_PACKAGE_MESA3D_GALLIUM_DRIVER_LIMA
137	bool "Gallium lima driver"
138	depends on (BR2_TOOLCHAIN_HAS_SYNC_4 && !BR2_RISCV_32) || !BR2_PACKAGE_XORG7 # libxshmfence
139	select BR2_PACKAGE_MESA3D_GALLIUM_DRIVER
140	help
141	  Mesa driver for ARM Mali Utgard GPUs.
142
143config BR2_PACKAGE_MESA3D_GALLIUM_DRIVER_NOUVEAU
144	bool "Gallium nouveau driver"
145	select BR2_PACKAGE_MESA3D_GALLIUM_DRIVER
146	select BR2_PACKAGE_LIBDRM_NOUVEAU
147	select BR2_PACKAGE_MESA3D_NEEDS_XA
148	select BR2_PACKAGE_LLVM_RTTI if BR2_PACKAGE_MESA3D_LLVM
149	help
150	  Supports all Nvidia GPUs.
151
152config BR2_PACKAGE_MESA3D_GALLIUM_DRIVER_PANFROST
153	bool "Gallium panfrost driver"
154	depends on (BR2_TOOLCHAIN_HAS_SYNC_4 && !BR2_RISCV_32) || !BR2_PACKAGE_XORG7 # libxshmfence
155	select BR2_PACKAGE_MESA3D_GALLIUM_DRIVER
156	help
157	  Mesa driver for ARM Mali Midgard and Bifrost GPUs.
158
159config BR2_PACKAGE_MESA3D_GALLIUM_DRIVER_R300
160	bool "Gallium Radeon R300 driver"
161	depends on BR2_i386 || BR2_x86_64
162	# lbdrm's radeon option depends on LIBDRM_HAS_ATOMIC. Propagating
163	# that dependency here causes a circular dependency that Kconfig
164	# can't see is just spurious. However, that dependency is about
165	# the toolchain having sync4 primitives, which is always a given
166	# for x86.
167	select BR2_PACKAGE_MESA3D_GALLIUM_DRIVER
168	select BR2_PACKAGE_LIBDRM_RADEON
169	help
170	  Driver for ATI/AMD Radeon R300/R400/R500 GPUs.
171
172config BR2_PACKAGE_MESA3D_GALLIUM_DRIVER_R600
173	bool "Gallium Radeon R600 driver"
174	depends on BR2_i386 || BR2_x86_64
175	depends on !BR2_PACKAGE_MESA3D_LLVM || \
176		(BR2_PACKAGE_MESA3D_LLVM && (BR2_TOOLCHAIN_USES_UCLIBC || \
177			BR2_TOOLCHAIN_USES_GLIBC)) # elfutils
178	select BR2_PACKAGE_MESA3D_GALLIUM_DRIVER
179	select BR2_PACKAGE_LIBDRM_RADEON
180	select BR2_PACKAGE_LLVM_AMDGPU if BR2_PACKAGE_MESA3D_LLVM
181	select BR2_PACKAGE_ELFUTILS if BR2_PACKAGE_MESA3D_LLVM
182	select BR2_PACKAGE_MESA3D_NEEDS_ELFUTILS if BR2_PACKAGE_MESA3D_LLVM
183	help
184	  Driver for ATI/AMD Radeon R600/R700/HD5000/HD6000 GPUs.
185
186# R600 needs libelf when Mesa3D is built with LLVM support
187# musl is not currently compatible with elfutils
188comment "R600 driver needs a uClibc or glibc toolchain when llvm is enabled"
189	depends on BR2_PACKAGE_MESA3D_LLVM
190	depends on !(BR2_TOOLCHAIN_USES_UCLIBC || BR2_TOOLCHAIN_USES_GLIBC)
191
192config BR2_PACKAGE_MESA3D_GALLIUM_DRIVER_RADEONSI
193	bool "Gallium Radeon SI driver"
194	depends on BR2_USE_MMU # libdrm
195	depends on BR2_i386 || BR2_x86_64
196	depends on BR2_PACKAGE_MESA3D_LLVM
197	select BR2_PACKAGE_MESA3D_GALLIUM_DRIVER
198	select BR2_PACKAGE_LIBDRM_AMDGPU
199	select BR2_PACKAGE_LIBDRM_RADEON
200	select BR2_PACKAGE_LLVM_AMDGPU
201	select BR2_PACKAGE_ELFUTILS
202	select BR2_PACKAGE_MESA3D_NEEDS_ELFUTILS
203	help
204	  Driver for ATI/AMD Radeon HD7000/HD8000/Rx200 GPUs.
205
206config BR2_PACKAGE_MESA3D_GALLIUM_DRIVER_SVGA
207	bool "Gallium vmware svga driver"
208	depends on BR2_i386 || BR2_x86_64
209	select BR2_PACKAGE_MESA3D_GALLIUM_DRIVER
210	select BR2_PACKAGE_LIBDRM_VMWGFX
211	select BR2_PACKAGE_MESA3D_NEEDS_XA
212	help
213	  This is a virtual GPU driver for VMWare virtual machines.
214
215config BR2_PACKAGE_MESA3D_GALLIUM_DRIVER_SWRAST
216	bool "Gallium swrast driver"
217	select BR2_PACKAGE_MESA3D_GALLIUM_DRIVER
218	help
219	  This is a software opengl implementation using the Gallium3D
220	  infrastructure.
221
222config BR2_PACKAGE_MESA3D_GALLIUM_DRIVER_TEGRA
223	bool "Gallium tegra driver"
224	select BR2_PACKAGE_MESA3D_GALLIUM_DRIVER
225	select BR2_PACKAGE_MESA3D_GALLIUM_DRIVER_NOUVEAU
226	select BR2_PACKAGE_LIBDRM_NOUVEAU
227	select BR2_PACKAGE_MESA3D_NEEDS_XA
228	help
229	  Adds support for Nvidia Tegra GPUs, requires nouveau.
230
231config BR2_PACKAGE_MESA3D_GALLIUM_DRIVER_V3D
232	bool "Gallium v3d driver"
233	depends on (BR2_arm && BR2_ARM_CPU_HAS_NEON) || BR2_aarch64
234	depends on BR2_TOOLCHAIN_HAS_SYNC_4 || !BR2_PACKAGE_XORG7 # libxshmfence
235	select BR2_PACKAGE_MESA3D_GALLIUM_DRIVER
236	select BR2_PACKAGE_MESA3D_GALLIUM_DRIVER_VC4 # runtime
237	select BR2_PACKAGE_MESA3D_OPENGL_EGL
238	help
239	  Driver for Broadcom VC6 (rpi4) GPUs (needs vc4).
240
241	  It requires a kernel 4.18+ with DRM V3D support enabled:
242
243	  - CONFIG_DRM_V3D
244	  - CONFIG_DRM_VC4
245
246config BR2_PACKAGE_MESA3D_GALLIUM_DRIVER_VC4
247	bool "Gallium vc4 driver"
248	depends on (BR2_arm && BR2_ARM_CPU_HAS_NEON) || BR2_aarch64
249	depends on BR2_TOOLCHAIN_HAS_SYNC_4 || !BR2_PACKAGE_XORG7 # libxshmfence
250	select BR2_PACKAGE_MESA3D_GALLIUM_DRIVER
251	select BR2_PACKAGE_LIBDRM_VC4
252	select BR2_PACKAGE_MESA3D_OPENGL_EGL
253	help
254	  Driver for Broadcom VC4 (rpi2/3) GPUs.
255	  It requires a vanilla 4.5+ kernel with drm vc4 (open) support.
256
257config BR2_PACKAGE_MESA3D_GALLIUM_DRIVER_VIRGL
258	bool "Gallium virgl driver"
259	select BR2_PACKAGE_MESA3D_GALLIUM_DRIVER
260	select BR2_PACKAGE_MESA3D_OPENGL_EGL
261	help
262	  virgl is the 3D acceleration backend for the virtio-gpu
263	  shipping with qemu.
264
265config BR2_PACKAGE_MESA3D_VDPAU
266	bool "Gallium VDPAU state tracker"
267	depends on BR2_PACKAGE_XORG7
268	depends on BR2_PACKAGE_MESA3D_GALLIUM_DRIVER_NOUVEAU \
269		|| BR2_PACKAGE_MESA3D_GALLIUM_DRIVER_R600 \
270		|| BR2_PACKAGE_MESA3D_GALLIUM_DRIVER_RADEONSI
271	select BR2_PACKAGE_MESA3D_NEEDS_X11
272	select BR2_PACKAGE_LIBVDPAU
273	help
274	  VDPAU state tracker (needs r300, r600, radeonsi or nouveau
275	  gallium drivers).
276
277comment "Gallium VDPAU state tracker needs X.org and gallium drivers r600, radeonsi or nouveau"
278	depends on !BR2_PACKAGE_XORG7 || \
279		!(BR2_PACKAGE_MESA3D_GALLIUM_DRIVER_NOUVEAU \
280		|| BR2_PACKAGE_MESA3D_GALLIUM_DRIVER_R600 \
281		|| BR2_PACKAGE_MESA3D_GALLIUM_DRIVER_RADEONSI)
282
283comment "Vulkan drivers"
284
285config BR2_PACKAGE_MESA3D_VULKAN_DRIVER_BROADCOM
286	bool "Vulkan broadcom driver"
287	depends on BR2_arm || BR2_aarch64
288	depends on BR2_TOOLCHAIN_HAS_SYNC_4 # dri3/libxshmfence
289	select BR2_PACKAGE_MESA3D_VULKAN_DRIVER
290	help
291	  Vulkan broadcom driver.
292
293config BR2_PACKAGE_MESA3D_VULKAN_DRIVER_INTEL
294	bool "Vulkan Intel driver"
295	depends on BR2_i386 || BR2_x86_64
296	depends on BR2_TOOLCHAIN_HAS_SYNC_4 || !BR2_PACKAGE_XORG7 # libxshmfence
297	depends on BR2_TOOLCHAIN_HEADERS_AT_LEAST_3_17 # memfd.h
298	depends on BR2_TOOLCHAIN_USES_GLIBC # ifunc, static_assert
299	select BR2_PACKAGE_MESA3D_VULKAN_DRIVER
300	help
301	  Vulkan driver for Intel hardware from Ivy Bridge onward.
302
303comment "intel vulkan needs a glibc toolchain w/ headers >= 3.17"
304	depends on BR2_i386 || BR2_x86_64
305	depends on BR2_TOOLCHAIN_HAS_SYNC_4 || !BR2_PACKAGE_XORG7
306	depends on !BR2_TOOLCHAIN_HEADERS_AT_LEAST_3_17 || \
307		!BR2_TOOLCHAIN_USES_GLIBC
308
309config BR2_PACKAGE_MESA3D_VULKAN_DRIVER_SWRAST
310	bool "Vulkan swrast driver"
311	depends on BR2_PACKAGE_MESA3D_LLVM
312	select BR2_PACKAGE_MESA3D_GALLIUM_DRIVER_SWRAST
313	select BR2_PACKAGE_MESA3D_VULKAN_DRIVER
314	help
315	  Vulkan swrast driver.
316
317comment "Off-screen Rendering"
318
319config BR2_PACKAGE_MESA3D_OSMESA_GALLIUM
320	bool "OSMesa (Gallium) library"
321	select BR2_PACKAGE_MESA3D_GALLIUM_DRIVER_SWRAST
322	help
323	  The OSMesa API provides functions for off-screen rendering.
324
325if BR2_PACKAGE_MESA3D_DRIVER
326
327comment "OpenGL API Support"
328
329config BR2_PACKAGE_MESA3D_GBM
330	bool "gbm"
331	depends on BR2_PACKAGE_MESA3D_GALLIUM_DRIVER && \
332		BR2_PACKAGE_MESA3D_OPENGL_EGL
333	select BR2_PACKAGE_HAS_LIBGBM
334	select BR2_PACKAGE_LIBGBM_HAS_FEATURE_FORMAT_MODIFIER_PLANE_COUNT
335	select BR2_PACKAGE_LIBGBM_HAS_FEATURE_DMA_BUF
336	help
337	  Enable Generic Buffer Management (gbm)
338
339comment "gbm support needs a gallium driver w/ EGL support."
340	depends on !(BR2_PACKAGE_MESA3D_GALLIUM_DRIVER && BR2_PACKAGE_MESA3D_OPENGL_EGL)
341
342config BR2_PACKAGE_MESA3D_OPENGL_GLX
343	bool "OpenGL GLX"
344	depends on BR2_PACKAGE_XORG7
345	select BR2_PACKAGE_HAS_LIBGL if !BR2_PACKAGE_LIBGLVND
346	select BR2_PACKAGE_LIBGLVND_DISPATCH_GL if BR2_PACKAGE_LIBGLVND
347	select BR2_PACKAGE_MESA3D_NEEDS_X11
348	help
349	  Enable GLX graphic acceleration (OpenGL + X11).
350
351comment "OpenGL GLX support needs X11"
352	depends on !BR2_PACKAGE_XORG7
353
354config BR2_PACKAGE_MESA3D_OPENGL_EGL
355	bool "OpenGL EGL"
356	depends on BR2_PACKAGE_MESA3D_GALLIUM_DRIVER
357	select BR2_PACKAGE_HAS_LIBEGL if !BR2_PACKAGE_LIBGLVND
358	select BR2_PACKAGE_LIBGLVND_DISPATCH_EGL if BR2_PACKAGE_LIBGLVND
359	select BR2_PACKAGE_HAS_LIBEGL_WAYLAND
360	select BR2_PACKAGE_MESA3D_GBM
361	help
362	  Use the Khronos EGL APIs. EGL is a window manager for OpenGL
363	  applications similar to GLX, for X, and WGL, for Windows.
364
365config BR2_PACKAGE_MESA3D_OPENGL_ES
366	bool "OpenGL ES"
367	select BR2_PACKAGE_HAS_LIBGLES if !BR2_PACKAGE_LIBGLVND
368	select BR2_PACKAGE_LIBGLVND_DISPATCH_GLES if BR2_PACKAGE_LIBGLVND
369	help
370	  Use the Khronos OpenGL ES APIs. This is commonly used on
371	  embedded systems and represents a subset of the OpenGL API.
372
373endif # BR2_PACKAGE_MESA3D_DRIVER
374
375config BR2_PACKAGE_PROVIDES_LIBGBM
376	default "mesa3d" if BR2_PACKAGE_MESA3D_GBM
377
378config BR2_PACKAGE_PROVIDES_LIBGL
379	default "mesa3d" if BR2_PACKAGE_MESA3D_OPENGL_GLX && !BR2_PACKAGE_LIBGLVND
380
381config BR2_PACKAGE_PROVIDES_LIBEGL
382	default "mesa3d" if BR2_PACKAGE_MESA3D_OPENGL_EGL && !BR2_PACKAGE_LIBGLVND
383
384config BR2_PACKAGE_PROVIDES_LIBGLES
385	default "mesa3d" if BR2_PACKAGE_MESA3D_OPENGL_ES && !BR2_PACKAGE_LIBGLVND
386
387config BR2_PACKAGE_PROVIDES_LIBOPENCL
388	default "mesa3d" if BR2_PACKAGE_MESA3D_OPENCL
389
390endif # BR2_PACKAGE_MESA3D
391
392comment "mesa3d needs a toolchain w/ gcc >=8, C++, NPTL, dynamic library"
393	depends on !BR2_INSTALL_LIBSTDCPP || !BR2_TOOLCHAIN_HAS_THREADS_NPTL || \
394		BR2_STATIC_LIBS || !BR2_TOOLCHAIN_GCC_AT_LEAST_8
395	depends on BR2_TOOLCHAIN_HAS_SYNC_1
396