Merge branch 'flycast' into 'master'

Update sdl2 and flycast, Use cmake and remove patches for zstd

See merge request redox-os/redox!2182
This commit is contained in:
Jeremy Soller 2026-06-07 05:53:52 -06:00
commit bf82d7d11d
5 changed files with 107 additions and 303 deletions

View File

@ -1,15 +0,0 @@
diff -ruwN source/programs/platform.h source-new/programs/platform.h
--- source/programs/platform.h 2025-02-19 07:04:24.000000000 +0700
+++ source-new/programs/platform.h 2025-07-21 22:52:07.716447723 +0700
@@ -109,6 +109,11 @@
#endif /* PLATFORM_POSIX_VERSION */
+#if defined(__redox__)
+/* TODO: AT_FDCWD && utimensat must be defined to conform _POSIX_VERSION */
+# define PLATFORM_POSIX_VERSION 1
+#endif
+
#if PLATFORM_POSIX_VERSION > 1
/* glibc < 2.26 may not expose struct timespec def without this.
* See issue #1920. */

View File

@ -1,17 +1,14 @@
[source]
tar = "https://github.com/facebook/zstd/releases/download/v1.5.7/zstd-1.5.7.tar.gz"
blake3 = "730dca31244abd219e995f03a55d95b2cfb4b3e16cda055a79fa6f30a4f0e1db"
patches = [
"01_redox.patch"
]
[build]
template = "custom"
script = """
DYNAMIC_STATIC_INIT
rsync -av --delete "${COOKBOOK_SOURCE}/" ./
# TODO: fPIC is the default on linux but not on redox and
# required by llvm21 as zstd statically linked there
export CPPFLAGS="$CPPFLAGS -fPIC"
${COOKBOOK_MAKE}
${COOKBOOK_MAKE} install DESTDIR="${COOKBOOK_STAGE}" prefix="/usr"
COOKBOOK_SOURCE="$COOKBOOK_SOURCE/build/cmake"
cookbook_cmake
"""

View File

@ -1,6 +1,6 @@
[source]
git = "https://github.com/flyinghead/flycast.git"
rev = "1dd006d"
rev = "v2.6"
patches = ["redox.patch"]
shallow_clone = true
@ -8,55 +8,25 @@ shallow_clone = true
template = "custom"
dependencies = [
"curl",
"libiconv",
"liborbital",
"mesa",
"nghttp2",
"openssl3",
"libzip",
"sdl2",
]
dev-dependencies = [
"zlib",
"zstd",
]
script = """
DYNAMIC_INIT
export CFLAGS="${CFLAGS} -I${COOKBOOK_SYSROOT}/usr/include/SDL2"
export CXXFLAGS="${CXXFLAGS} -D_GLIBCXX_USE_C99_MATH_TR1=1 -I${COOKBOOK_SYSROOT}/usr/include/SDL2"
#TODO: don't use this
export SDL_LIBS="-lSDL2 -lorbital $("${TARGET}-pkg-config" --libs osmesa) -lstdc++"
#TODO: don't add curl
export SDL_LIBS="${SDL_LIBS} -lcurl -lnghttp2 -lssl -lcrypto"
COOKBOOK_CONFIGURE="cmake"
COOKBOOK_CONFIGURE_FLAGS=(
-DCMAKE_VERBOSE_MAKEFILE=On
-DCMAKE_CROSSCOMPILING=True
-DCMAKE_BUILD_TYPE=RelWithDebInfo
-DCMAKE_INSTALL_PREFIX="/usr"
-DCMAKE_SYSTEM_NAME=Generic
-DCMAKE_SYSTEM_PROCESSOR="$(echo "${TARGET}" | cut -d - -f1)"
export CPPFLAGS+=" -D_GNU_SOURCE=1"
COOKBOOK_CMAKE_FLAGS+=(
-DREDOX=1
-DUNIX=1
-DUSE_HOST_LIBZIP=OFF
-DUSE_OPENMP=OFF
-DUSE_VULKAN=OFF
-DZLIB_LIBRARY="-lz"
# Hacks for cmake errors
-DHAVE___INT8_LIBZIP=False
-DHAVE___INT16_LIBZIP=False
-DHAVE___INT32_LIBZIP=False
-DHAVE___INT64_LIBZIP=False
-DHAVE_FICLONERANGE=False
-DHAVE_NULLABLE=False
# Hack for Threads
-DCMAKE_THREAD_LIBS_INIT="-lc"
-DCMAKE_HAVE_THREADS_LIBRARY=1
-DCMAKE_USE_WIN32_THREADS_INIT=0
-DCMAKE_USE_PTHREADS_INIT=1
-DTHREADS_PREFER_PTHREAD_FLAG=ON
"${COOKBOOK_SOURCE}"
-DUSE_HOST_SDL=ON
-DNOWIDE_INSTALL=ON
-DWITH_SYSTEM_ZLIB=ON
-DWITH_SYSTEM_ZSTD=ON
)
cookbook_configure
# appstream generation broken
rm -rf "${COOKBOOK_STAGE}/usr/share/metainfo"
cookbook_cmake
"""

