biome: 1.9.2 -> 1.9.3
[NixPkgs.git] / pkgs / applications / emulators / box64 / default.nix
blob7a9c22999b3ee5f9365a4dbaee9f5fef3d4a39e2
2   lib,
3   stdenv,
4   fetchFromGitHub,
5   gitUpdater,
6   cmake,
7   python3,
8   withDynarec ? (
9     stdenv.hostPlatform.isAarch64 || stdenv.hostPlatform.isRiscV64 || stdenv.hostPlatform.isLoongArch64
10   ),
11   runCommand,
12   hello-x86_64,
15 # Currently only supported on specific archs
16 assert
17   withDynarec
18   -> (
19     stdenv.hostPlatform.isAarch64 || stdenv.hostPlatform.isRiscV64 || stdenv.hostPlatform.isLoongArch64
20   );
22 stdenv.mkDerivation (finalAttrs: {
23   pname = "box64";
24   version = "0.3.0";
26   src = fetchFromGitHub {
27     owner = "ptitSeb";
28     repo = "box64";
29     rev = "v${finalAttrs.version}";
30     hash = "sha256-8PpTN7lUjpmSowbaRsfSRWJQRDZICFhVvn05tQYC4PQ=";
31   };
33   nativeBuildInputs = [
34     cmake
35     python3
36   ];
38   cmakeFlags =
39     [
40       (lib.cmakeBool "NOGIT" true)
42       # Arch mega-option
43       (lib.cmakeBool "ARM64" stdenv.hostPlatform.isAarch64)
44       (lib.cmakeBool "RV64" stdenv.hostPlatform.isRiscV64)
45       (lib.cmakeBool "PPC64LE" (stdenv.hostPlatform.isPower64 && stdenv.hostPlatform.isLittleEndian))
46       (lib.cmakeBool "LARCH64" stdenv.hostPlatform.isLoongArch64)
47     ]
48     ++ lib.optionals stdenv.hostPlatform.isx86_64 [
49       # x86_64 has no arch-specific mega-option, manually enable the options that apply to it
50       (lib.cmakeBool "LD80BITS" true)
51       (lib.cmakeBool "NOALIGN" true)
52     ]
53     ++ [
54       # Arch dynarec
55       (lib.cmakeBool "ARM_DYNAREC" (withDynarec && stdenv.hostPlatform.isAarch64))
56       (lib.cmakeBool "RV64_DYNAREC" (withDynarec && stdenv.hostPlatform.isRiscV64))
57       (lib.cmakeBool "LARCH64_DYNAREC" (withDynarec && stdenv.hostPlatform.isLoongArch64))
58     ];
60   installPhase = ''
61     runHook preInstall
63     install -Dm 0755 box64 "$out/bin/box64"
65     runHook postInstall
66   '';
68   doCheck = stdenv.buildPlatform.canExecute stdenv.hostPlatform;
70   doInstallCheck = stdenv.buildPlatform.canExecute stdenv.hostPlatform;
72   installCheckPhase = ''
73     runHook preInstallCheck
75     echo Checking if it works
76     $out/bin/box64 -v
78     echo Checking if Dynarec option was respected
79     $out/bin/box64 -v | grep ${lib.optionalString (!withDynarec) "-v"} Dynarec
81     runHook postInstallCheck
82   '';
84   passthru = {
85     updateScript = gitUpdater { rev-prefix = "v"; };
86     tests.hello =
87       runCommand "box64-test-hello" { nativeBuildInputs = [ finalAttrs.finalPackage ]; }
88         # There is no actual "Hello, world!" with any of the logging enabled, and with all logging disabled it's hard to
89         # tell what problems the emulator has run into.
90         ''
91           BOX64_NOBANNER=0 BOX64_LOG=1 box64 ${lib.getExe hello-x86_64} --version | tee $out
92         '';
93   };
95   meta = {
96     homepage = "https://box86.org/";
97     description = "Lets you run x86_64 Linux programs on non-x86_64 Linux systems";
98     changelog = "https://github.com/ptitSeb/box64/releases/tag/v${finalAttrs.version}";
99     license = lib.licenses.mit;
100     maintainers = with lib.maintainers; [
101       gador
102       OPNA2608
103     ];
104     mainProgram = "box64";
105     platforms = [
106       "x86_64-linux"
107       "aarch64-linux"
108       "riscv64-linux"
109       "powerpc64le-linux"
110       "loongarch64-linux"
111       "mips64el-linux"
112     ];
113   };