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
	select BR2_PACKAGE_LIBDRM
	select BR2_PACKAGE_EXPAT
	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_4_8
	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
	select BR2_PACKAGE_LLVM

comment "llvm support needs a toolchain w/ wchar, threads, C++, gcc >= 4.8, dynamic library"
	depends on BR2_PACKAGE_LLVM_ARCH_SUPPORTS
	depends on !BR2_TOOLCHAIN_HAS_THREADS || !BR2_INSTALL_LIBSTDCPP || \
		!BR2_TOOLCHAIN_GCC_AT_LEAST_4_8 \
		|| BR2_STATIC_LIBS || !BR2_USE_WCHAR

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, dri or vulkan driver selection
config BR2_PACKAGE_MESA3D_GALLIUM_DRIVER
	bool
	select BR2_PACKAGE_MESA3D_DRIVER

config BR2_PACKAGE_MESA3D_DRI_DRIVER
	bool
	select BR2_PACKAGE_MESA3D_DRIVER
	select BR2_PACKAGE_MESA3D_GBM if \
		!BR2_PACKAGE_MESA3D_OPENGL_GLX && \
		!BR2_PACKAGE_MESA3D_OPENGL_EGL && \
		!BR2_PACKAGE_MESA3D_OSMESA_CLASSIC
	select BR2_PACKAGE_XLIB_LIBXSHMFENCE if \
		(BR2_PACKAGE_XORG7 && BR2_TOOLCHAIN_HAS_SYNC_4)

config BR2_PACKAGE_MESA3D_VULKAN_DRIVER
	bool
	select BR2_PACKAGE_MESA3D_DRIVER

config BR2_PACKAGE_MESA3D_DRIVER
	bool

# 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

# Quote from mesa3d meson.build: "kmsro driver requires one or more
# renderonly drivers (vc4, etnaviv, freedreno)".
config BR2_PACKAGE_MESA3D_GALLIUM_KMSRO
	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_ETNAVIV
	bool "Gallium Etnaviv driver"
	select BR2_PACKAGE_MESA3D_GALLIUM_DRIVER
	select BR2_PACKAGE_LIBDRM_ETNAVIV
	select BR2_PACKAGE_MESA3D_GALLIUM_KMSRO
	select BR2_PACKAGE_MESA3D_OPENGL_EGL
	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_MESA3D_GALLIUM_KMSRO
	help
	  Mesa driver for Freedreno GPUs.

config BR2_PACKAGE_MESA3D_GALLIUM_DRIVER_I915
	bool "Gallium i915 driver"
	depends on BR2_i386 || BR2_x86_64
	depends on !BR2_PACKAGE_MESA3D_DRI_DRIVER_I915
	select BR2_PACKAGE_MESA3D_GALLIUM_DRIVER
	select BR2_PACKAGE_LIBDRM_INTEL
	help
	  Support for i915-based Intel GPUs.

comment "Gallium i915: Only one i915 provider can be built"
	depends on BR2_i386 || BR2_x86_64
	depends on BR2_PACKAGE_MESA3D_DRI_DRIVER_I915

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_KMSRO
	bool "Gallium KMSRO driver"
	depends on BR2_PACKAGE_MESA3D_GALLIUM_KMSRO
	help
	  Support various sorts of KMS displays with the
	  renderonly layer used to attach a GPU.

comment "Gallium KMSRO needs one or more renderonly drivers"
	depends on !BR2_PACKAGE_MESA3D_GALLIUM_KMSRO

config BR2_PACKAGE_MESA3D_GALLIUM_DRIVER_LIMA
	bool "Gallium lima driver"
	select BR2_PACKAGE_MESA3D_GALLIUM_DRIVER
	select BR2_PACKAGE_MESA3D_GALLIUM_KMSRO
	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"
	select BR2_PACKAGE_MESA3D_GALLIUM_DRIVER
	select BR2_PACKAGE_MESA3D_GALLIUM_KMSRO
	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
	depends on BR2_TOOLCHAIN_USES_UCLIBC || BR2_TOOLCHAIN_USES_GLIBC # elfutils
	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.

