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_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
	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
	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_EXPAT
	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_EXPAT
	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_EXPAT
	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_EXPAT
	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_EXPAT
	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_EXPAT
	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
