git: efb0c89e59bd - main - graphics/mesa-dri: Convert gallium and vulkan driver to port options

From: Emmanuel Vadot <manu_at_FreeBSD.org>
Date: Mon, 01 Jul 2024 08:18:34 UTC
The branch main has been updated by manu:

URL: https://cgit.FreeBSD.org/ports/commit/?id=efb0c89e59bd2768d97c23ad1efe9c37e33b11fb

commit efb0c89e59bd2768d97c23ad1efe9c37e33b11fb
Author:     Emmanuel Vadot <manu@FreeBSD.org>
AuthorDate: 2024-06-27 06:27:30 +0000
Commit:     Emmanuel Vadot <manu@FreeBSD.org>
CommitDate: 2024-07-01 08:17:57 +0000

    graphics/mesa-dri: Convert gallium and vulkan driver to port options
    
    Instead of selecting the one by arches add options.
    This will help users who doesn't want some features.
    The default are still the same based on the specific arch.
    No functional changes intended.
    
    Differential Revision:  https://reviews.freebsd.org/D45754
    Inspired by:            graphics/mesa-devel
    Reviewed by:            bapt
    Sponsored by:           Beckhoff Automation GmbH & Co. KG
---
 graphics/mesa-dri/Makefile  | 92 +++++++++++++++++++++++++--------------------
 graphics/mesa-dri/pkg-plist | 38 +++++++++----------
 2 files changed, 71 insertions(+), 59 deletions(-)

diff --git a/graphics/mesa-dri/Makefile b/graphics/mesa-dri/Makefile
index b0f9f3699612..6d62a6bd913e 100644
--- a/graphics/mesa-dri/Makefile
+++ b/graphics/mesa-dri/Makefile
@@ -1,6 +1,6 @@
 PORTNAME=	mesa-dri
 PORTVERSION=	${MESAVERSION}
-PORTREVISION=	1
+PORTREVISION=	2
 CATEGORIES=	graphics
 
 COMMENT=	OpenGL hardware acceleration drivers for DRI2+
@@ -10,14 +10,8 @@ LIB_DEPENDS+=	libglapi.so:graphics/mesa-libs
 
 USES+=		llvm:lib,noexport
 
-OPTIONS_GROUP=			PLATFORM
-OPTIONS_GROUP_PLATFORM=		X11 WAYLAND
-X11_DESC=			Enable X11 support for GBM/EGL
-WAYLAND_DESC=			Enable Wayland support for GBM/EGL and Vulkan
-WAYLAND_BUILD_DEPENDS=		wayland-protocols>=1.8:graphics/wayland-protocols
-WAYLAND_LIB_DEPENDS=		libwayland-client.so:graphics/wayland
-
 OPTIONS_DEFINE=		ZSTD
+OPTIONS_GROUP=		GALLIUM PLATFORM VULKAN
 OPTIONS_DEFAULT=	WAYLAND X11 ZSTD
 OPTIONS_SUB=		yes
 
@@ -25,32 +19,52 @@ ZSTD_DESC=		Use ZSTD for shader cache
 ZSTD_LIB_DEPENDS=	libzstd.so:archivers/zstd
 ZSTD_MESON_ENABLED=	zstd
 
