fex: init at 2412 (#352205)

This commit is contained in:
Aleksana
2024-12-12 21:50:48 +08:00
committed by GitHub
3 changed files with 106 additions and 0 deletions
+7
View File
@@ -1400,6 +1400,13 @@
githubId = 638836;
name = "Andreas Rammhold";
};
andre4ik3 = {
name = "andre4ik3";
email = "andre4ik3@fastmail.com";
matrix = "@andre4ik3:matrix.org";
github = "andre4ik3";
githubId = 62390580;
};
andreasfelix = {
email = "fandreas@physik.hu-berlin.de";
github = "felix-andreas";
+80
View File
@@ -0,0 +1,80 @@
{
fetchFromGitHub,
lib,
llvmPackages,
cmake,
ninja,
pkg-config,
gitMinimal,
qt5,
python3,
}:
llvmPackages.stdenv.mkDerivation (finalAttrs: rec {
pname = "fex";
version = "2412";
src = fetchFromGitHub {
owner = "FEX-Emu";
repo = "FEX";
tag = "FEX-${version}";
hash = "sha256-VwcfxdRMjE/yoe5q0p3j4FdEMOJdtq17moxiGWO+CN0=";
fetchSubmodules = true;
};
patches = [
# This is a workaround to get FEX working with NixOS's slightly weird binfmt
# infrastructure.
./realpath.patch
];
nativeBuildInputs = [
cmake
ninja
pkg-config
gitMinimal
qt5.wrapQtAppsHook
llvmPackages.bintools
(python3.withPackages (
pythonPackages: with pythonPackages; [
setuptools
libclang
]
))
];
buildInputs = with qt5; [
qtbase
qtdeclarative
qtquickcontrols
qtquickcontrols2
];
cmakeFlags = [
"-DCMAKE_BUILD_TYPE=Release"
"-DUSE_LINKER=lld"
"-DENABLE_LTO=True"
"-DENABLE_ASSERTIONS=False"
(lib.cmakeBool "BUILD_TESTS" finalAttrs.finalPackage.doCheck)
];
strictDeps = true;
doCheck = false; # broken on Apple silicon computers
# Avoid wrapping anything other than FEXConfig, since the wrapped executables
# don't seem to work when registered as binfmts.
dontWrapQtApps = true;
preFixup = ''
wrapQtApp $out/bin/FEXConfig
'';
meta = {
description = "Fast usermode x86 and x86-64 emulator for Arm64 Linux";
homepage = "https://fex-emu.com/";
platforms = [ "aarch64-linux" ];
license = lib.licenses.mit;
maintainers = with lib.maintainers; [ andre4ik3 ];
mainProgram = "FEXBash";
};
})
+19
View File
@@ -0,0 +1,19 @@
diff --git a/Source/Common/FEXServerClient.cpp b/Source/Common/FEXServerClient.cpp
index 424ecf0a0..501bcbac1 100644
--- a/Source/Common/FEXServerClient.cpp
+++ b/Source/Common/FEXServerClient.cpp
@@ -209,7 +209,13 @@ int ConnectToAndStartServer(char* InterpreterPath) {
return -1;
}
- fextl::string FEXServerPath = FHU::Filesystem::ParentPath(InterpreterPath) + "/FEXServer";
+ char RealInterpreterPathBuf[PATH_MAX];
+ char *RealInterpreterPath = realpath(InterpreterPath, RealInterpreterPathBuf);
+ if (!RealInterpreterPath) {
+ LogMan::Msg::EFmt("realpath failed");
+ return -1;
+ }
+ fextl::string FEXServerPath = FHU::Filesystem::ParentPath(RealInterpreterPath) + "/FEXServer";
// Check if a local FEXServer next to FEXInterpreter exists
// If it does then it takes priority over the installed one
if (!FHU::Filesystem::Exists(FEXServerPath)) {