redox/recipes/mgba/01_redox.patch
2019-02-05 05:04:50 +01:00

139 lines
4.9 KiB
Diff

diff --git a/CMakeLists.txt b/CMakeLists.txt
index fa01e3a5..5910934a 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -1,4 +1,4 @@
-cmake_minimum_required(VERSION 3.1)
+cmake_minimum_required(VERSION 3.4)
if(POLICY CMP0025)
cmake_policy(SET CMP0025 NEW)
endif()
@@ -241,8 +241,8 @@ elseif(UNIX)
add_definitions(-D_GNU_SOURCE)
endif()
if(NOT APPLE AND NOT HAIKU)
- set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -pthread")
- set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -pthread")
+ set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -lpthread")
+ set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -lpthread")
endif()
list(APPEND CORE_VFS_SRC ${CMAKE_CURRENT_SOURCE_DIR}/src/util/vfs/vfs-fd.c ${CMAKE_CURRENT_SOURCE_DIR}/src/util/vfs/vfs-dirent.c)
diff --git a/include/mgba-util/platform/posix/threading.h b/include/mgba-util/platform/posix/threading.h
index 468e1460..50cba731 100644
--- a/include/mgba-util/platform/posix/threading.h
+++ b/include/mgba-util/platform/posix/threading.h
@@ -85,25 +85,8 @@ static inline int ThreadJoin(Thread thread) {
}
static inline int ThreadSetName(const char* name) {
-#ifdef __APPLE__
-#if __ENVIRONMENT_MAC_OS_X_VERSION_MIN_REQUIRED__ >= 1060
- return pthread_setname_np(name);
-#else
UNUSED(name);
return 0;
-#endif
-#elif defined(__FreeBSD__) || defined(__OpenBSD__)
- pthread_set_name_np(pthread_self(), name);
- return 0;
-#elif defined(__HAIKU__)
- rename_thread(find_thread(NULL), name);
- return 0;
-#elif !defined(BUILD_PANDORA) // Pandora's glibc is too old
- return pthread_setname_np(pthread_self(), name);
-#else
- UNUSED(name);
- return 0;
-#endif
}
CXX_GUARD_END
diff --git a/include/mgba/core/interface.h b/include/mgba/core/interface.h
index e5c9dde1..82d3b828 100644
--- a/include/mgba/core/interface.h
+++ b/include/mgba/core/interface.h
@@ -31,7 +31,7 @@ typedef uint32_t color_t;
#define M_G8(X) (((((X) >> 2) & 0xF8) * 0x21) >> 5)
#define M_B8(X) (((((X) >> 7) & 0xF8) * 0x21) >> 5)
-#define M_RGB5_TO_BGR8(X) ((M_R5(X) << 3) | (M_G5(X) << 11) | (M_B5(X) << 19))
+#define M_RGB5_TO_BGR8(X) ((M_B5(X) << 3) | (M_G5(X) << 11) | (M_R5(X) << 19))
#define M_RGB8_TO_BGR5(X) ((((X) & 0xF8) >> 3) | (((X) & 0xF800) >> 6) | (((X) & 0xF80000) >> 9))
#define M_RGB8_TO_RGB5(X) ((((X) & 0xF8) << 7) | (((X) & 0xF800) >> 6) | (((X) & 0xF80000) >> 19))
diff --git a/src/platform/sdl/sdl-audio.c b/src/platform/sdl/sdl-audio.c
index ab0bd830..7cd77495 100644
--- a/src/platform/sdl/sdl-audio.c
+++ b/src/platform/sdl/sdl-audio.c
@@ -24,6 +24,15 @@ bool mSDLInitAudio(struct mSDLAudio* context, struct mCoreThread* threadContext)
return false;
}
+ // Workaround: The thread of _mSDLAudioCallback cannot see these changes
+ // unless they are made before the SDL_OpenAudio call.
+ // This makes the `if (!context || !audioContext->core) {` check in
+ // _mSDLAudioCallback not bail out. This is rather important, the whole
+ // emulation seems to be synched to the audio.
+ context->core = threadContext->core;
+ context->sync = &threadContext->impl->sync;
+ // --
+
context->desiredSpec.freq = context->sampleRate;
context->desiredSpec.format = AUDIO_S16SYS;
context->desiredSpec.channels = 2;
diff --git a/src/third-party/zlib/contrib/minizip/ioapi.c b/src/third-party/zlib/contrib/minizip/ioapi.c
index 7f5c191b..744dd96b 100644
--- a/src/third-party/zlib/contrib/minizip/ioapi.c
+++ b/src/third-party/zlib/contrib/minizip/ioapi.c
@@ -14,7 +14,7 @@
#define _CRT_SECURE_NO_WARNINGS
#endif
-#if defined(__APPLE__) || defined(IOAPI_NO_64)
+#if defined(__APPLE__) || defined(IOAPI_NO_64) || defined(__redox__)
// In darwin and perhaps other BSD variants off_t is a 64 bit value, hence no need for specific 64 bit functions
#define FOPEN_FUNC(filename, mode) fopen(filename, mode)
#define FTELLO_FUNC(stream) ftello(stream)
diff --git a/src/util/vfs/vfs-fd.c b/src/util/vfs/vfs-fd.c
index 4a20eaf7..3307709c 100644
--- a/src/util/vfs/vfs-fd.c
+++ b/src/util/vfs/vfs-fd.c
@@ -42,7 +42,8 @@ struct VFile* VFileOpenFD(const char* path, int flags) {
MultiByteToWideChar(CP_UTF8, 0, path, -1, wpath, sizeof(wpath) / sizeof(*wpath));
int fd = _wopen(wpath, flags, 0666);
#else
- int fd = open(path, flags, 0666);
+ // Workaround for the _vfdMap permission problems below
+ int fd = open(path, flags | O_RDWR, 0666);
#endif
return VFileFromFD(fd);
}
@@ -164,24 +165,6 @@ static ssize_t _vfdSize(struct VFile* vf) {
static bool _vfdSync(struct VFile* vf, const void* buffer, size_t size) {
UNUSED(buffer);
UNUSED(size);
- struct VFileFD* vfd = (struct VFileFD*) vf;
-#ifndef _WIN32
-#ifdef __HAIKU__
- futimens(vfd->fd, NULL);
-#else
- futimes(vfd->fd, NULL);
-#endif
- if (buffer && size) {
- return msync(buffer, size, MS_SYNC) == 0;
- }
- return fsync(vfd->fd) == 0;
-#else
- HANDLE h = (HANDLE) _get_osfhandle(vfd->fd);
- FILETIME ft;
- SYSTEMTIME st;
- GetSystemTime(&st);
- SystemTimeToFileTime(&st, &ft);
- SetFileTime(h, NULL, &ft, &ft);
- return FlushFileBuffers(h);
-#endif
+ printf("_vfdSync\n");
+ return true;
}