{ lib, llvmPackages, fetchFromGitHub, cmake, ninja, pkg-config, qt5, python3, nix-update-script, xxHash, fmt, nasm, }: llvmPackages.stdenv.mkDerivation (finalAttrs: { pname = "fex"; version = "2507.1"; src = fetchFromGitHub { owner = "FEX-Emu"; repo = "FEX"; tag = "FEX-${finalAttrs.version}"; hash = "sha256-F6rMEPmw2UxWw+XWsUXrrUjvrDcIA1W+spkcq3tdUMI="; leaveDotGit = true; postFetch = '' cd $out git reset # Only fetch required submodules git submodule update --init --depth 1 \ External/Vulkan-Headers \ External/drm-headers \ External/jemalloc \ External/jemalloc_glibc \ External/robin-map \ External/vixl \ Source/Common/cpp-optparse \ External/Catch2 find . -name .git -print0 | xargs -0 rm -rf # Remove some more unnecessary directories rm -r \ External/vixl/src/aarch32 \ External/vixl/test ''; }; nativeBuildInputs = [ cmake ninja pkg-config qt5.wrapQtAppsHook llvmPackages.bintools (python3.withPackages ( pythonPackages: with pythonPackages; [ setuptools libclang ] )) ]; nativeCheckInputs = [ nasm ]; buildInputs = [ xxHash fmt ] ++ (with qt5; [ qtbase qtdeclarative qtquickcontrols qtquickcontrols2 ]); cmakeFlags = [ (lib.cmakeFeature "CMAKE_BUILD_TYPE" "Release") (lib.cmakeFeature "USE_LINKER" "lld") (lib.cmakeBool "ENABLE_LTO" true) (lib.cmakeBool "ENABLE_ASSERTIONS" false) (lib.cmakeFeature "OVERRIDE_VERSION" finalAttrs.version) (lib.cmakeBool "BUILD_TESTS" finalAttrs.finalPackage.doCheck) ]; strictDeps = true; # Unsupported on non-4K page size kernels (e.g. Apple Silicon) doCheck = true; # List not exhaustive, e.g. because they depend on an x86 compiler or some # other difficult-to-build test binaries. checkTarget = lib.concatStringsSep " " [ "asm_tests" "api_tests" "fexcore_apitests" "emitter_tests" ]; # 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 ''; passthru = { updateScript = nix-update-script { }; }; meta = { description = "Fast usermode x86 and x86-64 emulator for Arm64 Linux"; homepage = "https://fex-emu.com/"; changelog = "https://github.com/FEX-Emu/FEX/releases/tag/FEX-${finalAttrs.version}"; platforms = [ "aarch64-linux" ]; license = lib.licenses.mit; maintainers = with lib.maintainers; [ andre4ik3 ]; mainProgram = "FEXBash"; }; })