diff --git a/CMakeLists.txt b/CMakeLists.txt index f7d93b0..48e73f6 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -37,6 +37,20 @@ set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/bin) set(CMAKE_LIBRARY_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/lib) set(CMAKE_ARCHIVE_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/lib) +# ── Static MinGW runtime (Windows) ──────────────────────────────────────────── +# x64-mingw-static only statically links vcpkg's OWN deps (protobuf, sodium, ...); +# the GCC/MinGW runtime stays dynamic by default, so every produced .exe/.dll +# otherwise depends on libgcc_s_seh-1.dll / libwinpthread-1.dll / libstdc++-6.dll +# at runtime — DLLs that exist on a dev box (MSYS2/UCRT64) but not on a clean +# Windows machine, where the server then fails to start with "… was not found". +# Apply the fully-static-MinGW recipe to ALL targets so binaries are portable. +# (The SHARED voicecat.dll already sets these in core/CMakeLists.txt; the duplicate +# is harmless. Verify with: objdump -p build//bin/voicecat-server.exe | +# grep "DLL Name" — only Windows system DLLs should remain.) +if(WIN32 AND MINGW) + add_link_options(-static-libgcc -static-libstdc++ -static -lwinpthread) +endif() + # ── Targets ─────────────────────────────────────────────────────────────────── add_subdirectory(core)