From 831bed50942341f9198c2eeef0c99c69a1839fe8 Mon Sep 17 00:00:00 2001 From: lfdevs Date: Tue, 21 Jul 2026 10:29:42 +0800 Subject: [PATCH] [Debug Build] Mesa Freedreno KGSL & Turnip --- .../0007-use-mtx_t-operations-in-turnip.patch | 10 +- .../mesa/0013-detect-sve-sve2-support.patch | 59 ------ ...nofficial_support_adreno_710_720_722.patch | 74 -------- .../0017-preserve-egl-support-in-zink.patch | 40 ---- ...le-general-layout-in-zink-for-turnip.patch | 22 --- .../0022-fix-epoll-header-inclusion.patch | 24 +++ packages/mesa/build.sh | 171 ++++++++++-------- .../mesa/mesa-vulkan-icd-virtio.subpackage.sh | 7 - 8 files changed, 120 insertions(+), 287 deletions(-) delete mode 100644 packages/mesa/0013-detect-sve-sve2-support.patch delete mode 100644 packages/mesa/0016-unofficial_support_adreno_710_720_722.patch delete mode 100644 packages/mesa/0017-preserve-egl-support-in-zink.patch delete mode 100644 packages/mesa/0018-disable-general-layout-in-zink-for-turnip.patch create mode 100644 packages/mesa/0022-fix-epoll-header-inclusion.patch delete mode 100644 packages/mesa/mesa-vulkan-icd-virtio.subpackage.sh diff --git a/packages/mesa/0007-use-mtx_t-operations-in-turnip.patch b/packages/mesa/0007-use-mtx_t-operations-in-turnip.patch index 5470749da8e..616dfed1a14 100644 --- a/packages/mesa/0007-use-mtx_t-operations-in-turnip.patch +++ b/packages/mesa/0007-use-mtx_t-operations-in-turnip.patch @@ -1,6 +1,6 @@ --- a/src/freedreno/vulkan/tu_shader.cc +++ b/src/freedreno/vulkan/tu_shader.cc -@@ -1980,10 +1980,10 @@ +@@ -2694,10 +2694,10 @@ tu_upload_shader(struct tu_device *dev, size += vpc_size; } @@ -13,7 +13,7 @@ if (result != VK_SUCCESS) return result; -@@ -2013,9 +2013,9 @@ +@@ -2727,9 +2727,9 @@ tu_upload_shader(struct tu_device *dev, result = tu_setup_pvtmem(dev, shader, &pvtmem_config, pvtmem_size, per_wave); if (result != VK_SUCCESS) { @@ -25,7 +25,7 @@ return result; } -@@ -2419,10 +2419,10 @@ +@@ -3531,10 +3531,10 @@ tu_empty_shader_create(struct tu_device *dev, if (!shader) return VK_ERROR_OUT_OF_HOST_MEMORY; @@ -38,9 +38,9 @@ if (result != VK_SUCCESS) { vk_free(&dev->vk.alloc, shader); -@@ -2528,9 +2528,9 @@ - { +@@ -3645,9 +3645,9 @@ tu_shader_destroy(struct tu_device *dev, tu_cs_finish(&shader->cs); + TU_RMV(resource_destroy, dev, &shader->bo); - pthread_mutex_lock(&dev->pipeline_mutex); + mtx_lock(&dev->pipeline_mutex); diff --git a/packages/mesa/0013-detect-sve-sve2-support.patch b/packages/mesa/0013-detect-sve-sve2-support.patch deleted file mode 100644 index a9d2a422e04..00000000000 --- a/packages/mesa/0013-detect-sve-sve2-support.patch +++ /dev/null @@ -1,59 +0,0 @@ -https://github.com/llvm/llvm-project/issues/114987 -https://github.com/termux/termux-packages/issues/24544 - ---- a/src/gallium/auxiliary/gallivm/lp_bld_misc.cpp -+++ b/src/gallium/auxiliary/gallivm/lp_bld_misc.cpp -@@ -88,6 +88,23 @@ - #include "lp_bld_misc.h" - #include "lp_bld_debug.h" - -+#if __has_include() -+#include -+#define HAVE_SYS_AUXV 1 -+#ifndef AT_HWCAP -+#define AT_HWCAP 16 -+#endif -+#ifndef AT_HWCAP2 -+#define AT_HWCAP2 26 -+#endif -+#ifndef HWCAP_SVE -+#define HWCAP_SVE (1 << 22) -+#endif -+#ifndef HWCAP2_SVE2 -+#define HWCAP2_SVE2 (1 << 1) -+#endif -+#endif -+ - static void lp_run_atexit_for_destructors(void); - - namespace { -@@ -446,6 +463,29 @@ - MAttrs.push_back("-lasx"); - #endif - #endif -+ -+#if DETECT_ARCH_AARCH64 && defined(HAVE_SYS_AUXV) -+ // Guess SVE/SVE2 support on ARM64 -+ bool has_sve = getauxval(AT_HWCAP) & HWCAP_SVE; -+ bool has_sve2 = getauxval(AT_HWCAP2) & HWCAP2_SVE2; -+ MAttrs.push_back(has_sve ? "+sve" : "-sve"); -+ MAttrs.push_back(has_sve2 ? "+sve2" : "-sve2"); -+#endif -+ -+ // Allow adding extra MAttrs through envs -+ char *env_extra_mattrs = getenv("GALLIVM_EXTRA_MATTRS"); -+ if (env_extra_mattrs != NULL) { -+ char *dup = strdup(env_extra_mattrs); -+ if (dup != NULL) { -+ char *state; -+ char *token = strtok_r(dup, ",", &state); -+ while (token) { -+ MAttrs.push_back(token); -+ token = strtok_r(NULL, ",", &state); -+ } -+ free(dup); -+ } -+ } - } - - void diff --git a/packages/mesa/0016-unofficial_support_adreno_710_720_722.patch b/packages/mesa/0016-unofficial_support_adreno_710_720_722.patch deleted file mode 100644 index 068e6702115..00000000000 --- a/packages/mesa/0016-unofficial_support_adreno_710_720_722.patch +++ /dev/null @@ -1,74 +0,0 @@ -Created by, or sourced from, Vauzi-17 -https://github.com/Vauzi-17/710 -Upstream issue: -https://gitlab.freedesktop.org/mesa/mesa/-/issues/13036 - ---- a/src/freedreno/common/freedreno_devices.py -+++ b/src/freedreno/common/freedreno_devices.py -@@ -1149,6 +1149,66 @@ a740_raw_magic_regs = [ - [A6XXRegs.REG_A6XX_UCHE_UNKNOWN_0E12, 0], - ] - -+add_gpus([ -+ GPUId(chip_id=0x07010000, name="FD710"), -+ GPUId(chip_id=0xffff07010000, name="FD710"), -+ ], A6xxGPUInfo( -+ CHIP.A7XX, -+ [a7xx_base, a7xx_gen1], -+ num_ccu = 3, -+ tile_align_w = 64, -+ tile_align_h = 32, -+ tile_max_w = 1024, -+ tile_max_h = 1024, -+ num_vsc_pipes = 32, -+ cs_shared_mem_size = 32 * 1024, -+ wave_granularity = 2, -+ fibers_per_sp = 128 * 2 * 16, -+ highest_bank_bit = 16, -+ magic_regs = a730_magic_regs, -+ raw_magic_regs = a730_raw_magic_regs, -+ )) -+ -+add_gpus([ -+ GPUId(chip_id=0x43020000, name="FD720"), -+ GPUId(chip_id=0xffff43020000, name="FD720"), -+ ], A6xxGPUInfo( -+ CHIP.A7XX, -+ [a7xx_base, a7xx_gen1], -+ num_ccu = 3, -+ tile_align_w = 64, -+ tile_align_h = 32, -+ tile_max_w = 1024, -+ tile_max_h = 1024, -+ num_vsc_pipes = 32, -+ cs_shared_mem_size = 32 * 1024, -+ wave_granularity = 2, -+ fibers_per_sp = 128 * 2 * 16, -+ highest_bank_bit = 16, -+ magic_regs = a730_magic_regs, -+ raw_magic_regs = a730_raw_magic_regs, -+ )) -+ -+add_gpus([ -+ GPUId(chip_id=0x43020100, name="FD722"), -+ GPUId(chip_id=0xffff43020100, name="FD722"), -+ ], A6xxGPUInfo( -+ CHIP.A7XX, -+ [a7xx_base, a7xx_gen1], -+ num_ccu = 3, -+ tile_align_w = 64, -+ tile_align_h = 32, -+ tile_max_w = 1024, -+ tile_max_h = 1024, -+ num_vsc_pipes = 32, -+ cs_shared_mem_size = 32 * 1024, -+ wave_granularity = 2, -+ fibers_per_sp = 128 * 2 * 16, -+ highest_bank_bit = 16, -+ magic_regs = a730_magic_regs, -+ raw_magic_regs = a730_raw_magic_regs, -+ )) -+ - add_gpus([ - # These are named as Adreno730v3 or Adreno725v1. - GPUId(chip_id=0x07030002, name="FD725"), diff --git a/packages/mesa/0017-preserve-egl-support-in-zink.patch b/packages/mesa/0017-preserve-egl-support-in-zink.patch deleted file mode 100644 index 34a793c68ac..00000000000 --- a/packages/mesa/0017-preserve-egl-support-in-zink.patch +++ /dev/null @@ -1,40 +0,0 @@ -mesa upstream code 'thinks' that if 'x11_dri3_open()' -has a negative retval, then DRI3 EGL acceleration in Zink with the current settings -is impossible in all cases and it disables Zink and falls back to software rendering. - -However, Termux:X11 is a 3rd party edge case where, in actual testing, -for a very long time throughout the past year of mesa releases, -even if 'x11_dri3_open()' has a negative retval, -for some reason Zink+Tunip GPU acceleration still works if force-enabled -anytime that software rendering is not the initial default. - -This 'Termux-unaware' upstream mesa codepath that fails to 'understand' the true -capabilities of Zink+Turnip+Termux:X11 has gradually been building up in the background -for the last several months, but in this commit: -https://gitlab.freedesktop.org/mesa/mesa/-/commit/3294cad34159bd5317e3dfb0cb4e0ba5caca9f77 -the 'switch was flipped' to the new codepath, so to speak, locking vanilla mesa's EGL -support away from the Zink+Turnip+Termux:X11 codepath unless some kind of intervention -is performed, such as this patch. - ---- a/src/egl/drivers/dri2/platform_x11_dri3.c -+++ b/src/egl/drivers/dri2/platform_x11_dri3.c -@@ -535,7 +535,7 @@ dri3_x11_connect(struct dri2_egl_display *dri2_dpy, bool swrast) - _eglLog(_EGL_WARNING, "DRI3: Failed to initialize"); - } - -- return false; -+ return true; - } - - loader_get_user_preferred_fd(&dri2_dpy->fd_render_gpu, ---- a/src/egl/main/eglapi.c -+++ b/src/egl/main/eglapi.c -@@ -683,7 +683,7 @@ eglInitialize(EGLDisplay dpy, EGLint *major, EGLint *minor) - "Found 'LIBGL_ALWAYS_SOFTWARE' set, will use a CPU renderer"); - - const char *env = os_get_option("MESA_LOADER_DRIVER_OVERRIDE"); -- disp->Options.Zink = env && !strcmp(env, "zink"); -+ disp->Options.Zink = !env || !strcmp(env, "zink"); - - const char *gallium_hud_env = os_get_option("GALLIUM_HUD"); - disp->Options.GalliumHudWarn = diff --git a/packages/mesa/0018-disable-general-layout-in-zink-for-turnip.patch b/packages/mesa/0018-disable-general-layout-in-zink-for-turnip.patch deleted file mode 100644 index dc6d5eaa11b..00000000000 --- a/packages/mesa/0018-disable-general-layout-in-zink-for-turnip.patch +++ /dev/null @@ -1,22 +0,0 @@ -Partially reverts https://gitlab.freedesktop.org/mesa/mesa/-/commit/622612f67ea72298c3d85dfe53c5d54ee9f98527 -because that commit causes severe artifacts in Webrender in Firefox in Termux:X11 with GLX enabled and EGL -force-disabled in Zink in Turnip on Adreno devices, while using the about:config settings -gfx.webrender.all=true and gfx.x11-egl.force-disabled=true, -and doing this prevents the artifacts from occurring. - ---- a/src/gallium/drivers/zink/zink_screen.c -+++ b/src/gallium/drivers/zink/zink_screen.c -@@ -3044,10 +3044,12 @@ init_driver_workarounds(struct zink_screen *screen) - case VK_DRIVER_ID_MESA_LLVMPIPE: - case VK_DRIVER_ID_MESA_NVK: - case VK_DRIVER_ID_NVIDIA_PROPRIETARY: -- case VK_DRIVER_ID_MESA_TURNIP: - case VK_DRIVER_ID_QUALCOMM_PROPRIETARY: - screen->driver_workarounds.general_layout = true; - break; -+ case VK_DRIVER_ID_MESA_TURNIP: -+ screen->driver_workarounds.general_layout = false; -+ break; - default: - screen->driver_workarounds.general_layout = screen->info.have_KHR_unified_image_layouts; - break; diff --git a/packages/mesa/0022-fix-epoll-header-inclusion.patch b/packages/mesa/0022-fix-epoll-header-inclusion.patch new file mode 100644 index 00000000000..0c4c128dde5 --- /dev/null +++ b/packages/mesa/0022-fix-epoll-header-inclusion.patch @@ -0,0 +1,24 @@ +diff --git a/src/util/os_file.c b/src/util/os_file.c +index d3d3fb01580..ffffb6d4d06 100644 +--- a/src/util/os_file.c ++++ b/src/util/os_file.c +@@ -200,6 +200,10 @@ os_read_file(const char *filename, size_t *size) + return buf; + } + ++#if DETECT_OS_LINUX ++#include ++#endif ++ + #if (DETECT_OS_LINUX || DETECT_OS_FREEBSD) && ALLOW_KCMP + + #include +@@ -210,8 +214,6 @@ os_read_file(const char *filename, size_t *size) + #define KCMP_FILE 0 + #endif + +-#elif DETECT_OS_LINUX +-#include + #endif + + #if DETECT_OS_DRAGONFLY || DETECT_OS_FREEBSD diff --git a/packages/mesa/build.sh b/packages/mesa/build.sh index b556dd721c5..ecaf16cb77d 100644 --- a/packages/mesa/build.sh +++ b/packages/mesa/build.sh @@ -3,10 +3,12 @@ TERMUX_PKG_DESCRIPTION="An open-source implementation of the OpenGL specificatio TERMUX_PKG_LICENSE="MIT" TERMUX_PKG_LICENSE_FILE="docs/license.rst" TERMUX_PKG_MAINTAINER="@termux" -TERMUX_PKG_VERSION="26.2.3" -TERMUX_PKG_SRCURL="https://archive.mesa3d.org/mesa-${TERMUX_PKG_VERSION}.tar.xz" -TERMUX_PKG_SHA256=1628058a8d2c0615975de5a15ab7bbb9638c50000b5bed9456ff423ea034a81f -TERMUX_PKG_AUTO_UPDATE=true +TERMUX_PKG_VERSION="26.3.0" +TERMUX_PKG_REVISION=99 +TERMUX_PKG_SRCURL=git+https://github.com/lfdevs/mesa-for-android-container.git +TERMUX_PKG_GIT_BRANCH=test/a850-support +_COMMIT=ead27cf16d5969249f956b7a53f0250eb9ba1206 +TERMUX_PKG_AUTO_UPDATE=false TERMUX_PKG_DEPENDS="libandroid-shmem, libc++, libdrm, libglvnd, libllvm (<< $TERMUX_LLVM_NEXT_MAJOR_VERSION), libwayland, libx11, libxext, libxfixes, libxshmfence, libxxf86vm, ncurses, vulkan-loader, zlib, zstd" TERMUX_PKG_SUGGESTS="mesa-dev" TERMUX_PKG_BUILD_DEPENDS="libclc, libwayland-cross-scanner, libwayland-protocols, libxrandr, llvm, llvm-tools, mlir, spirv-tools, xorgproto" @@ -28,50 +30,35 @@ TERMUX_PKG_EXTRA_CONFIGURE_ARGS=" -Dllvm=enabled -Dshared-llvm=enabled -Dplatforms=x11,wayland --Dgallium-drivers=llvmpipe,softpipe,virgl,zink -Dgallium-rusticl=true -Dglvnd=enabled -Dxmlconfig=disabled --Dmesa-clc=system " termux_step_host_build() { - # get the elusive mesa_clc program to run during the second stage build - - local srcdir - if [[ "$TERMUX_ON_DEVICE_BUILD" == "false" ]]; then - srcdir="$TERMUX_PKG_SRCDIR" - else - srcdir="$TERMUX_PKG_HOSTBUILD_DIR/source" - cp -r "$TERMUX_PKG_SRCDIR" "$srcdir" - local p - for p in "$TERMUX_SCRIPTDIR"/packages/mesa/*.patch; do - echo "Applying $(basename "${p}")" - sed "s|@TERMUX_PREFIX@|${TERMUX_PREFIX}|g" "${p}" \ - | patch --silent -p1 -d "$srcdir" - done + if [[ "$TERMUX_ON_DEVICE_BUILD" == "true" ]]; then + return fi - export HOSTBUILD_ROOTFS="${TERMUX_PKG_HOSTBUILD_DIR}/ubuntu_packages" + # get the elusive mesa_clc program to run during cross-compilation - if [[ "$TERMUX_ON_DEVICE_BUILD" == "false" ]]; then - local p="$TERMUX_PKG_BUILDER_DIR/1001-src-compiler-clc-meson.build.diff.beforehostbuild" - echo "Applying $(basename "${p}")" - sed \ - -e "s|@LLVM_OPENCL_INCLUDE_DIR@|/usr/lib/llvm-$TERMUX_HOST_LLVM_MAJOR_VERSION/lib/clang/$TERMUX_HOST_LLVM_MAJOR_VERSION/include|g" \ - -e "s|@TERMUX_PREFIX@|$TERMUX_PREFIX|g" \ - "${p}" | patch --silent -p1 -d "$TERMUX_PKG_SRCDIR" - - local HOST_TRIPLET="$(gcc -dumpmachine)" - mkdir -p "${HOSTBUILD_ROOTFS}/usr/share/pkgconfig" - cp "${TERMUX_PREFIX}/share/pkgconfig/libclc.pc" "${HOSTBUILD_ROOTFS}/usr/share/pkgconfig/" - PKG_CONFIG_LIBDIR="${HOSTBUILD_ROOTFS}/usr/lib/x86_64-linux-gnu/pkgconfig" - PKG_CONFIG_LIBDIR+=":${HOSTBUILD_ROOTFS}/usr/share/pkgconfig/" - PKG_CONFIG_LIBDIR+=":$(grep 'DefaultSearchPaths:' "/usr/share/pkgconfig/personality.d/${HOST_TRIPLET}.personality" | cut -d ' ' -f 2)" - export PKG_CONFIG_LIBDIR - export PKG_CONFIG_PATH="$PKG_CONFIG_LIBDIR" - export PATH="${HOSTBUILD_ROOTFS}/usr/bin:${PATH}" - fi + local p="$TERMUX_PKG_BUILDER_DIR/1001-src-compiler-clc-meson.build.diff.beforehostbuild" + echo "Applying $(basename "${p}")" + sed \ + -e "s|@LLVM_OPENCL_INCLUDE_DIR@|/usr/lib/llvm-$TERMUX_HOST_LLVM_MAJOR_VERSION/lib/clang/$TERMUX_HOST_LLVM_MAJOR_VERSION/include|g" \ + -e "s|@TERMUX_PREFIX@|$TERMUX_PREFIX|g" \ + "${p}" | patch --silent -p1 -d "$TERMUX_PKG_SRCDIR" + + local HOST_TRIPLET="$(gcc -dumpmachine)" + export HOSTBUILD_ROOTFS="${TERMUX_PKG_HOSTBUILD_DIR}/ubuntu_packages" + mkdir -p "${HOSTBUILD_ROOTFS}/usr/share/pkgconfig" + cp "${TERMUX_PREFIX}/share/pkgconfig/libclc.pc" "${HOSTBUILD_ROOTFS}/usr/share/pkgconfig/" + PKG_CONFIG_LIBDIR="${HOSTBUILD_ROOTFS}/usr/lib/x86_64-linux-gnu/pkgconfig" + PKG_CONFIG_LIBDIR+=":${HOSTBUILD_ROOTFS}/usr/share/pkgconfig/" + PKG_CONFIG_LIBDIR+=":$(grep 'DefaultSearchPaths:' "/usr/share/pkgconfig/personality.d/${HOST_TRIPLET}.personality" | cut -d ' ' -f 2)" + export PKG_CONFIG_LIBDIR + export PKG_CONFIG_PATH="$PKG_CONFIG_LIBDIR" + export PATH="${HOSTBUILD_ROOTFS}/usr/bin:${PATH}" # XXX: termux_setup_meson is not expected to be called in host build AR=;CC=;CFLAGS=;CPPFLAGS=;CXX=;CXXFLAGS=;LD=;LDFLAGS=;PKG_CONFIG=;STRIP= @@ -79,36 +66,34 @@ termux_step_host_build() { unset AR CC CFLAGS CPPFLAGS CXX CXXFLAGS LD LDFLAGS PKG_CONFIG STRIP termux_setup_rust - if [[ "$TERMUX_ON_DEVICE_BUILD" == "false" ]]; then - termux_download_ubuntu_packages \ - "libllvmspirvlib-$TERMUX_HOST_LLVM_MAJOR_VERSION-dev" \ - "libllvm$TERMUX_HOST_LLVM_MAJOR_VERSION" \ - "libllvmspirvlib$TERMUX_HOST_LLVM_MAJOR_VERSION.1" \ - "libclang-$TERMUX_HOST_LLVM_MAJOR_VERSION-dev" \ - "libclang-cpp$TERMUX_HOST_LLVM_MAJOR_VERSION-dev" \ - libz3-4 \ - spirv-tools-dev \ - spirv-tools-headers - - local LLVM_CONFIG_ORIG="/usr/bin/llvm-config-$TERMUX_HOST_LLVM_MAJOR_VERSION" - local LLVM_CONFIG_WRAPPER="${HOSTBUILD_ROOTFS}${LLVM_CONFIG_ORIG}" - mkdir -p "$(dirname "$LLVM_CONFIG_WRAPPER")" - cat <<- EOF > "$LLVM_CONFIG_WRAPPER" - #!/bin/bash - if [[ "\$1" == "--libdir" ]]; then - echo "$HOSTBUILD_ROOTFS/usr/lib/llvm-$TERMUX_HOST_LLVM_MAJOR_VERSION/lib" - elif [[ "\$1" == "--includedir" ]]; then - echo "$HOSTBUILD_ROOTFS/usr/lib/llvm-$TERMUX_HOST_LLVM_MAJOR_VERSION/include" - else - $LLVM_CONFIG_ORIG "\$@" - fi - EOF - chmod +x "$LLVM_CONFIG_WRAPPER" - export CPPFLAGS="-I$($LLVM_CONFIG_WRAPPER --includedir)" - CPPFLAGS+=" -I$HOSTBUILD_ROOTFS/usr/lib/llvm-$TERMUX_HOST_LLVM_MAJOR_VERSION/lib/clang/$TERMUX_HOST_LLVM_MAJOR_VERSION/include" - CPPFLAGS+=" -I$HOSTBUILD_ROOTFS/usr/include" - export LDFLAGS="-L$HOSTBUILD_ROOTFS/usr/lib/x86_64-linux-gnu" - fi + termux_download_ubuntu_packages \ + "libllvmspirvlib-$TERMUX_HOST_LLVM_MAJOR_VERSION-dev" \ + "libllvm$TERMUX_HOST_LLVM_MAJOR_VERSION" \ + "libllvmspirvlib$TERMUX_HOST_LLVM_MAJOR_VERSION.1" \ + "libclang-$TERMUX_HOST_LLVM_MAJOR_VERSION-dev" \ + "libclang-cpp$TERMUX_HOST_LLVM_MAJOR_VERSION-dev" \ + libz3-4 \ + spirv-tools-dev \ + spirv-tools-headers + + local LLVM_CONFIG_ORIG="/usr/bin/llvm-config-$TERMUX_HOST_LLVM_MAJOR_VERSION" + local LLVM_CONFIG_WRAPPER="${HOSTBUILD_ROOTFS}${LLVM_CONFIG_ORIG}" + mkdir -p "$(dirname "$LLVM_CONFIG_WRAPPER")" + cat <<- EOF > "$LLVM_CONFIG_WRAPPER" + #!/bin/bash + if [[ "\$1" == "--libdir" ]]; then + echo "$HOSTBUILD_ROOTFS/usr/lib/llvm-$TERMUX_HOST_LLVM_MAJOR_VERSION/lib" + elif [[ "\$1" == "--includedir" ]]; then + echo "$HOSTBUILD_ROOTFS/usr/lib/llvm-$TERMUX_HOST_LLVM_MAJOR_VERSION/include" + else + $LLVM_CONFIG_ORIG "\$@" + fi + EOF + chmod +x "$LLVM_CONFIG_WRAPPER" + export CPPFLAGS="-I$($LLVM_CONFIG_WRAPPER --includedir)" + CPPFLAGS+=" -I$HOSTBUILD_ROOTFS/usr/lib/llvm-$TERMUX_HOST_LLVM_MAJOR_VERSION/lib/clang/$TERMUX_HOST_LLVM_MAJOR_VERSION/include" + CPPFLAGS+=" -I$HOSTBUILD_ROOTFS/usr/include" + export LDFLAGS="-L$HOSTBUILD_ROOTFS/usr/lib/x86_64-linux-gnu" cargo install --force --locked bindgen-cli @@ -116,7 +101,7 @@ termux_step_host_build() { # if the rest of the mesa build is too minimal, # link-time symbol errors will occur, so it has to have at least LLVM enabled. $TERMUX_MESON setup \ - "$srcdir" build \ + "$TERMUX_PKG_SRCDIR" build \ --prefix "$HOSTBUILD_ROOTFS/usr" \ -Dinstall-mesa-clc=true \ -Dmesa-clc=enabled \ @@ -131,12 +116,18 @@ termux_step_host_build() { # the mesa_clc program is now in ${HOSTBUILD_ROOTFS}/usr/bin unset AR CC CFLAGS CPPFLAGS CXX CXXFLAGS LD LDFLAGS PKG_CONFIG STRIP PKG_CONFIG_LIBDIR PKG_CONFIG_PATH - if [[ "$TERMUX_ON_DEVICE_BUILD" == "false" ]]; then - rm "$LLVM_CONFIG_WRAPPER" - fi + rm "$LLVM_CONFIG_WRAPPER" } termux_step_post_get_source() { + if [ -n "${_COMMIT}" ]; then + # Ensure the requested commit is available when cloning shallow. + if git -C "$TERMUX_PKG_SRCDIR" rev-parse --is-shallow-repository | grep -q true; then + git -C "$TERMUX_PKG_SRCDIR" fetch --unshallow + fi + git -C "$TERMUX_PKG_SRCDIR" checkout "$_COMMIT" + fi + # Do not use meson wrap projects rm -rf subprojects } @@ -159,13 +150,12 @@ termux_step_pre_configure() { cargo install --force --locked bindgen-cli if [[ "${TERMUX_ON_DEVICE_BUILD}" == "false" ]]; then export BINDGEN_EXTRA_CLANG_ARGS="--sysroot ${TERMUX_STANDALONE_TOOLCHAIN}/sysroot" - else - export BINDGEN_EXTRA_CLANG_ARGS="" + case "${TERMUX_ARCH}" in + arm) BINDGEN_EXTRA_CLANG_ARGS+=" --target=arm-linux-androideabi${TERMUX_PKG_API_LEVEL}" ;; + *) BINDGEN_EXTRA_CLANG_ARGS+=" --target=${TERMUX_ARCH}-linux-android${TERMUX_PKG_API_LEVEL}" ;; + esac + TERMUX_PKG_EXTRA_CONFIGURE_ARGS+=" -Dmesa-clc=system" fi - case "${TERMUX_ARCH}" in - arm) BINDGEN_EXTRA_CLANG_ARGS+=" --target=arm-linux-androideabi${TERMUX_PKG_API_LEVEL}" ;; - *) BINDGEN_EXTRA_CLANG_ARGS+=" --target=${TERMUX_ARCH}-linux-android${TERMUX_PKG_API_LEVEL}" ;; - esac CPPFLAGS+=" -D__USE_GNU" LDFLAGS+=" -landroid-shmem" @@ -185,12 +175,15 @@ termux_step_pre_configure() { export PATH="${_WRAPPER_BIN}:${CARGO_HOME}/bin:${HOSTBUILD_ROOTFS}/usr/bin:${PATH}" export LD_LIBRARY_PATH="${HOSTBUILD_ROOTFS}/usr/lib/x86_64-linux-gnu" - local _vk_drivers="swrast,virtio" + local _vk_drivers="swrast" + local _opengl_drivers="llvmpipe,softpipe,virgl,zink" if [ $TERMUX_ARCH = "arm" ] || [ $TERMUX_ARCH = "aarch64" ]; then _vk_drivers+=",freedreno" + _opengl_drivers+=",freedreno" TERMUX_PKG_EXTRA_CONFIGURE_ARGS+=" -Dfreedreno-kmds=msm,kgsl" fi TERMUX_PKG_EXTRA_CONFIGURE_ARGS+=" -Dvulkan-drivers=$_vk_drivers" + TERMUX_PKG_EXTRA_CONFIGURE_ARGS+=" -Dgallium-drivers=$_opengl_drivers" } termux_step_post_configure() { @@ -198,6 +191,24 @@ termux_step_post_configure() { } termux_step_post_make_install() { + # Avoid hard links + local f1 + for f1 in $TERMUX_PREFIX/lib/dri/*; do + if [ ! -f "${f1}" ]; then + continue + fi + local f2 + for f2 in $TERMUX_PREFIX/lib/dri/*; do + if [ -f "${f2}" ] && [ "${f1}" != "${f2}" ]; then + local s1=$(stat -c "%i" "${f1}") + local s2=$(stat -c "%i" "${f2}") + if [ "${s1}" = "${s2}" ]; then + ln -sfr "${f1}" "${f2}" + fi + fi + done + done + # Create symlinks ln -sf libEGL_mesa.so "${TERMUX_PREFIX}/lib/libEGL_mesa.so.0" ln -sf libGLX_mesa.so "${TERMUX_PREFIX}/lib/libGLX_mesa.so.0" diff --git a/packages/mesa/mesa-vulkan-icd-virtio.subpackage.sh b/packages/mesa/mesa-vulkan-icd-virtio.subpackage.sh deleted file mode 100644 index 0259ffe1658..00000000000 --- a/packages/mesa/mesa-vulkan-icd-virtio.subpackage.sh +++ /dev/null @@ -1,7 +0,0 @@ -TERMUX_SUBPKG_DESCRIPTION="Mesa's VirtIO Vulkan ICD" -TERMUX_SUBPKG_DEPEND_ON_PARENT=false -TERMUX_SUBPKG_DEPENDS="libandroid-shmem, zlib, zstd, libdrm, libxcb, libx11, libxshmfence, libwayland" -TERMUX_SUBPKG_INCLUDE=" -lib/libvulkan_virtio.so -share/vulkan/icd.d/virtio_icd.*.json -"