+OPTIONS_GROUP_PLATFORM=	X11 WAYLAND
+X11_DESC=		Enable X11 support for GBM/EGL
+WAYLAND_DESC=		Enable Wayland support for GBM/EGL and Vulkan
+WAYLAND_BUILD_DEPENDS=	wayland-protocols>=1.8:graphics/wayland-protocols
+WAYLAND_LIB_DEPENDS=	libwayland-client.so:graphics/wayland
+
+OPTIONS_GROUP_GALLIUM=	crocus i915 iris panfrost r300 r600 radeonsi svga swrast zink
+GALLIUM_DESC=		Unified OpenGL drivers
+crocus_DESC=		Intel GPU Gen4 (Broadwater) to Gen7 (Haswell)
+i915_DESC=		Intel GPU Gen3 (Grantsdale to Pineview)
+iris_DESC=		Intel GPU Gen8 (Broadwell) and newer
+panfrost_DESC=		ARM Midgard and Bifrost
+r300_DESC=		AMD/ATI R300, R400 and R500
+r600_DESC=		AMD/ATI R600, R700, Evergreen, Northern Islands
+radeonsi_DESC=		AMD/ATI Southern Islands and newer
+svga_DESC=		VMWare Virtual GPU
+swrast_DESC=		Software Rasterizer
+zink_DESC=		OpenGL on top of Khronos’ Vulkan API
+
+OPTIONS_EXCLUDE+=	${ARCH:Marmv7:C/.+/crocus i915 iris panfrost r300 r600 radeonsi svga zink/}
+OPTIONS_EXCLUDE+=	${ARCH:Naarch64:C/.+/panfrost/}
+OPTIONS_EXCLUDE+=	${ARCH:Namd64:Ni386:Nx86_64:C/.+/crocus i915 iris svga/}
+MESON_ARGS+=		-Dgallium-drivers=${GALLIUM_DRIVERS:ts,}
+. for _gd in ${OPTIONS_GROUP_GALLIUM}
+OPTIONS_DEFAULT+=	${_gd}
+${_gd}_VARS+=		GALLIUM_DRIVERS+=${_gd}
+. endfor
+
+OPTIONS_GROUP_VULKAN=	anv radv swrast_vk
+VULKAN_DESC=		Vulkan drivers
+anv_DESC=		Intel GPU Gen9 and newer Vulkan support
+radv_DESC=		AMD/ATI Southern Islands and newer Vulkan support
+radv_BUILD_DEPENDS=	glslangValidator:graphics/glslang
+swrast_vk_DESC=		Software Rasterizer Vulkan support
+
+OPTIONS_EXCLUDE+=	${ARCH:Marmv7:C/.+/anv radv/}
+OPTIONS_EXCLUDE+=	${ARCH:Namd64:Ni386:Nx86_64:C/.+/anv/}
+MESON_ARGS+=		-Dvulkan-drivers=${VULKAN_DRIVERS:ts,}
+. for _vd in ${OPTIONS_GROUP_VULKAN}
+OPTIONS_DEFAULT+=	${_vd}
+${_vd}_VARS+=		VULKAN_DRIVERS+=${_vd:S/anv/intel/:S/radv/amd/:S/swrast_vk/swrast/}
+. endfor
+
 .include <bsd.port.options.mk>
 .include "${.CURDIR:H:H}/graphics/mesa-dri/Makefile.common"
 
-ALL_GALLIUM_DRIVERS=	CROCUS I915 IRIS PANFROST R300 R600 RADEONSI SVGA \
-			SWRAST ZINK
-ALL_VULKAN_DRIVERS=	INTEL AMD SWRAST
-
-GALLIUM_DRIVERS+=	SWRAST \
-			ZINK
-VULKAN_DRIVERS+=	SWRAST	# lavapipe
-
-.if ${ARCH} == aarch64
-GALLIUM_DRIVERS+=	PANFROST
-.endif
-
-.if ${ARCH} == aarch64 || ${ARCH} == amd64 || ${ARCH} == i386 \
- || ${ARCH:Mpowerpc*} || ${ARCH} == riscv64
-GALLIUM_DRIVERS+=	R300 R600 RADEONSI
-VULKAN_DRIVERS+=	AMD
-BUILD_DEPENDS+=		glslangValidator:graphics/glslang
-.endif
-.if ${ARCH} == amd64 || ${ARCH} == i386
-GALLIUM_DRIVERS+=	CROCUS I915 IRIS SVGA
-VULKAN_DRIVERS+=	INTEL
-.endif
-
 LDFLAGS_i386=		-Wl,-znotext
 
 .if ${PORT_OPTIONS:MX11}
@@ -64,9 +78,7 @@ MESON_ARGS+=		-Dxlib-lease=disabled
 MESA_PLATFORMS+=	wayland
 .endif
 
-MESON_ARGS+=	-Dgallium-drivers="${GALLIUM_DRIVERS:ts,:tl}" \
-		-Dvulkan-drivers="${VULKAN_DRIVERS:ts,:tl}" \
-		-Dplatforms="${MESA_PLATFORMS:ts,:tl}"
+MESON_ARGS+=	-Dplatforms="${MESA_PLATFORMS:ts,:tl}"
 
 # Vulkan Video extensions (keep in sync with mesa-gallium-va)
 MESON_ARGS+=	-Dvideo-codecs="vc1dec,h264dec,h264enc,h265dec,h265enc,av1dec,av1enc,vp9dec"
@@ -85,20 +97,20 @@ MESON_ARGS+=	-Dandroid-libbacktrace=disabled \
 		-Dosmesa=false \
 		-Dvalgrind=disabled
 
-.for _gd in ${ALL_GALLIUM_DRIVERS}
+.for _gd in ${OPTIONS_GROUP_GALLIUM}
 . if defined(GALLIUM_DRIVERS) && ${GALLIUM_DRIVERS:M${_gd}}
-PLIST_SUB+=	${_gd}_GDRIVER=""
+PLIST_SUB+=	${_gd}=""
 . else
-PLIST_SUB+=	${_gd}_GDRIVER="@comment "
+PLIST_SUB+=	${_gd}="@comment "
 . endif
 .endfor
 
 PLIST_SUB += ARCH=${ARCH:S/amd/x86_/}
