Unverified Commit 01d6f87b authored by andre4ik3's avatar andre4ik3
Browse files

fex: init at 2412

parent fe5583f9
Loading
Loading
Loading
Loading
+7 −0
Original line number Diff line number Diff line
@@ -1351,6 +1351,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 = "andreasfelix";
+80 −0
Original line number Diff line number Diff line
{
  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 −0
Original line number Diff line number Diff line
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)) {