diff --git a/pkgs/by-name/dy/dynarmic/0001-CMakeLists-update-mcl-version-to-0.1.13.patch b/pkgs/by-name/dy/dynarmic/0001-CMakeLists-update-mcl-version-to-0.1.13.patch new file mode 100644 index 000000000000..8f28e58bff85 --- /dev/null +++ b/pkgs/by-name/dy/dynarmic/0001-CMakeLists-update-mcl-version-to-0.1.13.patch @@ -0,0 +1,29 @@ +From cdbf3ba41ddce41d8ae375464e514f72d158ec0b Mon Sep 17 00:00:00 2001 +From: Marcin Serwin +Date: Sat, 5 Jul 2025 22:26:49 +0200 +Subject: [PATCH] CMakeLists: update mcl version to 0.1.13 + +The mcl in externals is already at this version, but it wasn't bumped +here which makes it impossible to use prebuilt mcl. + +Signed-off-by: Marcin Serwin +--- + CMakeLists.txt | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/CMakeLists.txt b/CMakeLists.txt +index e95050da..edd153d0 100644 +--- a/CMakeLists.txt ++++ b/CMakeLists.txt +@@ -145,7 +145,7 @@ set(TSL_ROBIN_MAP_ENABLE_INSTALL ON) + + find_package(Boost 1.57 REQUIRED) + find_package(fmt 9 CONFIG) +-find_package(mcl 0.1.12 EXACT CONFIG) ++find_package(mcl 0.1.13 EXACT CONFIG) + find_package(tsl-robin-map CONFIG) + + if ("arm64" IN_LIST ARCHITECTURE OR DYNARMIC_TESTS) +-- +2.49.0 + diff --git a/pkgs/by-name/dy/dynarmic/0001-xbyak-Fix-tests-when-using-newer-versions.patch b/pkgs/by-name/dy/dynarmic/0001-xbyak-Fix-tests-when-using-newer-versions.patch new file mode 100644 index 000000000000..020f1cfd497e --- /dev/null +++ b/pkgs/by-name/dy/dynarmic/0001-xbyak-Fix-tests-when-using-newer-versions.patch @@ -0,0 +1,27 @@ +From 40e8205b3efd126b9676a783c8306793e61d3f00 Mon Sep 17 00:00:00 2001 +From: Marcin Serwin +Date: Sun, 6 Jul 2025 10:08:26 +0200 +Subject: [PATCH] xbyak: Fix tests when using newer versions + +Signed-off-by: Marcin Serwin +--- + src/dynarmic/CMakeLists.txt | 3 +++ + 1 file changed, 3 insertions(+) + +diff --git a/src/dynarmic/CMakeLists.txt b/src/dynarmic/CMakeLists.txt +index 6f0813ca..21a5576c 100644 +--- a/src/dynarmic/CMakeLists.txt ++++ b/src/dynarmic/CMakeLists.txt +@@ -267,6 +267,9 @@ if ("x86_64" IN_LIST ARCHITECTURE) + xbyak::xbyak + Zydis::Zydis + ) ++ # Newer versions of xbyak (>= 7.25.0) have stricter checks that currently ++ # fail in dynarmic ++ target_compile_definitions(dynarmic PRIVATE XBYAK_STRICT_CHECK_MEM_REG_SIZE=0) + + target_architecture_specific_sources(dynarmic "x86_64" + backend/x64/abi.cpp +-- +2.49.0 + diff --git a/pkgs/by-name/dy/dynarmic/package.nix b/pkgs/by-name/dy/dynarmic/package.nix new file mode 100644 index 000000000000..00988dadc887 --- /dev/null +++ b/pkgs/by-name/dy/dynarmic/package.nix @@ -0,0 +1,145 @@ +{ + stdenv, + lib, + fetchFromGitHub, + cmake, + ninja, + boost, + robin-map, + catch2_3, + fmt, + xbyak, + zydis, + nix-update-script, + azahar, + darwin, +}: +let + oaknut = stdenv.mkDerivation { + pname = "oaknut"; + version = "1.2.2-unstable-2024-03-01"; + + src = fetchFromGitHub { + owner = "merryhime"; + repo = "oaknut"; + rev = "94c726ce0338b054eb8cb5ea91de8fe6c19f4392"; + hash = "sha256-IhP/110NGN42/FvpGIEm9MgsSiPYdtD8kNxL0cAWbqM="; + }; + + nativeBuildInputs = [ + cmake + ninja + ]; + }; + + mcl = stdenv.mkDerivation { + pname = "mcl"; + version = "0.1.13-unstable-2025-03-16"; + + src = fetchFromGitHub { + owner = "azahar-emu"; + repo = "mcl"; + rev = "7b08d83418f628b800dfac1c9a16c3f59036fbad"; + hash = "sha256-uTOiOlMzKbZSjKjtVSqFU+9m8v8horoCq3wL0O2E8sI="; + }; + + nativeBuildInputs = [ + cmake + ninja + ]; + + buildInputs = [ + fmt + ]; + + checkInputs = [ + catch2_3 + ]; + + doCheck = true; + checkPhase = '' + tests/mcl-tests + ''; + }; +in +stdenv.mkDerivation (finalAttrs: { + pname = "dynarmic"; + version = "6.7.0-unstable-2025-03-16"; + + src = fetchFromGitHub { + owner = "azahar-emu"; + repo = "dynarmic"; + rev = "278405bd71999ed3f3c77c5f78344a06fef798b9"; + hash = "sha256-D7nXn5y0h8FV0V8Tc8uBlRoeEU+gcpt44afujZvG+1A="; + }; + + patches = [ + # https://github.com/azahar-emu/dynarmic/pull/2 + ./0001-CMakeLists-update-mcl-version-to-0.1.13.patch + # https://github.com/azahar-emu/dynarmic/pull/3 + ./0001-xbyak-Fix-tests-when-using-newer-versions.patch + ]; + + strictDeps = true; + + nativeBuildInputs = + [ + cmake + ninja + ] + ++ lib.optionals stdenv.hostPlatform.isDarwin [ + darwin.DarwinTools # sw_ver + darwin.bootstrap_cmds # mig + ]; + + buildInputs = + [ + boost + robin-map + mcl + fmt + ] + ++ lib.optionals stdenv.hostPlatform.isAarch64 [ + oaknut + ] + ++ lib.optionals stdenv.hostPlatform.isx86_64 [ + xbyak + zydis + ]; + + checkInputs = [ + catch2_3 + oaknut + ]; + + # This changes `ir/opt` to `ir/var/empty` in `CMakeLists.txt` + # making the build fail, as that path does not exist + dontFixCmake = true; + + cmakeFlags = [ + (lib.cmakeBool "BUILD_SHARED_LIBS" (!stdenv.hostPlatform.isStatic)) + (lib.cmakeBool "DYNARMIC_TESTS" finalAttrs.finalPackage.doCheck) + ]; + + env = lib.optionalAttrs stdenv.cc.isGNU { + # https://gcc.gnu.org/bugzilla/show_bug.cgi?id=117063 + NIX_CFLAGS_COMPILE = "-Wno-error=stringop-overread"; + }; + + doCheck = true; + + passthru = { + inherit mcl oaknut; + + updateScript = nix-update-script { extraArgs = [ "--version=branch" ]; }; + tests = { inherit azahar; }; + }; + + meta = { + description = "Dynamic recompiler for ARM"; + homepage = "https://github.com/azahar-emu/dynarmic"; + maintainers = with lib.maintainers; [ marcin-serwin ]; + license = lib.licenses.bsd0; + platforms = with lib.platforms; x86_64 ++ aarch64; + }; +})