kumquat-buildroot/package/mesa3d/Config.in
Bernd Kuhls 6a9e4be7f0 package/mesa3d: rework dri3 handling
While fixing a build error

../src/egl/drivers/dri2/platform_x11.c: In function 'dri2_x11_get_msc_rate':
../src/egl/drivers/dri2/platform_x11.c:1229:44:
 error: 'struct dri2_egl_display' has no member named 'screen_resources'

with this defconfig:

BR2_x86_64=y
BR2_TOOLCHAIN_BUILDROOT_CXX=y
BR2_PACKAGE_MESA3D=y
BR2_PACKAGE_MESA3D_GALLIUM_DRIVER_IRIS=y
BR2_PACKAGE_MESA3D_OPENGL_GLX=y
BR2_PACKAGE_MESA3D_OPENGL_EGL=y
BR2_PACKAGE_MESA3D_OPENGL_ES=y
BR2_PACKAGE_XORG7=y

(crocus and i915 drivers are also affected) it turns out that we can
assume the need for dri3 support when X.org is enabled as a hard depen-
dency even if mesa3d's configure does not throw errors when missing,
like for the Intel drivers.

Before this patch these Config.in options were used:

config BR2_PACKAGE_MESA3D_DRI3
  select BR2_PACKAGE_XLIB_LIBXSHMFENCE
select BR2_PACKAGE_MESA3D_DRI3 if BR2_PACKAGE_XORG7

which can be translated into:

select BR2_PACKAGE_XLIB_LIBXSHMFENCE if BR2_PACKAGE_XORG7

and used at option BR2_PACKAGE_MESA3D_DRIVER.

Configure option -Ddri3=enabled is passed to mesa3d when at least one
driver is enabled along with X.org:
ifeq ($(BR2_PACKAGE_MESA3D_DRIVER)$(BR2_PACKAGE_XORG7),yy)

Signed-off-by: Bernd Kuhls <bernd@kuhls.net>
Signed-off-by: Arnout Vandecappelle <arnout@mind.be>
(cherry picked from commit e2f87b3c15)
Signed-off-by: Peter Korsgaard <peter@korsgaard.com>
2024-03-21 21:49:39 +01:00

396 lines
13 KiB
Plaintext

