diff -ruN mesa-26.1.4/include/c99_alloca.h mesa-26.1.4-banan_os/include/c99_alloca.h --- mesa-26.1.4/include/c99_alloca.h 2026-07-01 17:16:13.000000000 +0300 +++ mesa-26.1.4-banan_os/include/c99_alloca.h 2026-07-05 12:36:39.805616590 +0300 @@ -35,7 +35,7 @@ # define alloca _alloca -#elif defined(__sun) || defined(__CYGWIN__) +#elif defined(__sun) || defined(__CYGWIN__) || defined(__banan_os__) # include diff -ruN mesa-26.1.4/include/drm-uapi/drm.h mesa-26.1.4-banan_os/include/drm-uapi/drm.h --- mesa-26.1.4/include/drm-uapi/drm.h 2026-07-01 17:16:13.000000000 +0300 +++ mesa-26.1.4-banan_os/include/drm-uapi/drm.h 2026-07-05 12:36:39.797829778 +0300 @@ -47,6 +47,41 @@ #include #if defined(__GNU__) #include +#elif defined(__banan_os__) +#define _IOC_NRBITS 8 +#define _IOC_TYPEBITS 8 +#define _IOC_SIZEBITS 14 +#define _IOC_DIRBITS 2 + +#define _IOC_NRMASK ((1 << _IOC_NRBITS ) - 1) +#define _IOC_TYPEMASK ((1 << _IOC_TYPEBITS) - 1) +#define _IOC_SIZEMASK ((1 << _IOC_SIZEBITS) - 1) +#define _IOC_DIRMASK ((1 << _IOC_DIRBITS ) - 1) + +#define _IOC_NRSHIFT 0 +#define _IOC_TYPESHIFT (_IOC_NRSHIFT + _IOC_NRBITS ) +#define _IOC_SIZESHIFT (_IOC_TYPESHIFT + _IOC_TYPEBITS) +#define _IOC_DIRSHIFT (_IOC_SIZESHIFT + _IOC_SIZEBITS) + +#define _IOC_NONE 0U +#define _IOC_WRITE 1U +#define _IOC_READ 2U + +#define _IOC(dir, type, nr, size) \ + (((dir) << _IOC_DIRSHIFT ) | \ + ((size) << _IOC_SIZESHIFT) | \ + ((type) << _IOC_TYPESHIFT) | \ + ((nr) << _IOC_NRSHIFT )) + +#define _IO(type, nr) _IOC(_IOC_NONE, (type), (nr), 0) +#define _IOR(type, nr, size) _IOC(_IOC_READ, (type), (nr), sizeof(size)) +#define _IOW(type, nr, size) _IOC(_IOC_WRITE, (type), (nr), sizeof(size)) +#define _IOWR(type, nr, size) _IOC(_IOC_READ|_IOC_WRITE, (type), (nr), sizeof(size)) + +#define _IOC_DIR(nr) (((nr) >> _IOC_DIRSHIFT ) & _IOC_DIRMASK ) +#define _IOC_TYPE(nr) (((nr) >> _IOC_TYPESHIFT) & _IOC_TYPEMASK) +#define _IOC_NR(nr) (((nr) >> _IOC_NRSHIFT ) & _IOC_NRMASK ) +#define _IOC_SIZE(nr) (((nr) >> _IOC_SIZESHIFT) & _IOC_SIZEMASK) #else #include #endif diff -ruN mesa-26.1.4/src/util/detect_os.h mesa-26.1.4-banan_os/src/util/detect_os.h --- mesa-26.1.4/src/util/detect_os.h 2026-07-01 17:16:13.000000000 +0300 +++ mesa-26.1.4-banan_os/src/util/detect_os.h 2026-07-05 12:36:41.342028269 +0300 @@ -91,6 +91,10 @@ #define DETECT_OS_POSIX 1 #endif +#if defined(__banan_os__) +#define DETECT_OS_BANANOS 1 +#define DETECT_OS_POSIX 1 +#endif /* * Make sure DETECT_OS_* are always defined, so that they can be used with #if @@ -146,5 +150,8 @@ #ifndef DETECT_OS_MANAGARM #define DETECT_OS_MANAGARM 0 #endif +#ifndef DETECT_OS_BANANOS +#define DETECT_OS_BANANOS 0 +#endif #endif /* DETECT_OS_H */ diff -ruN mesa-26.1.4/src/util/os_misc.c mesa-26.1.4-banan_os/src/util/os_misc.c --- mesa-26.1.4/src/util/os_misc.c 2026-07-01 17:16:13.000000000 +0300 +++ mesa-26.1.4-banan_os/src/util/os_misc.c 2026-07-05 12:36:41.310790644 +0300 @@ -58,7 +58,7 @@ # include # include # include -#elif DETECT_OS_LINUX || DETECT_OS_CYGWIN || DETECT_OS_SOLARIS || DETECT_OS_HURD || DETECT_OS_MANAGARM +#elif DETECT_OS_LINUX || DETECT_OS_CYGWIN || DETECT_OS_SOLARIS || DETECT_OS_HURD || DETECT_OS_MANAGARM || DETECT_OS_BANANOS # include #elif DETECT_OS_OPENBSD || DETECT_OS_FREEBSD # include @@ -470,6 +470,15 @@ *size = ((uint64_t)vm_stats.free_count + (uint64_t)vm_stats.inactive_count) * PAGE_SIZE; return true; +#elif DETECT_OS_BANANOS + const long avphys_pages = sysconf(_SC_AVPHYS_PAGES); + const long page_size = sysconf(_SC_PAGESIZE); + + if (avphys_pages <= 0 || page_size <= 0) + return false; + + *size = (uint64_t)avphys_pages * (uint64_t)page_size; + return true; #else return false; #endif diff -ruN mesa-26.1.4/src/util/u_process.c mesa-26.1.4-banan_os/src/util/u_process.c --- mesa-26.1.4/src/util/u_process.c 2026-07-01 17:16:13.000000000 +0300 +++ mesa-26.1.4-banan_os/src/util/u_process.c 2026-07-05 12:36:41.320229357 +0300 @@ -48,7 +48,7 @@ #include #endif -#if DETECT_OS_LINUX +#if DETECT_OS_LINUX || DETECT_OS_BANANOS #include #endif @@ -163,6 +163,21 @@ get_image_info(B_CURRENT_TEAM, &info); return strdup(info.name); } +#elif DETECT_OS_BANANOS +static char * +__getProgramName() +{ + char *progname = NULL; + char buf[PATH_MAX]; + if (readlink("/proc/self/exe", buf, sizeof(buf)) > 0) { + progname = strrchr(buf, '/'); + if (progname) + progname++; + else + progname = buf; + } + return strdup(progname); +} #else #define GET_PROGRAM_NAME_NOT_AVAILABLE #endif @@ -269,7 +284,7 @@ cmdline[size - 1] = 0; return true; } -#elif DETECT_OS_LINUX +#elif DETECT_OS_LINUX || DETECT_OS_BANANOS int f = open("/proc/self/cmdline", O_RDONLY); if (f != -1) { const int n = read(f, cmdline, size - 1); diff -ruN mesa-26.1.4/src/util/u_thread.c mesa-26.1.4-banan_os/src/util/u_thread.c --- mesa-26.1.4/src/util/u_thread.c 2026-07-01 17:16:13.000000000 +0300 +++ mesa-26.1.4-banan_os/src/util/u_thread.c 2026-07-05 12:36:41.338559292 +0300 @@ -71,7 +71,7 @@ void u_thread_setname( const char *name ) { #if defined(HAVE_PTHREAD) -#if DETECT_OS_LINUX || DETECT_OS_CYGWIN || DETECT_OS_SOLARIS || defined(__GLIBC__) || DETECT_OS_MANAGARM || DETECT_OS_FUCHSIA +#if DETECT_OS_LINUX || DETECT_OS_CYGWIN || DETECT_OS_SOLARIS || defined(__GLIBC__) || DETECT_OS_MANAGARM || DETECT_OS_FUCHSIA || DETECT_OS_BANANOS int ret = pthread_setname_np(pthread_self(), name); if (ret == ERANGE) { char buf[16]; @@ -150,7 +150,7 @@ int64_t util_thread_get_time_nano(thrd_t thread) { -#if defined(HAVE_PTHREAD) && !defined(__APPLE__) && !defined(__HAIKU__) && !defined(__managarm__) +#if defined(HAVE_PTHREAD) && !defined(__APPLE__) && !defined(__HAIKU__) && !defined(__managarm__) && !defined(__banan_os__) struct timespec ts; clockid_t cid;