import glob import os from lib.make import * from lib import cpp, arch version("26.2.0") description("Open source implementations of OpenGL, OpenGL ES, Vulkan, OpenCL, and more") maintainer("sisungo ") source_url("https://archive.mesa3d.org/mesa-26.2.0.tar.xz") builddep("shortcut/meson") builddep("shortcut/c++") builddep("libwayland-dev @target") builddep("wayland-protocols @target") builddep("libffi-dev @target") builddep("libexpat-dev @target") builddep("pkgconf @target") builddep("libllvm-dev @target") builddep("libclang-dev @target") builddep("libunwind-dev @target") builddep("libz-ng-dev @target") builddep("libzstd-dev @target") builddep("libgldispatch-dev @target") builddep("libegl-dev @target") builddep("libopengl-dev @target") builddep("libglesv2-dev @target") builddep("libva-dev @target") builddep("libdrm-dev @target") builddep("libllvmspirv-dev @target") builddep("spirv-tools-dev @target") builddep("libpng-dev @target") builddep("libarchive-dev @target") builddep("aws-lc-dev @target") builddep("libxml2-dev @target") builddep("linux-dev @target") builddep("bison") builddep("flex") builddep("PyYAML.py") builddep("Mako.py") builddep("packaging.py") builddep("pycparser.py") builddep("glslang") archspec = { "aarch64-semios-linux": { "vulkan_drivers": [ "mesa-vulkan-asahi", "mesa-vulkan-freedreno", "mesa-vulkan-intel", "mesa-vulkan-lvp", "mesa-vulkan-panfrost", ], } } def build(): cpp.meson_setup([ # Generic directories f"--libdir=/lib/{arch.get_target()}", f"--includedir=/lib/{arch.get_target()}/include", f"--datadir=/share", # Platform selection "-Dplatforms=wayland", # User Features "-Dshader-cache=enabled", "-Dxmlconfig=enabled", # Gallium "-Dgallium-drivers=auto", "-Dgallium-va=enabled", f"-Dva-libs-path=/lib/{arch.get_target()}/dri", # Vulkan "-Dvulkan-drivers=auto", "-Dvulkan-layers=device-select,overlay,screenshot,anti-lag,vram-report-limit", f"-Dvulkan-icd-dir=/lib/{arch.get_target()}/vulkan/icd.d", "-Dvulkan-manifest-per-architecture=false", f"-Dvulkan-loader-rpath=/lib/{arch.get_target()}", # GLES "-Dgles1=disabled", "-Dgles2=enabled", # GBM "-Dgbm=enabled", f"-Dgbm-backends-path=/lib/{arch.get_target()}/gbm", f"-Ddri-drivers-path=/lib/{arch.get_target()}/dri", # EGL "-Degl=enabled", "-Degl-native-platform=surfaceless", # GLVND "-Dglvnd=enabled", # Hardware Video Decoding "-Dvideo-codecs=all_free", # Intel "-Dintel-rt=enabled", # LLVM Configuration "-Dllvm=enabled", "-Dshared-llvm=enabled", "-Dllvm-orcjit=true", # Libraries to use "-Dexpat=enabled", "-Dzstd=enabled", "-Dzlib=enabled", # X11-related stuff # We don't have X11 yet, so leave them disabled. "-Dxlib-lease=disabled", "-Dglx=disabled", ]) cpp.meson_compile() cpp.meson_install(move=False) on_build(build) libdir = f"lib/{arch.get_target()}" includedir = f"{libdir}/include" def composer_add(composer, src, dst): if os.path.isdir(src): composer.add_dir(src, dst) else: composer.addfile(src, dst) def pack_lib_simple(composer, name): composer.makedir("lib") for i in os.listdir(libdir): if name in i: composer_add(composer, f"{libdir}/{i}", f"lib/{i}") def pack_dev_simple(composer, name): composer.makedirs("lib/pkgconfig") composer.makedir("include") for i in os.listdir(f"{libdir}/pkgconfig"): if name in i: composer.addfile(f"{libdir}/pkgconfig/{i}", f"lib/pkgconfig/{i}") for i in os.listdir(includedir): if name in i: composer_add(composer, f"{includedir}/{i}", f"include/{i}") def pack_dri_dev(composer): composer.makedir("include") composer.add_dir(f"{includedir}/GL", "include/GL") composer.makedirs("lib/pkgconfig") composer.addfile(f"{libdir}/pkgconfig/dri.pc", "lib/pkgconfig/dri.pc") def pack_libgallium(composer): pack_lib_simple(composer, "gallium") composer.add_dir(f"{libdir}/dri", "lib/dri") composer.add_dir("share/drirc.d", "share/drirc.d") def pack_libegl(composer): pack_lib_simple(composer, "EGL") composer.add_dir("share/glvnd", "share/glvnd") def pack_vulkan(composer, name): composer.makedir("lib") composer.addfile(f"{libdir}/libvulkan_{name}.so", f"lib/libvulkan_{name}.so") composer.makedirs("lib/vulkan/icd.d") composer.addfile(f"{libdir}/vulkan/icd.d/{name}_icd.json", f"lib/vulkan/icd.d/{name}_icd.json") def hasvulkan(name): return name in archspec[arch.get_target()]["vulkan_drivers"] package("libgbm") dep("libdrm @same-arch") dep("semi-libc @same-arch") on_pack(lambda composer: pack_lib_simple(composer, "gbm")) package("libgbm-dev") dep("libdrm-dev @same-arch") dep("libgbm (same)") on_pack(lambda composer: pack_dev_simple(composer, "gbm")) package("libgallium") dep("libdrm @same-arch") dep("libllvm @same-arch") dep("libexpat @same-arch") dep("libz @same-arch") dep("libzstd @same-arch") dep("libcxx @same-arch") on_pack(pack_libgallium) package("mesa-dri-dev") on_pack(pack_dri_dev) package("libegl-mesa") dep("libgallium (same)") dep("libgbm (same)") dep("libexpat @same-arch") dep("libdrm @same-arch") dep("libwayland @same-arch") on_pack(pack_libegl) package("libegl-mesa-dev") dep("libgbm-dev (same)") dep("libexpat-dev @same-arch") dep("libdrm-dev @same-arch") dep("libwayland-dev @same-arch") dep("libegl-mesa (same)") on_pack(lambda composer: pack_dev_simple(composer, "EGL")) if hasvulkan("mesa-vulkan-asahi"): package("mesa-vulkan-asahi") dep("libdrm @same-arch") dep("libwayland @same-arch") dep("libz @same-arch") dep("libzstd @same-arch") dep("libcxx @same-arch") on_pack(lambda composer: pack_vulkan(composer, "asahi")) if hasvulkan("mesa-vulkan-freedreno"): package("mesa-vulkan-freedreno") dep("libdrm @same-arch") dep("libwayland @same-arch") dep("libz @same-arch") dep("libzstd @same-arch") dep("libcxx @same-arch") on_pack(lambda composer: pack_vulkan(composer, "freedreno")) if hasvulkan("mesa-vulkan-intel"): package("mesa-vulkan-intel") dep("libdrm @same-arch") dep("libwayland @same-arch") dep("libz @same-arch") dep("libzstd @same-arch") dep("libcxx @same-arch") on_pack(lambda composer: pack_vulkan(composer, "intel")) if hasvulkan("mesa-vulkan-lvp"): package("mesa-vulkan-lvp") dep("libdrm @same-arch") dep("libwayland @same-arch") dep("libz @same-arch") dep("libzstd @same-arch") dep("libcxx @same-arch") on_pack(lambda composer: pack_vulkan(composer, "lvp")) if hasvulkan("mesa-vulkan-panfrost"): package("mesa-vulkan-panfrost") dep("libdrm @same-arch") dep("libwayland @same-arch") dep("libz @same-arch") dep("libzstd @same-arch") dep("libcxx @same-arch") on_pack(lambda composer: pack_vulkan(composer, "panfrost"))