#!/usr/bin/make -f # debian/rules for the Debian mesa package # Copyright © 2006 Thierry Reding # Uncomment this to turn on verbose mode. #export DH_VERBOSE=1 include /usr/share/dpkg/pkg-info.mk DEB_HOST_MULTIARCH ?= $(shell dpkg-architecture -qDEB_HOST_MULTIARCH) DEB_HOST_ARCH ?= $(shell dpkg-architecture -qDEB_HOST_ARCH) DEB_HOST_ARCH_OS ?= $(shell dpkg-architecture -qDEB_HOST_ARCH_OS) DEB_HOST_ARCH_CPU ?= $(shell dpkg-architecture -qDEB_HOST_ARCH_CPU) # for finding the correct llvm-config when meson doesn't know about it yet LLVM_VERSION = 17 export PATH:=/usr/lib/llvm-$(LLVM_VERSION)/bin/:$(PATH) export LIBCLANG_PATH=/usr/lib/llvm-$(LLVM_VERSION)/lib export DEB_BUILD_MAINT_OPTIONS=optimize=-lto # enable LTO everywhere: #confflags += -Db_lto=true ifeq (,$(filter $(DEB_HOST_ARCH), armhf ppc64el sh3 sh4)) buildflags = \ $(shell DEB_CFLAGS_MAINT_APPEND=-Wall DEB_CXXFLAGS_MAINT_APPEND=-Wall dpkg-buildflags --export=configure) else ifneq (,$(filter $(DEB_HOST_ARCH), armhf)) # Workaround for a variant of LP: #725126 buildflags = \ $(shell DEB_CFLAGS_MAINT_APPEND="-Wall -fno-optimize-sibling-calls" DEB_CXXFLAGS_MAINT_APPEND="-Wall -fno-optimize-sibling-calls" dpkg-buildflags --export=configure) else ifneq (,$(filter $(DEB_HOST_ARCH), ppc64el)) # Workaround for https://gitlab.freedesktop.org/mesa/mesa/-/issues/5315 buildflags = \ $(shell DEB_CFLAGS_MAINT_APPEND="-Wall -O2" DEB_CXXFLAGS_MAINT_APPEND="-Wall -O2" dpkg-buildflags --export=configure) else # Workaround for https://gcc.gnu.org/bugzilla/show_bug.cgi?id=83143 buildflags = \ $(shell DEB_CFLAGS_MAINT_APPEND="-Wall -O1" DEB_CXXFLAGS_MAINT_APPEND="-Wall -O1" dpkg-buildflags --export=configure) endif endif endif EGL_PLATFORMS = x11 GALLIUM_DRIVERS = swrast VULKAN_DRIVERS = VULKAN_LAYERS = confflags_DRI3 = -Ddri3=disabled confflags_OSMESA = -Dosmesa=true confflags_SSE2 = -Dsse2=true LLVM_ARCHS = amd64 arm64 armel armhf i386 mips64el mipsel powerpc ppc64 ppc64el riscv64 s390x sparc64 x32 RUSTICL_ARCHS = amd64 arm64 armel armhf mips64el mipsel ppc64el s390x #ifeq ($(DEB_DISTRIBUTION), jammy) # RUSTICL_ARCHS = arm64 #endif VALGRIND_ARCHS = amd64 arm64 armhf i386 mips64el mipsel powerpc ppc64 ppc64el s390x WINE_ARCHS = amd64 arm64 armel armhf i386 powerpc # hurd doesn't do direct rendering ifeq ($(DEB_HOST_ARCH_OS), hurd) confflags_DIRECT_RENDERING = -Dglx-direct=false confflags_GBM = -Dgbm=disabled else GALLIUM_DRIVERS += r300 r600 confflags_DIRECT_RENDERING = -Dglx-direct=true confflags_GBM = -Dgbm=enabled confflags_GALLIUM += -Dgallium-extra-hud=true confflags_GALLIUM += -Dgallium-vdpau=enabled confflags_GALLIUM += -Dlmsensors=enabled # radv/lavapipe needs LLVM and the Vulkan loader, so only build on the subset of # arches where we have LLVM enabled and where the Vulkan loader is built. ifneq (,$(filter $(DEB_HOST_ARCH), amd64 arm64 armel armhf i386 mips64el mipsel powerpc ppc64 ppc64el s390x sparc64)) VULKAN_DRIVERS += amd swrast virtio endif # Only enable amd on riscv64, swrast needs CPU JIT support which doesn't work properly yet ifneq (,$(filter $(DEB_HOST_ARCH), riscv64)) VULKAN_DRIVERS += amd confflags_GALLIUM += -Ddraw-use-llvm=false endif ifeq ($(DEB_HOST_ARCH_OS), linux) confflags_DRI3 = -Ddri3=enabled # Gallium drivers which require kernel support, not yet ported to non-Linux GALLIUM_DRIVERS += nouveau virgl # Freedreno requires arm in addition ifneq (,$(filter arm arm64,$(DEB_HOST_ARCH_CPU))) # GALLIUM_DRIVERS += freedreno asahi #9697 GALLIUM_DRIVERS += freedreno endif # etnaviv, tegra, vc4 and v3d kernel support are only available on armhf and arm64 ifneq (,$(filter $(DEB_HOST_ARCH), armhf arm64)) GALLIUM_DRIVERS += etnaviv panfrost svga tegra vc4 v3d VULKAN_DRIVERS += broadcom freedreno panfrost endif ifneq (,$(filter $(DEB_HOST_ARCH), armhf arm64 riscv64)) GALLIUM_DRIVERS += lima endif ifneq (,$(filter $(DEB_HOST_ARCH), amd64 i386 x32)) GALLIUM_DRIVERS += svga # svga needs xa state tracker confflags_GALLIUM += -Dgallium-xa=enabled VULKAN_DRIVERS += intel intel_hasvk endif # ifneq (,$(filter $(DEB_HOST_ARCH), amd64)) # confflags_GALLIUM += -Dintel-clc=enabled # endif confflags_GALLIUM += -Dintel-clc=disabled -Dmicrosoft-clc=disabled # Non-Linux ports lack epoll, so wayland isn't ready yet: # https://gitlab.freedesktop.org/wayland/wayland/-/issues/72 # hurd also lacks *_CLOEXEC EGL_PLATFORMS += ,wayland ifneq (,$(filter $(DEB_HOST_ARCH), $(VALGRIND_ARCHS))) confflags_VALGRIND += -Dvalgrind=enabled endif # WSL supports only amd64 and arm64 ifneq (,$(filter amd64 arm64,$(DEB_HOST_ARCH))) GALLIUM_DRIVERS += d3d12 # VULKAN_DRIVERS += microsoft-experimental endif endif # Build intel drivers on archs where libdrm-intel is installed ifneq (,$(filter $(DEB_HOST_ARCH),amd64 i386 kfreebsd-amd64 kfreebsd-i386 x32)) GALLIUM_DRIVERS += iris crocus i915 endif # LLVM is required for building r300g, radeonsi and llvmpipe drivers. # It's also required for building OpenCL support. ifneq (,$(filter $(DEB_HOST_ARCH), $(LLVM_ARCHS))) GALLIUM_DRIVERS += radeonsi zink # Only enable amd on riscv64, swrast needs CPU JIT support which doesn't work properly yet ifneq (,$(filter $(DEB_HOST_ARCH), riscv64)) VULKAN_DRIVERS += amd confflags_GALLIUM += -Ddraw-use-llvm=false else VULKAN_DRIVERS += amd swrast endif VULKAN_LAYERS += device-select intel-nullhw overlay confflags_GALLIUM += -Dllvm=enabled confflags_GALLIUM += -Dgallium-opencl=icd # Build rusticl for archs where rustc is available ifneq (,$(filter $(DEB_HOST_ARCH), $(RUSTICL_ARCHS))) confflags_GALLIUM += -Dgallium-rusticl=true endif # nine makes sense only on archs that build wine ifneq (,$(filter $(DEB_HOST_ARCH), $(WINE_ARCHS))) confflags_GALLIUM += -Dgallium-nine=true endif else confflags_GALLIUM += -Dllvm=disabled endif ifeq (,$(filter pkg.mesa.nolibva,$(DEB_BUILD_PROFILES))) confflags_GALLIUM += -Dgallium-va=enabled confflags_GALLIUM += -Dvideo-codecs="vc1dec, h264dec, h264enc, h265dec, h265enc" endif endif # bug #9762 #ifeq ($(DEB_HOST_ARCH), i386) # confflags_SSE2 = -Dsse2=false #endif empty:= space := $(empty) $(empty) comma := , GALLIUM_DRIVERS := $(patsubst %,'%',$(GALLIUM_DRIVERS)) GALLIUM_DRIVERS_LIST := $(subst $(space),$(comma),$(GALLIUM_DRIVERS)) VULKAN_DRIVERS := $(patsubst %,'%',$(VULKAN_DRIVERS)) VULKAN_DRIVERS_LIST := $(subst $(space),$(comma),$(VULKAN_DRIVERS)) VULKAN_LAYERS := $(patsubst %,'%',$(VULKAN_LAYERS)) VULKAN_LAYERS_LIST := $(subst $(space),$(comma),$(VULKAN_LAYERS)) confflags_EGL = -Dplatforms="$(EGL_PLATFORMS)" confflags_GLES = -Dgles1=disabled -Dgles2=enabled confflags_GALLIUM += -Dgallium-drivers="[$(GALLIUM_DRIVERS_LIST)]" confflags += \ -Ddri-drivers-path=/usr/lib/$(DEB_HOST_MULTIARCH)/dri \ -Ddri-search-path='/usr/lib/$(DEB_HOST_MULTIARCH)/dri:\$$$${ORIGIN}/dri:/usr/lib/dri' \ -Dvulkan-drivers="[$(VULKAN_DRIVERS_LIST)]" \ -Dvulkan-layers="[$(VULKAN_LAYERS_LIST)]" \ -Dglvnd=true \ -Dshared-glapi=enabled \ -Dgallium-omx=disabled \ -Db_ndebug=true \ -Dbuild-tests=true \ -Dtools=drm-shim \ $(confflags_DIRECT_RENDERING) \ $(confflags_GBM) \ $(confflags_DRI3) \ $(confflags_EGL) \ $(confflags_GALLIUM) \ $(confflags_GLES) \ $(confflags_OSMESA) \ $(confflags_SSE2) \ $(confflags_VALGRIND) override_dh_clean: regen_control sed -i 's/-.*//' VERSION rm -rf .pc rm -rf build rm -rf configure bin/config.guess bin/config.sub config.h.in rm -rf $$(find -name Makefile.in) rm -rf bin/install-sh bin/ltmain.sh for file in debian/*.links.in; do rm -f $${file%%.in}; done find -name '*.pyc' -delete find -name '__pycache__' -delete dh_clean override_dh_auto_configure: dpkg-parsechangelog | awk '/^Version:/ {print $$2}' > VERSION $(buildflags) dh_auto_configure -- \ $(confflags) override_dh_auto_install: dh_auto_install for file in debian/*.links.in; \ do \ sed -e"s,\$${DEB_HOST_MULTIARCH},$(DEB_HOST_MULTIARCH),g" \ $${file} > $${file%%.in}; \ done # some tests are expected to fail for now, drop this when upstream has # better cross-build testing in place and expected failures fixed override_dh_auto_test: -dh_auto_test allpkg = $(shell dh_listpackages -a) override_dh_installchangelogs: dh_installchangelogs -a dh_installchangelogs -pmesa-common-dev override_dh_install: # purge .la files find debian/tmp/ -name '*.la' -exec rm '{}' ';' find debian/tmp/usr/bin -name 'mme_*_sim_hw_test' -exec rm '{}' ';' # Get rid of some files which aren't installed. Do not # use -f to ensure we notice disappearing files: rm debian/tmp/usr/lib/*/libglapi.so rm debian/tmp/usr/lib/*/libEGL_mesa.so rm debian/tmp/usr/lib/*/libGLX_mesa.so # use -f here though rm -f debian/tmp/usr/lib/*/libgrl.a # Copy the hardlinked *_dri.so correctly. install -m755 -d debian/libgl1-mesa-dri/usr/lib/${DEB_HOST_MULTIARCH}/dri/ mv debian/tmp/usr/lib/${DEB_HOST_MULTIARCH}/dri/*_dri.so \ debian/libgl1-mesa-dri/usr/lib/${DEB_HOST_MULTIARCH}/dri/ ifneq ($(DEB_HOST_ARCH_OS), hurd) # Copy the hardlinked vdpau drivers correctly. install -m755 -d debian/mesa-vdpau-drivers/usr/lib/${DEB_HOST_MULTIARCH}/vdpau/ mv debian/tmp/usr/lib/${DEB_HOST_MULTIARCH}/vdpau/libvdpau*.so* \ debian/mesa-vdpau-drivers/usr/lib/${DEB_HOST_MULTIARCH}/vdpau/ ifeq (,$(filter pkg.mesa.nolibva,$(DEB_BUILD_PROFILES))) # Copy the hardlinked va drivers correctly. install -m755 -d debian/mesa-va-drivers/usr/lib/${DEB_HOST_MULTIARCH}/dri/ mv debian/tmp/usr/lib/${DEB_HOST_MULTIARCH}/dri/*_drv_video.so \ debian/mesa-va-drivers/usr/lib/${DEB_HOST_MULTIARCH}/dri/ endif endif ifneq (,$(filter $(DEB_HOST_ARCH), $(RUSTICL_ARCHS))) install -m755 -d debian/mesa-opencl-icd/etc/OpenCL/vendors mv debian/tmp/etc/OpenCL/vendors/rusticl.icd \ debian/mesa-opencl-icd/etc/OpenCL/vendors install -m755 -d debian/mesa-opencl-icd/usr/lib/${DEB_HOST_MULTIARCH}/ mv debian/tmp/usr/lib/${DEB_HOST_MULTIARCH}/libRusticlOpenCL* \ debian/mesa-opencl-icd/usr/lib/${DEB_HOST_MULTIARCH}/ endif dh_install -a # Install bug control and script: set -e; for p in $(allpkg); do \ install -d debian/$$p/usr/share/bug/$$p && \ install -m 644 debian/local/control debian/$$p/usr/share/bug/$$p && \ install -m 755 debian/local/script debian/$$p/usr/share/bug/$$p; \ done override_dh_missing: dh_missing --fail-missing override_dh_makeshlibs: dh_makeshlibs -a -- -c0 %: dh $@ --with quilt \ --builddirectory=build/ \ --buildsystem=meson # For maintainer use only, generate a tarball: gentarball: git archive --format=tar upstream-experimental --prefix=$(DEB_SOURCE)-$(DEB_VERSION_UPSTREAM)/ \ | gzip -9 > ../$(DEB_SOURCE)_$(DEB_VERSION_UPSTREAM).orig.tar.gz regen_control: sed -e"s,@LLVM_VERSION@,$(LLVM_VERSION),g" \ -e"s,@LLVM_ARCHS@,$(LLVM_ARCHS),g" \ -e"s,@RUSTICL_ARCHS@,$(RUSTICL_ARCHS),g" \ -e"s,@VALGRIND_ARCHS@,$(VALGRIND_ARCHS),g" \ -e"s,@WINE_ARCHS@,$(WINE_ARCHS),g" \ debian/control.in > debian/control