# Radeon SI needs libelf
# musl is not currently compatible with elfutils
comment "Radeon SI driver needs a uClibc or glibc toolchain"
	depends on BR2_USE_MMU
	depends on BR2_PACKAGE_MESA3D_LLVM
	depends on !(BR2_TOOLCHAIN_USES_UCLIBC || BR2_TOOLCHAIN_USES_GLIBC)

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"
	depends on !BR2_PACKAGE_MESA3D_DRI_DRIVER_SWRAST
	select BR2_PACKAGE_MESA3D_GALLIUM_DRIVER
	help
	  This is a software opengl implementation using the Gallium3D
	  infrastructure.

comment "Gallium swrast: Only one swrast provider can be built"
	depends on BR2_PACKAGE_MESA3D_DRI_DRIVER_SWRAST

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
	select BR2_PACKAGE_MESA3D_GALLIUM_DRIVER
	select BR2_PACKAGE_MESA3D_GALLIUM_KMSRO
	select BR2_PACKAGE_LIBDRM_VC4
	select BR2_PACKAGE_MESA3D_OPENGL_EGL
	help
	  Driver for Broadcom VC6 (rpi4) GPUs (needs kmsro and 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_aarch64
	select BR2_PACKAGE_MESA3D_GALLIUM_DRIVER
	select BR2_PACKAGE_MESA3D_GALLIUM_KMSRO
	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_R300 \
		|| 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 r300, r600, radeonsi or nouveau"
	depends on !BR2_PACKAGE_XORG7 || \
		!(BR2_PACKAGE_MESA3D_GALLIUM_DRIVER_NOUVEAU \
		|| BR2_PACKAGE_MESA3D_GALLIUM_DRIVER_R300 \
		|| BR2_PACKAGE_MESA3D_GALLIUM_DRIVER_R600 \
		|| BR2_PACKAGE_MESA3D_GALLIUM_DRIVER_RADEONSI)

config BR2_PACKAGE_MESA3D_XVMC
	bool "Gallium XvMC state tracker"
	depends on BR2_i386 || BR2_x86_64
	depends on BR2_PACKAGE_XORG7
	depends on BR2_PACKAGE_MESA3D_GALLIUM_DRIVER_NOUVEAU \
		|| BR2_PACKAGE_MESA3D_GALLIUM_DRIVER_R600
	select BR2_PACKAGE_MESA3D_NEEDS_X11
	select BR2_PACKAGE_XLIB_LIBXV
	select BR2_PACKAGE_XLIB_LIBXVMC
	help
	  XvMC state tracker (needs r600 or nouveau gallium drivers).

comment "Gallium XvMC state tracker needs X.org and gallium drivers r600 or nouveau"
	depends on BR2_i386 || BR2_x86_64
	depends on !BR2_PACKAGE_XORG7 || \
		!(BR2_PACKAGE_MESA3D_GALLIUM_DRIVER_NOUVEAU \
		|| BR2_PACKAGE_MESA3D_GALLIUM_DRIVER_R600)

comment "DRI drivers"

config BR2_PACKAGE_MESA3D_DRI_DRIVER_SWRAST
	bool "DRI swrast driver"
	select BR2_PACKAGE_MESA3D_DRI_DRIVER
	help
	  This is a software opengl implementation using the DRI
	  infrastructure.

config BR2_PACKAGE_MESA3D_DRI_DRIVER_I915
	bool "DRI i915 driver"
	depends on BR2_i386 || BR2_x86_64
	select BR2_PACKAGE_MESA3D_DRI_DRIVER
	select BR2_PACKAGE_LIBDRM_INTEL
	help
	  Support for i915-based Intel GPUs.

config BR2_PACKAGE_MESA3D_DRI_DRIVER_I965
	bool "DRI i965 driver"
	depends on BR2_i386 || BR2_x86_64
	depends on BR2_TOOLCHAIN_HEADERS_AT_LEAST_3_17 # memfd.h
	select BR2_PACKAGE_MESA3D_DRI_DRIVER
	select BR2_PACKAGE_LIBDRM_INTEL
	help
	  Support for i965-based Intel GPUs.

comment "DRI i965 driver needs a toolchain w/ headers >= 3.17"
	depends on BR2_i386 || BR2_x86_64
	depends on !BR2_TOOLCHAIN_HEADERS_AT_LEAST_3_17

config BR2_PACKAGE_MESA3D_DRI_DRIVER_NOUVEAU
	bool "DRI nouveau driver"
	select BR2_PACKAGE_MESA3D_DRI_DRIVER
	select BR2_PACKAGE_LIBDRM_NOUVEAU
	help
	  Support for Nvidia-based GPUs.

config BR2_PACKAGE_MESA3D_DRI_DRIVER_RADEON
	bool "DRI radeon r100 driver"
	depends on BR2_i386 || BR2_x86_64
	# libdrm'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 i386 and x86_64.
	select BR2_PACKAGE_MESA3D_DRI_DRIVER
	select BR2_PACKAGE_LIBDRM_RADEON
	help
	  Legacy Radeon driver for R100 series GPUs.

comment "Vulkan drivers"

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 # libxshmfence
	depends on BR2_TOOLCHAIN_HEADERS_AT_LEAST_3_17 # memfd.h
	depends on BR2_TOOLCHAIN_USES_GLIBC # ifunc, static_assert
	depends on BR2_PACKAGE_XORG7 # xorgproto
	select BR2_PACKAGE_MESA3D_VULKAN_DRIVER
	select BR2_PACKAGE_XORGPROTO
	select BR2_PACKAGE_XLIB_LIBXSHMFENCE
	help
	  Vulkan driver for Intel hardware from Ivy Bridge onward.

comment "intel vulkan depends on X.org and needs a glibc toolchain w/ headers >= 3.17"
	depends on BR2_i386 || BR2_x86_64
	depends on BR2_TOOLCHAIN_HAS_SYNC_4
	depends on !BR2_TOOLCHAIN_HEADERS_AT_LEAST_3_17 || \
		!BR2_TOOLCHAIN_USES_GLIBC || !BR2_PACKAGE_XORG7

comment "Off-screen Rendering"

config BR2_PACKAGE_MESA3D_OSMESA_CLASSIC
	bool "OSMesa (classic) library"
	help
	  The OSMesa classic API provides functions for
	  making off-screen renderings.

if BR2_PACKAGE_MESA3D_DRIVER

comment "OpenGL API Support"

config BR2_PACKAGE_MESA3D_GBM
	bool "gbm"
	depends on BR2_PACKAGE_MESA3D_DRI_DRIVER \
		|| (BR2_PACKAGE_MESA3D_GALLIUM_DRIVER && BR2_PACKAGE_MESA3D_OPENGL_EGL)
	help
	  Enable Generic Buffer Management (gbm)

comment "gbm support needs a dri driver or a gallium driver w/ EGL support."
	depends on !BR2_PACKAGE_MESA3D_DRI_DRIVER \
		&& !(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
	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"
	select BR2_PACKAGE_HAS_LIBEGL
	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
	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_LIBGL
	default "mesa3d" if BR2_PACKAGE_MESA3D_OPENGL_GLX

config BR2_PACKAGE_PROVIDES_LIBEGL
	default "mesa3d" if BR2_PACKAGE_MESA3D_OPENGL_EGL

config BR2_PACKAGE_PROVIDES_LIBGLES
	default "mesa3d" if BR2_PACKAGE_MESA3D_OPENGL_ES

config BR2_PACKAGE_PROVIDES_LIBOPENCL
	default "mesa3d" if BR2_PACKAGE_MESA3D_OPENCL

endif # BR2_PACKAGE_MESA3D

comment "mesa3d needs a toolchain w/ C++, NPTL, dynamic library"
	depends on !BR2_INSTALL_LIBSTDCPP || !BR2_TOOLCHAIN_HAS_THREADS_NPTL || \
		BR2_STATIC_LIBS
	depends on BR2_TOOLCHAIN_HAS_SYNC_1
