From d3c42fc7ac5d2b04d26d3827ade9b8dc13503dee Mon Sep 17 00:00:00 2001 From: xMeM Date: Fri, 8 Nov 2024 17:47:40 +0800 Subject: [PATCH] addpkg(main/vulkan-wrapper-android): 25.0.0 --- .../0000-disable-android-detection.patch | 13 +++ .../0001-fix-for-anon-file.patch | 16 ++++ .../0002-wsi-no-pthread_cancel.patch | 85 +++++++++++++++++++ ...03-vulkan-x11-disable-immediate-mode.patch | 14 +++ packages/vulkan-wrapper-android/build.sh | 56 ++++++++++++ .../vulkan-wrapper-android/cmake-wrapper.in | 16 ++++ 6 files changed, 200 insertions(+) create mode 100644 packages/vulkan-wrapper-android/0000-disable-android-detection.patch create mode 100644 packages/vulkan-wrapper-android/0001-fix-for-anon-file.patch create mode 100644 packages/vulkan-wrapper-android/0002-wsi-no-pthread_cancel.patch create mode 100644 packages/vulkan-wrapper-android/0003-vulkan-x11-disable-immediate-mode.patch create mode 100644 packages/vulkan-wrapper-android/build.sh create mode 100644 packages/vulkan-wrapper-android/cmake-wrapper.in diff --git a/packages/vulkan-wrapper-android/0000-disable-android-detection.patch b/packages/vulkan-wrapper-android/0000-disable-android-detection.patch new file mode 100644 index 00000000000000..9b09c16b8990bd --- /dev/null +++ b/packages/vulkan-wrapper-android/0000-disable-android-detection.patch @@ -0,0 +1,13 @@ +diff --git a/src/util/detect_os.h b/src/util/detect_os.h +index 86286dfbe70..f589104f6a7 100644 +--- a/src/util/detect_os.h ++++ b/src/util/detect_os.h +@@ -24,7 +24,7 @@ + * Android defines __linux__, so DETECT_OS_LINUX and DETECT_OS_POSIX will + * also be defined. + */ +-#if defined(__ANDROID__) ++#if 0 + #define DETECT_OS_ANDROID 1 + #endif + diff --git a/packages/vulkan-wrapper-android/0001-fix-for-anon-file.patch b/packages/vulkan-wrapper-android/0001-fix-for-anon-file.patch new file mode 100644 index 00000000000000..85e6a033df63ac --- /dev/null +++ b/packages/vulkan-wrapper-android/0001-fix-for-anon-file.patch @@ -0,0 +1,16 @@ +Fallback to `@TERMUX_PREFIX@/tmp` if env `XDG_RUNTIME_DIR` is not set. + +--- a/src/util/anon_file.c ++++ b/src/util/anon_file.c +@@ -136,6 +136,11 @@ + char *name; + + path = getenv("XDG_RUNTIME_DIR"); ++#ifdef __TERMUX__ ++ if (!path) { ++ path = "@TERMUX_PREFIX@/tmp"; ++ } ++#endif + if (!path) { + errno = ENOENT; + return -1; diff --git a/packages/vulkan-wrapper-android/0002-wsi-no-pthread_cancel.patch b/packages/vulkan-wrapper-android/0002-wsi-no-pthread_cancel.patch new file mode 100644 index 00000000000000..2f5b63fe89177e --- /dev/null +++ b/packages/vulkan-wrapper-android/0002-wsi-no-pthread_cancel.patch @@ -0,0 +1,85 @@ ++++ ./src/vulkan/wsi/wsi_common_display.c +@@ -176,6 +176,12 @@ + + static uint64_t fence_sequence; + ++#ifdef __ANDROID__ ++static void thread_signal_handler (int signum) { ++ pthread_exit (0); ++} ++#endif ++ + ICD_DEFINE_NONDISP_HANDLE_CASTS(wsi_display_mode, VkDisplayModeKHR) + ICD_DEFINE_NONDISP_HANDLE_CASTS(wsi_display_connector, VkDisplayKHR) + +@@ -1341,7 +1347,9 @@ + .events = POLLIN + }; + ++#ifndef __ANDROID__ + pthread_setcanceltype(PTHREAD_CANCEL_ASYNCHRONOUS, NULL); ++#endif + for (;;) { + int ret = poll(&pollfd, 1, -1); + if (ret > 0) { +@@ -1369,9 +1377,22 @@ + static void + wsi_display_stop_wait_thread(struct wsi_display *wsi) + { ++#ifdef __ANDROID__ ++ struct sigaction actions; ++ memset (&actions, 0, sizeof (actions)); ++ sigemptyset (&actions.sa_mask); ++ actions.sa_flags = 0; ++ actions.sa_handler = thread_signal_handler; ++ sigaction (SIGUSR2, &actions, NULL); ++#endif ++ + mtx_lock(&wsi->wait_mutex); + if (wsi->wait_thread) { ++#ifndef __ANDROID__ + pthread_cancel(wsi->wait_thread); ++#else ++ pthread_kill(wsi->wait_thread, SIGUSR2); ++#endif + pthread_join(wsi->wait_thread, NULL); + wsi->wait_thread = 0; + } +@@ -2215,7 +2236,9 @@ + + int udev_fd = udev_monitor_get_fd(mon); + ++#ifndef __ANDROID__ + pthread_setcanceltype(PTHREAD_CANCEL_ASYNCHRONOUS, NULL); ++#endif + + for (;;) { + nfds_t nfds = 1; +@@ -2340,6 +2363,15 @@ + struct wsi_display *wsi = + (struct wsi_display *) wsi_device->wsi[VK_ICD_WSI_PLATFORM_DISPLAY]; + ++#ifdef __ANDROID__ ++ struct sigaction actions; ++ memset (&actions, 0, sizeof (actions)); ++ sigemptyset (&actions.sa_mask); ++ actions.sa_flags = 0; ++ actions.sa_handler = thread_signal_handler; ++ sigaction (SIGUSR2, &actions, NULL); ++#endif ++ + if (wsi) { + wsi_for_each_connector(connector, wsi) { + wsi_for_each_display_mode(mode, connector) { +@@ -2351,7 +2383,11 @@ + wsi_display_stop_wait_thread(wsi); + + if (wsi->hotplug_thread) { ++#ifndef __ANDROID__ + pthread_cancel(wsi->hotplug_thread); ++#else ++ pthread_kill(wsi->hotplug_thread, SIGUSR2); ++#endif + pthread_join(wsi->hotplug_thread, NULL); + } + diff --git a/packages/vulkan-wrapper-android/0003-vulkan-x11-disable-immediate-mode.patch b/packages/vulkan-wrapper-android/0003-vulkan-x11-disable-immediate-mode.patch new file mode 100644 index 00000000000000..1d0ec0b0676cfc --- /dev/null +++ b/packages/vulkan-wrapper-android/0003-vulkan-x11-disable-immediate-mode.patch @@ -0,0 +1,14 @@ +diff --git a/src/vulkan/wsi/wsi_common_x11.c b/src/vulkan/wsi/wsi_common_x11.c +index 22ac573cca2..9e0eb25f45f 100644 +--- a/src/vulkan/wsi/wsi_common_x11.c ++++ b/src/vulkan/wsi/wsi_common_x11.c +@@ -462,7 +462,9 @@ static const VkFormat formats[] = { + }; + + static const VkPresentModeKHR present_modes[] = { ++#ifndef __TERMUX__ + VK_PRESENT_MODE_IMMEDIATE_KHR, ++#endif + VK_PRESENT_MODE_MAILBOX_KHR, + VK_PRESENT_MODE_FIFO_KHR, + VK_PRESENT_MODE_FIFO_RELAXED_KHR, diff --git a/packages/vulkan-wrapper-android/build.sh b/packages/vulkan-wrapper-android/build.sh new file mode 100644 index 00000000000000..38663f123a041d --- /dev/null +++ b/packages/vulkan-wrapper-android/build.sh @@ -0,0 +1,56 @@ +TERMUX_PKG_HOMEPAGE=https://www.mesa3d.org +TERMUX_PKG_DESCRIPTION="Android Vulkan ICD" +TERMUX_PKG_LICENSE="MIT" +TERMUX_PKG_LICENSE_FILE="docs/license.rst" +TERMUX_PKG_MAINTAINER="xMeM " +TERMUX_PKG_VERSION="25.0.0" +TERMUX_PKG_REVISION=2 +TERMUX_PKG_SRCURL=git+https://github.com/xMeM/mesa +TERMUX_PKG_GIT_BRANCH=wrapper +_COMMIT=e65c7eb6ee2f9903c3256f2677beb1d98464103f +TERMUX_PKG_DEPENDS="libandroid-shmem, libc++, libdrm, libx11, libxcb, libxshmfence, libwayland, vulkan-loader-generic, zlib, zstd" +TERMUX_PKG_BUILD_DEPENDS="libwayland-protocols, libxrandr, xorgproto" +TERMUX_PKG_API_LEVEL=26 + +TERMUX_PKG_EXTRA_CONFIGURE_ARGS=" +--cmake-prefix-path $TERMUX_PREFIX +-Dcpp_rtti=false +-Dgbm=disabled +-Dopengl=false +-Dllvm=disabled +-Dshared-llvm=disabled +-Dplatforms=x11,wayland +-Dgallium-drivers= +-Dxmlconfig=disabled +-Dvulkan-drivers=wrapper +-Db_ndebug=true +" + +termux_step_post_get_source() { + git fetch --unshallow + git checkout $_COMMIT + # Do not use meson wrap projects + rm -rf subprojects +} + +termux_step_pre_configure() { + termux_setup_cmake + + CPPFLAGS+=" -D__USE_GNU" + LDFLAGS+=" -landroid-shmem" + + _WRAPPER_BIN=$TERMUX_PKG_BUILDDIR/_wrapper/bin + mkdir -p $_WRAPPER_BIN + if [ "$TERMUX_ON_DEVICE_BUILD" = "false" ]; then + sed 's|@CMAKE@|'"$(command -v cmake)"'|g' \ + $TERMUX_PKG_BUILDER_DIR/cmake-wrapper.in \ + > $_WRAPPER_BIN/cmake + chmod 0700 $_WRAPPER_BIN/cmake + termux_setup_wayland_cross_pkg_config_wrapper + fi + export PATH=$_WRAPPER_BIN:$PATH +} + +termux_step_post_configure() { + rm -f $_WRAPPER_BIN/cmake +} diff --git a/packages/vulkan-wrapper-android/cmake-wrapper.in b/packages/vulkan-wrapper-android/cmake-wrapper.in new file mode 100644 index 00000000000000..7cd20167cc824d --- /dev/null +++ b/packages/vulkan-wrapper-android/cmake-wrapper.in @@ -0,0 +1,16 @@ +#!/bin/sh + +if [ -e CMakeLists.txt ]; then + sed -i '1s|^|project(foo LANGUAGES C CXX)\n|' CMakeLists.txt +fi + +for f in "$@"; do + case "${f}" in + -DCMAKE_TOOLCHAIN_FILE=* ) + sed -i "${f#-DCMAKE_TOOLCHAIN_FILE=}" \ + -e 's|\(set(CMAKE_SYSTEM_NAME\) "Android")|\1 "Linux")|g' + ;; + esac +done + +exec @CMAKE@ "$@"