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