123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514 |
- # Copyright 1999-2024 Gentoo Authors
- # Distributed under the terms of the GNU General Public License v2
- EAPI=8
- LLVM_COMPAT=( {17..19} )
- LLVM_OPTIONAL=1
- CARGO_OPTIONAL=1
- PYTHON_COMPAT=( python3_{10..13} )
- inherit flag-o-matic llvm-r1 meson-multilib python-any-r1 linux-info rust-toolchain toolchain-funcs
- MY_P="${P/_/-}"
- CRATES="
- syn@2.0.68
- proc-macro2@1.0.86
- quote@1.0.33
- unicode-ident@1.0.12
- paste@1.0.14
- "
- RUST_MIN_VER="1.74.1"
- RUST_OPTIONAL=1
- inherit cargo
- DESCRIPTION="OpenGL-like graphic library for Linux"
- HOMEPAGE="https://www.mesa3d.org/ https://mesa.freedesktop.org/"
- if [[ ${PV} == 9999 ]]; then
- EGIT_REPO_URI="https://gitlab.freedesktop.org/mesa/mesa.git"
- inherit git-r3
- else
- SRC_URI="
- https://archive.mesa3d.org/${MY_P}.tar.xz
- "
- KEYWORDS="~alpha ~amd64 ~arm ~arm64 ~hppa ~loong ~mips ~ppc ~ppc64 ~riscv ~s390 ~sparc ~x86 ~amd64-linux ~x86-linux ~x64-solaris"
- fi
- # This should be {CARGO_CRATE_URIS//.crate/.tar.gz} to correspond to the wrap files,
- # but there are "stale" distfiles on the mirrors with the wrong names.
- # export MESON_PACKAGE_CACHE_DIR="${DISTDIR}"
- SRC_URI+="
- ${CARGO_CRATE_URIS}
- "
- S="${WORKDIR}/${MY_P}"
- EGIT_CHECKOUT_DIR=${S}
- LICENSE="MIT SGI-B-2.0"
- SLOT="0"
- RADEON_CARDS="r300 r600 radeon amdgpu"
- VIDEO_CARDS="${RADEON_CARDS}
- d3d12 freedreno intel lavapipe lima nouveau nvk panfrost v3d vc4 virgl
- vivante vmware zink"
- for card in ${VIDEO_CARDS}; do
- IUSE_VIDEO_CARDS+=" video_cards_${card}"
- done
- IUSE="${IUSE_VIDEO_CARDS}
- cpu_flags_x86_sse2 egl gbm d3d9 debug gles1 +gles2 +llvm
- lm-sensors opencl +opengl osmesa +proprietary-codecs selinux
- test unwind vaapi valgrind vdpau vulkan
- vulkan-overlay wayland +X xa +zstd"
- RESTRICT="!test? ( test )"
- REQUIRED_USE="
- d3d9? (
- || (
- video_cards_freedreno
- video_cards_intel
- video_cards_nouveau
- video_cards_panfrost
- video_cards_r300
- video_cards_r600
- video_cards_amdgpu
- video_cards_vmware
- video_cards_zink
- )
- )
- llvm? ( ${LLVM_REQUIRED_USE} )
- vulkan-overlay? ( vulkan )
- video_cards_lavapipe? ( llvm vulkan )
- video_cards_radeon? ( x86? ( llvm ) amd64? ( llvm ) )
- video_cards_r300? ( x86? ( llvm ) amd64? ( llvm ) )
- video_cards_amdgpu? ( x86? ( llvm ) amd64? ( llvm ) )
- video_cards_zink? ( vulkan opengl )
- video_cards_nvk? ( vulkan video_cards_nouveau )
- vdpau? ( X )
- xa? ( X )
- X? ( gles1? ( opengl ) gles2? ( opengl ) )
- "
- LIBDRM_DEPSTRING=">=x11-libs/libdrm-2.4.121"
- RDEPEND="
- >=dev-libs/expat-2.1.0-r3[${MULTILIB_USEDEP}]
- >=media-libs/libglvnd-1.3.2[X?,${MULTILIB_USEDEP}]
- >=sys-libs/zlib-1.2.9[${MULTILIB_USEDEP}]
- unwind? ( sys-libs/libunwind[${MULTILIB_USEDEP}] )
- llvm? (
- $(llvm_gen_dep "
- sys-devel/llvm:\${LLVM_SLOT}[llvm_targets_AMDGPU(+),${MULTILIB_USEDEP}]
- opencl? (
- dev-util/spirv-llvm-translator:\${LLVM_SLOT}
- sys-devel/clang:\${LLVM_SLOT}[llvm_targets_AMDGPU(+),${MULTILIB_USEDEP}]
- )
- ")
- video_cards_amdgpu? (
- virtual/libelf:0=[${MULTILIB_USEDEP}]
- )
- video_cards_r600? (
- virtual/libelf:0=[${MULTILIB_USEDEP}]
- )
- video_cards_radeon? (
- virtual/libelf:0=[${MULTILIB_USEDEP}]
- )
- )
- lm-sensors? ( sys-apps/lm-sensors:=[${MULTILIB_USEDEP}] )
- opencl? (
- >=virtual/opencl-3
- dev-libs/libclc[spirv(-)]
- >=dev-util/spirv-tools-1.3.231.0
- virtual/libelf:0=
- )
- vaapi? (
- >=media-libs/libva-1.7.3:=[${MULTILIB_USEDEP}]
- )
- vdpau? ( >=x11-libs/libvdpau-1.5:=[${MULTILIB_USEDEP}] )
- video_cards_zink? ( media-libs/vulkan-loader:=[${MULTILIB_USEDEP}] )
- selinux? ( sys-libs/libselinux[${MULTILIB_USEDEP}] )
- wayland? ( >=dev-libs/wayland-1.18.0[${MULTILIB_USEDEP}] )
- ${LIBDRM_DEPSTRING}[video_cards_freedreno?,video_cards_intel?,video_cards_nouveau?,video_cards_vc4?,video_cards_vivante?,video_cards_vmware?,${MULTILIB_USEDEP}]
- X? (
- >=x11-libs/libX11-1.6.2[${MULTILIB_USEDEP}]
- >=x11-libs/libxshmfence-1.1[${MULTILIB_USEDEP}]
- >=x11-libs/libXext-1.3.2[${MULTILIB_USEDEP}]
- >=x11-libs/libXxf86vm-1.1.3[${MULTILIB_USEDEP}]
- >=x11-libs/libxcb-1.17:=[${MULTILIB_USEDEP}]
- x11-libs/libXfixes[${MULTILIB_USEDEP}]
- x11-libs/xcb-util-keysyms[${MULTILIB_USEDEP}]
- )
- zstd? ( app-arch/zstd:=[${MULTILIB_USEDEP}] )
- "
- for card in ${RADEON_CARDS}; do
- RDEPEND="${RDEPEND}
- video_cards_${card}? ( ${LIBDRM_DEPSTRING}[video_cards_radeon] )
- "
- done
- RDEPEND="${RDEPEND}
- video_cards_amdgpu? ( ${LIBDRM_DEPSTRING}[video_cards_amdgpu] )
- "
- DEPEND="${RDEPEND}
- video_cards_d3d12? ( >=dev-util/directx-headers-1.613.0[${MULTILIB_USEDEP}] )
- valgrind? ( dev-debug/valgrind )
- wayland? ( >=dev-libs/wayland-protocols-1.34 )
- X? (
- x11-libs/libXrandr[${MULTILIB_USEDEP}]
- x11-base/xorg-proto
- )
- "
- BDEPEND="
- ${PYTHON_DEPS}
- opencl? (
- ${RUST_DEPEND}
- >=dev-util/bindgen-0.58.0
- )
- >=dev-build/meson-1.4.1
- app-alternatives/yacc
- app-alternatives/lex
- virtual/pkgconfig
- $(python_gen_any_dep "
- >=dev-python/mako-0.8.0[\${PYTHON_USEDEP}]
- dev-python/packaging[\${PYTHON_USEDEP}]
- dev-python/pyyaml[\${PYTHON_USEDEP}]
- ")
- video_cards_intel? (
- ~dev-util/intel_clc-${PV}
- dev-libs/libclc[spirv(-)]
- $(python_gen_any_dep "dev-python/ply[\${PYTHON_USEDEP}]")
- )
- vulkan? (
- dev-util/glslang
- video_cards_nvk? (
- >=dev-util/bindgen-0.68.1
- >=dev-util/cbindgen-0.26.0
- ${RUST_DEPEND}
- )
- )
- wayland? ( dev-util/wayland-scanner )
- "
- QA_WX_LOAD="
- x86? (
- usr/lib/libglapi.so.0.0.0
- usr/lib/libOSMesa.so.8.0.0
- usr/lib/libGLX_mesa.so.0.0.0
- )"
- PATCHES=(
- "${FILESDIR}/0002-mesa-enable-vaapi-on-lima-panfrost.patch"
- )
- src_unpack() {
- if [[ ${PV} == 9999 ]]; then
- git-r3_src_unpack
- else
- unpack ${MY_P}.tar.xz
- fi
- # We need this because we cannot tell meson to use DISTDIR yet
- pushd "${DISTDIR}" >/dev/null || die
- mkdir -p "${S}"/subprojects/packagecache || die
- local i
- for i in *.crate; do
- ln -s "${PWD}/${i}" "${S}/subprojects/packagecache/${i/.crate/}.tar.gz" || die
- done
- popd >/dev/null || die
- }
- pkg_pretend() {
- if use vulkan; then
- if ! use video_cards_d3d12 &&
- ! use video_cards_freedreno &&
- ! use video_cards_intel &&
- ! use video_cards_lavapipe &&
- ! use video_cards_nouveau &&
- ! use video_cards_nvk &&
- ! use video_cards_panfrost &&
- ! use video_cards_lima &&
- ! use video_cards_amdgpu &&
- ! use video_cards_v3d &&
- ! use video_cards_virgl; then
- ewarn "Ignoring USE=vulkan since VIDEO_CARDS does not contain d3d12, freedreno, intel, lavapipe, nouveau, nvk, panfrost, amdgpu, v3d, or virgl"
- fi
- fi
- # VA
- if use vaapi; then
- if ! use video_cards_d3d12 &&
- ! use video_cards_nouveau &&
- ! use video_cards_r600 &&
- ! use video_cards_lima &&
- ! use video_cards_panfrost &&
- ! use video_cards_amdgpu &&
- ! use video_cards_virgl; then
- ewarn "Ignoring USE=vaapi since VIDEO_CARDS does not contain d3d12, nouveau, r600, amdgpu, or virgl"
- fi
- fi
- if use vdpau; then
- if ! use video_cards_d3d12 &&
- ! use video_cards_nouveau &&
- ! use video_cards_r600 &&
- ! use video_cards_amdgpu &&
- ! use video_cards_virgl; then
- ewarn "Ignoring USE=vdpau since VIDEO_CARDS does not contain d3d12, nouveau, r600, amdgpu, or virgl"
- fi
- fi
- if use xa; then
- if ! use video_cards_freedreno &&
- ! use video_cards_intel &&
- ! use video_cards_nouveau &&
- ! use video_cards_vmware; then
- ewarn "Ignoring USE=xa since VIDEO_CARDS does not contain freedreno, nouveau, or vmware"
- fi
- fi
- if ! use llvm; then
- use opencl && ewarn "Ignoring USE=opencl since USE does not contain llvm"
- fi
- if use osmesa && ! use llvm; then
- ewarn "OSMesa will be slow without enabling USE=llvm"
- fi
- }
- python_check_deps() {
- python_has_version -b ">=dev-python/mako-0.8.0[${PYTHON_USEDEP}]" &&
- python_has_version -b "dev-python/packaging[${PYTHON_USEDEP}]" &&
- python_has_version -b "dev-python/pyyaml[${PYTHON_USEDEP}]" || return 1
- if use llvm && use vulkan && use video_cards_intel && use amd64; then
- python_has_version -b "dev-python/ply[${PYTHON_USEDEP}]" || return 1
- fi
- }
- pkg_setup() {
- # warning message for bug 459306
- if use llvm && has_version sys-devel/llvm[!debug=]; then
- ewarn "Mismatch between debug USE flags in media-libs/mesa and sys-devel/llvm"
- ewarn "detected! This can cause problems. For details, see bug 459306."
- fi
- if use video_cards_intel ||
- use video_cards_amdgpu; then
- if kernel_is -ge 5 11 3; then
- CONFIG_CHECK="~KCMP"
- elif kernel_is -ge 5 11; then
- CONFIG_CHECK="~CHECKPOINT_RESTORE"
- elif kernel_is -ge 5 10 20; then
- CONFIG_CHECK="~KCMP"
- else
- CONFIG_CHECK="~CHECKPOINT_RESTORE"
- fi
- linux-info_pkg_setup
- fi
- use llvm && llvm-r1_pkg_setup
- python-any-r1_pkg_setup
- if use opencl || (use vulkan && use video_cards_nvk); then
- rust_pkg_setup
- fi
- }
- src_prepare() {
- default
- sed -i -e "/^PLATFORM_SYMBOLS/a '__gentoo_check_ldflags__'," \
- bin/symbols-check.py || die # bug #830728
- }
- multilib_src_configure() {
- local emesonargs=()
- local platforms
- use X && platforms+="x11"
- use wayland && platforms+=",wayland"
- emesonargs+=(-Dplatforms=${platforms#,})
- if use video_cards_freedreno ||
- use video_cards_intel || # crocus i915 iris
- use video_cards_nouveau ||
- use video_cards_panfrost ||
- use video_cards_lima ||
- use video_cards_r300 ||
- use video_cards_r600 ||
- use video_cards_amdgpu ||
- use video_cards_vmware || # swrast
- use video_cards_zink; then
- emesonargs+=($(meson_use d3d9 gallium-nine))
- else
- emesonargs+=(-Dgallium-nine=false)
- fi
- if use video_cards_d3d12 ||
- use video_cards_nouveau ||
- use video_cards_r600 ||
- use video_cards_amdgpu ||
- use video_cards_virgl; then
- emesonargs+=($(meson_feature vaapi gallium-va))
- use vaapi && emesonargs+=( -Dva-libs-path="${EPREFIX}"/usr/$(get_libdir)/va/drivers )
- else
- emesonargs+=(-Dgallium-va=disabled)
- fi
- if use video_cards_d3d12; then
- emesonargs+=($(meson_feature vaapi gallium-d3d12-video))
- fi
- if use video_cards_d3d12 ||
- use video_cards_nouveau ||
- use video_cards_r600 ||
- use video_cards_amdgpu ||
- use video_cards_virgl; then
- emesonargs+=($(meson_feature vdpau gallium-vdpau))
- else
- emesonargs+=(-Dgallium-vdpau=disabled)
- fi
- if use video_cards_freedreno ||
- use video_cards_intel ||
- use video_cards_nouveau ||
- use video_cards_vmware; then
- emesonargs+=($(meson_feature xa gallium-xa))
- else
- emesonargs+=(-Dgallium-xa=disabled)
- fi
- gallium_enable !llvm softpipe
- gallium_enable llvm llvmpipe
- gallium_enable video_cards_d3d12 d3d12
- gallium_enable video_cards_freedreno freedreno
- gallium_enable video_cards_intel crocus i915 iris
- gallium_enable video_cards_lima lima
- gallium_enable video_cards_nouveau nouveau
- gallium_enable video_cards_panfrost panfrost
- gallium_enable video_cards_v3d v3d
- gallium_enable video_cards_vc4 vc4
- gallium_enable video_cards_virgl virgl
- gallium_enable video_cards_vivante etnaviv
- gallium_enable video_cards_vmware svga
- gallium_enable video_cards_zink zink
- gallium_enable video_cards_r300 r300
- gallium_enable video_cards_r600 r600
- gallium_enable video_cards_amdgpu radeonsi
- if ! use video_cards_r300 &&
- ! use video_cards_r600; then
- gallium_enable video_cards_radeon r300 r600
- fi
- if use llvm && use opencl; then
- PKG_CONFIG_PATH="$(get_llvm_prefix)/$(get_libdir)/pkgconfig"
- # See https://gitlab.freedesktop.org/mesa/mesa/-/blob/main/docs/rusticl.rst
- emesonargs+=(
- $(meson_native_true gallium-rusticl)
- -Drust_std=2021
- )
- fi
- if use vulkan; then
- vulkan_enable video_cards_d3d12 microsoft-experimental
- vulkan_enable video_cards_freedreno freedreno
- vulkan_enable video_cards_intel intel intel_hasvk
- vulkan_enable video_cards_lavapipe swrast
- vulkan_enable video_cards_panfrost panfrost
- vulkan_enable video_cards_panfrost lima
- vulkan_enable video_cards_amdgpu amd
- vulkan_enable video_cards_v3d broadcom
- vulkan_enable video_cards_vc4 broadcom
- vulkan_enable video_cards_virgl virtio
- if use video_cards_nvk; then
- vulkan_enable video_cards_nvk nouveau
- if ! multilib_is_native_abi; then
- echo -e "[binaries]\nrust = ['rustc', '--target=$(rust_abi $CBUILD)']" > "${T}/rust_fix.ini"
- emesonargs+=(
- --native-file "${T}"/rust_fix.ini
- )
- fi
- fi
- fi
- driver_list() {
- local drivers="$(sort -u <<< "${1// /$'\n'}")"
- echo "${drivers//$'\n'/,}"
- }
- local vulkan_layers
- use vulkan && vulkan_layers+="device-select"
- use vulkan-overlay && vulkan_layers+=",overlay"
- emesonargs+=(-Dvulkan-layers=${vulkan_layers#,})
- if use llvm && use vulkan && use video_cards_intel && use amd64; then
- emesonargs+=(-Dintel-clc=system)
- else
- emesonargs+=(-Dintel-clc=disabled)
- fi
- if use opengl && use X; then
- emesonargs+=(-Dglx=dri)
- else
- emesonargs+=(-Dglx=disabled)
- fi
- if [[ "${ABI}" == amd64 ]]; then
- emesonargs+=($(meson_feature video_cards_intel intel-rt))
- fi
- use debug && EMESON_BUILDTYPE=debug
- emesonargs+=(
- $(meson_use test build-tests)
- -Dshared-glapi=enabled
- -Ddri3=enabled
- -Dexpat=enabled
- $(meson_use opengl)
- $(meson_feature gbm)
- $(meson_feature gles1)
- $(meson_feature gles2)
- $(meson_feature opengl glvnd)
- $(meson_feature egl)
- $(meson_feature llvm)
- $(meson_feature lm-sensors lmsensors)
- $(meson_use osmesa)
- $(meson_use selinux)
- $(meson_feature unwind libunwind)
- $(meson_feature zstd)
- $(meson_use cpu_flags_x86_sse2 sse2)
- -Dintel-clc=$(usex video_cards_intel system auto)
- -Dvalgrind=$(usex valgrind auto disabled)
- -Dvideo-codecs=$(usex proprietary-codecs "all" "all_free")
- -Dgallium-drivers=$(driver_list "${GALLIUM_DRIVERS[*]}")
- -Dvulkan-drivers=$(driver_list "${VULKAN_DRIVERS[*]}")
- -Db_ndebug=$(usex debug false true)
- )
- meson_src_configure
- if ! multilib_is_native_abi && use video_cards_nvk; then
- sed -i -E '{N; s/(rule rust_COMPILER_FOR_BUILD\n command = rustc) --target=[a-zA-Z0-9=:-]+ (.*) -C link-arg=-m[[:digit:]]+/\1 \2/g}' build.ninja || die
- fi
- }
- multilib_src_test() {
- meson_src_test -t 100
- }
- # $1 - VIDEO_CARDS flag (check skipped for "--")
- # other args - names of DRI drivers to enable
- gallium_enable() {
- if [[ $1 == -- ]] || use $1; then
- shift
- GALLIUM_DRIVERS+=("$@")
- fi
- }
- vulkan_enable() {
- if [[ $1 == -- ]] || use $1; then
- shift
- VULKAN_DRIVERS+=("$@")
- fi
- }
|