124 lines
2.7 KiB
Nix
124 lines
2.7 KiB
Nix
{
|
|
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";
|
|
};
|
|
})
|