View File

@ -1,43 +1,32 @@
diff --git a/CMakeLists.txt b/CMakeLists.txt
index 87bc605..e878607 100644
index 8340288..589d4b4 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -197,7 +197,7 @@ if(NINTENDO_SWITCH)
@@ -466,7 +466,7 @@ if(NOT LIBRETRO)
endif()
if(NOT LIBRETRO)
- if((WIN32 AND NOT MSVC) OR (UNIX AND NOT APPLE AND NOT CMAKE_SYSTEM_NAME MATCHES "(FreeBSD|OpenBSD|NetBSD)"))
+ if((WIN32 AND NOT MSVC) OR (UNIX AND NOT APPLE AND NOT CMAKE_SYSTEM_NAME MATCHES "(FreeBSD|OpenBSD|NetBSD)" AND NOT REDOX))
add_subdirectory(core/deps/breakpad)
if(WIN32)
target_link_options(${PROJECT_NAME} PRIVATE "-Wl,--build-id")
@@ -355,7 +355,10 @@ if(NOT LIBRETRO)
if(NOT APPLE)
find_package(SDL2)
endif()
- if(NOT SDL2_FOUND)
+ if(REDOX)
+ target_link_libraries(${PROJECT_NAME} PRIVATE "$ENV{SDL_LIBS}")
+ set(SDL2_FOUND 1)
+ elseif(NOT SDL2_FOUND)
add_subdirectory(core/deps/SDL EXCLUDE_FROM_ALL)
set(SDL2_FOUND 1)
endif()
@@ -482,8 +485,10 @@ if(UNIX AND NOT APPLE AND NOT ANDROID)
target_link_libraries(${PROJECT_NAME} PRIVATE ${GLES3_LIBRARIES})
elseif(USE_OPENGL)
set(OpenGL_GL_PREFERENCE LEGACY)
- find_package(OpenGL REQUIRED)
- target_link_libraries(${PROJECT_NAME} PRIVATE OpenGL::GL)
+ if(NOT REDOX)
+ find_package(OpenGL REQUIRED)
+ target_link_libraries(${PROJECT_NAME} PRIVATE OpenGL::GL)
+ endif()
if(NOT ANDROID AND NOT IOS)
- if (NOT NINTENDO_SWITCH)
+ if (NOT NINTENDO_SWITCH AND NOT REDOX)
# DreamLink enabled for non-mobile Linux, MacOS, and Windows
target_compile_definitions(${PROJECT_NAME} PRIVATE USE_DREAMLINK_DEVICES=1)
set(USE_DREAMLINK_DEVICES ON) # Must be set before adding core/sdl
@@ -493,7 +493,7 @@ if(NOT LIBRETRO)
endif()
find_package(Threads REQUIRED)
@@ -533,7 +538,7 @@ target_sources(${PROJECT_NAME} PRIVATE
target_include_directories(${PROJECT_NAME} PRIVATE core/deps/nowide/include)
if(USE_HOST_SDL)
- find_package(SDL2 2.0.9)
+ find_package(SDL2 REQUIRED)
endif()
if(NOT SDL2_FOUND)
set(SDL_TEST_ENABLED_BY_DEFAULT OFF)
@@ -691,11 +691,11 @@ target_sources(${PROJECT_NAME} PRIVATE
core/deps/chdpsr/cdipsr.cpp
core/deps/chdpsr/cdipsr.h)
-add_subdirectory(core/deps/nowide EXCLUDE_FROM_ALL)
+add_subdirectory(core/deps/nowide)
target_link_libraries(${PROJECT_NAME} PRIVATE nowide::nowide)
if(NOT MINIUPNP_FOUND)
- if(NINTENDO_SWITCH)
@ -45,58 +34,32 @@ index 87bc605..e878607 100644
target_compile_definitions(${PROJECT_NAME} PRIVATE FEAT_NO_MINIUPNPC)
else()
option(UPNPC_BUILD_SHARED "Build shared library" OFF)
diff --git a/core/build.h b/core/build.h
index a8560f7..1d6a4dd 100755
--- a/core/build.h
+++ b/core/build.h
@@ -227,6 +227,9 @@
#endif
#endif
+#if defined(__redox__)
+#define TARGET_NO_EXCEPTIONS
+#endif
#if !defined(LIBRETRO) && !defined(TARGET_NO_EXCEPTIONS)
#define USE_GGPO
diff --git a/core/deps/libzip/lib/zip_name_locate.c b/core/deps/libzip/lib/zip_name_locate.c
index 308d843..f07fd20 100644
--- a/core/deps/libzip/lib/zip_name_locate.c
+++ b/core/deps/libzip/lib/zip_name_locate.c
@@ -32,6 +32,7 @@
*/
+#include <config.h>
#include <string.h>
#ifdef HAVE_STRINGS_H
#include <strings.h>
diff --git a/core/deps/nowide/include/nowide/convert.hpp b/core/deps/nowide/include/nowide/convert.hpp
index 9c234f7..24d807e 100644
--- a/core/deps/nowide/include/nowide/convert.hpp
+++ b/core/deps/nowide/include/nowide/convert.hpp
@@ -118,6 +118,7 @@ namespace nowide {
{
return nowide::conv::utf_to_utf<char>(s);
}
+#if !defined(__redox__)
///
/// Convert between UTF-8 and UTF-16 string, implemented only on Windows platform
///
@@ -145,7 +146,7 @@ namespace nowide {
{
return nowide::conv::utf_to_utf<wchar_t>(s);
}
Submodule core/deps/asio contains modified content
diff --git a/core/deps/asio/asio/include/asio/detail/config.hpp b/core/deps/asio/asio/include/asio/detail/config.hpp
index 61ee752..4b140b9 100644
--- a/core/deps/asio/asio/include/asio/detail/config.hpp
+++ b/core/deps/asio/asio/include/asio/detail/config.hpp
@@ -828,6 +828,7 @@
|| defined(__NetBSD__) \
|| defined(__OpenBSD__) \
|| defined(__linux__) \
+ || defined(__redox__) \
|| defined(__HAIKU__)
# define ASIO_HAS_UNISTD_H 1
# endif
@@ -1093,7 +1094,6 @@
# endif // defined(ASIO_HAS_BOOST_CONFIG) && defined(BOOST_HAS_THREADS)
# endif // !defined(ASIO_DISABLE_THREADS)
#endif // !defined(ASIO_HAS_THREADS)
-
+#endif
} // nowide
// POSIX threads.
#if !defined(ASIO_HAS_PTHREADS)
# if defined(ASIO_HAS_THREADS)
diff --git a/core/hw/sh4/modules/serial.cpp b/core/hw/sh4/modules/serial.cpp
index 1a7689e..b23bf1b 100644
index aca43a0..11991e9 100644
--- a/core/hw/sh4/modules/serial.cpp
+++ b/core/hw/sh4/modules/serial.cpp
@@ -164,7 +164,7 @@ struct PTYPipe : public SerialPipe
@@ -475,7 +475,7 @@ struct PTYPipe : public SerialPort::Pipe
void init()
{
@ -105,130 +68,42 @@ index 1a7689e..b23bf1b 100644
if (config::SerialConsole && config::SerialPTY && tty == 1)
{
tty = open("/dev/ptmx", O_RDWR | O_NDELAY | O_NOCTTY | O_NONBLOCK);
diff --git a/core/khronos/GL4/gl3w.c b/core/khronos/GL4/gl3w.c
index 661dc1c..f8b6374 100644
--- a/core/khronos/GL4/gl3w.c
+++ b/core/khronos/GL4/gl3w.c
@@ -107,6 +107,26 @@ static GL3WglProc get_proc(const char *proc)
{
return (GL3WglProc)eglGetProcAddress(proc);
}
+#elif defined(__redox__)
+#include <SDL.h>
+
+static int open_libgl(void)
+{
+ if (SDL_GL_LoadLibrary(NULL) < 0)
+ return GL3W_ERROR_LIBRARY_OPEN;
+
+ return GL3W_OK;
+}
+
+static void close_libgl(void)
+{
+ SDL_GL_UnloadLibrary();
+}
+
+static GL3WglProc get_proc(const char *proc)
+{
+ return (GL3WglProc)SDL_GL_GetProcAddress(proc);
+}
#else
#include <dlfcn.h>
diff --git a/core/linux-dist/main.cpp b/core/linux-dist/main.cpp
index 365482a..2e16071 100644
--- a/core/linux-dist/main.cpp
+++ b/core/linux-dist/main.cpp
@@ -3,7 +3,7 @@
#endif
#include "types.h"
-#if defined(__unix__) || defined(__SWITCH__)
+#if defined(__unix__) || defined(__SWITCH__) || defined(__redox__)
#include "hw/sh4/dyna/blockmanager.h"
#include "log/LogManager.h"
#include "emulator.h"
diff --git a/core/linux/posix_vmem.cpp b/core/linux/posix_vmem.cpp
index a2ab3c7..d503eb7 100644
--- a/core/linux/posix_vmem.cpp
+++ b/core/linux/posix_vmem.cpp
@@ -120,7 +120,7 @@ static int allocate_shared_filemem(unsigned size) {
// Use Android's specific shmem stuff.
fd = ashmem_create_region("RAM", size);
#else
- #if !defined(__APPLE__)
+ #if !defined(__APPLE__) && !defined(__redox__)
fd = shm_open("/dcnzorz_mem", O_CREAT | O_EXCL | O_RDWR, S_IREAD | S_IWRITE);
shm_unlink("/dcnzorz_mem");
#endif
@@ -216,6 +216,7 @@ void vmem_platform_destroy()
void vmem_platform_reset_mem(void *ptr, unsigned size_bytes) {
// Mark them as non accessible.
mprotect(ptr, size_bytes, PROT_NONE);
+ #if !defined(__redox__)
// Tell the kernel to flush'em all (FIXME: perhaps unmap+mmap 'd be better?)
madvise(ptr, size_bytes, MADV_DONTNEED);
#if defined(MADV_REMOVE)
@@ -223,6 +224,7 @@ void vmem_platform_reset_mem(void *ptr, unsigned size_bytes) {
#elif defined(MADV_FREE)
madvise(ptr, size_bytes, MADV_FREE);
#endif
+ #endif
}
// Allocates a bunch of memory (page aligned and page-sized)
diff --git a/core/log/StringUtil.h b/core/log/StringUtil.h
index b14a9a6..cd942e7 100644
--- a/core/log/StringUtil.h
+++ b/core/log/StringUtil.h
@@ -24,7 +24,7 @@ int vasprintf(char **s, const char *fmt, va_list ap)
}
diff --git a/core/linux/context.cpp b/core/linux/context.cpp
index 7ab2d8e..8a2bb2c 100644
--- a/core/linux/context.cpp
+++ b/core/linux/context.cpp
@@ -8,11 +8,11 @@
#define __USE_GNU 1
#endif
-#if !defined(_WIN32) && !defined(__ANDROID__) && !defined(__HAIKU__) && !defined(__OpenBSD__) && !defined(__SWITCH__)
+#if !defined(_WIN32) && !defined(__ANDROID__) && !defined(__HAIKU__) && !defined(__OpenBSD__) && !defined(__SWITCH__) && !defined(__redox__)
static locale_t GetCLocale()
{
static locale_t c_locale = newlocale(LC_ALL_MASK, "C", nullptr);
@@ -69,11 +69,11 @@ bool CharArrayFromFormatV(char* out, int outsize, const char* format, va_list ar
writtenCount = vsnprintf(out, outsize, format, args);
#endif
#else
-#if !defined(__ANDROID__) && !defined(__HAIKU__) && !defined(__OpenBSD__) && !defined(__SWITCH__)
+#if !defined(__ANDROID__) && !defined(__HAIKU__) && !defined(__OpenBSD__) && !defined(__SWITCH__) && !defined(__redox__)
locale_t previousLocale = uselocale(GetCLocale());
#endif
writtenCount = vsnprintf(out, outsize, format, args);
-#if !defined(__ANDROID__) && !defined(__HAIKU__) && !defined(__OpenBSD__) && !defined(__SWITCH__)
+#if !defined(__ANDROID__) && !defined(__HAIKU__) && !defined(__OpenBSD__) && !defined(__SWITCH__) && !defined(__redox__)
uselocale(previousLocale);
#endif
#endif
@@ -101,7 +101,7 @@ std::string StringFromFormatV(const char* format, va_list args)
std::string temp = buf;
delete[] buf;
#else
-#if !defined(__ANDROID__) && !defined(__HAIKU__) && !defined(__OpenBSD__) && !defined(__SWITCH__)
+#if !defined(__ANDROID__) && !defined(__HAIKU__) && !defined(__OpenBSD__) && !defined(__SWITCH__) && !defined(__redox__)
locale_t previousLocale = uselocale(GetCLocale());
#endif
if (vasprintf(&buf, format, args) < 0)
@@ -110,7 +110,7 @@ std::string StringFromFormatV(const char* format, va_list args)
buf = nullptr;
}
-#if !defined(__ANDROID__) && !defined(__HAIKU__) && !defined(__OpenBSD__) && !defined(__SWITCH__)
+#if !defined(__ANDROID__) && !defined(__HAIKU__) && !defined(__OpenBSD__) && !defined(__SWITCH__) && !defined(__redox__)
uselocale(previousLocale);
- #if !defined(__OpenBSD__)
+ #if !defined(__OpenBSD__) && !defined(__redox__)
#include <ucontext.h>
#endif
- #if defined(__OpenBSD__)
+ #if defined(__OpenBSD__) || defined(__redox__)
#include <signal.h>
#endif
@@ -112,6 +112,11 @@ static void context_segfault(host_context_t* hostctx, void* segfault_ctx)
bicopy<ToSegfault>(hostctx->rsp, MCTX(.__gregs[_REG_RSP]));
bicopy<ToSegfault>(hostctx->r9, MCTX(.__gregs[_REG_R9]));
bicopy<ToSegfault>(hostctx->rdi, MCTX(.__gregs[_REG_RDI]));
+ #elif defined(__redox__)
+ bicopy<ToSegfault>(hostctx->pc, MCTX(.rip));
+ bicopy<ToSegfault>(hostctx->rsp, MCTX(.rsp));
+ bicopy<ToSegfault>(hostctx->r9, MCTX(.r9));
+ bicopy<ToSegfault>(hostctx->rdi, MCTX(.rdi));
#elif defined(__unix__)
bicopy<ToSegfault>(hostctx->pc, MCTX(.gregs[REG_RIP]));
bicopy<ToSegfault>(hostctx->rsp, MCTX(.gregs[REG_RSP]));
diff --git a/core/network/dns.cpp b/core/network/dns.cpp
index af98bfc..423773c 100644
index 4d45c4a..96752ef 100644
--- a/core/network/dns.cpp
+++ b/core/network/dns.cpp
@@ -148,7 +148,7 @@ char *read_name(char *reader, char *buffer, int *count)
return name;
@@ -153,7 +153,7 @@ pico_ip4 parseDnsResponsePacket(const void *buf, size_t len)
return { ~0u };
}
-#if !defined(_WIN32) && !defined(__SWITCH__)
@ -236,7 +111,7 @@ index af98bfc..423773c 100644
#include <ifaddrs.h>
#include <net/if.h>
#endif
@@ -195,7 +195,7 @@ bool is_local_address(u32 addr)
@@ -200,7 +200,7 @@ bool is_local_address(u32 addr)
}
closesocket(sd);
@ -246,25 +121,25 @@ index af98bfc..423773c 100644
#else // !_WIN32 && !__SWITCH__
diff --git a/core/network/net_platform.h b/core/network/net_platform.h
index 9c6af69..fc6bd45 100644
index 8b5ea48..1a20e0b 100644
--- a/core/network/net_platform.h
+++ b/core/network/net_platform.h
@@ -89,7 +89,7 @@ static inline void set_tcp_nodelay(sock_t fd)
@@ -91,7 +91,7 @@ static inline void set_tcp_nodelay(sock_t fd)
#if defined(_WIN32)
struct protoent *tcp_proto = getprotobyname("TCP");
setsockopt(fd, tcp_proto->p_proto, TCP_NODELAY, (const char *)&optval, optlen);
-#elif !defined(__APPLE__) && !defined(__FreeBSD__) && !defined(__NetBSD__)
+#elif !defined(__APPLE__) && !defined(__FreeBSD__) && !defined(__NetBSD__) && !defined(__redox__)
-#elif !defined(__APPLE__) && !defined(__FreeBSD__) && !defined(__NetBSD__) && !defined(__OpenBSD__)
+#elif !defined(__APPLE__) && !defined(__FreeBSD__) && !defined(__NetBSD__) && !defined(__OpenBSD__) && !defined(__redox__)
setsockopt(fd, SOL_TCP, TCP_NODELAY, (const void *)&optval, optlen);
#else
struct protoent *tcp_proto = getprotobyname("TCP");
diff --git a/core/rend/TexCache.cpp b/core/rend/TexCache.cpp
index 6654a39..dbc1577 100644
index 35b41b7..2782d5e 100644
--- a/core/rend/TexCache.cpp
+++ b/core/rend/TexCache.cpp
@@ -783,7 +783,10 @@ void BaseTextureCacheData::Update()
height = original_h;
@@ -670,7 +670,10 @@ bool BaseTextureCacheData::Update()
mipmapped = false;
}
//lock the texture to detect changes in it
+// TODO: No SIGSEGV handler on redox
+#if !defined(__redox__)
@ -273,15 +148,3 @@ index 6654a39..dbc1577 100644
UploadToGPU(upscaled_w, upscaled_h, (const u8 *)temp_tex_buffer, IsMipmapped(), mipmapped);
if (config::DumpTextures)
diff --git a/core/types.h b/core/types.h
index d2ea162..3fa816e 100644
--- a/core/types.h
+++ b/core/types.h
@@ -169,6 +169,7 @@ inline static void JITWriteProtect(bool enabled) {
//includes from c++rt
#include <vector>
#include <string>
+#include <strings.h>
#include <map>
#include <stdexcept>

View File

@ -1,28 +1,17 @@
#TODO: TEST
[source]
git = "https://gitlab.redox-os.org/redox-os/sdl2.git"
branch = "redox-2.0.33"
shallow_clone = true
[build]
template = "custom"
template = "cmake"
dependencies = [
"liborbital",
"mesa",
"zlib",
]
script = """
DYNAMIC_INIT
export LDFLAGS="${LDFLAGS} -lorbital -lOSMesa -lstdc++"
COOKBOOK_CONFIGURE_FLAGS+=(
--disable-pulseaudio
--disable-video-x11
--enable-audio
--enable-dummyaudio
--enable-redoxaudio
--enable-threads
--enable-video-orbital
)
cookbook_configure
# Hack to add OSMesa
sed -i "s/Requires:/Requires: osmesa >= 8.0.0/" "${COOKBOOK_STAGE}/usr/lib/pkgconfig/sdl2.pc"
"""
cmakeflags = [
"-DSDL_VIDEO=1",
"-DSDL_ORBITAL=1",
"-DREDOX=1",
]