1PORTNAME=	mesa-dri
2PORTVERSION=	${MESAVERSION}
3PORTREVISION=	1
4CATEGORIES=	graphics
5
6COMMENT=	OpenGL hardware acceleration drivers for DRI2+
7WWW=		https://www.mesa3d.org/
8
9BUILD_DEPENDS+=	${PYTHON_PKGNAMEPREFIX}ply>0:devel/py-ply@${PY_FLAVOR}
10RUN_DEPENDS+=	gcc14:lang/gcc14
11
12LIB_DEPENDS+=	libglapi.so:graphics/mesa-libs
13
14USES+=		llvm:lib,noexport
15
16OPTIONS_DEFINE=		ZSTD
17OPTIONS_GROUP=		GALLIUM PLATFORM VULKAN
18OPTIONS_DEFAULT=	WAYLAND X11 ZSTD
19OPTIONS_SUB=		yes
20
21ZSTD_DESC=		Use ZSTD for shader cache
22ZSTD_LIB_DEPENDS=	libzstd.so:archivers/zstd
23ZSTD_MESON_ENABLED=	zstd
24
25OPTIONS_GROUP_PLATFORM=	X11 WAYLAND
26X11_DESC=		Enable X11 support for GBM/EGL
27WAYLAND_DESC=		Enable Wayland support for GBM/EGL and Vulkan
28WAYLAND_BUILD_DEPENDS=	wayland-protocols>=1.8:graphics/wayland-protocols
29WAYLAND_LIB_DEPENDS=	libwayland-client.so:graphics/wayland
30
31OPTIONS_GROUP_GALLIUM=	crocus i915 iris panfrost r300 r600 radeonsi svga swrast zink
32GALLIUM_DESC=		Unified OpenGL drivers
33crocus_DESC=		Intel GPU Gen4 (Broadwater) to Gen7 (Haswell)
34i915_DESC=		Intel GPU Gen3 (Grantsdale to Pineview)
35iris_DESC=		Intel GPU Gen8 (Broadwell) and newer
36iris_BUILD_DEPENDS=	libclc-${LLVM_PORT:T}>0:devel/libclc@${LLVM_PORT:T} \
37			spirv-tools>0:graphics/spirv-tools \
38			spirv-llvm-translator-${LLVM_PORT:T}>0:devel/spirv-llvm-translator@${LLVM_PORT:T}
39iris_RUN_DEPENDS=	spirv-tools>0:graphics/spirv-tools \
40			spirv-llvm-translator-${LLVM_PORT:T}>0:devel/spirv-llvm-translator@${LLVM_PORT:T}
41iris_CONFIGURE_ENV=	PKG_CONFIG_PATH="${LLVM_PREFIX}/libdata/pkgconfig"
42iris_IMPLIES=		SPIRV
43panfrost_DESC=		ARM Midgard and Bifrost
44r300_DESC=		AMD/ATI R300, R400 and R500
45r600_DESC=		AMD/ATI R600, R700, Evergreen, Northern Islands
46radeonsi_DESC=		AMD/ATI Southern Islands and newer
47svga_DESC=		VMWare Virtual GPU
48swrast_DESC=		Software Rasterizer
49zink_DESC=		OpenGL on top of KhronosVulkan API
50
51OPTIONS_EXCLUDE+=	${ARCH:Marmv7:C/.+/crocus i915 iris panfrost r300 r600 radeonsi svga zink/}
52OPTIONS_EXCLUDE+=	${ARCH:Naarch64:C/.+/panfrost/}
53OPTIONS_EXCLUDE+=	${ARCH:Namd64:Ni386:Nx86_64:C/.+/crocus i915 iris svga/}
54MESON_ARGS+=		-Dgallium-drivers=${GALLIUM_DRIVERS:ts,}
55. for _gd in ${OPTIONS_GROUP_GALLIUM}
56OPTIONS_DEFAULT+=	${_gd}
57${_gd}_VARS+=		GALLIUM_DRIVERS+=${_gd}
58. endfor
59
60OPTIONS_GROUP_VULKAN=	anv radv swrast_vk
61VULKAN_DESC=		Vulkan drivers
62anv_DESC=		Intel GPU Gen9 and newer Vulkan support
63anv_BUILD_DEPENDS=	glslangValidator:graphics/glslang \
64			libclc-${LLVM_PORT:T}>0:devel/libclc@${LLVM_PORT:T} \
65			spirv-tools>0:graphics/spirv-tools \
66			spirv-llvm-translator-${LLVM_PORT:T}>0:devel/spirv-llvm-translator@${LLVM_PORT:T}
67anv_RUN_DEPENDS=	spirv-tools>0:graphics/spirv-tools \
68			spirv-llvm-translator-${LLVM_PORT:T}>0:devel/spirv-llvm-translator@${LLVM_PORT:T}
69anv_CONFIGURE_ENV=	PKG_CONFIG_PATH="${LLVM_PREFIX}/libdata/pkgconfig"
70radv_DESC=		AMD/ATI Southern Islands and newer Vulkan support
71radv_BUILD_DEPENDS=	glslangValidator:graphics/glslang
72swrast_vk_DESC=		Software Rasterizer Vulkan support
73
74OPTIONS_EXCLUDE+=	${ARCH:Marmv7:C/.+/anv radv/}
75OPTIONS_EXCLUDE+=	${ARCH:Namd64:Ni386:Nx86_64:C/.+/anv/}
76MESON_ARGS+=		-Dvulkan-drivers=${VULKAN_DRIVERS:ts,}
77. for _vd in ${OPTIONS_GROUP_VULKAN}
78OPTIONS_DEFAULT+=	${_vd}
79${_vd}_VARS+=		VULKAN_DRIVERS+=${_vd:S/anv/intel/:S/radv/amd/:S/swrast_vk/swrast/}
80. endfor
81
82.include <bsd.mport.options.mk>
83.include "${.CURDIR:H:H}/graphics/mesa-dri/Makefile.common"
84
85LDFLAGS_i386=		-Wl,-znotext
86
87.if ${PORT_OPTIONS:MX11}
88MESA_PLATFORMS+=	x11
89USE_XORG+=		xcb xorgproto xrandr x11 xdamage xext xfixes xshmfence xv
90.else
91MESON_ARGS+=		-Dxlib-lease=disabled
92.endif
93
94.if ${PORT_OPTIONS:MWAYLAND}
95MESA_PLATFORMS+=	wayland
96.endif
97
98MESON_ARGS+=	-Dplatforms="${MESA_PLATFORMS:ts,:tl}"
99
100# Vulkan Video extensions (keep in sync with mesa-gallium-va)
101MESON_ARGS+=	-Dvideo-codecs="vc1dec,h264dec,h264enc,h265dec,h265enc,av1dec,av1enc,vp9dec"
102
103# Disable some options
104MESON_ARGS+=	-Dandroid-libbacktrace=disabled \
105		-Dgallium-xa=disabled \
106		-Dgallium-vdpau=disabled \
107		-Dgallium-va=disabled \
108		-Dgles1=enabled \
109		-Dgles2=enabled \
110		-Dglvnd=disabled \
111		-Dglx=disabled \
112		-Degl=enabled \
113		-Dlmsensors=disabled \
114		-Dmicrosoft-clc=disabled \
115		-Dosmesa=false \
116		-Dvalgrind=disabled
117
118.if ${ARCH} != amd64
119MESON_ARGS+=	-Dintel-rt=disabled # https://gitlab.freedesktop.org/mesa/mesa/-/issues/10629
120.endif
121
122.for _gd in ${OPTIONS_GROUP_GALLIUM}
123. if defined(GALLIUM_DRIVERS) && ${GALLIUM_DRIVERS:M${_gd}}
124PLIST_SUB+=	${_gd}=""
125. else
126PLIST_SUB+=	${_gd}="@comment "
127. endif
128.endfor
129
130PLIST_SUB += ARCH=${ARCH:S/amd/x86_/}
131.for _vd in ${OPTIONS_GROUP_VULKAN}
132. if defined(VULKAN_DRIVERS) && ${VULKAN_DRIVERS:M${_vd}}
133PLIST_SUB+=	${_vd}=""
134. else
135PLIST_SUB+=	${_vd}="@comment "
136. endif
137.endfor
138
139post-install:
140	-${RM} -r ${FAKE_DESTDIR}/etc/OpenCL
141	${INSTALL_DATA} ${FILESDIR}/01-freebsd.conf \
142		${PREFIX}/share/drirc.d
143
144.include <bsd.port.post.mk>
145