#!/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 = 19 export PATH:=/usr/lib/llvm-$(LLVM_VERSION)/bin/:$(PATH) export DEB_BUILD_MAINT_OPTIONS=optimize=-lto DEB_CFLAGS_MAINT_APPEND := -Wall DEB_CXXFLAGS_MAINT_APPEND := -Wall ifneq (,$(filter $(DEB_HOST_ARCH), armhf)) # Workaround for a variant of LP: #725126 DEB_CFLAGS_MAINT_APPEND += -fno-optimize-sibling-calls DEB_CXXFLAGS_MAINT_APPEND += -fno-optimize-sibling-calls else ifneq (,$(filter $(DEB_HOST_ARCH), loong64)) # Workaround loong64 BFD linker crash related to TLSDESC DEB_CFLAGS_MAINT_APPEND += -mtls-dialect=trad DEB_CXXFLAGS_MAINT_APPEND += -mtls-dialect=trad else ifneq (,$(filter $(DEB_HOST_ARCH), m68k)) # This library has huge jump tables: Debian #1067207 DEB_CFLAGS_MAINT_APPEND += -mlong-jump-table-offsets DEB_CXXFLAGS_MAINT_APPEND += -mlong-jump-table-offsets else ifneq (,$(filter $(DEB_HOST_ARCH), sh4)) # Workaround for https://gcc.gnu.org/bugzilla/show_bug.cgi?id=83143 DEB_CFLAGS_MAINT_APPEND += -freorder-blocks-algorithm=simple DEB_CXXFLAGS_MAINT_APPEND += -freorder-blocks-algorithm=simple endif buildflags = $(shell \ DEB_CFLAGS_MAINT_APPEND='$(DEB_CFLAGS_MAINT_APPEND)' \ DEB_CXXFLAGS_MAINT_APPEND='$(DEB_CXXFLAGS_MAINT_APPEND)' \ dpkg-buildflags --export=configure) EGL_PLATFORMS = x11 GALLIUM_DRIVERS = softpipe VULKAN_DRIVERS = VULKAN_LAYERS = confflags_DRI3 = -Ddri3=disabled confflags_OSMESA = -Dosmesa=true confflags_SSE2 = -Dsse2=true confflags_TEFLON = -Dteflon=false LLVM_ARCHS = amd64 arm64 armel armhf i386 loong64 mips64el powerpc ppc64 ppc64el riscv64 s390x sparc64 x32 RUSTICL_ARCHS = amd64 arm64 armel armhf i386 loong64 mips64el powerpc ppc64 ppc64el riscv64 s390x x32 NVK_ARCHS = amd64 arm64 armhf i386 ppc64 riscv64 x32 VALGRIND_ARCHS = amd64 arm64 armhf i386 mips64el powerpc ppc64 ppc64el s390x WINE_ARCHS = amd64 arm64 armel armhf i386 # hurd doesn't do direct rendering ifeq ($(DEB_HOST_ARCH_OS), hurd) confflags_DIRECT_RENDERING = -Dglx-direct=false confflags_GBM = -Dgbm=disabled else # 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 GALLIUM_DRIVERS += nouveau r300 r600 virgl confflags_DIRECT_RENDERING = -Dglx-direct=true confflags_DRI3 = -Ddri3=enabled confflags_GBM = -Dgbm=enabled confflags_GALLIUM += -Dgallium-extra-hud=true confflags_GALLIUM += -Dgallium-vdpau=enabled confflags_GALLIUM += -Dlmsensors=enabled # Freedreno requires arm in addition ifneq (,$(filter arm arm64,$(DEB_HOST_ARCH_CPU))) 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 endif ifneq (,$(filter $(DEB_HOST_ARCH), armhf arm64 loong64 riscv64)) GALLIUM_DRIVERS += lima endif # Build intel drivers on archs where libdrm-intel is installed ifneq (,$(filter $(DEB_HOST_ARCH), amd64 i386 x32)) GALLIUM_DRIVERS += crocus i915 iris svga VULKAN_DRIVERS += intel intel_hasvk # svga needs xa state tracker confflags_GALLIUM += -Dgallium-xa=enabled endif ifneq (,$(filter $(DEB_HOST_ARCH), amd64)) confflags_GALLIUM += -Dintel-clc=enabled endif ifneq (,$(filter $(DEB_HOST_ARCH), $(VALGRIND_ARCHS))) confflags_VALGRIND += -Dvalgrind=enabled endif # WSL supports only amd64 and arm64 ifneq (,$(filter $(DEB_HOST_ARCH), amd64 arm64)) GALLIUM_DRIVERS += d3d12 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 llvmpipe # drop virtio from armel, it doesn't build ifneq (,$(filter $(DEB_HOST_ARCH), armel)) VULKAN_DRIVERS += amd swrast else VULKAN_DRIVERS += amd swrast virtio 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 ifneq (,$(filter $(DEB_HOST_ARCH), $(NVK_ARCHS))) export MESON_PACKAGE_CACHE_DIR=/usr/share/cargo/registry/ VULKAN_DRIVERS += nouveau 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="all" endif # Teflon only supports arm64 ifneq (,$(filter $(DEB_HOST_ARCH), arm64)) confflags_TEFLON = -Dteflon=true endif endif ifeq ($(DEB_HOST_ARCH), i386) confflags_SSE2 = -Dsse2=false endif empty:= space := $(empty) $(empty) comma := , EGL_PLATFORMS := $(patsubst %,'%',$(EGL_PLATFORMS)) EGL_PLATFORMS_LIST := $(subst $(space),$(comma),$(EGL_PLATFORMS)) 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_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' \ -Dplatforms="[$(EGL_PLATFORMS_LIST)]" \ -Dvulkan-drivers="[$(VULKAN_DRIVERS_LIST)]" \ -Dvulkan-layers="[$(VULKAN_LAYERS_LIST)]" \ -Dglvnd=enabled \ -Dshared-glapi=enabled \ -Dgallium-omx=disabled \ -Db_ndebug=true \ -Dbuild-tests=true \ -Dtools=drm-shim \ $(confflags_DIRECT_RENDERING) \ $(confflags_GBM) \ $(confflags_DRI3) \ $(confflags_GALLIUM) \ $(confflags_GLES) \ $(confflags_OSMESA) \ $(confflags_SSE2) \ $(confflags_VALGRIND) \ $(confflags_TEFLON) rewrite_wrap_files: cp -r subprojects subprojects-save for crate in paste proc-macro2 quote syn unicode-ident; \ do \ export crate_namever=`basename $$MESON_PACKAGE_CACHE_DIR/$$crate-*`; \ sed -e"/source.*/d" -e"s,$${crate}-.*,$${crate_namever}," -i subprojects/$${crate}.wrap; \ done touch subprojects/rewrite override_dh_clean: regen_control dpkg-parsechangelog | awk '/^Version:/ {print $$2}' | sed 's/-.*//;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 rm -rf src/intel/vulkan/grl/parser.out rm -rf src/intel/vulkan/grl/parsetab.py for file in debian/*.links.in; do rm -f $${file%%.in}; done find -name '*.pyc' -delete find -name '__pycache__' -delete if [ -f subprojects/rewrite ]; then \ rm -rf subprojects; \ mv subprojects-save subprojects; \ fi dh_clean override_dh_auto_configure: rewrite_wrap_files 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 '{}' ';' # 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 ifneq (,$(filter $(DEB_HOST_ARCH), $(NVK_ARCHS))) rm debian/tmp/usr/bin/mme_fermi_sim_hw_test rm debian/tmp/usr/bin/mme_tu104_sim_hw_test endif # 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_makeshlibs: dh_makeshlibs -a -- -c4 %: 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,@NVK_ARCHS@,$(NVK_ARCHS),g" \ -e"s,@VALGRIND_ARCHS@,$(VALGRIND_ARCHS),g" \ -e"s,@WINE_ARCHS@,$(WINE_ARCHS),g" \ debian/control.in > debian/control