diff --git a/packages/mesa/pkgbuild.py b/packages/mesa/pkgbuild.py new file mode 100644 index 0000000..8822a36 --- /dev/null +++ b/packages/mesa/pkgbuild.py @@ -0,0 +1,258 @@ +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(f"libwayland-dev @{arch.get_target()}") +builddep(f"libffi-dev @{arch.get_target()}") +builddep(f"libexpat-dev @{arch.get_target()}") +builddep(f"pkgconf @{arch.get_target()}") +builddep(f"libllvm-dev @{arch.get_target()}") +builddep(f"libclang-dev @{arch.get_target()}") +builddep(f"libunwind-dev @{arch.get_target()}") +builddep(f"libz-ng-dev @{arch.get_target()}") +builddep(f"libzstd-dev @{arch.get_target()}") +builddep(f"libgldispatch-dev @{arch.get_target()}") +builddep(f"libegl-dev @{arch.get_target()}") +builddep(f"libopengl-dev @{arch.get_target()}") +builddep(f"libglesv2-dev @{arch.get_target()}") +builddep(f"libva-dev @{arch.get_target()}") +builddep(f"libdrm-dev @{arch.get_target()}") +builddep(f"libllvmspirv-dev @{arch.get_target()}") +builddep(f"spirv-tools-dev @{arch.get_target()}") +builddep(f"libpng-dev @{arch.get_target()}") +builddep(f"libarchive-dev @{arch.get_target()}") +builddep(f"aws-lc-dev @{arch.get_target()}") +builddep(f"libxml2-dev @{arch.get_target()}") +builddep(f"linux-dev @{arch.get_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"))