mirror of
https://gitlab.redox-os.org/redox-os/redox.git
synced 2026-06-19 19:34:18 +08:00
139 lines
4.9 KiB
Diff
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;
|
|
}
|