SDL: Add detailed documentation on building with MinGW64 (#11780)

From 522682cd6e855aee885c54ad8270ca0bf6b9b367 Mon Sep 17 00:00:00 2001
From: Daniel Wymark <[EMAIL REDACTED]>
Date: Fri, 3 Jan 2025 21:07:38 -0800
Subject: [PATCH] Add detailed documentation on building with MinGW64 (#11780)

---
 INSTALL.md             |  4 ++++
 docs/README-windows.md | 54 ++++++++++++++++++++++++++++++++++++++++++
 2 files changed, 58 insertions(+)

diff --git a/INSTALL.md b/INSTALL.md
index b8b0afb2936de..26ce60a20f2e4 100644
--- a/INSTALL.md
+++ b/INSTALL.md
@@ -6,10 +6,14 @@ Read ./docs/README-visualc.md
 
 ## Windows building with mingw-w64 for x86:
 
+Read [README-windows.md](docs/README-windows.md) for more information on building with MinGW64.
+
 Run: `cmake -S . -B build -DCMAKE_TOOLCHAIN_FILE=build-scripts/cmake-toolchain-mingw64-i686.cmake && cmake --build build && cmake --install build`
 
 ## Windows building with mingw-w64 for x64:
 
+Read [README-windows.md](docs/README-windows.md).
+
 Run: `cmake -S . -B build -DCMAKE_TOOLCHAIN_FILE=build-scripts/cmake-toolchain-mingw64-x86_64.cmake && cmake --build build && cmake --install build`
 
 ## macOS with Xcode:
diff --git a/docs/README-windows.md b/docs/README-windows.md
index ced972eeb582a..ff94ecf0ffb92 100644
--- a/docs/README-windows.md
+++ b/docs/README-windows.md
@@ -16,6 +16,60 @@ Studio solution.
 
 Details are here: https://github.com/libsdl-org/SDL/issues/5186
 
+## MinGW-w64 compiler support
+
+SDL can be built with MinGW-w64 and CMake. First, you need to install and set up the MSYS2 environment, which provides the MinGW-w64 toolchain. Install MSYS2, typically to `C:\msys64`, and follow the instructions on the MSYS2 wiki to use the MinGW-w64 shell to update all components in the MSYS2 environment. This generally amounts to running `pacman -Syuu` from the mingw64 shell, but refer to MSYS2's documentation for more details. Once the MSYS2 environment has been updated, install the x86_64 MinGW toolchain from the mingw64 shell with the command `pacman -S mingw-w64-x86_64-toolchain`. (You can additionally install `mingw-w64-i686-toolchain` if you intend to build 32-bit binaries as well. The remainder of this section assumes you only want to build 64-bit binaries.)
+
+To build and install SDL, you can use PowerShell or any CMake-compatible IDE. First, install CMake, Ninja, and Git. These tools can be installed using any number of tools, such as the MSYS2's `pacman`, `winget`, `Chocolatey`, or by manually downloading and running the installers. Clone SDL to an appropriate location with `git` and run the following commands from the root of the cloned repository:
+
+```sh
+mkdir build
+cmake -S . -B build -G Ninja -DCMAKE_TOOLCHAIN_FILE=build-scripts/cmake-toolchain-mingw64-x86_64.cmake
+cmake --build build --parallel
+cmake --install build --prefix C:/Libraries
+```
+
+This installs SDL to `C:\Libraries`. You can specify another directory of your choice as desired. Ensure that your `CMAKE_PREFIX_PATH` includes `C:\Libraries` when you want to build against this copy of SDL. The simplest way to do this is to pass it to CMake as an option at configuration time:
+
+```sh
+cmake .. -G Ninja -DCMAKE_PREFIX_PATH=C:/Libraries
+```
+
+You will also need to configure CMake to use the MinGW-w64 toolchain to build your own project. Here is a minimal toolchain file that you could use for this purpose:
+
+```
+set(CMAKE_SYSTEM_NAME Windows)
+set(CMAKE_SYSTEM_PROCESSOR x86_64)
+
+find_program(CMAKE_C_COMPILER NAMES x86_64-w64-mingw32-gcc REQUIRED)
+find_program(CMAKE_CXX_COMPILER NAMES x86_64-w64-mingw32-g++ REQUIRED)
+find_program(CMAKE_RC_COMPILER NAMES x86_64-w64-mingw32-windres windres REQUIRED)
+```
+
+Save this in your project and refer to it at configuration time with the option `-DCMAKE_TOOLCHAIN_FILE`.
+
+On Windows, you also need to copy `SDL3.dll` to an appropriate directory so that the game can find it at runtime. For guidance, see [README-cmake.md](README-cmake.md#how-do-i-copy-a-sdl3-dynamic-library-to-another-location).
+
+Below is a minimal `CMakeLists.txt` file to build your game linked against a system SDL that was built with the MinGW-w64 toolchain. See [README-cmake.md](README-cmake.md) for more details on including SDL in your CMake project.
+
+```cmake
+cmake_minimum_required(VERSION 3.15)
+project(mygame)
+
+find_package(SDL3 REQUIRED CONFIG COMPONENTS SDL3-shared)
+
+add_executable(mygame WIN32 mygame.c)
+target_link_libraries(mygame PRIVATE SDL3::SDL3)
+
+# On Windows, copy SDL3.dll to the build directory
+if(WIN32)
+    add_custom_command(
+        TARGET mygame POST_BUILD
+        COMMAND "${CMAKE_COMMAND}" -E copy $<TARGET_FILE:SDL3::SDL3-shared> $<TARGET_FILE_DIR:mygame>
+        VERBATIM
+    )
+endif()
+```
 
 ## OpenGL ES 2.x support