| 1 | #!/usr/bin/make -f |
| 2 | # debian/rules for the Debian mesa package |
| 3 | # Copyright © 2006 Thierry Reding <thierry@gilfi.de> |
| 4 | |
| 5 | # Uncomment this to turn on verbose mode. |
| 6 | #export DH_VERBOSE=1 |
| 7 | |
| 8 | include /usr/share/dpkg/pkg-info.mk |
| 9 | |
| 10 | DEB_HOST_MULTIARCH ?= $(shell dpkg-architecture -qDEB_HOST_MULTIARCH) |
| 11 | DEB_HOST_ARCH ?= $(shell dpkg-architecture -qDEB_HOST_ARCH) |
| 12 | DEB_HOST_ARCH_OS ?= $(shell dpkg-architecture -qDEB_HOST_ARCH_OS) |
| 13 | DEB_HOST_ARCH_CPU ?= $(shell dpkg-architecture -qDEB_HOST_ARCH_CPU) |
| 14 | |
| 15 | # for finding the correct llvm-config when meson doesn't know about it yet |
| 16 | export PATH:=/usr/lib/llvm-15/bin/:$(PATH) |
| 17 | |
| 18 | export DEB_BUILD_MAINT_OPTIONS=optimize=-lto |
| 19 | |
| 20 | ifeq (,$(filter $(DEB_HOST_ARCH), armhf ppc64el sh3 sh4)) |
| 21 | buildflags = \ |
| 22 | $(shell DEB_CFLAGS_MAINT_APPEND=-Wall DEB_CXXFLAGS_MAINT_APPEND=-Wall dpkg-buildflags --export=configure) |
| 23 | else |
| 24 | ifneq (,$(filter $(DEB_HOST_ARCH), armhf)) |
| 25 | # Workaround for a variant of LP: #725126 |
| 26 | buildflags = \ |
| 27 | $(shell DEB_CFLAGS_MAINT_APPEND="-Wall -fno-optimize-sibling-calls" DEB_CXXFLAGS_MAINT_APPEND="-Wall -fno-optimize-sibling-calls" dpkg-buildflags --export=configure) |
| 28 | else |
| 29 | ifneq (,$(filter $(DEB_HOST_ARCH), ppc64el)) |
| 30 | # Workaround for https://gitlab.freedesktop.org/mesa/mesa/-/issues/5315 |
| 31 | buildflags = \ |
| 32 | $(shell DEB_CFLAGS_MAINT_APPEND="-Wall -O2" DEB_CXXFLAGS_MAINT_APPEND="-Wall -O2" dpkg-buildflags --export=configure) |
| 33 | else |
| 34 | # Workaround for https://gcc.gnu.org/bugzilla/show_bug.cgi?id=83143 |
| 35 | buildflags = \ |
| 36 | $(shell DEB_CFLAGS_MAINT_APPEND="-Wall -O1" DEB_CXXFLAGS_MAINT_APPEND="-Wall -O1" dpkg-buildflags --export=configure) |
| 37 | endif |
| 38 | endif |
| 39 | endif |
| 40 | |
| 41 | EGL_PLATFORMS = x11 |
| 42 | GALLIUM_DRIVERS = swrast |
| 43 | VULKAN_DRIVERS = swrast |
| 44 | VULKAN_LAYERS = |
| 45 | |
| 46 | confflags_DRI3 = -Ddri3=disabled |
| 47 | confflags_OSMESA = -Dosmesa=true |
| 48 | confflags_SSE2 = -Dsse2=true |
| 49 | |
| 50 | # hurd doesn't do direct rendering |
| 51 | ifeq ($(DEB_HOST_ARCH_OS), hurd) |
| 52 | confflags_DIRECT_RENDERING = -Dglx-direct=false |
| 53 | confflags_GBM = -Dgbm=disabled |
| 54 | else |
| 55 | GALLIUM_DRIVERS += r300 r600 asahi kmsro |
| 56 | |
| 57 | confflags_DIRECT_RENDERING = -Dglx-direct=true |
| 58 | confflags_GBM = -Dgbm=enabled |
| 59 | confflags_GALLIUM += -Dgallium-extra-hud=true |
| 60 | confflags_GALLIUM += -Dgallium-vdpau=enabled |
| 61 | confflags_GALLIUM += -Dlmsensors=enabled |
| 62 | |
| 63 | # radv/lavapipe needs LLVM and the Vulkan loader, so only build on the subset of |
| 64 | # arches where we have LLVM enabled and where the Vulkan loader is built. |
| 65 | ifneq (,$(filter $(DEB_HOST_ARCH), amd64 arm64 armel armhf i386 mips64el mipsel powerpc ppc64 ppc64el s390x sparc64)) |
| 66 | VULKAN_DRIVERS += amd swrast |
| 67 | endif |
| 68 | |
| 69 | # Only enable amd on riscv64, swrast needs CPU JIT support which doesn't work properly yet |
| 70 | ifneq (,$(filter $(DEB_HOST_ARCH), riscv64)) |
| 71 | VULKAN_DRIVERS += amd |
| 72 | confflags_GALLIUM += -Ddraw-use-llvm=false |
| 73 | endif |
| 74 | |
| 75 | ifeq ($(DEB_HOST_ARCH_OS), linux) |
| 76 | confflags_DRI3 = -Ddri3=enabled |
| 77 | # Gallium drivers which require kernel support, not yet ported to non-Linux |
| 78 | GALLIUM_DRIVERS += nouveau virgl |
| 79 | |
| 80 | # Freedreno requires arm in addition |
| 81 | ifneq (,$(filter arm arm64,$(DEB_HOST_ARCH_CPU))) |
| 82 | GALLIUM_DRIVERS += freedreno |
| 83 | endif |
| 84 | |
| 85 | # etnaviv, tegra, vc4 and v3d kernel support are only available on armhf and arm64 |
| 86 | ifneq (,$(filter $(DEB_HOST_ARCH), armhf arm64)) |
| 87 | GALLIUM_DRIVERS += etnaviv panfrost svga tegra vc4 v3d |
| 88 | VULKAN_DRIVERS += broadcom freedreno |
| 89 | endif |
| 90 | |
| 91 | ifneq (,$(filter $(DEB_HOST_ARCH), armhf arm64 riscv64)) |
| 92 | GALLIUM_DRIVERS += lima |
| 93 | endif |
| 94 | |
| 95 | ifneq (,$(filter $(DEB_HOST_ARCH), amd64 i386 x32)) |
| 96 | GALLIUM_DRIVERS += svga |
| 97 | # svga needs xa state tracker |
| 98 | confflags_GALLIUM += -Dgallium-xa=enabled |
| 99 | VULKAN_DRIVERS += intel |
| 100 | endif |
| 101 | |
| 102 | # Non-Linux ports lack epoll, so wayland isn't ready yet: |
| 103 | # https://gitlab.freedesktop.org/wayland/wayland/-/issues/72 |
| 104 | # hurd also lacks *_CLOEXEC |
| 105 | EGL_PLATFORMS += ,wayland |
| 106 | |
| 107 | ifneq (,$(filter $(DEB_HOST_ARCH), amd64 arm64 armhf i386 mips64el mipsel powerpc ppc64 ppc64el s390x)) |
| 108 | confflags_VALGRIND += -Dvalgrind=enabled |
| 109 | endif |
| 110 | |
| 111 | # WSL supports only amd64 and arm64 |
| 112 | ifneq (,$(filter amd64 arm64,$(DEB_HOST_ARCH))) |
| 113 | GALLIUM_DRIVERS += d3d12 |
| 114 | endif |
| 115 | endif |
| 116 | |
| 117 | # Build intel drivers on archs where libdrm-intel is installed |
| 118 | ifneq (,$(filter $(DEB_HOST_ARCH),amd64 i386 kfreebsd-amd64 kfreebsd-i386 x32)) |
| 119 | GALLIUM_DRIVERS += iris crocus |
| 120 | endif |
| 121 | |
| 122 | # LLVM is required for building r300g, radeonsi and llvmpipe drivers. |
| 123 | # It's also required for building OpenCL support. |
| 124 | ifneq (,$(filter $(DEB_HOST_ARCH), amd64 arm64 armel armhf i386 mips64el mipsel powerpc ppc64 ppc64el riscv64 s390x sparc64)) |
| 125 | GALLIUM_DRIVERS += radeonsi |
| 126 | confflags_GALLIUM += -Dllvm=enabled |
| 127 | confflags_GALLIUM += -Dgallium-opencl=disabled |
| 128 | confflags_GALLIUM += -Dgallium-rusticl=false |
| 129 | |
| 130 | # nine makes sense only on archs that build wine |
| 131 | ifneq (,$(filter $(DEB_HOST_ARCH), amd64 arm64 armel armhf i386 powerpc)) |
| 132 | confflags_GALLIUM += -Dgallium-nine=true |
| 133 | endif |
| 134 | else |
| 135 | confflags_GALLIUM += -Dllvm=disabled |
| 136 | endif |
| 137 | |
| 138 | # build vulkan layers where Vulkan loader is available |
| 139 | ifneq (,$(filter $(DEB_HOST_ARCH), amd64 arm64 armel armhf i386 mips64el mipsel powerpc ppc64 ppc64el riscv64 s390x sparc64 x32)) |
| 140 | GALLIUM_DRIVERS += zink |
| 141 | VULKAN_LAYERS += device-select intel-nullhw overlay |
| 142 | endif |
| 143 | |
| 144 | ifeq (,$(filter pkg.mesa.nolibva,$(DEB_BUILD_PROFILES))) |
| 145 | confflags_GALLIUM += -Dgallium-va=enabled |
| 146 | confflags_GALLIUM += -Dvideo-codecs="vc1dec, h264dec, h264enc, h265dec, h265enc" |
| 147 | endif |
| 148 | endif |
| 149 | |
| 150 | ifeq ($(DEB_HOST_ARCH), i386) |
| 151 | confflags_SSE2 = -Dsse2=false |
| 152 | endif |
| 153 | |
| 154 | empty:= |
| 155 | space := $(empty) $(empty) |
| 156 | comma := , |
| 157 | GALLIUM_DRIVERS := $(patsubst %,'%',$(GALLIUM_DRIVERS)) |
| 158 | GALLIUM_DRIVERS_LIST := $(subst $(space),$(comma),$(GALLIUM_DRIVERS)) |
| 159 | VULKAN_DRIVERS := $(patsubst %,'%',$(VULKAN_DRIVERS)) |
| 160 | VULKAN_DRIVERS_LIST := $(subst $(space),$(comma),$(VULKAN_DRIVERS)) |
| 161 | VULKAN_LAYERS := $(patsubst %,'%',$(VULKAN_LAYERS)) |
| 162 | VULKAN_LAYERS_LIST := $(subst $(space),$(comma),$(VULKAN_LAYERS)) |
| 163 | |
| 164 | confflags_EGL = -Dplatforms="$(EGL_PLATFORMS)" |
| 165 | confflags_GLES = -Dgles1=disabled -Dgles2=enabled |
| 166 | confflags_GALLIUM += -Dgallium-drivers="[$(GALLIUM_DRIVERS_LIST)]" |
| 167 | |
| 168 | confflags += \ |
| 169 | -Ddri-drivers-path=/usr/lib/$(DEB_HOST_MULTIARCH)/dri \ |
| 170 | -Ddri-search-path='/usr/lib/$(DEB_HOST_MULTIARCH)/dri:\$$$${ORIGIN}/dri:/usr/lib/dri' \ |
| 171 | -Dvulkan-drivers="[$(VULKAN_DRIVERS_LIST)]" \ |
| 172 | -Dvulkan-layers="[$(VULKAN_LAYERS_LIST)]" \ |
| 173 | -Dglvnd=true \ |
| 174 | -Dshared-glapi=enabled \ |
| 175 | -Dgallium-omx=disabled \ |
| 176 | -Db_ndebug=true \ |
| 177 | -Dbuild-tests=true \ |
| 178 | -Dlibunwind=disabled \ |
| 179 | -Degl=enabled \ |
| 180 | -Dgallium-va=disabled \ |
| 181 | -Dgallium-vdpau=disabled \ |
| 182 | -Dgallium-xa=disabled \ |
| 183 | -Dglx=dri \ |
| 184 | -Dmicrosoft-clc=disabled \ |
| 185 | $(confflags_DIRECT_RENDERING) \ |
| 186 | $(confflags_GBM) \ |
| 187 | $(confflags_DRI3) \ |
| 188 | $(confflags_EGL) \ |
| 189 | $(confflags_GALLIUM) \ |
| 190 | $(confflags_GLES) \ |
| 191 | $(confflags_OSMESA) \ |
| 192 | $(confflags_SSE2) \ |
| 193 | $(confflags_VALGRIND) |
| 194 | |
| 195 | override_dh_clean: |
| 196 | rm -rf .pc |
| 197 | rm -rf build |
| 198 | rm -rf configure bin/config.guess bin/config.sub config.h.in |
| 199 | rm -rf $$(find -name Makefile.in) |
| 200 | rm -rf bin/install-sh bin/ltmain.sh |
| 201 | for file in debian/*.in; do rm -f $${file%%.in}; done |
| 202 | find -name '*.pyc' -delete |
| 203 | find -name '__pycache__' -delete |
| 204 | dh_clean |
| 205 | |
| 206 | override_dh_auto_configure: |
| 207 | $(buildflags) dh_auto_configure -- \ |
| 208 | $(confflags) |
| 209 | |
| 210 | override_dh_auto_install: |
| 211 | dh_auto_install |
| 212 | for file in debian/*.in; \ |
| 213 | do \ |
| 214 | sed -e"s,\$${DEB_HOST_MULTIARCH},$(DEB_HOST_MULTIARCH),g" \ |
| 215 | $${file} > $${file%%.in}; \ |
| 216 | done |
| 217 | |
| 218 | # some tests are expected to fail for now, drop this when upstream has |
| 219 | # better cross-build testing in place and expected failures fixed |
| 220 | override_dh_auto_test: |
| 221 | -dh_auto_test |
| 222 | |
| 223 | allpkg = $(shell dh_listpackages -a) |
| 224 | |
| 225 | override_dh_installchangelogs: |
| 226 | dh_installchangelogs -a |
| 227 | dh_installchangelogs -pmesa-common-dev |
| 228 | |
| 229 | override_dh_install: |
| 230 | # purge .la files |
| 231 | find debian/tmp/ -name '*.la' -exec rm '{}' ';' |
| 232 | |
| 233 | # Get rid of some files which aren't installed. Do not |
| 234 | # use -f to ensure we notice disappearing files: |
| 235 | rm debian/tmp/usr/lib/*/libglapi.so |
| 236 | rm debian/tmp/usr/lib/*/libEGL_mesa.so |
| 237 | rm debian/tmp/usr/lib/*/libGLX_mesa.so |
| 238 | |
| 239 | # Copy the hardlinked *_dri.so correctly. |
| 240 | install -m755 -d debian/libgl1-mesa-dri/usr/lib/${DEB_HOST_MULTIARCH}/dri/ |
| 241 | mv debian/tmp/usr/lib/${DEB_HOST_MULTIARCH}/dri/*_dri.so \ |
| 242 | debian/libgl1-mesa-dri/usr/lib/${DEB_HOST_MULTIARCH}/dri/ |
| 243 | |
| 244 | ifneq ($(DEB_HOST_ARCH_OS), hurd) |
| 245 | # Copy the hardlinked vdpau drivers correctly. |
| 246 | install -m755 -d debian/mesa-vdpau-drivers/usr/lib/${DEB_HOST_MULTIARCH}/vdpau/ |
| 247 | mv debian/tmp/usr/lib/${DEB_HOST_MULTIARCH}/vdpau/libvdpau*.so* \ |
| 248 | debian/mesa-vdpau-drivers/usr/lib/${DEB_HOST_MULTIARCH}/vdpau/ |
| 249 | |
| 250 | ifeq (,$(filter pkg.mesa.nolibva,$(DEB_BUILD_PROFILES))) |
| 251 | # Copy the hardlinked va drivers correctly. |
| 252 | install -m755 -d debian/mesa-va-drivers/usr/lib/${DEB_HOST_MULTIARCH}/dri/ |
| 253 | mv debian/tmp/usr/lib/${DEB_HOST_MULTIARCH}/dri/*_drv_video.so \ |
| 254 | debian/mesa-va-drivers/usr/lib/${DEB_HOST_MULTIARCH}/dri/ |
| 255 | endif |
| 256 | endif |
| 257 | |
| 258 | dh_install -a |
| 259 | |
| 260 | # Install bug control and script: |
| 261 | set -e; for p in $(allpkg); do \ |
| 262 | install -d debian/$$p/usr/share/bug/$$p && \ |
| 263 | install -m 644 debian/local/control debian/$$p/usr/share/bug/$$p && \ |
| 264 | install -m 755 debian/local/script debian/$$p/usr/share/bug/$$p; \ |
| 265 | done |
| 266 | |
| 267 | override_dh_missing: |
| 268 | dh_missing --fail-missing |
| 269 | |
| 270 | override_dh_makeshlibs: |
| 271 | dh_makeshlibs -a -- -c4 |
| 272 | |
| 273 | %: |
| 274 | dh $@ --with quilt \ |
| 275 | --builddirectory=build/ \ |
| 276 | --buildsystem=meson |
| 277 | |
| 278 | # For maintainer use only, generate a tarball: |
| 279 | gentarball: |
| 280 | git archive --format=tar upstream-experimental --prefix=$(DEB_SOURCE)-$(DEB_VERSION_UPSTREAM)/ \ |
| 281 | | gzip -9 > ../$(DEB_SOURCE)_$(DEB_VERSION_UPSTREAM).orig.tar.gz |