biglybt: 3.5.0.0 -> 3.6.0.0
[NixPkgs.git] / pkgs / applications / emulators / box64 / default.nix
blob19653ea73060caebe544160e768e6f638ade7bf8
1 { lib
2 , stdenv
3 , fetchFromGitHub
4 , gitUpdater
5 , cmake
6 , python3
7 , withDynarec ? (stdenv.hostPlatform.isAarch64 || stdenv.hostPlatform.isRiscV64)
8 , runCommand
9 , hello-x86_64
12 # Currently only supported on ARM & RISC-V
13 assert withDynarec -> (stdenv.hostPlatform.isAarch64 || stdenv.hostPlatform.isRiscV64);
15 stdenv.mkDerivation (finalAttrs: {
16   pname = "box64";
17   version = "0.2.6";
19   src = fetchFromGitHub {
20     owner = "ptitSeb";
21     repo = "box64";
22     rev = "v${finalAttrs.version}";
23     hash = "sha256-eKYnBuaEWRb6kDGFvuG+xM70LbUAcJ6Zcr6hPHqi9Do=";
24   };
26   nativeBuildInputs = [
27     cmake
28     python3
29   ];
31   cmakeFlags = [
32     "-DNOGIT=ON"
34     # Arch mega-option
35     "-DARM64=${lib.boolToString stdenv.hostPlatform.isAarch64}"
36     "-DRV64=${lib.boolToString stdenv.hostPlatform.isRiscV64}"
37     "-DPPC64LE=${lib.boolToString (stdenv.hostPlatform.isPower64 && stdenv.hostPlatform.isLittleEndian)}"
38     "-DLARCH64=${lib.boolToString stdenv.hostPlatform.isLoongArch64}"
39   ] ++ lib.optionals stdenv.hostPlatform.isx86_64 [
40     # x86_64 has no arch-specific mega-option, manually enable the options that apply to it
41     "-DLD80BITS=ON"
42     "-DNOALIGN=ON"
43   ] ++ [
44     # Arch dynarec
45     "-DARM_DYNAREC=${lib.boolToString (withDynarec && stdenv.hostPlatform.isAarch64)}"
46     "-DRV64_DYNAREC=${lib.boolToString (withDynarec && stdenv.hostPlatform.isRiscV64)}"
47   ];
49   installPhase = ''
50     runHook preInstall
52     install -Dm 0755 box64 "$out/bin/box64"
54     runHook postInstall
55   '';
57   doCheck = stdenv.buildPlatform.canExecute stdenv.hostPlatform;
59   doInstallCheck = stdenv.buildPlatform.canExecute stdenv.hostPlatform;
61   installCheckPhase = ''
62     runHook preInstallCheck
64     echo Checking if it works
65     $out/bin/box64 -v
67     echo Checking if Dynarec option was respected
68     $out/bin/box64 -v | grep ${lib.optionalString (!withDynarec) "-v"} Dynarec
70     runHook postInstallCheck
71   '';
73   passthru = {
74     updateScript = gitUpdater {
75       rev-prefix = "v";
76     };
77     tests.hello = runCommand "box64-test-hello" {
78       nativeBuildInputs = [ finalAttrs.finalPackage ];
79     } ''
80       # There is no actual "Hello, world!" with any of the logging enabled, and with all logging disabled it's hard to
81       # tell what problems the emulator has run into.
82       BOX64_NOBANNER=0 BOX64_LOG=1 box64 ${hello-x86_64}/bin/hello --version | tee $out
83     '';
84   };
86   meta = with lib; {
87     homepage = "https://box86.org/";
88     description = "Lets you run x86_64 Linux programs on non-x86_64 Linux systems";
89     license = licenses.mit;
90     maintainers = with maintainers; [ gador OPNA2608 ];
91     mainProgram = "box64";
92     platforms = [ "x86_64-linux" "aarch64-linux" "riscv64-linux" "powerpc64le-linux" "loongarch64-linux" "mips64el-linux" ];
93   };