diff --git a/cmake/sdlchecks.cmake b/cmake/sdlchecks.cmake index 865e28f6d5..c5a51edd1d 100644 --- a/cmake/sdlchecks.cmake +++ b/cmake/sdlchecks.cmake @@ -884,6 +884,9 @@ macro(CheckPTHREAD) set(PTHREAD_LDFLAGS "-pthread") elseif(QNX) # pthread support is baked in + elseif(HURD) + set(PTHREAD_CFLAGS "-D_REENTRANT") + set(PTHREAD_LDFLAGS "-pthread") else() set(PTHREAD_CFLAGS "-D_REENTRANT") set(PTHREAD_LDFLAGS "-lpthread") diff --git a/cmake/sdlplatform.cmake b/cmake/sdlplatform.cmake index 60e0e77fd9..6b5777aeca 100644 --- a/cmake/sdlplatform.cmake +++ b/cmake/sdlplatform.cmake @@ -36,8 +36,8 @@ function(SDL_DetectCMakePlatform) set(sdl_cmake_platform NetBSD) elseif(CMAKE_SYSTEM_NAME MATCHES "kOpenBSD.*|OpenBSD.*") set(sdl_cmake_platform OpenBSD) - elseif(CMAKE_SYSTEM_NAME MATCHES ".*GNU.*") - set(sdl_cmake_platform GNU) + elseif(CMAKE_SYSTEM_NAME STREQUAL "GNU") + set(sdl_cmake_platform Hurd) elseif(CMAKE_SYSTEM_NAME MATCHES ".*BSDI.*") set(sdl_cmake_platform BSDi) elseif(CMAKE_SYSTEM_NAME MATCHES "DragonFly.*|FreeBSD") diff --git a/include/SDL3/SDL_platform_defines.h b/include/SDL3/SDL_platform_defines.h index f7f14be005..848dac3db8 100644 --- a/include/SDL3/SDL_platform_defines.h +++ b/include/SDL3/SDL_platform_defines.h @@ -484,4 +484,14 @@ #define SDL_PLATFORM_NGAGE 1 #endif +#ifdef __GNU__ + +/** + * A preprocessor macro that is only defined if compiling for GNU/Hurd. + * + * \since This macro is available since SDL 3.4.0. + */ +#define SDL_PLATFORM_HURD 1 +#endif + #endif /* SDL_platform_defines_h_ */ diff --git a/src/SDL.c b/src/SDL.c index 41a8435e6a..9b5ee8713f 100644 --- a/src/SDL.c +++ b/src/SDL.c @@ -770,6 +770,8 @@ const char *SDL_GetPlatform(void) return "PlayStation Vita"; #elif defined(SDL_PLATFORM_3DS) return "Nintendo 3DS"; +#elif defined(SDL_PLATFORM_HURD) + return "GNU/Hurd"; #elif defined(__managarm__) return "Managarm"; #else diff --git a/src/core/unix/SDL_appid.c b/src/core/unix/SDL_appid.c index 996e216cd5..8bf3349877 100644 --- a/src/core/unix/SDL_appid.c +++ b/src/core/unix/SDL_appid.c @@ -30,11 +30,11 @@ const char *SDL_GetExeName(void) // TODO: Use a fallback if BSD has no mounted procfs (OpenBSD has no procfs at all) if (!proc_name) { -#if defined(SDL_PLATFORM_LINUX) || defined(SDL_PLATFORM_FREEBSD) || defined (SDL_PLATFORM_NETBSD) +#if defined(SDL_PLATFORM_LINUX) || defined(SDL_PLATFORM_FREEBSD) || defined (SDL_PLATFORM_NETBSD) || defined(SDL_PLATFORM_HURD) static char linkfile[1024]; int linksize; -#if defined(SDL_PLATFORM_LINUX) +#if defined(SDL_PLATFORM_LINUX) || defined(SDL_PLATFORM_HURD) const char *proc_path = "/proc/self/exe"; #elif defined(SDL_PLATFORM_FREEBSD) const char *proc_path = "/proc/curproc/file"; diff --git a/test/testgles2.c b/test/testgles2.c index 1184eab7cb..ba3e0ddcda 100644 --- a/test/testgles2.c +++ b/test/testgles2.c @@ -19,7 +19,7 @@ #include -#if defined(SDL_PLATFORM_IOS) || defined(SDL_PLATFORM_ANDROID) || defined(SDL_PLATFORM_EMSCRIPTEN) || defined(SDL_PLATFORM_WIN32) || defined(SDL_PLATFORM_LINUX) +#if defined(SDL_PLATFORM_IOS) || defined(SDL_PLATFORM_ANDROID) || defined(SDL_PLATFORM_EMSCRIPTEN) || defined(SDL_PLATFORM_WIN32) || defined(SDL_PLATFORM_LINUX) || defined(SDL_PLATFORM_HURD) #define HAVE_OPENGLES2 #endif