Now, SDL2 is not recommended and suggested to use SDL3 with sdl2-compat. -- Takashi Yano <takashi.y...@nifty.ne.jp>
NAME="SDL3" VERSION=3.2.20 RELEASE=1 LICENSE="Zlib" CATEGORY="Libs" SUMMARY="Simple DirectMedia Layer core library" DESCRIPTION="This is the Simple DirectMedia Layer, a general API that provides low level access to audio, keyboard, mouse, joystick, 3D hardware via OpenGL, and 2D framebuffer across multiple platforms." HOMEPAGE="http://www.libsdl.org/" SRC_URI="https://github.com/libsdl-org/SDL/releases/download/release-${VERSION}/SDL3-${VERSION}.tar.gz"
inherit cmake PKG_NAMES="libSDL3_0 libSDL3-devel" libSDL3_0_REQUIRES="libdbus1_3 libGL1 libsamplerate0 libX11_6 libXcursor1 libXext6 libXi6 libXinerama1 libXrandr2 libXss1" # libaudio2 libpulse-simple0 libSDL3_0_CONTENTS="usr/bin/cygSDL3-0.dll usr/share/doc/ usr/share/licenses/" libSDL3_devel_CONTENTS="usr/include/ usr/lib/" DISTCLEANFILES="acinclude/l*.m4" DIFF_EXCLUDES="SDL_config.h" CYGCMAKE_ARGS=" -DSDL_JACK=OFF -DSDL_SNDIO=OFF " ACLOCAL_FLAGS="-I acinclude" NO_AUTOHEADER=1 CYGCONF_ARGS=" --enable-pthreads --enable-pthread-sem --disable-arts --disable-arts-shared --enable-esd --enable-esd-shared --enable-nas --enable-nas-shared --enable-oss --enable-pulseaudio --enable-pulseaudio-shared --enable-libsamplerate --enable-libsamplerate-shared --enable-video-dummy --enable-video-opengl --enable-video-opengles --enable-video-x11 --enable-video-x11-scrnsaver --enable-video-x11-xcursor --enable-video-x11-xinput --enable-video-x11-xrandr --enable-video-x11-xshape --enable-x11-shared --enable-xinput --enable-render-d3d --disable-jack --disable-sndio " DOCS="README-SDL.txt README-porting.txt" BUILD_REQUIRES="libX11-devel libGL-devel libEGL-devel libsamplerate-devel libesd-devel nas"
--- origsrc/SDL3-3.2.20/CMakeLists.txt 2025-08-05 01:58:55.000000000 +0900 +++ src/SDL3-3.2.20/CMakeLists.txt 2025-08-26 14:36:35.689597000 +0900 @@ -367,9 +367,9 @@ dep_option(SDL_WAYLAND_LIBDECOR_SHARED dep_option(SDL_RPI "Use Raspberry Pi video driver" ON "SDL_VIDEO;UNIX_SYS;SDL_CPU_ARM32 OR SDL_CPU_ARM64" OFF) dep_option(SDL_ROCKCHIP "Use ROCKCHIP Hardware Acceleration video driver" ON "SDL_VIDEO;UNIX_SYS;SDL_CPU_ARM32 OR SDL_CPU_ARM64" OFF) dep_option(SDL_COCOA "Use Cocoa video driver" ON "APPLE" OFF) -dep_option(SDL_DIRECTX "Use DirectX for Windows audio/video" ON "SDL_AUDIO OR SDL_VIDEO;WINDOWS" OFF) -dep_option(SDL_XINPUT "Use Xinput for Windows" ON "WINDOWS" OFF) -dep_option(SDL_WASAPI "Use the Windows WASAPI audio driver" ON "WINDOWS;SDL_AUDIO" OFF) +dep_option(SDL_DIRECTX "Use DirectX for Windows audio/video" ON "SDL_AUDIO OR SDL_VIDEO;WINDOWS OR CYGWIN" OFF) +dep_option(SDL_XINPUT "Use Xinput for Windows" ON "WINDOWS OR CYGWIN" OFF) +dep_option(SDL_WASAPI "Use the Windows WASAPI audio driver" ON "SDL_AUDIO" OFF) dep_option(SDL_RENDER_D3D "Enable the Direct3D 9 render driver" ON "SDL_RENDER;SDL_DIRECTX" OFF) dep_option(SDL_RENDER_D3D11 "Enable the Direct3D 11 render driver" ON "SDL_RENDER;SDL_DIRECTX" OFF) dep_option(SDL_RENDER_D3D12 "Enable the Direct3D 12 render driver" ON "SDL_RENDER;SDL_DIRECTX" OFF) @@ -480,7 +480,7 @@ else() endif() endif() -if(CYGWIN) +if(FALSE AND CYGWIN) # We build SDL on cygwin without the UNIX emulation layer sdl_include_directories(PUBLIC SYSTEM "/usr/include/mingw") cmake_push_check_state() @@ -1262,7 +1262,7 @@ if(SDL_CAMERA) #endif() endif() -if(UNIX OR APPLE) +if(UNIX OR APPLE OR CYGWIN) # Relevant for Unix/Darwin only set(DYNAPI_NEEDS_DLOPEN 1) CheckDLOPEN() @@ -1273,7 +1273,7 @@ if(UNIX OR APPLE) endif() endif() -if(UNIX OR APPLE OR HAIKU OR RISCOS) +if(UNIX OR APPLE OR HAIKU OR RISCOS OR CYGWIN) CheckO_CLOEXEC() endif() @@ -1567,7 +1567,7 @@ elseif(EMSCRIPTEN) CheckPTHREAD() CheckLibUnwind() -elseif(UNIX AND NOT APPLE AND NOT RISCOS AND NOT HAIKU) +elseif((UNIX OR CYGWIN) AND NOT APPLE AND NOT RISCOS AND NOT HAIKU) if(SDL_AUDIO) if(NETBSD) set(SDL_AUDIO_DRIVER_NETBSD 1) @@ -1609,7 +1609,7 @@ elseif(UNIX AND NOT APPLE AND NOT RISCOS set(HAVE_SDL_TRAY TRUE) endif() - if(UNIX) + if(UNIX OR CYGWIN) sdl_glob_sources("${SDL3_SOURCE_DIR}/src/core/unix/*.c") check_c_source_compiles(" @@ -1901,6 +1901,136 @@ elseif(UNIX AND NOT APPLE AND NOT RISCOS set (HAVE_VSNPRINTF 0) set (USE_POSIX_SPAWN 1) endif() + + if (CYGWIN) + check_c_source_compiles(" + #include <windows.h> + int main(int argc, char **argv) { return 0; }" HAVE_WIN32_CC) + sdl_glob_sources("${SDL3_SOURCE_DIR}/src/core/windows/*.c") + sdl_glob_sources("${SDL3_SOURCE_DIR}/src/main/windows/*.c") + sdl_link_dependency(base LIBS kernel32 user32 gdi32 winmm imm32 ole32 oleaut32 version uuid advapi32 setupapi shell32 dxguid) + endif() + + if(CYGWIN AND SDL_DIRECTX) + cmake_push_check_state() + + #check_include_file(d3d9.h HAVE_D3D9_H) + #check_include_file(d3d11_1.h HAVE_D3D11_H) + #check_include_file(ddraw.h HAVE_DDRAW_H) + #check_include_file(dsound.h HAVE_DSOUND_H) + #check_include_file(dinput.h HAVE_DINPUT_H) + set(HAVE_D3D9_H TRUE) + set(HAVE_D3D11_H TRUE) + set(HAVE_DDRAW_H TRUE) + set(HAVE_DSOUND_H TRUE) + set(HAVE_DINPUT_H TRUE) + if(SDL_CPU_ARM32) # !!! FIXME: this should probably check if we're !(x86 or x86-64) instead of arm. + set(HAVE_DINPUT_H 0) + endif() + check_include_file(dxgi.h HAVE_DXGI_H) + cmake_pop_check_state() + if(HAVE_D3D9_H OR HAVE_D3D11_H OR HAVE_DDRAW_H OR HAVE_DSOUND_H OR HAVE_DINPUT_H) + set(HAVE_DIRECTX TRUE) + if(NOT MINGW AND NOT CYGWIN AND NOT USE_WINSDK_DIRECTX) + if(CMAKE_SIZEOF_VOID_P EQUAL 8) + set(PROCESSOR_ARCH "x64") + else() + set(PROCESSOR_ARCH "x86") + endif() + sdl_link_directories("$<BUILD_INTERFACE:$$ENV{DXSDK_DIR}\\lib\\${PROCESSOR_ARCH}>") + sdl_include_directories(PRIVATE SYSTEM "$<BUILD_INTERFACE:$ENV{DXSDK_DIR}\\Include>") + endif() + endif() + endif() + + if(CYGWIN AND SDL_XINPUT) + # xinput.h may need windows.h, but does not include it itself. + check_c_source_compiles(" + #include <windows.h> + #include <xinput.h> + int main(int argc, char **argv) { return 0; }" HAVE_XINPUT_H) + endif() + + if(CYGWIN AND SDL_VIDEO) + set(SDL_VIDEO_DRIVER_WINDOWS 1) + sdl_glob_sources("${SDL3_SOURCE_DIR}/src/video/windows/*.c") + + CheckOpenVR() + + if(SDL_RENDER_D3D AND HAVE_D3D9_H) + set(SDL_VIDEO_RENDER_D3D 1) + set(HAVE_RENDER_D3D TRUE) + endif() + if(SDL_RENDER_D3D11 AND HAVE_D3D11_H) + set(SDL_VIDEO_RENDER_D3D11 1) + set(HAVE_RENDER_D3D11 TRUE) + endif() + if(SDL_RENDER_D3D12) + set(SDL_VIDEO_RENDER_D3D12 1) + set(HAVE_RENDER_D3D12 TRUE) + endif() + set(HAVE_SDL_VIDEO TRUE) + endif() + + if(CYGWIN AND SDL_VIDEO) + if(SDL_OPENGL) + set(SDL_VIDEO_OPENGL 1) + set(SDL_VIDEO_OPENGL_WGL 1) + set(SDL_VIDEO_RENDER_OGL 1) + set(HAVE_OPENGL TRUE) + endif() + + if(SDL_OPENGLES) + set(SDL_VIDEO_OPENGL_EGL 1) + set(SDL_VIDEO_OPENGL_ES2 1) + set(SDL_VIDEO_RENDER_OGL_ES2 1) + set(HAVE_OPENGLES TRUE) + endif() + + if(SDL_VULKAN) + set(SDL_VIDEO_VULKAN 1) + set(HAVE_VULKAN TRUE) + if(SDL_RENDER_VULKAN) + set(SDL_VIDEO_RENDER_VULKAN 1) + set(HAVE_RENDER_VULKAN TRUE) + endif() + endif() + endif() + + if(CYGWIN AND SDL_HIDAPI) + CheckHIDAPI() + endif() + + if(CYGWIN AND SDL_JOYSTICK) + sdl_glob_sources("${SDL3_SOURCE_DIR}/src/joystick/windows/*.c") + + set(SDL_JOYSTICK_RAWINPUT 1) + if(HAVE_DINPUT_H) + set(SDL_JOYSTICK_DINPUT 1) + sdl_link_dependency(joystick LIBS dinput8) + endif() + if(HAVE_XINPUT_H) + set(SDL_JOYSTICK_XINPUT 1) + set(HAVE_XINPUT TRUE) + endif() + if(HAVE_WINDOWS_GAMING_INPUT_H) + set(SDL_JOYSTICK_WGI 1) + endif() + if(HAVE_GAMEINPUT_H) + sdl_glob_sources("${SDL3_SOURCE_DIR}/src/joystick/gdk/*.c") + set(SDL_JOYSTICK_GAMEINPUT 1) + endif() + set(HAVE_SDL_JOYSTICK TRUE) + + if(SDL_HAPTIC) + if(HAVE_DINPUT_H) + sdl_glob_sources("${SDL3_SOURCE_DIR}/src/haptic/windows/*.c") + set(SDL_HAPTIC_DINPUT 1) + set(HAVE_SDL_HAPTIC TRUE) + endif() + endif() + endif() + elseif(WINDOWS) check_c_source_compiles(" #include <windows.h> @@ -1930,7 +2060,7 @@ elseif(WINDOWS) if(DEFINED MSVC_VERSION AND NOT ${MSVC_VERSION} LESS 1700) set(USE_WINSDK_DIRECTX TRUE) endif() - if(NOT MINGW AND NOT USE_WINSDK_DIRECTX) + if(NOT MINGW AND NOT CYGWIN AND NOT USE_WINSDK_DIRECTX) if("$ENV{DXSDK_DIR}" STREQUAL "") message(FATAL_ERROR "DIRECTX requires the \$DXSDK_DIR environment variable to be set") endif() @@ -1949,7 +2079,7 @@ elseif(WINDOWS) cmake_pop_check_state() if(HAVE_D3D9_H OR HAVE_D3D11_H OR HAVE_DDRAW_H OR HAVE_DSOUND_H OR HAVE_DINPUT_H) set(HAVE_DIRECTX TRUE) - if(NOT MINGW AND NOT USE_WINSDK_DIRECTX) + if(NOT MINGW AND NOT CYGWIN AND NOT USE_WINSDK_DIRECTX) if(CMAKE_SIZEOF_VOID_P EQUAL 8) set(PROCESSOR_ARCH "x64") else() @@ -2943,7 +3073,7 @@ if (SDL_DIALOG) if(ANDROID) sdl_sources(${SDL3_SOURCE_DIR}/src/dialog/android/SDL_androiddialog.c) set(HAVE_SDL_DIALOG TRUE) - elseif(UNIX AND NOT APPLE AND NOT RISCOS AND NOT HAIKU) + elseif((UNIX OR CYGWIN) AND NOT APPLE AND NOT RISCOS AND NOT HAIKU) sdl_sources(${SDL3_SOURCE_DIR}/src/dialog/unix/SDL_unixdialog.c) sdl_sources(${SDL3_SOURCE_DIR}/src/dialog/unix/SDL_portaldialog.c) sdl_sources(${SDL3_SOURCE_DIR}/src/dialog/unix/SDL_zenitydialog.c) @@ -2961,7 +3091,7 @@ if (SDL_DIALOG) endif() sdl_sources("${SDL3_SOURCE_DIR}/src/process/SDL_process.c") -if(WINDOWS) +if(WINDOWS AND NOT CYGWIN) sdl_glob_sources("${SDL3_SOURCE_DIR}/src/process/windows/*.c") set(SDL_PROCESS_WINDOWS 1) set(HAVE_SDL_PROCESS TRUE) --- origsrc/SDL3-3.2.20/cmake/sdlchecks.cmake 2025-06-27 07:43:29.000000000 +0900 +++ src/SDL3-3.2.20/cmake/sdlchecks.cmake 2025-08-25 15:51:53.858383400 +0900 @@ -22,6 +22,35 @@ macro(FindLibraryAndSONAME _LIB) if(APPLE) string(REGEX REPLACE "(\\.[0-9]*)\\.[0-9\\.]*dylib$" "\\1.dylib" _LIB_REGEXD "${_LIB_JUSTNAME}") + elseif(CYGWIN) + set(_LIB_LIBDIR "/usr/bin") + string(REGEX MATCH "libpulse\\.dll\\.a" LIBPULSE ${_LIB_JUSTNAME}) + string(REGEX MATCH "libX11\\.dll\\.a" LIBX11 ${_LIB_JUSTNAME}) + string(REGEX MATCH "libXext\\.dll\\.a" LIBXEXT ${_LIB_JUSTNAME}) + string(REGEX MATCH "libXcursor\\.dll\\.a" LIBXCURSOR ${_LIB_JUSTNAME}) + string(REGEX MATCH "libXi\\.dll\\.a" LIBXI ${_LIB_JUSTNAME}) + string(REGEX MATCH "libXfixes\\.dll\\.a" LIBXFIXES ${_LIB_JUSTNAME}) + string(REGEX MATCH "libXrandr\\.dll\\.a" LIBXRANDR ${_LIB_JUSTNAME}) + string(REGEX MATCH "libXrender\\.dll\\.a" LIBXRENDER ${_LIB_JUSTNAME}) + if(LIBPULSE) + set(_LIB_REGEXD "cygpulse-0.dll") + elseif(LIBX11) + set(_LIB_REGEXD "cygX11-6.dll") + elseif(LIBXEXT) + set(_LIB_REGEXD "cygXext-6.dll") + elseif(LIBXCURSOR) + set(_LIB_REGEXD "cygXcursor-1.dll") + elseif(LIBXI) + set(_LIB_REGEXD "cygXi-6.dll") + elseif(LIBXFIXES) + set(_LIB_REGEXD "cygXfixes-3.dll") + elseif(LIBXRANDR) + set(_LIB_REGEXD "cygXrandr-2.dll") + elseif(LIBXRENDER) + set(_LIB_REGEXD "cygXrender-1.dll") + else() + message(FATAL_ERROR "Please fix sdlchecks.cmake: " ${_LIB_JUSTNAME}) + endif() else() string(REGEX REPLACE "(\\.[0-9]*)\\.[0-9\\.]*$" "\\1" _LIB_REGEXD "${_LIB_JUSTNAME}") endif() --- origsrc/SDL3-3.2.20/include/SDL3/SDL_platform_defines.h 2025-02-05 06:57:41.000000000 +0900 +++ src/SDL3-3.2.20/include/SDL3/SDL_platform_defines.h 2025-08-25 15:51:53.862384700 +0900 @@ -112,8 +112,7 @@ #undef SDL_PLATFORM_LINUX #endif -#if defined(__unix__) || defined(__unix) || defined(unix) - +#if defined(__unix__) || defined(__unix) || defined(unix) || defined(__CYGWIN__) /** * A preprocessor macro that is only defined if compiling for a Unix-like * system. @@ -317,7 +316,7 @@ #define SDL_PLATFORM_CYGWIN 1 #endif -#if defined(_WIN32) || defined(SDL_PLATFORM_CYGWIN) +#if defined(_WIN32) /** * A preprocessor macro that is only defined if compiling for Windows. --- origsrc/SDL3-3.2.20/include/SDL3/SDL_system.h 2025-01-22 03:12:25.000000000 +0900 +++ src/SDL3-3.2.20/include/SDL3/SDL_system.h 2025-08-25 15:51:53.865394400 +0900 @@ -49,7 +49,7 @@ extern "C" { /* * Platform specific functions for Windows */ -#if defined(SDL_PLATFORM_WINDOWS) +#if defined(SDL_PLATFORM_WINDOWS) || defined(SDL_PLATFORM_CYGWIN) typedef struct tagMSG MSG; --- origsrc/SDL3-3.2.20/src/SDL.c 2025-07-12 23:48:56.000000000 +0900 +++ src/SDL3-3.2.20/src/SDL.c 2025-08-25 15:51:53.869395100 +0900 @@ -65,7 +65,7 @@ // Initialization/Cleanup routines #include "timer/SDL_timer_c.h" -#ifdef SDL_PLATFORM_WINDOWS +#if defined(SDL_PLATFORM_WINDOWS) || defined(SDL_PLATFORM_CYGWIN) extern bool SDL_HelperWindowCreate(void); extern void SDL_HelperWindowDestroy(void); #endif @@ -317,7 +317,7 @@ bool SDL_InitSubSystem(SDL_InitFlags fla SDL_DBus_Init(); #endif -#ifdef SDL_PLATFORM_WINDOWS +#if defined(SDL_PLATFORM_WINDOWS) || defined(SDL_PLATFORM_CYGWIN) if (flags & (SDL_INIT_HAPTIC | SDL_INIT_JOYSTICK)) { if (!SDL_HelperWindowCreate()) { goto quit_and_error; @@ -653,7 +653,7 @@ void SDL_Quit(void) SDL_bInMainQuit = true; // Quit all subsystems -#ifdef SDL_PLATFORM_WINDOWS +#if defined(SDL_PLATFORM_WINDOWS) || defined(SDL_PLATFORM_CYGWIN) SDL_HelperWindowDestroy(); #endif SDL_QuitSubSystem(SDL_INIT_EVERYTHING); --- origsrc/SDL3-3.2.20/src/audio/dsp/SDL_dspaudio.c 2025-02-15 07:16:10.000000000 +0900 +++ src/SDL3-3.2.20/src/audio/dsp/SDL_dspaudio.c 2025-08-25 15:51:53.873386600 +0900 @@ -166,7 +166,11 @@ static bool DSP_OpenDevice(SDL_AudioDevi while ((0x01U << frag_spec) < device->buffer_size) { frag_spec++; } +#ifdef __CYGWIN__ + frag_spec |= 0x00040000; // four fragments for cygwin to avoid choppy sound +#else frag_spec |= 0x00020000; // two fragments, for low latency +#endif // Set the audio buffering parameters #ifdef DEBUG_AUDIO --- origsrc/SDL3-3.2.20/src/core/SDL_core_unsupported.c 2025-02-04 10:03:26.000000000 +0900 +++ src/SDL3-3.2.20/src/core/SDL_core_unsupported.c 2025-08-25 15:51:53.876396700 +0900 @@ -76,7 +76,7 @@ void SDL_GDKResumeGPU(SDL_GPUDevice *dev #endif -#if !defined(SDL_PLATFORM_WINDOWS) +#if !defined(SDL_PLATFORM_WINDOWS) && !defined(SDL_PLATFORM_CYGWIN) SDL_DECLSPEC bool SDLCALL SDL_RegisterApp(const char *name, Uint32 style, void *hInst); bool SDL_RegisterApp(const char *name, Uint32 style, void *hInst) --- origsrc/SDL3-3.2.20/src/core/windows/SDL_windows.c 2025-07-12 23:48:56.000000000 +0900 +++ src/SDL3-3.2.20/src/core/windows/SDL_windows.c 2025-08-25 15:51:53.880397700 +0900 @@ -20,7 +20,7 @@ */ #include "SDL_internal.h" -#if defined(SDL_PLATFORM_WINDOWS) +#if defined(SDL_PLATFORM_WINDOWS) || defined(SDL_PLATFORM_CYGWIN) #include "SDL_windows.h" --- origsrc/SDL3-3.2.20/src/core/windows/SDL_windows.h 2025-03-20 13:23:06.000000000 +0900 +++ src/SDL3-3.2.20/src/core/windows/SDL_windows.h 2025-08-25 15:51:53.884398500 +0900 @@ -74,6 +74,24 @@ #undef _WIN32_WINNT #define _WIN32_WINNT 0xA00 #define WINVER _WIN32_WINNT + +#elif defined(SDL_PLATFORM_CYGWIN) +#ifndef STRICT +#define STRICT 1 +#endif +#ifndef UNICODE +#define UNICODE 1 +#endif +#undef WINVER +#undef _WIN32_WINNT +#if defined(SDL_VIDEO_RENDER_D3D12) || defined(HAVE_DXGI1_6_H) +#define _WIN32_WINNT 0xA00 // For D3D12, 0xA00 is required +#elif defined(HAVE_SHELLSCALINGAPI_H) +#define _WIN32_WINNT 0x603 // For DPI support +#else +#define _WIN32_WINNT 0x501 // Need 0x410 for AlphaBlend() and 0x500 for EnumDisplayDevices(), 0x501 for raw input +#endif +#define WINVER _WIN32_WINNT #endif // See https://github.com/libsdl-org/SDL/pull/7607 @@ -92,6 +110,10 @@ #include <windows.h> #include <basetyps.h> // for REFIID with broken mingw.org headers #include <mmreg.h> +#ifdef __CYGWIN__ +#define SDL_WINAPI_FAMILY_PHONE 0 +#define IUnknown_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject) +#endif // Routines to convert from UTF8 to native Windows text #define WIN_StringToUTF8W(S) SDL_iconv_string("UTF-8", "UTF-16LE", (const char *)(S), (SDL_wcslen(S) + 1) * sizeof(WCHAR)) --- origsrc/SDL3-3.2.20/src/dynapi/SDL_dynapi.c 2025-02-07 02:46:15.000000000 +0900 +++ src/SDL3-3.2.20/src/dynapi/SDL_dynapi.c 2025-08-25 15:51:53.887399000 +0900 @@ -510,7 +510,7 @@ extern SDL_NORETURN void SDL_ExitProcess static void SDL_InitDynamicAPILocked(void) { // this can't use SDL_getenv_unsafe_REAL, because it might allocate memory before the app can set their allocator. -#if defined(WIN32) || defined(_WIN32) || defined(__CYGWIN__) +#if defined(WIN32) || defined(_WIN32) // We've always used LoadLibraryA for this, so this has never worked with Unicode paths on Windows. Sorry. char envbuf[512]; // overflows will just report as environment variable being unset, but LoadLibraryA has a MAX_PATH of 260 anyhow, apparently. const DWORD rc = GetEnvironmentVariableA(SDL_DYNAMIC_API_ENVVAR, envbuf, (DWORD) sizeof (envbuf)); --- origsrc/SDL3-3.2.20/src/dynapi/SDL_dynapi_unsupported.h 2025-01-02 00:45:52.000000000 +0900 +++ src/SDL3-3.2.20/src/dynapi/SDL_dynapi_unsupported.h 2025-08-25 15:51:53.891400100 +0900 @@ -23,7 +23,7 @@ #define SDL_dynapi_unsupported_h_ -#if !defined(SDL_PLATFORM_WINDOWS) +#if !defined(SDL_PLATFORM_WINDOWS) && !defined(SDL_PLATFORM_CYGWIN) typedef struct ID3D12Device ID3D12Device; typedef void *SDL_WindowsMessageHook; #endif --- origsrc/SDL3-3.2.20/src/joystick/windows/SDL_dinputjoystick.c 2025-07-12 23:48:56.000000000 +0900 +++ src/SDL3-3.2.20/src/joystick/windows/SDL_dinputjoystick.c 2025-08-26 12:09:01.045765300 +0900 @@ -376,6 +376,8 @@ DIEFFECT *CreateRumbleEffectData(Sint16 FreeRumbleEffectData(effect); return NULL; } + effect->rgdwAxes[0] = DIJOFS_X; + effect->rgdwAxes[1] = DIJOFS_Y; effect->rglDirection = (LONG *)SDL_calloc(effect->cAxes, sizeof(LONG)); if (!effect->rglDirection) { @@ -913,26 +915,29 @@ bool SDL_DINPUT_JoystickRumble(SDL_Joyst return SDL_Unsupported(); } - if (joystick->hwdata->ff_initialized) { + if (!joystick->hwdata->ff_initialized) { + if (!SDL_DINPUT_JoystickInitRumble(joystick, magnitude)) { + return false; + } + joystick->hwdata->ff_initialized = true; + } + do { DIPERIODIC *periodic = ((DIPERIODIC *)joystick->hwdata->ffeffect->lpvTypeSpecificParams); periodic->dwMagnitude = CONVERT_MAGNITUDE(magnitude); + joystick->hwdata->ffeffect->rglDirection[0] = low_frequency_rumble; + joystick->hwdata->ffeffect->rglDirection[1] = high_frequency_rumble; - result = IDirectInputEffect_SetParameters(joystick->hwdata->ffeffect_ref, joystick->hwdata->ffeffect, (DIEP_DURATION | DIEP_TYPESPECIFICPARAMS)); + result = IDirectInputEffect_SetParameters(joystick->hwdata->ffeffect_ref, joystick->hwdata->ffeffect, (DIEP_DURATION | DIEP_DIRECTION | DIEP_TYPESPECIFICPARAMS)); if (result == DIERR_INPUTLOST) { result = IDirectInputDevice8_Acquire(joystick->hwdata->InputDevice); if (SUCCEEDED(result)) { - result = IDirectInputEffect_SetParameters(joystick->hwdata->ffeffect_ref, joystick->hwdata->ffeffect, (DIEP_DURATION | DIEP_TYPESPECIFICPARAMS)); + result = IDirectInputEffect_SetParameters(joystick->hwdata->ffeffect_ref, joystick->hwdata->ffeffect, (DIEP_DURATION | DIEP_DIRECTION | DIEP_TYPESPECIFICPARAMS)); } } if (FAILED(result)) { return SetDIerror("IDirectInputDevice8::SetParameters", result); } - } else { - if (!SDL_DINPUT_JoystickInitRumble(joystick, magnitude)) { - return false; - } - joystick->hwdata->ff_initialized = true; - } + } while (false); result = IDirectInputEffect_Start(joystick->hwdata->ffeffect_ref, 1, 0); if (result == DIERR_INPUTLOST || result == DIERR_NOTEXCLUSIVEACQUIRED) { --- origsrc/SDL3-3.2.20/src/joystick/windows/SDL_windowsjoystick.c 2025-01-03 03:25:18.000000000 +0900 +++ src/SDL3-3.2.20/src/joystick/windows/SDL_windowsjoystick.c 2025-08-25 15:51:53.895401300 +0900 @@ -54,10 +54,14 @@ // local variables static bool s_bJoystickThread = false; +#ifndef __CYGWIN__ static SDL_Condition *s_condJoystickThread = NULL; +#endif static SDL_Mutex *s_mutexJoyStickEnum = NULL; +#ifndef __CYGWIN__ static SDL_Thread *s_joystickThread = NULL; static bool s_bJoystickThreadQuit = false; +#endif static Uint64 s_lastDeviceChange = 0; static GUID GUID_DEVINTERFACE_HID = { 0x4D1E55B2L, 0xF16F, 0x11CF, { 0x88, 0xCB, 0x00, 0x11, 0x11, 0x00, 0x00, 0x30 } }; @@ -190,6 +194,7 @@ static bool SDL_CreateDeviceNotification return true; } +#ifndef __CYGWIN__ static bool SDL_WaitForDeviceNotification(SDL_DeviceNotificationData *data, SDL_Mutex *mutex) { MSG msg; @@ -210,6 +215,7 @@ static bool SDL_WaitForDeviceNotificatio SDL_LockMutex(mutex); return (lastret != -1); } +#endif #endif // !defined(SDL_PLATFORM_XBOXONE) && !defined(SDL_PLATFORM_XBOXSERIES) @@ -217,6 +223,7 @@ static bool SDL_WaitForDeviceNotificatio static SDL_DeviceNotificationData s_notification_data; #endif +#ifndef __CYGWIN__ // Function/thread to scan the system for joysticks. static int SDLCALL SDL_JoystickThread(void *_data) { @@ -269,10 +276,12 @@ static int SDLCALL SDL_JoystickThread(vo return 1; } +#endif // spin up the thread to detect hotplug of devices static bool SDL_StartJoystickThread(void) { +#ifndef __CYGWIN__ s_mutexJoyStickEnum = SDL_CreateMutex(); if (!s_mutexJoyStickEnum) { return false; @@ -288,11 +297,13 @@ static bool SDL_StartJoystickThread(void if (!s_joystickThread) { return false; } +#endif return true; } static void SDL_StopJoystickThread(void) { +#ifndef __CYGWIN__ if (!s_joystickThread) { return; } @@ -316,6 +327,7 @@ static void SDL_StopJoystickThread(void) s_mutexJoyStickEnum = NULL; s_joystickThread = NULL; +#endif } void WINDOWS_AddJoystickDevice(JoyStick_DeviceData *device) --- origsrc/SDL3-3.2.20/src/render/direct3d11/SDL_render_d3d11.c 2025-03-06 15:39:31.000000000 +0900 +++ src/SDL3-3.2.20/src/render/direct3d11/SDL_render_d3d11.c 2025-08-25 15:51:53.899402300 +0900 @@ -18,6 +18,10 @@ misrepresented as being the original software. 3. This notice may not be removed or altered from any source distribution. */ +#ifdef __CYGWIN__ +#define MESA_EGL_NO_X11_HEADERS +#endif + #include "SDL_internal.h" #ifdef SDL_VIDEO_RENDER_D3D11 @@ -921,7 +925,7 @@ static HRESULT D3D11_CreateSwapChain(SDL goto done; } } else { -#if defined(SDL_PLATFORM_WIN32) || defined(SDL_PLATFORM_WINGDK) +#if defined(SDL_PLATFORM_WIN32) || defined(SDL_PLATFORM_WINGDK) || defined(SDL_PLATFORM_CYGWIN) HWND hwnd = (HWND)SDL_GetPointerProperty(SDL_GetWindowProperties(renderer->window), SDL_PROP_WINDOW_WIN32_HWND_POINTER, NULL); if (!hwnd) { SDL_SetError("Couldn't get window handle"); --- origsrc/SDL3-3.2.20/src/video/directx/d3d12.h 2024-08-30 09:33:52.000000000 +0900 +++ src/SDL3-3.2.20/src/video/directx/d3d12.h 2025-08-25 15:51:53.908403900 +0900 @@ -11,7 +11,9 @@ /* File created by MIDL compiler version 8.01.0628 */ - +#ifdef __CYGWIN__ +#define _WIN32 +#endif /* verify that the <rpcndr.h> version is high enough to compile this file*/ #ifndef __REQUIRED_RPCNDR_H_VERSION__