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