Support compiling without mmap functions
authorPaul Cercueil <paul@crapouillou.net>
Sat, 11 Feb 2023 14:17:13 +0000 (14:17 +0000)
committernotaz <notasas@gmail.com>
Thu, 3 Aug 2023 17:43:39 +0000 (20:43 +0300)
Add NO_MMAP option in Makefile.libretro that can be turned ON on
platforms that don't support mmap(), and for which memory mapping hooks
must be provided.

Signed-off-by: Paul Cercueil <paul@crapouillou.net>
Makefile
libpcsxcore/memmap.h
libpcsxcore/psxmem.c

index ded2689..7b7ce5c 100644 (file)
--- a/Makefile
+++ b/Makefile
@@ -6,6 +6,7 @@ CFLAGS += -Wall -ggdb -Iinclude -ffast-math
 ifndef DEBUG
 CFLAGS += -O2 -DNDEBUG
 endif
+CFLAGS += -DHAVE_MMAP=$(if $(NO_MMAP),0,1)
 CXXFLAGS += $(CFLAGS)
 #DRC_DBG = 1
 #PCNT = 1
index 262cd7c..da1d0e1 100644 (file)
@@ -34,6 +34,9 @@
 #include <_mingw.h>
 #endif
 
+#endif //_WIN32
+
+#if defined(_WIN32) || !HAVE_MMAP
 #include <sys/types.h>
 
 #ifdef __cplusplus
@@ -60,12 +63,14 @@ extern "C" {
 #define MS_SYNC         2
 #define MS_INVALIDATE   4
 
+#ifdef _WIN32
 void*   mmap(void *addr, size_t len, int prot, int flags, int fildes, off_t off);
 int     munmap(void *addr, size_t len);
 int     mprotect(void *addr, size_t len, int prot);
 int     msync(void *addr, size_t len, int flags);
 int     mlock(const void *addr, size_t len);
 int     munlock(const void *addr, size_t len);
+#endif
 
 #ifdef __cplusplus
 };
index 54219ae..14e7a9e 100644 (file)
 static void * psxMapDefault(unsigned long addr, size_t size,
                            int is_fixed, enum psxMapTag tag)
 {
+#if !HAVE_MMAP
+       void *ptr;
+
+       ptr = malloc(size);
+       return ptr ? ptr : MAP_FAILED;
+#else
        int flags = MAP_PRIVATE | MAP_ANONYMOUS;
 
        return mmap((void *)(uintptr_t)addr, size,
                    PROT_READ | PROT_WRITE, flags, -1, 0);
+#endif
 }
 
 static void psxUnmapDefault(void *ptr, size_t size, enum psxMapTag tag)
 {
+#if !HAVE_MMAP
+       free(ptr);
+#else
        munmap(ptr, size);
+#endif
 }
 
 void *(*psxMapHook)(unsigned long addr, size_t size, int is_fixed,