diff --git a/pkgs/misc/emulators/np2kai/default.nix b/pkgs/misc/emulators/np2kai/default.nix new file mode 100644 index 000000000000..245bad1d535f --- /dev/null +++ b/pkgs/misc/emulators/np2kai/default.nix @@ -0,0 +1,196 @@ +{ stdenv +, lib +, fetchFromGitHub +, enable16Bit ? true +, enable32Bit ? true + +, enableSDL ? true +, withSDLVersion ? "2" +, SDL +, SDL_ttf +, SDL_mixer +, SDL2 +, SDL2_ttf +, SDL2_mixer + +, enableX11 ? stdenv.hostPlatform.isLinux +, automake +, autoconf +, autoconf-archive +, libtool +, pkg-config +, unzip +, gtk2 +, libusb1 +, libXxf86vm +, nasm +, libICE +, libSM + + # HAXM build succeeds but the binary segfaults, seemingly due to the missing HAXM kernel module + # Enable once there is a HAXM kernel module option in NixOS? Or somehow bind it to the system kernel having HAXM? + # Or leave it disabled by default? + # https://github.com/intel/haxm/blob/master/docs/manual-linux.md +, enableHAXM ? false +}: + +assert lib.assertMsg (enable16Bit || enable32Bit) + "Must enable 16-Bit and/or 32-Bit system variant."; +assert lib.assertMsg (enableSDL || enableX11) + "Must enable SDL and/or X11 graphics interfaces."; +assert lib.assertOneOf "withSDLVersion" withSDLVersion [ "1" "2" ]; +assert enableHAXM -> (lib.assertMsg enableX11 + "Must enable X11 graphics interface for HAXM build."); +let + inherit (lib) optional optionals optionalString; + inherit (lib.strings) concatStringsSep concatMapStringsSep; + isSDL2 = (withSDLVersion == "2"); + sdlInfix = optionalString isSDL2 "2"; + sdlDeps1 = [ + SDL + SDL_ttf + SDL_mixer + ]; + sdlDeps2 = [ + SDL2 + SDL2_ttf + SDL2_mixer + ]; + sdlDepsBuildonly = if isSDL2 then sdlDeps1 else sdlDeps2; + sdlDepsTarget = if isSDL2 then sdlDeps2 else sdlDeps1; + sdlMakefileSuffix = + if stdenv.hostPlatform.isWindows then "win" + else if stdenv.hostPlatform.isDarwin then "mac" + else "unix"; + sdlMakefiles = concatMapStringsSep " " (x: x + "." + sdlMakefileSuffix) + (optionals enable16Bit [ + "Makefile" + ] ++ optionals enable32Bit [ + "Makefile21" + ]); + sdlBuildFlags = concatStringsSep " " + (optionals enableSDL [ + "SDL_VERSION=${withSDLVersion}" + ]); + sdlBins = concatStringsSep " " + (optionals enable16Bit [ + "np2kai" + ] ++ optionals enable32Bit [ + "np21kai" + ]); + x11ConfigureFlags = concatStringsSep " " + (( + if ((enableHAXM && (enable16Bit || enable32Bit)) || (enable16Bit && enable32Bit)) then [ + "--enable-build-all" + ] else if enableHAXM then [ + "--enable-haxm" + ] else if enable32Bit then [ + "--enable-ia32" + ] else [ ] + ) ++ optionals (!isSDL2) [ + "--enable-sdl" + "--enable-sdlmixer" + "--enable-sdlttf" + + "--enable-sdl2=no" + "--enable-sdl2mixer=no" + "--enable-sdl2ttf=no" + ]); + x11BuildFlags = concatStringsSep " " [ + "SDL2_CONFIG=sdl2-config" + "SDL_CONFIG=sdl-config" + "SDL_CFLAGS=\"$(sdl${sdlInfix}-config --cflags)\"" + "SDL_LIBS=\"$(sdl${sdlInfix}-config --libs) -lSDL${sdlInfix}_mixer -lSDL${sdlInfix}_ttf\"" + ]; + x11Bins = concatStringsSep " " + (optionals enable16Bit [ + "xnp2kai" + ] ++ optionals enable32Bit [ + "xnp21kai" + ] ++ optionals enableHAXM [ + "xnp21kai_haxm" + ]); +in +stdenv.mkDerivation rec { + pname = "np2kai"; + version = "0.86rev22"; #update src.rev to commit rev accordingly + + src = fetchFromGitHub rec { + owner = "AZO234"; + repo = "NP2kai"; + rev = "4a317747724669343e4c33ebdd34783fb7043221"; + sha256 = "0kxysxhx6jyk82mx30ni0ydzmwdcbnlxlnarrlq018rsnwb4md72"; + }; + + configurePhase = '' + export GIT_VERSION=${builtins.substring 0 7 src.rev} + buildFlags="$buildFlags ''${enableParallelBuilding:+-j$NIX_BUILD_CORES -l$NIX_BUILD_CORES}" + '' + optionalString enableX11 '' + cd x11 + substituteInPlace Makefile.am \ + --replace 'GIT_VERSION :=' 'GIT_VERSION ?=' + ./autogen.sh ${x11ConfigureFlags} + ./configure ${x11ConfigureFlags} + cd .. + ''; + + nativeBuildInputs = sdlDepsBuildonly + ++ optionals enableX11 [ + automake + autoconf + autoconf-archive + libtool + pkg-config + unzip + nasm + ]; + + buildInputs = sdlDepsTarget + ++ optionals enableX11 [ + gtk2 + libICE + libSM + libusb1 + libXxf86vm + ]; + + enableParallelBuilding = true; + + buildPhase = optionalString enableSDL '' + cd sdl2 + for mkfile in ${sdlMakefiles}; do + substituteInPlace $mkfile \ + --replace 'GIT_VERSION :=' 'GIT_VERSION ?=' + echo make -f $mkfile $buildFlags ${sdlBuildFlags} clean + make -f $mkfile $buildFlags ${sdlBuildFlags} clean + make -f $mkfile $buildFlags ${sdlBuildFlags} + done + cd .. + '' + optionalString enableX11 '' + cd x11 + make $buildFlags ${x11BuildFlags} + cd .. + ''; + + installPhase = optionalString enableSDL '' + cd sdl2 + for emu in ${sdlBins}; do + install -D -m 755 $emu $out/bin/$emu + done + cd .. + '' + optionalString enableX11 '' + cd x11 + for emu in ${x11Bins}; do + install -D -m 755 $emu $out/bin/$emu + done + cd .. + ''; + + meta = with lib; { + description = "A PC-9801 series emulator."; + homepage = "https://github.com/AZO234/NP2kai"; + license = licenses.mit; + maintainers = with maintainers; [ OPNA2608 ]; + platforms = platforms.x86; + }; +} diff --git a/pkgs/top-level/all-packages.nix b/pkgs/top-level/all-packages.nix index 4cfd71b806c9..4377454d6289 100644 --- a/pkgs/top-level/all-packages.nix +++ b/pkgs/top-level/all-packages.nix @@ -4851,6 +4851,8 @@ in now-cli = callPackage ../development/web/now-cli {}; + np2kai = callPackage ../misc/emulators/np2kai { }; + file-rename = callPackage ../tools/filesystems/file-rename { }; kea = callPackage ../tools/networking/kea { };