diff --git a/pkgs/applications/emulators/box64/default.nix b/pkgs/applications/emulators/box64/default.nix index 404ece153b1c..12c13bb9ae87 100644 --- a/pkgs/applications/emulators/box64/default.nix +++ b/pkgs/applications/emulators/box64/default.nix @@ -5,8 +5,15 @@ , gitUpdater , cmake , python3 +, withDynarec ? stdenv.hostPlatform.isAarch64 +, runCommand +, hello-x86_64 +, box64 }: +# Currently only supported on ARM +assert withDynarec -> stdenv.hostPlatform.isAarch64; + stdenv.mkDerivation rec { pname = "box64"; version = "0.2.0"; @@ -33,49 +40,57 @@ stdenv.mkDerivation rec { ]; cmakeFlags = [ - "-DNOGIT=1" - ] ++ ( - if stdenv.hostPlatform.system == "aarch64-linux" then - [ - "-DARM_DYNAREC=ON" - ] - else [ - "-DLD80BITS=1" - "-DNOALIGN=1" - ] - ); + "-DNOGIT=ON" + "-DARM_DYNAREC=${if withDynarec then "ON" else "OFF"}" + "-DRV64=${if stdenv.hostPlatform.isRiscV64 then "ON" else "OFF"}" + "-DPPC64LE=${if stdenv.hostPlatform.isPower64 && stdenv.hostPlatform.isLittleEndian then "ON" else "OFF"}" + ] ++ lib.optionals stdenv.hostPlatform.isx86_64 [ + "-DLD80BITS=ON" + "-DNOALIGN=ON" + ]; installPhase = '' runHook preInstall + install -Dm 0755 box64 "$out/bin/box64" + runHook postInstall ''; doCheck = true; - checkPhase = '' - runHook preCheck - ctest - runHook postCheck - ''; - doInstallCheck = true; installCheckPhase = '' runHook preInstallCheck + + echo Checking if it works $out/bin/box64 -v + + echo Checking if Dynarec option was respected + $out/bin/box64 -v | grep ${lib.optionalString (!withDynarec) "-v"} Dynarec + runHook postInstallCheck ''; - passthru.updateScript = gitUpdater { - rev-prefix = "v"; + passthru = { + updateScript = gitUpdater { + rev-prefix = "v"; + }; + tests.hello = runCommand "box64-test-hello" { + nativeBuildInputs = [ box64 hello-x86_64 ]; + } '' + # There is no actual "Hello, world!" with any of the logging enabled, and with all logging disabled it's hard to + # tell what problems the emulator has run into. + BOX64_NOBANNER=0 BOX64_LOG=1 box64 ${hello-x86_64}/bin/hello --version | tee $out + ''; }; meta = with lib; { homepage = "https://box86.org/"; description = "Lets you run x86_64 Linux programs on non-x86_64 Linux systems"; license = licenses.mit; - maintainers = with maintainers; [ gador ]; - platforms = [ "x86_64-linux" "aarch64-linux" ]; + maintainers = with maintainers; [ gador OPNA2608 ]; + platforms = [ "x86_64-linux" "aarch64-linux" "riscv64-linux" "powerpc64le-linux" ]; }; } diff --git a/pkgs/top-level/all-packages.nix b/pkgs/top-level/all-packages.nix index 63ceceae9158..05606f94a7cf 100644 --- a/pkgs/top-level/all-packages.nix +++ b/pkgs/top-level/all-packages.nix @@ -2028,7 +2028,12 @@ with pkgs; wxGTK = wxGTK32; }; - box64 = callPackage ../applications/emulators/box64 { }; + box64 = callPackage ../applications/emulators/box64 { + hello-x86_64 = if stdenv.hostPlatform.isx86_64 then + hello + else + pkgsCross.gnu64.hello; + }; caprice32 = callPackage ../applications/emulators/caprice32 { };