Browse Source
[cmake] MinGW builds; fix line endings; fix weird multiplayer lobby behavior (#2835)
[cmake] MinGW builds; fix line endings; fix weird multiplayer lobby behavior (#2835)
MinGW builds perform pretty dramatically better than MSVC in my (brief) testing, getting 40% better FPS on my KVM than MSVC. How this will translate to the real world, who knows, but this is a really good target to have. TODO: Add this to CI, potentially replace clang-cl Signed-off-by: crueter <crueter@eden-emu.dev> Reviewed-on: https://git.eden-emu.dev/eden-emu/eden/pulls/2835 Reviewed-by: MaranBr <maranbr@eden-emu.dev>pull/2842/head
No known key found for this signature in database
GPG Key ID: 425ACD2D4830EBC6
12 changed files with 271 additions and 256 deletions
-
60.ci/windows/install-msvc.ps1
-
52.patch/httplib/0001-mingw.patch
-
57CMakeLists.txt
-
15CMakeModules/MSVCCache.cmake
-
28docs/Deps.md
-
5externals/cpmfile.json
-
2src/core/CMakeLists.txt
-
273src/core/hle/service/mm/mm_u.cpp
-
23src/core/hle/service/nim/nim.cpp
-
1src/web_service/CMakeLists.txt
-
10src/web_service/web_backend.cpp
-
1src/yuzu/CMakeLists.txt
@ -1,60 +0,0 @@ |
|||
# SPDX-FileCopyrightText: 2025 Eden Emulator Project |
|||
# SPDX-License-Identifier: GPL-3.0-or-later |
|||
|
|||
$ErrorActionPreference = "Stop" |
|||
|
|||
# Check if running as administrator |
|||
if (-not ([bool](net session 2>$null))) { |
|||
Write-Host "This script must be run with administrator privileges!" |
|||
Exit 1 |
|||
} |
|||
|
|||
$VSVer = "17" |
|||
$ExeFile = "vs_community.exe" |
|||
$Uri = "https://aka.ms/vs/$VSVer/release/$ExeFile" |
|||
$Destination = "./$ExeFile" |
|||
|
|||
Write-Host "Downloading Visual Studio Build Tools from $Uri" |
|||
$WebClient = New-Object System.Net.WebClient |
|||
$WebClient.DownloadFile($Uri, $Destination) |
|||
Write-Host "Finished downloading $ExeFile" |
|||
|
|||
$Arguments = @( |
|||
"--quiet", # Suppress installer UI |
|||
"--wait", # Wait for installation to complete |
|||
"--norestart", # Prevent automatic restart |
|||
"--force", # Force installation even if components are already installed |
|||
"--add Microsoft.VisualStudio.Workload.NativeDesktop", # Desktop development with C++ |
|||
"--add Microsoft.VisualStudio.Component.VC.Tools.x86.x64", # Core C++ compiler/tools for x86/x64 |
|||
"--add Microsoft.VisualStudio.Component.Windows11SDK.26100",# Windows 11 SDK (26100) |
|||
"--add Microsoft.VisualStudio.Component.Windows10SDK.19041",# Windows 10 SDK (19041) |
|||
"--add Microsoft.VisualStudio.Component.VC.Llvm.Clang", # LLVM Clang compiler |
|||
"--add Microsoft.VisualStudio.Component.VC.Llvm.ClangToolset", # LLVM Clang integration toolset |
|||
"--add Microsoft.VisualStudio.Component.Windows11SDK.22621",# Windows 11 SDK (22621) |
|||
"--add Microsoft.VisualStudio.Component.VC.CMake.Project", # CMake project support |
|||
"--add Microsoft.VisualStudio.ComponentGroup.VC.Tools.142.x86.x64", # VC++ 14.2 toolset |
|||
"--add Microsoft.VisualStudio.ComponentGroup.NativeDesktop.Llvm.Clang" # LLVM Clang for native desktop |
|||
) |
|||
|
|||
Write-Host "Installing Visual Studio Build Tools" |
|||
$InstallProcess = Start-Process -FilePath $Destination -NoNewWindow -PassThru -ArgumentList $Arguments |
|||
|
|||
# Spinner while installing |
|||
$Spinner = "|/-\" |
|||
$i = 0 |
|||
while (-not $InstallProcess.HasExited) { |
|||
Write-Host -NoNewline ("`rInstalling... " + $Spinner[$i % $Spinner.Length]) |
|||
Start-Sleep -Milliseconds 250 |
|||
$i++ |
|||
} |
|||
|
|||
# Clear spinner line |
|||
Write-Host "`rSetup completed! " |
|||
|
|||
$ExitCode = $InstallProcess.ExitCode |
|||
if ($ExitCode -ne 0) { |
|||
Write-Host "Error installing Visual Studio Build Tools (Error: $ExitCode)" |
|||
Exit $ExitCode |
|||
} |
|||
|
|||
Write-Host "Finished installing Visual Studio Build Tools" |
|||
@ -0,0 +1,52 @@ |
|||
From e1a946ffb79022d38351a0623f819a5419965c3e Mon Sep 17 00:00:00 2001 |
|||
From: crueter <crueter@eden-emu.dev> |
|||
Date: Fri, 24 Oct 2025 23:41:09 -0700 |
|||
Subject: [PATCH] [build] Fix MinGW missing GetAddrInfoExCancel definition |
|||
|
|||
MinGW does not define GetAddrInfoExCancel in its wstcpi whatever header, |
|||
so to get around this we can just load it with GetProcAddress et al. |
|||
|
|||
Signed-off-by: crueter <crueter@eden-emu.dev> |
|||
---
|
|||
httplib.h | 14 ++++++++++++-- |
|||
1 file changed, 12 insertions(+), 2 deletions(-) |
|||
|
|||
diff --git a/httplib.h b/httplib.h
|
|||
index e15ba44..90a76dc 100644
|
|||
--- a/httplib.h
|
|||
+++ b/httplib.h
|
|||
@@ -203,11 +203,13 @@
|
|||
#error Sorry, Visual Studio versions prior to 2015 are not supported |
|||
#endif |
|||
|
|||
-#pragma comment(lib, "ws2_32.lib")
|
|||
-
|
|||
using ssize_t = __int64; |
|||
#endif // _MSC_VER |
|||
|
|||
+#if defined(_MSC_VER) || defined(__MINGW32__)
|
|||
+#pragma comment(lib, "ws2_32.lib")
|
|||
+#endif
|
|||
+
|
|||
#ifndef S_ISREG |
|||
#define S_ISREG(m) (((m) & S_IFREG) == S_IFREG) |
|||
#endif // S_ISREG |
|||
@@ -3557,7 +3559,15 @@ inline int getaddrinfo_with_timeout(const char *node, const char *service,
|
|||
auto wait_result = |
|||
::WaitForSingleObject(event, static_cast<DWORD>(timeout_sec * 1000)); |
|||
if (wait_result == WAIT_TIMEOUT) { |
|||
+#ifdef __MINGW32__
|
|||
+ typedef INT (WSAAPI *PFN_GETADDRINFOEXCANCEL)(HANDLE *CancelHandle);
|
|||
+ auto wsdll = LoadLibraryW((wchar_t*) "ws2_32.lib");
|
|||
+ PFN_GETADDRINFOEXCANCEL GetAddrInfoExCancel = (PFN_GETADDRINFOEXCANCEL) GetProcAddress(wsdll, "GetAddrInfoExCancel");
|
|||
+
|
|||
+ if (cancel_handle) { GetAddrInfoExCancel(&cancel_handle); }
|
|||
+#else
|
|||
if (cancel_handle) { ::GetAddrInfoExCancel(&cancel_handle); } |
|||
+#endif
|
|||
::CloseHandle(event); |
|||
return EAI_AGAIN; |
|||
} |
|||
--
|
|||
2.51.0 |
|||
|
|||
@ -1,15 +0,0 @@ |
|||
# SPDX-FileCopyrightText: 2022 yuzu Emulator Project |
|||
# SPDX-License-Identifier: GPL-3.0-or-later |
|||
|
|||
# buildcache wrapper |
|||
OPTION(USE_CCACHE "Use buildcache for compilation" OFF) |
|||
IF(USE_CCACHE) |
|||
FIND_PROGRAM(CCACHE buildcache) |
|||
IF (CCACHE) |
|||
MESSAGE(STATUS "Using buildcache found in PATH") |
|||
SET_PROPERTY(GLOBAL PROPERTY RULE_LAUNCH_COMPILE ${CCACHE}) |
|||
SET_PROPERTY(GLOBAL PROPERTY RULE_LAUNCH_LINK ${CCACHE}) |
|||
ELSE(CCACHE) |
|||
MESSAGE(WARNING "USE_CCACHE enabled, but no buildcache executable found") |
|||
ENDIF(CCACHE) |
|||
ENDIF(USE_CCACHE) |
|||
Write
Preview
Loading…
Cancel
Save
Reference in new issue