# $Id$ PNAME="mesa" PVER="20.1.7" PBUILD="r1" PCAT="media-libs" # 1=enable mesa features # 0=disable mesa features ENABLE_VDPAU=0 ENABLE_VAAPI=0 ENABLE_XVMC=0 # 1=enable dev split packages # 0=disable dev split packages ENABLE_DEV_PACKAGES=1 SPLIT_PACKAGES="mesa" if [[ ${ENABLE_DEV_PACKAGES} = 1 ]] then SPLIT_PACKAGES+=" mesa-dev" fi SPLIT_PACKAGES+=" mesa-xa-tracker" # direct3d SPLIT_PACKAGES+=" libd3d" if [[ ${ENABLE_DEV_PACKAGES} = 1 ]] then SPLIT_PACKAGES+=" libd3d-dev" fi # dri SPLIT_PACKAGES+=" mesa-dri-i915" SPLIT_PACKAGES+=" mesa-dri-i965" SPLIT_PACKAGES+=" mesa-dri-nouveau" SPLIT_PACKAGES+=" mesa-dri-r100" SPLIT_PACKAGES+=" mesa-dri-r200" # gallium SPLIT_PACKAGES+=" mesa-dri-r300" SPLIT_PACKAGES+=" mesa-dri-r600" SPLIT_PACKAGES+=" mesa-dri-radeonsi" SPLIT_PACKAGES+=" mesa-dri-swrast" SPLIT_PACKAGES+=" mesa-dri-svga" SPLIT_PACKAGES+=" mesa-dri-virgl" SPLIT_PACKAGES+=" mesa-dri-iris" # vulkan SPLIT_PACKAGES+=" mesa-vulkan-radeon" if [[ ${ENABLE_DEV_PACKAGES} = 1 ]] then SPLIT_PACKAGES+=" mesa-vulkan-radeon-dev" fi SPLIT_PACKAGES+=" mesa-vulkan-intel" if [[ ${ENABLE_DEV_PACKAGES} = 1 ]] then SPLIT_PACKAGES+=" mesa-vulkan-intel-dev" fi # vdpau if [[ ${ENABLE_VDPAU} = 1 ]] then SPLIT_PACKAGES+=" mesa-vdpau-nouveau" SPLIT_PACKAGES+=" mesa-vdpau-r300" SPLIT_PACKAGES+=" mesa-vdpau-r600" SPLIT_PACKAGES+=" mesa-vdpau-radeonsi" fi # vaapi if [[ ${ENABLE_VAAPI} = 1 ]] then SPLIT_PACKAGES+=" mesa-vaapi-nouveau" SPLIT_PACKAGES+=" mesa-vaapi-r600" SPLIT_PACKAGES+=" mesa-vaapi-radeonsi" fi PCAT="media-libs" HOMEPAGE="http://mesa3d.sourceforge.net/" # hardcoded llvm version for libxatracker LLVM_PVER="10.0.0" MESA_DEPEND=">= dev-libs/expat-2.2 >= dev-libs/libffi-3.3 >= x11-libs/libX11-1.6 >= x11-libs/libXext-1.3 >= x11-libs/libXxf86vm-1.1 >= x11-libs/libXi-1.7 >= x11-libs/libXmu-1.1 >= x11-libs/libXrandr-1.5 >= x11-libs/libdrm-2.4.102 >= x11-libs/libICE-1 >= x11-libs/libglvnd-1.3 >= x11-libs/libxcb-1.14 >= x11-libs/libXfixes-5 >= x11-libs/libXdamage-1 >= x11-libs/libxshmfence-1.3 >= sys-libs/libstdc++-8.3 >= sys-fs/libudev-242 >= sys-libs/libelf-0.179" if [[ ${ENABLE_VDPAU} = 1 ]] then MESA_DEPEND="${MESA_DEPEND} >= x11-libs/libvdpau-1.1" fi if [[ ${ENABLE_VAAPI} = 1 ]] then MESA_DEPEND="${MESA_DEPEND} >= x11-libs/libva-1.8" fi if [[ ${ENABLE_XVMC} = 1 ]] then MESA_DEPEND="${MESA_DEPEND} >= x11-libs/libXvMC-1" fi # mesa-dev runtime deps MESA_DEV_DEPEND=">= dev-libs/expat-dev-2.2 >= dev-libs/libffi-dev-3.3 >= x11-libs/libX11-dev-1.6 >= x11-libs/libXext-dev-1.3 >= x11-libs/libXxf86vm-dev-1.1 >= x11-libs/libXi-dev-1.7 >= x11-libs/libXmu-dev-1.1 >= x11-libs/libXrandr-dev-1.5 >= x11-libs/libdrm-dev-2.4.102 >= x11-libs/libICE-dev-1 >= x11-libs/libglvnd-dev-1.3 >= x11-libs/libxcb-dev-1.14 >= x11-libs/libXfixes-dev-5 >= x11-libs/libXdamage-dev-1 >= x11-libs/libxshmfence-dev-1.3 >= sys-libs/libstdc++-dev-8.3 >= sys-fs/libudev-dev-242 >= sys-libs/libelf-dev-0.179" if [[ ${ENABLE_VDPAU} = 1 ]] then MESA_DEV_DEPEND="${MESA_DEV_DEPEND} >= x11-libs/libvdpau-dev-1.1" fi if [[ ${ENABLE_VAAPI} = 1 ]] then MESA_DEV_DEPEND="${MESA_DEV_DEPEND} >= x11-libs/libva-dev-1.8" fi if [[ ${ENABLE_XVMC} = 1 ]] then MESA_DEV_DEPEND="${MESA_DEV_DEPEND} >= x11-libs/libXvMC-dev-1" fi XA_TRACKER_DEPEND=">= sys-libs/llvm-libs-${LLVM_PVER}" SDEPEND="${MESA_DEPEND} ${XA_TRACKER_DEPEND} >= dev-util/pkgconfig-0.25 >= x11-libs/libXxf86vm-1.1 >= virtual/glproto >= virtual/xf86driproto >= virtual/dri2proto >= virtual/dri3proto >= virtual/presentproto >= virtual/xf86vidmodeproto >= dev-lang/python3-3.7 >= dev-python/python3-mako-1 >= sys-dev/llvm-${LLVM_PVER}" if [[ ${ENABLE_DEV_PACKAGES} = 1 ]] then SDEPEND="${SDEPEND} ${MESA_DEV_DEPEND}" fi sminclude multilib xorg mtools meson cleanutils msetfeature "!check" # must be set *after* the include of xorg! SRCFILE="${PNAME}-${PVER/_/-}.tar.xz" # libs SRCDIR SRCDIR="${BUILDDIR}/${PNAME}-${PVER/_/-}" SRC_URI=( ftp://ftp.freedesktop.org/pub/mesa/${PVER%_*}/${SRCFILE} ftp://ftp.freedesktop.org/pub/mesa/${SRCFILE} mirror://${PNAME}/${SRCFILE} ) UP2DATE="updatecmd ftp://ftp.freedesktop.org/pub/mesa/ | highesttarball xz" split_info_mesa() { DESCRIPTION="Mesa3D OpenGL graphics library." DEPEND="${MESA_DEPEND}" PROVIDE="virtual/opengl" } split_info_mesa-dev() { DESCRIPTION="Dev package for mesa" DEPEND="== media-libs/mesa-${PVER} ${MESA_DEV_DEPEND}" PROVIDE="virtual/opengl-dev" } split_info_mesa-xa-tracker() { DESCRIPTION="Mesa XA state tracker." DEPEND="== media-libs/mesa-${PVER} ${XA_TRACKER_DEPEND}" } split_info_libd3d() { DESCRIPTION="Mesa Direct3D9 state tracker." DEPEND="== media-libs/mesa-${PVER}" } split_info_mesa-dev() { DESCRIPTION="Dev package for libd3d" DEPEND="== media-libs/libd3d-${PVER}" } split_info_mesa-dri-i915() { DESCRIPTION="Mesa Intel i915 DRI driver." DEPEND="== ${PCAT}/mesa-${PVER}" } split_info_mesa-dri-i965() { DESCRIPTION="Mesa Intel i965 DRI driver." DEPEND="== ${PCAT}/mesa-${PVER}" } split_info_mesa-dri-r200() { DESCRIPTION="Mesa AMD Radeon r200 DRI driver." DEPEND="== ${PCAT}/mesa-${PVER}" } split_info_mesa-dri-r100() { DESCRIPTION="Mesa ATI Radeon generic DRI driver." DEPEND="== ${PCAT}/mesa-${PVER}" } split_info_mesa-dri-nouveau() { DESCRIPTION="Mesa Nvidia Nouveau DRI and Gallium driver." DEPEND="== ${PCAT}/mesa-${PVER} == ${PCAT}/mesa-xa-tracker-${PVER}" } split_info_mesa-dri-r300() { DESCRIPTION="Mesa Ati Radeon r300 DRI (Gallium) driver." DEPEND="== ${PCAT}/mesa-${PVER} == ${PCAT}/mesa-xa-tracker-${PVER}" } split_info_mesa-dri-r600() { DESCRIPTION="Mesa Ati Radeon r600 DRI (Gallium) driver." DEPEND="== ${PCAT}/mesa-${PVER} == ${PCAT}/mesa-xa-tracker-${PVER}" } split_info_mesa-dri-radeonsi() { DESCRIPTION="Mesa AMD Radeon radeonsi DRI (Gallium) driver." DEPEND="== ${PCAT}/mesa-${PVER} == ${PCAT}/mesa-xa-tracker-${PVER}" } split_info_mesa-dri-swrast() { DESCRIPTION="Mesa Software Raster DRI (Gallium) driver." DEPEND="== ${PCAT}/mesa-${PVER} == ${PCAT}/mesa-xa-tracker-${PVER}" } split_info_mesa-dri-svga() { DESCRIPTION="Mesa Vmware svga DRI (Gallium) driver." DEPEND="== ${PCAT}/mesa-${PVER} == ${PCAT}/mesa-xa-tracker-${PVER}" } split_info_mesa-dri-virgl() { DESCRIPTION="Mesa VirtualGL DRI (Gallium) driver." DEPEND="== ${PCAT}/mesa-${PVER} == ${PCAT}/mesa-xa-tracker-${PVER}" } split_info_mesa-dri-iris() { DESCRIPTION="Mesa Intel Iris DRI (Gallium) driver." DEPEND="== ${PCAT}/mesa-${PVER} == ${PCAT}/mesa-xa-tracker-${PVER}" } split_info_mesa-vulkan-radeon() { DESCRIPTION="Mesa AMD Radeon Vulkan driver." DEPEND="== ${PCAT}/mesa-${PVER} == ${PCAT}/mesa-xa-tracker-${PVER}" } split_info_mesa-vulkan-radeon-dev() { DESCRIPTION="Dev package for mesa-vulkan-radeon" DEPEND="== media-libs/mesa-vulkan-radeon-${PVER}" } split_info_mesa-vulkan-intel() { DESCRIPTION="Mesa Intel Vulkan driver." DEPEND="== ${PCAT}/mesa-${PVER} == ${PCAT}/mesa-xa-tracker-${PVER}" } split_info_mesa-vulkan-intel-dev() { DESCRIPTION="Dev package for mesa-intel-radeon" DEPEND="== media-libs/mesa-vulkan-intel-${PVER}" } split_info_mesa-vdpau-nouveau() { DESCRIPTION="Mesa NVIDIA Nouveau VDPAU driver." DEPEND="== ${PCAT}/mesa-${PVER}" } split_info_mesa-vdpau-r300() { DESCRIPTION="Mesa AMD Radeon r300 VDPAU driver." DEPEND="== ${PCAT}/mesa-${PVER}" } split_info_mesa-vdpau-r600() { DESCRIPTION="Mesa AMD Radeon r600 VDPAU driver." DEPEND="== ${PCAT}/mesa-${PVER}" } split_info_mesa-vdpau-radeonsi() { DESCRIPTION="Mesa AMD Radeon radeonsi VDPAU driver." DEPEND="== ${PCAT}/mesa-${PVER}" } split_info_mesa-vaapi-nouveau() { DESCRIPTION="Mesa NVIDIA Nouveau VAAPI driver." DEPEND="== ${PCAT}/mesa-${PVER}" } split_info_mesa-vaapi-r600() { DESCRIPTION="Mesa AMD Radeon r600 VAAPI driver." DEPEND="== ${PCAT}/mesa-${PVER}" } split_info_mesa-vaapi-radeonsi() { DESCRIPTION="Mesa AMD Radeon radeonsi VAAPI driver." DEPEND="== ${PCAT}/mesa-${PVER}" } install_dri_driver() { local drivers="$@" local dri_drivers local i for i in ${drivers} do case ${driver} in *) dri_drivers="${i}_dri.so" ;; esac done DESTDIR=${BINDIR} mninja install || die zapmost ${BINDIR} \ $(for i in ${dri_drivers}; do echo "usr/$(mlibdir)/dri/${i}"; done) \ $([[ $(mlibdir) != lib ]] && for i in ${dri_drivers}; do echo "usr/lib/dri/${i}"; done) \ || die } install_vulkan_driver() { local driver="$1" local vulkan_drivers case ${driver} in *) vulkan_drivers="libvulkan_${driver}.so" ;; esac DESTDIR=${BINDIR} mninja install || die zapmost ${BINDIR} \ $(for i in ${vulkan_drivers}; do echo "usr/$(mlibdir)/${i}"; done) \ $([[ $(mlibdir) != lib ]] && for i in ${vulkan_drivers}; do echo "usr/lib/${i}"; done) \ usr/include/vulkan/vulkan_${driver}.h \ usr/share/vulkan/icd.d/${driver}_icd\*.json \ || die if [[ ${ENABLE_DEV_PACKAGES} = 1 ]] then mdelete -r /usr/include || die fi } install_vulkan_driver_dev() { local driver="$1" local vulkan_drivers DESTDIR=${BINDIR} mninja install || die zapmost ${BINDIR} \ usr/include/vulkan/vulkan_${driver}.h \ || die } install_vdpau_driver() { local driver="$1" DESTDIR=${BINDIR} mninja install || die zapmost ${BINDIR} usr/$(mlibdir)/vdpau/libvdpau_${driver}.* || die if [[ $(mlibdir) != lib ]] then zapmost ${BINDIR} usr/lib/vdpau/libvdpau_${driver}.* || die fi } install_vaapi_driver() { local driver="$1" local vaapi_drivers case ${driver} in *) vaapi_drivers="${driver}_drv_video.so" ;; esac DESTDIR=${BINDIR} mninja install || die zapmost ${BINDIR} \ $(for i in ${vaapi_drivers}; do echo "usr/$(mlibdir)/dri/${i}"; done) \ $([[ $(mlibdir) != lib ]] && for i in ${vaapi_drivers}; do echo "usr/lib/dri/${i}"; done) \ || die } src_prepare() { munpack ${SRCFILE} || die # get rid of glut includes all-abis rm -f include/GL/glut*h || die } src_compile() { local myconf MESA_DRI_DRIVERS="i915,i965,r100,r200,nouveau" MESA_GALLIUM_DRIVERS+="swrast,nouveau,r300,r600,radeonsi,svga,virgl,iris" MESA_VULKAN_DRIVERS+="amd,intel" if [[ ${ENABLE_VDPAU} = 1 ]] then myopts=" $(meson_bool_true gallium-vdpau)" else myopts=" $(meson_bool_false gallium-vdpau)" fi if [[ ${ENABLE_VAAPI} = 1 ]] then myopts=" $(meson_bool_true gallium-va)" else myopts=" $(meson_bool_false gallium-va)" fi if [[ ${ENABLE_XVMC} = 1 ]] then myopts=" $(meson_bool_true gallium-xvmc)" else myopts=" $(meson_bool_false gallium-xvmc)" fi meson_configure \ $(meson_opt platforms x11,drm,surfaceless) \ $(meson_opt dri-drivers-path /usr/'$(mlibdir)'/dri) \ $(meson_opt dri-drivers ${MESA_DRI_DRIVERS}) \ $(meson_opt gallium-drivers ${MESA_GALLIUM_DRIVERS}) \ $(meson_opt vulkan-drivers ${MESA_VULKAN_DRIVERS}) \ $(meson_bool_false vulkan-overlay-layer) \ $(meson_bool_true b_ndebug) \ $(meson_opt glx dri) \ $(meson_bool_true shared-glapi) \ $(meson_bool_true dri3) \ $(meson_bool_true egl) \ $(meson_bool_true gles1) \ $(meson_bool_true gles2) \ $(meson_bool_true gbm) \ $(meson_opt osmesa gallium) \ $(meson_opt xa gallium-xa) \ $(meson_bool_true llvm) \ $(meson_bool_true gallium-nine) \ $(meson_bool_true shared-llvm) \ $(meson_bool_true glvnd) \ ${myopts} \ || die mninja || die } src_install_mesa() { DESTDIR=${BINDIR} mninja install || die # remove all la files find ${BINDIR} -name \*.la | xargs rm -fv # export LIBGL_DRIVER_PATH location. # we are using '/usr/lib/dri' as hardcoded location. # but nvidia and ati are using '/usr/$(mlibdir)/xorg/modules/dri' # LIBGL_DRIVER_PATH overwrites the hardcoded location and # if nvidia or ati driver are installed # the dri modules will never be found by libGL # use "LIBGL_DEBUG=verbose glxinfo" to check this issue for abi in ${MULTILIB_ABIS} do [[ ${abi} = m32 ]] && ABI_LIBDIR="lib" [[ ${abi} = m64 ]] && ABI_LIBDIR="lib64" cd ${SRCDIR}-${abi} minstalldir /etc/env.d || die MCONFIG=/etc/env.d/09mesa-${abi} mclearconfig || die maddconfig "LIBGL_DRIVERS_PATH=/usr/$(mlibdir)/dri" || die done # remove xa-tracker mdelete /usr/$(mlibdir)/libxatracker.\* || die if [[ $(mlibdir) != lib ]] then mdelete /usr/lib/libxatracker.\* || die fi # remove dri-drivers mdelete /usr/$(mlibdir)/dri/\*_dri.so || die if [[ $(mlibdir) != lib ]] then mdelete /usr/lib/dri/\*_dri.so || die fi if [[ ${ENABLE_VDPAU} = 1 ]] then # remove vdpau-drivers, they are in extra packages mdelete -r /usr/$(mlibdir)/vdpau || die if [[ $(mlibdir) != lib ]] then mdelete -r /usr/lib/vdpau || die fi fi if [[ ${ENABLE_VAAPI} = 1 ]] then # remove vaapi-drivers, they are in extra packages mdelete /usr/$(mlibdir)/dri/\*_drv_video.so || die if [[ $(mlibdir) != lib ]] then mdelete /usr/lib/dri/\*_drv_video.so || die fi fi # remove vulkan drivers, headers, configs mdelete -r /usr/include/vulkan || die mdelete -r /usr/share/vulkan || die mdelete /usr/$(mlibdir)/libvulkan_\*.so || die # remove libd3d mdelete -r /usr/include/d3dadapter || die mdelete -r /usr/$(mlibdir)/d3d || die mdelete /usr/$(mlibdir)/pkgconfig/d3d.pc || die if [[ $(mlibdir) != lib ]] then mdelete -r /usr/lib/d3d || die mdelete /usr/lib/pkgconfig/d3d.pc || die fi # support indirect rendering mlink libGLX_mesa.so.0 /usr/$(mlibdir)/libGLX_indirect.so.0 || die if [[ $(mlibdir) != lib ]] then mlink libGLX_mesa.so.0 /usr/lib/libGLX_indirect.so.0 || die fi if [[ ${ENABLE_DEV_PACKAGES} = 1 ]] then mdelete -r /usr/include || die mdelete -r /usr/$(mlibdir)/pkgconfig if [[ $(mlibdir) != lib ]] then mdelete -r /usr/lib/pkgconfig fi fi } src_install_mesa-dev() { DESTDIR=${BINDIR} mninja install || die # remove all la files find ${BINDIR} -name \*.la | xargs rm -fv zapmost ${BINDIR} \ usr/include \ usr/$(mlibdir)/pkgconfig \ $([[ $(mlibdir) != lib ]] && echo 'usr/lib/pkgconfig') \ || die # remove vulkan drivers, headers, configs mdelete -r /usr/include/vulkan || die # remove libd3d mdelete -r /usr/include/d3dadapter || die mdelete /usr/$(mlibdir)/pkgconfig/d3d.pc || die if [[ $(mlibdir) != lib ]] then mdelete /usr/lib/pkgconfig/d3d.pc || die fi } src_install_mesa-xa-tracker() { DESTDIR=${BINDIR} mninja install || die zapmost ${BINDIR} \ usr/$(mlibdir)/libxatracker.* \ $([[ $(mlibdir) != lib ]] && echo 'usr/lib/libxatracker.*') \ || die } src_install_libd3d() { DESTDIR=${BINDIR} mninja install || die zapmost ${BINDIR} \ usr/include/d3dadapter \ usr/$(mlibdir)/d3d \ $([[ $(mlibdir) != lib ]] && echo 'usr/lib/d3d') \ usr/$(mlibdir)/pkgconfig/d3d.pc \ $([[ $(mlibdir) != lib ]] && echo 'usr/lib/pkgconfig/d3d.pc') \ || die if [[ ${ENABLE_DEV_PACKAGES} = 1 ]] then mdelete -r /usr/include || die mdelete -r /usr/$(mlibdir)/pkgconfig if [[ $(mlibdir) != lib ]] then mdelete -r /usr/lib/pkgconfig fi fi } src_install_libd3d-dev() { DESTDIR=${BINDIR} mninja install || die zapmost ${BINDIR} \ usr/include/d3dadapter \ usr/$(mlibdir)/pkgconfig/d3d.pc \ $([[ $(mlibdir) != lib ]] && echo 'usr/lib/pkgconfig/d3d.pc') \ || die } src_install_mesa-dri-i915() { install_dri_driver i915 || die } src_install_mesa-dri-i965() { install_dri_driver i965 || die } src_install_mesa-dri-nouveau() { install_dri_driver nouveau nouveau_vieux || die } src_install_mesa-dri-r200() { install_dri_driver r200 || die } src_install_mesa-dri-r100() { install_dri_driver radeon || die } src_install_mesa-dri-r300() { install_dri_driver r300 || die } src_install_mesa-dri-r600() { install_dri_driver r600 || die } src_install_mesa-dri-radeonsi() { install_dri_driver radeonsi || die } src_install_mesa-dri-swrast() { install_dri_driver swrast kms_swrast || die } src_install_mesa-dri-svga() { install_dri_driver vmwgfx || die } src_install_mesa-dri-virgl() { install_dri_driver virtio_gpu || die } src_install_mesa-dri-iris() { install_dri_driver iris || die } src_install_mesa-vulkan-radeon() { install_vulkan_driver radeon || die } src_install_mesa-vulkan-radeon-dev() { install_vulkan_driver_dev radeon || die } src_install_mesa-vulkan-intel() { install_vulkan_driver intel || die } src_install_mesa-vulkan-intel-dev() { install_vulkan_driver_dev intel || die } src_install_mesa-vdpau-nouveau() { install_vdpau_driver nouveau || die } src_install_mesa-vdpau-r300() { install_vdpau_driver r300 || die } src_install_mesa-vdpau-r600() { install_vdpau_driver r600 || die } src_install_mesa-vdpau-radeonsi() { install_vdpau_driver radeonsi || die } src_install_mesa-vaapi-nouveau() { install_vaapi_driver nouveau || die } src_install_mesa-vaapi-r600() { install_vaapi_driver r600 || die } src_install_mesa-vaapi-radeonsi() { install_vaapi_driver radeonsi || die } preinstall_mesa() { local i # clean up deprecated dynamic opengl symlinks in favor of libglvnd for i in GL/{gl,glx,glext,glxext}.h \ EGL/{eglextchromium,eglext,egl,eglmesaext,eglplatform}.h \ GLES/{egl,glextm,gl,glplatform}.h \ GLES2/{gl2ext,gl2,gl2platform}.h \ GLES3/{gl31,gl3ext,gl3,gl3platform}.h \ KHR/khrplatform.h do if [ -L ${MROOT}/usr/include/${i} ] then echo "pruning dynamic opengl symlink '${MROOT}/usr/include/${i}'" rm ${MROOT}/usr/include/${i} fi done } postinstall_mesa() { echo "Searching deprecated package 'opengl-update'..." if [[ ! -z $(magequery -n opengl-update) ]] then echo "Uninstalling deprecated package 'opengl-update'..." mage uninstall opengl-update fi }