-.for _vd in ${ALL_VULKAN_DRIVERS}
+.for _vd in ${OPTIONS_GROUP_VULKAN}
 . if defined(VULKAN_DRIVERS) && ${VULKAN_DRIVERS:M${_vd}}
-PLIST_SUB+=	${_vd}_VDRIVER=""
+PLIST_SUB+=	${_vd}=""
 . else
-PLIST_SUB+=	${_vd}_VDRIVER="@comment "
+PLIST_SUB+=	${_vd}="@comment "
 . endif
 .endfor
 
diff --git a/graphics/mesa-dri/pkg-plist b/graphics/mesa-dri/pkg-plist
index 1dbaa3607221..5c06f06c0b75 100644
--- a/graphics/mesa-dri/pkg-plist
+++ b/graphics/mesa-dri/pkg-plist
@@ -21,18 +21,18 @@ include/GL/internal/dri_interface.h
 @comment include/GLES3/gl3platform.h
 @comment include/KHR/khrplatform.h
 @comment include/gbm.h
-%%CROCUS_GDRIVER%%lib/dri/crocus_dri.so
-%%I915_GDRIVER%%lib/dri/i915_dri.so
-%%IRIS_GDRIVER%%lib/dri/iris_dri.so
-%%PANFROST_GDRIVER%%lib/dri/panfrost_dri.so
-%%PANFROST_GDRIVER%%lib/dri/rockchip_dri.so
-%%SWRAST_GDRIVER%%lib/dri/kms_swrast_dri.so
-%%R300_GDRIVER%%lib/dri/r300_dri.so
-%%R600_GDRIVER%%lib/dri/r600_dri.so
-%%RADEONSI_GDRIVER%%lib/dri/radeonsi_dri.so
-%%SWRAST_GDRIVER%%lib/dri/swrast_dri.so
-%%SVGA_GDRIVER%%lib/dri/vmwgfx_dri.so
-%%ZINK_GDRIVER%%lib/dri/zink_dri.so
+%%crocus%%lib/dri/crocus_dri.so
+%%i915%%lib/dri/i915_dri.so
+%%iris%%lib/dri/iris_dri.so
+%%panfrost%%lib/dri/panfrost_dri.so
+%%panfrost%%lib/dri/rockchip_dri.so
+%%r300%%lib/dri/r300_dri.so
+%%r600%%lib/dri/r600_dri.so
+%%radeonsi%%lib/dri/radeonsi_dri.so
+%%svga%%lib/dri/vmwgfx_dri.so
+%%swrast%%lib/dri/kms_swrast_dri.so
+%%swrast%%lib/dri/swrast_dri.so
+%%zink%%lib/dri/zink_dri.so
 @comment lib/libEGL.so
 @comment lib/libEGL.so.1
 @comment lib/libEGL.so.1.0.0
@@ -48,17 +48,17 @@ include/GL/internal/dri_interface.h
 @comment lib/libGLESv2.so
 @comment lib/libGLESv2.so.2
 @comment lib/libGLESv2.so.2.0.0
-%%INTEL_VDRIVER%%lib/libvulkan_intel.so
-%%AMD_VDRIVER%%lib/libvulkan_radeon.so
-%%SWRAST_VDRIVER%%lib/libvulkan_lvp.so
+%%anv%%lib/libvulkan_intel.so
+%%radv%%lib/libvulkan_radeon.so
+%%swrast_vk%%lib/libvulkan_lvp.so
 libdata/pkgconfig/dri.pc
 @comment libdata/pkgconfig/egl.pc
 @comment libdata/pkgconfig/gbm.pc
 @comment libdata/pkgconfig/glesv1_cm.pc
 @comment libdata/pkgconfig/glesv2.pc
 share/drirc.d/00-mesa-defaults.conf
-%%AMD_VDRIVER%%share/drirc.d/00-radv-defaults.conf
+%%radv%%share/drirc.d/00-radv-defaults.conf
 share/drirc.d/01-freebsd.conf
-%%INTEL_VDRIVER%%share/vulkan/icd.d/intel_icd.%%ARCH%%.json
-%%AMD_VDRIVER%%share/vulkan/icd.d/radeon_icd.%%ARCH%%.json
-%%SWRAST_VDRIVER%%share/vulkan/icd.d/lvp_icd.%%ARCH%%.json
+%%anv%%share/vulkan/icd.d/intel_icd.%%ARCH%%.json
+%%radv%%share/vulkan/icd.d/radeon_icd.%%ARCH%%.json
+%%swrast_vk%%share/vulkan/icd.d/lvp_icd.%%ARCH%%.json