menuconfig BR2_PACKAGE_MESA3D
bool "mesa3d"
depends on BR2_INSTALL_LIBSTDCPP
depends on !BR2_STATIC_LIBS
depends on BR2_TOOLCHAIN_HAS_SYNC_1
depends on BR2_TOOLCHAIN_HAS_THREADS_NPTL
depends on BR2_TOOLCHAIN_GCC_AT_LEAST_8
select BR2_PACKAGE_EXPAT
select BR2_PACKAGE_LIBDRM
select BR2_PACKAGE_WAYLAND_PROTOCOLS if BR2_PACKAGE_WAYLAND
select BR2_PACKAGE_ZLIB
help
Mesa 3D, an open-source implementation of the OpenGL
specification.
http://mesa3d.org
if BR2_PACKAGE_MESA3D
# Some Gallium driver needs libelf when built with LLVM support
config BR2_PACKAGE_MESA3D_NEEDS_ELFUTILS
bool
config BR2_PACKAGE_MESA3D_LLVM
bool "llvm support"
depends on BR2_PACKAGE_LLVM_ARCH_SUPPORTS
depends on BR2_TOOLCHAIN_GCC_AT_LEAST_7
depends on BR2_TOOLCHAIN_HAS_THREADS
depends on BR2_INSTALL_LIBSTDCPP
depends on !BR2_TOOLCHAIN_HAS_GCC_BUG_64735 # std::shared_future
depends on !BR2_STATIC_LIBS
depends on BR2_USE_WCHAR # std::wstring
depends on BR2_HOST_GCC_AT_LEAST_7 # host-llvm
select BR2_PACKAGE_LLVM
comment "llvm support needs a toolchain w/ wchar, threads, C++, gcc >= 7, dynamic library, host gcc >= 7"
depends on BR2_PACKAGE_LLVM_ARCH_SUPPORTS
depends on !BR2_TOOLCHAIN_HAS_THREADS || !BR2_INSTALL_LIBSTDCPP || \
!BR2_TOOLCHAIN_GCC_AT_LEAST_7 \
|| BR2_STATIC_LIBS || !BR2_USE_WCHAR \
|| !BR2_HOST_GCC_AT_LEAST_7
comment "llvm support needs a toolchain not affected by GCC bug 64735"
depends on BR2_PACKAGE_LLVM_ARCH_SUPPORTS
depends on BR2_TOOLCHAIN_HAS_GCC_BUG_64735
# clang and libclc dependencies are satisfied by
# BR2_PACKAGE_MESA3D_LLVM
config BR2_PACKAGE_MESA3D_OPENCL
bool "OpenCL support"
depends on BR2_PACKAGE_MESA3D_LLVM
depends on BR2_PACKAGE_MESA3D_GALLIUM_DRIVER_R600 || \
BR2_PACKAGE_MESA3D_GALLIUM_DRIVER_RADEONSI
select BR2_PACKAGE_LLVM_RTTI
select BR2_PACKAGE_CLANG
select BR2_PACKAGE_LIBCLC
select BR2_PACKAGE_HAS_LIBOPENCL
# inform the .mk file of gallium or vulkan driver selection
config BR2_PACKAGE_MESA3D_GALLIUM_DRIVER
bool
select BR2_PACKAGE_MESA3D_DRIVER
config BR2_PACKAGE_MESA3D_VULKAN_DRIVER
bool
select BR2_PACKAGE_MESA3D_DRIVER
config BR2_PACKAGE_MESA3D_DRIVER
bool
select BR2_PACKAGE_XLIB_LIBXSHMFENCE if BR2_PACKAGE_XORG7
# Gallium xa state tracker.
# Quote from mesa3d meson.build: "XA state tracker requires at least
# one of the following gallium drivers: nouveau, freedreno, i915, svga.
config BR2_PACKAGE_MESA3D_NEEDS_XA
bool
# OpenGL GLX and Gallium VDPAU both needs X11
config BR2_PACKAGE_MESA3D_NEEDS_X11
bool
depends on BR2_PACKAGE_XORG7
select BR2_PACKAGE_LIBXCB
select BR2_PACKAGE_XLIB_LIBX11
select BR2_PACKAGE_XLIB_LIBXDAMAGE
select BR2_PACKAGE_XLIB_LIBXEXT
select BR2_PACKAGE_XLIB_LIBXFIXES
select BR2_PACKAGE_XLIB_LIBXRANDR
select BR2_PACKAGE_XLIB_LIBXXF86VM
select BR2_PACKAGE_XORGPROTO
comment "Gallium drivers"
config BR2_PACKAGE_MESA3D_GALLIUM_DRIVER_CROCUS
bool "Gallium crocus driver"
depends on BR2_i386 || BR2_x86_64
select BR2_PACKAGE_MESA3D_GALLIUM_DRIVER
help
Mesa driver for gen4-7 Intel GPUs.
config BR2_PACKAGE_MESA3D_GALLIUM_DRIVER_ETNAVIV
bool "Gallium Etnaviv driver"
depends on (BR2_TOOLCHAIN_HAS_SYNC_4 && !BR2_RISCV_32) || !BR2_PACKAGE_XORG7 # libxshmfence
select BR2_PACKAGE_MESA3D_GALLIUM_DRIVER
select BR2_PACKAGE_LIBDRM_ETNAVIV
help
Mesa driver for Vivante GPUs.
config BR2_PACKAGE_MESA3D_GALLIUM_DRIVER_FREEDRENO
bool "Gallium freedreno driver"
depends on BR2_arm || BR2_aarch64 || BR2_aarch64_be # libdrm-freedreno
# libdrm's freedreno option depends on LIBDRM_HAS_ATOMIC. Propagating
# that dependency here causes a circular dependency that Kconfig
# can't see is just spurious. However, that dependency is about
# the toolchain having sync4 primitives, which is always a given
# for arm/aarch64.
select BR2_PACKAGE_MESA3D_GALLIUM_DRIVER
select BR2_PACKAGE_LIBDRM_FREEDRENO
help
Mesa driver for Freedreno GPUs.
config BR2_PACKAGE_MESA3D_GALLIUM_DRIVER_I915
bool "Gallium i915 driver"
depends on BR2_i386 || BR2_x86_64
select BR2_PACKAGE_MESA3D_GALLIUM_DRIVER
select BR2_PACKAGE_LIBDRM_INTEL
help
Support for i915-based Intel GPUs.
config BR2_PACKAGE_MESA3D_GALLIUM_DRIVER_IRIS
bool "Gallium iris driver"
depends on BR2_i386 || BR2_x86_64
select BR2_PACKAGE_MESA3D_GALLIUM_DRIVER
help
Mesa driver for iris-based Intel GPUs.
config BR2_PACKAGE_MESA3D_GALLIUM_DRIVER_LIMA
bool "Gallium lima driver"
depends on (BR2_TOOLCHAIN_HAS_SYNC_4 && !BR2_RISCV_32) || !BR2_PACKAGE_XORG7 # libxshmfence
select BR2_PACKAGE_MESA3D_GALLIUM_DRIVER
help
Mesa driver for ARM Mali Utgard GPUs.
config BR2_PACKAGE_MESA3D_GALLIUM_DRIVER_NOUVEAU
bool "Gallium nouveau driver"
select BR2_PACKAGE_MESA3D_GALLIUM_DRIVER
select BR2_PACKAGE_LIBDRM_NOUVEAU
select BR2_PACKAGE_MESA3D_NEEDS_XA
select BR2_PACKAGE_LLVM_RTTI if BR2_PACKAGE_MESA3D_LLVM
help
Supports all Nvidia GPUs.
config BR2_PACKAGE_MESA3D_GALLIUM_DRIVER_PANFROST
bool "Gallium panfrost driver"
depends on (BR2_TOOLCHAIN_HAS_SYNC_4 && !BR2_RISCV_32) || !BR2_PACKAGE_XORG7 # libxshmfence
select BR2_PACKAGE_MESA3D_GALLIUM_DRIVER
help
Mesa driver for ARM Mali Midgard and Bifrost GPUs.
config BR2_PACKAGE_MESA3D_GALLIUM_DRIVER_R300
bool "Gallium Radeon R300 driver"
depends on BR2_i386 || BR2_x86_64
# lbdrm's radeon option depends on LIBDRM_HAS_ATOMIC. Propagating
# that dependency here causes a circular dependency that Kconfig
# can't see is just spurious. However, that dependency is about
# the toolchain having sync4 primitives, which is always a given
# for x86.
select BR2_PACKAGE_MESA3D_GALLIUM_DRIVER
select BR2_PACKAGE_LIBDRM_RADEON
help
Driver for ATI/AMD Radeon R300/R400/R500 GPUs.
config BR2_PACKAGE_MESA3D_GALLIUM_DRIVER_R600
bool "Gallium Radeon R600 driver"
depends on BR2_i386 || BR2_x86_64
depends on !BR2_PACKAGE_MESA3D_LLVM || \
(BR2_PACKAGE_MESA3D_LLVM && (BR2_TOOLCHAIN_USES_UCLIBC || \
BR2_TOOLCHAIN_USES_GLIBC)) # elfutils
select BR2_PACKAGE_MESA3D_GALLIUM_DRIVER
select BR2_PACKAGE_LIBDRM_RADEON
select BR2_PACKAGE_LLVM_AMDGPU if BR2_PACKAGE_MESA3D_LLVM
select BR2_PACKAGE_ELFUTILS if BR2_PACKAGE_MESA3D_LLVM
select BR2_PACKAGE_MESA3D_NEEDS_ELFUTILS if BR2_PACKAGE_MESA3D_LLVM
help
Driver for ATI/AMD Radeon R600/R700/HD5000/HD6000 GPUs.
# R600 needs libelf when Mesa3D is built with LLVM support
# musl is not currently compatible with elfutils
comment "R600 driver needs a uClibc or glibc toolchain when llvm is enabled"
depends on BR2_PACKAGE_MESA3D_LLVM
depends on !(BR2_TOOLCHAIN_USES_UCLIBC || BR2_TOOLCHAIN_USES_GLIBC)
config BR2_PACKAGE_MESA3D_GALLIUM_DRIVER_RADEONSI
bool "Gallium Radeon SI driver"
depends on BR2_USE_MMU # libdrm
depends on BR2_i386 || BR2_x86_64
depends on BR2_PACKAGE_MESA3D_LLVM
select BR2_PACKAGE_MESA3D_GALLIUM_DRIVER
select BR2_PACKAGE_LIBDRM_AMDGPU
select BR2_PACKAGE_LIBDRM_RADEON
select BR2_PACKAGE_LLVM_AMDGPU
select BR2_PACKAGE_ELFUTILS
select BR2_PACKAGE_MESA3D_NEEDS_ELFUTILS
help
Driver for ATI/AMD Radeon HD7000/HD8000/Rx200 GPUs.
config BR2_PACKAGE_MESA3D_GALLIUM_DRIVER_SVGA
bool "Gallium vmware svga driver"
depends on BR2_i386 || BR2_x86_64
select BR2_PACKAGE_MESA3D_GALLIUM_DRIVER
select BR2_PACKAGE_LIBDRM_VMWGFX
select BR2_PACKAGE_MESA3D_NEEDS_XA
help
This is a virtual GPU driver for VMWare virtual machines.
config BR2_PACKAGE_MESA3D_GALLIUM_DRIVER_SWRAST
bool "Gallium swrast driver"
select BR2_PACKAGE_MESA3D_GALLIUM_DRIVER
help
This is a software opengl implementation using the Gallium3D
infrastructure.
config BR2_PACKAGE_MESA3D_GALLIUM_DRIVER_TEGRA
bool "Gallium tegra driver"
select BR2_PACKAGE_MESA3D_GALLIUM_DRIVER
select BR2_PACKAGE_MESA3D_GALLIUM_DRIVER_NOUVEAU
select BR2_PACKAGE_LIBDRM_NOUVEAU
select BR2_PACKAGE_MESA3D_NEEDS_XA
help
Adds support for Nvidia Tegra GPUs, requires nouveau.
config BR2_PACKAGE_MESA3D_GALLIUM_DRIVER_V3D
bool "Gallium v3d driver"
depends on (BR2_arm && BR2_ARM_CPU_HAS_NEON) || BR2_aarch64
depends on BR2_TOOLCHAIN_HAS_SYNC_4 || !BR2_PACKAGE_XORG7 # libxshmfence
select BR2_PACKAGE_MESA3D_GALLIUM_DRIVER
select BR2_PACKAGE_MESA3D_GALLIUM_DRIVER_VC4 # runtime
select BR2_PACKAGE_MESA3D_OPENGL_EGL
help
Driver for Broadcom VC6 (rpi4) GPUs (needs vc4).
It requires a kernel 4.18+ with DRM V3D support enabled:
- CONFIG_DRM_V3D
- CONFIG_DRM_VC4
config BR2_PACKAGE_MESA3D_GALLIUM_DRIVER_VC4
bool "Gallium vc4 driver"
depends on (BR2_arm && BR2_ARM_CPU_HAS_NEON) || BR2_aarch64
depends on BR2_TOOLCHAIN_HAS_SYNC_4 || !BR2_PACKAGE_XORG7 # libxshmfence
select BR2_PACKAGE_MESA3D_GALLIUM_DRIVER
select BR2_PACKAGE_LIBDRM_VC4
select BR2_PACKAGE_MESA3D_OPENGL_EGL
help
Driver for Broadcom VC4 (rpi2/3) GPUs.
It requires a vanilla 4.5+ kernel with drm vc4 (open) support.
config BR2_PACKAGE_MESA3D_GALLIUM_DRIVER_VIRGL
bool "Gallium virgl driver"
select BR2_PACKAGE_MESA3D_GALLIUM_DRIVER
select BR2_PACKAGE_MESA3D_OPENGL_EGL
help
virgl is the 3D acceleration backend for the virtio-gpu
shipping with qemu.
config BR2_PACKAGE_MESA3D_VDPAU
bool "Gallium VDPAU state tracker"
depends on BR2_PACKAGE_XORG7
depends on BR2_PACKAGE_MESA3D_GALLIUM_DRIVER_NOUVEAU \
|| BR2_PACKAGE_MESA3D_GALLIUM_DRIVER_R600 \
|| BR2_PACKAGE_MESA3D_GALLIUM_DRIVER_RADEONSI
select BR2_PACKAGE_MESA3D_NEEDS_X11
select BR2_PACKAGE_LIBVDPAU
help
VDPAU state tracker (needs r300, r600, radeonsi or nouveau
gallium drivers).
comment "Gallium VDPAU state tracker needs X.org and gallium drivers r600, radeonsi or nouveau"
depends on !BR2_PACKAGE_XORG7 || \
!(BR2_PACKAGE_MESA3D_GALLIUM_DRIVER_NOUVEAU \
|| BR2_PACKAGE_MESA3D_GALLIUM_DRIVER_R600 \
|| BR2_PACKAGE_MESA3D_GALLIUM_DRIVER_RADEONSI)
comment "Vulkan drivers"
config BR2_PACKAGE_MESA3D_VULKAN_DRIVER_BROADCOM
bool "Vulkan broadcom driver"
depends on BR2_arm || BR2_aarch64
depends on BR2_TOOLCHAIN_HAS_SYNC_4 # dri3/libxshmfence
select BR2_PACKAGE_MESA3D_VULKAN_DRIVER
help
Vulkan broadcom driver.
config BR2_PACKAGE_MESA3D_VULKAN_DRIVER_INTEL
bool "Vulkan Intel driver"
depends on BR2_i386 || BR2_x86_64
depends on BR2_TOOLCHAIN_HAS_SYNC_4 || !BR2_PACKAGE_XORG7 # libxshmfence
depends on BR2_TOOLCHAIN_HEADERS_AT_LEAST_3_17 # memfd.h
depends on BR2_TOOLCHAIN_USES_GLIBC # ifunc, static_assert
select BR2_PACKAGE_MESA3D_VULKAN_DRIVER
help
Vulkan driver for Intel hardware from Ivy Bridge onward.
comment "intel vulkan needs a glibc toolchain w/ headers >= 3.17"
depends on BR2_i386 || BR2_x86_64
depends on BR2_TOOLCHAIN_HAS_SYNC_4 || !BR2_PACKAGE_XORG7
depends on !BR2_TOOLCHAIN_HEADERS_AT_LEAST_3_17 || \
!BR2_TOOLCHAIN_USES_GLIBC
config BR2_PACKAGE_MESA3D_VULKAN_DRIVER_SWRAST
bool "Vulkan swrast driver"
depends on BR2_PACKAGE_MESA3D_LLVM
select BR2_PACKAGE_MESA3D_GALLIUM_DRIVER_SWRAST
select BR2_PACKAGE_MESA3D_VULKAN_DRIVER
help
Vulkan swrast driver.
comment "Off-screen Rendering"
config BR2_PACKAGE_MESA3D_OSMESA_GALLIUM
bool "OSMesa (Gallium) library"
select BR2_PACKAGE_MESA3D_GALLIUM_DRIVER_SWRAST
help
The OSMesa API provides functions for off-screen rendering.
if BR2_PACKAGE_MESA3D_DRIVER
comment "OpenGL API Support"
config BR2_PACKAGE_MESA3D_GBM
bool "gbm"
depends on BR2_PACKAGE_MESA3D_GALLIUM_DRIVER && \
BR2_PACKAGE_MESA3D_OPENGL_EGL
select BR2_PACKAGE_HAS_LIBGBM
select BR2_PACKAGE_LIBGBM_HAS_FEATURE_FORMAT_MODIFIER_PLANE_COUNT
select BR2_PACKAGE_LIBGBM_HAS_FEATURE_DMA_BUF
help
Enable Generic Buffer Management (gbm)
comment "gbm support needs a gallium driver w/ EGL support."
depends on !(BR2_PACKAGE_MESA3D_GALLIUM_DRIVER && BR2_PACKAGE_MESA3D_OPENGL_EGL)
config BR2_PACKAGE_MESA3D_OPENGL_GLX
bool "OpenGL GLX"
depends on BR2_PACKAGE_XORG7
select BR2_PACKAGE_HAS_LIBGL if !BR2_PACKAGE_LIBGLVND
select BR2_PACKAGE_LIBGLVND_DISPATCH_GL if BR2_PACKAGE_LIBGLVND
select BR2_PACKAGE_MESA3D_NEEDS_X11
help
Enable GLX graphic acceleration (OpenGL + X11).
comment "OpenGL GLX support needs X11"
depends on !BR2_PACKAGE_XORG7
config BR2_PACKAGE_MESA3D_OPENGL_EGL
bool "OpenGL EGL"
depends on BR2_PACKAGE_MESA3D_GALLIUM_DRIVER
select BR2_PACKAGE_HAS_LIBEGL if !BR2_PACKAGE_LIBGLVND
select BR2_PACKAGE_LIBGLVND_DISPATCH_EGL if BR2_PACKAGE_LIBGLVND
select BR2_PACKAGE_HAS_LIBEGL_WAYLAND
select BR2_PACKAGE_MESA3D_GBM
help
Use the Khronos EGL APIs. EGL is a window manager for OpenGL
applications similar to GLX, for X, and WGL, for Windows.
config BR2_PACKAGE_MESA3D_OPENGL_ES
bool "OpenGL ES"
select BR2_PACKAGE_HAS_LIBGLES if !BR2_PACKAGE_LIBGLVND
select BR2_PACKAGE_LIBGLVND_DISPATCH_GLES if BR2_PACKAGE_LIBGLVND
help
Use the Khronos OpenGL ES APIs. This is commonly used on
embedded systems and represents a subset of the OpenGL API.
endif # BR2_PACKAGE_MESA3D_DRIVER
config BR2_PACKAGE_PROVIDES_LIBGBM
default "mesa3d" if BR2_PACKAGE_MESA3D_GBM
config BR2_PACKAGE_PROVIDES_LIBGL
default "mesa3d" if BR2_PACKAGE_MESA3D_OPENGL_GLX && !BR2_PACKAGE_LIBGLVND
config BR2_PACKAGE_PROVIDES_LIBEGL
default "mesa3d" if BR2_PACKAGE_MESA3D_OPENGL_EGL && !BR2_PACKAGE_LIBGLVND
config BR2_PACKAGE_PROVIDES_LIBGLES
default "mesa3d" if BR2_PACKAGE_MESA3D_OPENGL_ES && !BR2_PACKAGE_LIBGLVND
config BR2_PACKAGE_PROVIDES_LIBOPENCL
default "mesa3d" if BR2_PACKAGE_MESA3D_OPENCL
endif # BR2_PACKAGE_MESA3D
comment "mesa3d needs a toolchain w/ gcc >=8, C++, NPTL, dynamic library"
depends on !BR2_INSTALL_LIBSTDCPP || !BR2_TOOLCHAIN_HAS_THREADS_NPTL || \
BR2_STATIC_LIBS || !BR2_TOOLCHAIN_GCC_AT_LEAST_8
depends on BR2_TOOLCHAIN_HAS_SYNC_1