1
0
Fork 1
mirror of https://github.com/NixOS/nixpkgs.git synced 2024-11-23 06:01:15 +00:00

Merge pull request #68328 from OPNA2608/package-np2kai

np2kai: init at 0.86rev22
This commit is contained in:
Christoph Hrdinka 2020-06-07 10:13:33 +02:00 committed by GitHub
commit 355eed433b
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
3 changed files with 218 additions and 0 deletions

View file

@ -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;
};
}

View file

@ -718,6 +718,25 @@ in with stdenv.lib.licenses;
preBuild = "cd libretro"; preBuild = "cd libretro";
}; };
np2kai = mkLibRetroCore rec {
core = "np2kai";
src = fetchFromGitHub rec {
owner = "AZO234";
repo = "NP2kai";
rev = "4a317747724669343e4c33ebdd34783fb7043221";
sha256 = "0kxysxhx6jyk82mx30ni0ydzmwdcbnlxlnarrlq018rsnwb4md72";
};
description = "Neko Project II kai libretro port";
license = mit;
makefile = "Makefile.libretro";
preBuild = ''
cd sdl2
substituteInPlace ${makefile} \
--replace 'GIT_VERSION :=' 'GIT_VERSION ?='
export GIT_VERSION=${builtins.substring 0 7 src.rev}
'';
};
o2em = mkLibRetroCore rec { o2em = mkLibRetroCore rec {
core = "o2em"; core = "o2em";
src = fetchRetro { src = fetchRetro {

View file

@ -4853,6 +4853,8 @@ in
now-cli = callPackage ../development/web/now-cli {}; now-cli = callPackage ../development/web/now-cli {};
np2kai = callPackage ../misc/emulators/np2kai { };
file-rename = callPackage ../tools/filesystems/file-rename { }; file-rename = callPackage ../tools/filesystems/file-rename { };
kea = callPackage ../tools/networking/kea { }; kea = callPackage ../tools/networking/kea { };
@ -22867,6 +22869,7 @@ in
++ optional (cfg.enableMupen64Plus or false) mupen64plus ++ optional (cfg.enableMupen64Plus or false) mupen64plus
++ optional (cfg.enableNeoCD or false) neocd ++ optional (cfg.enableNeoCD or false) neocd
++ optional (cfg.enableNestopia or false) nestopia ++ optional (cfg.enableNestopia or false) nestopia
++ optional (cfg.enableNP2kai or false) np2kai
++ optional (cfg.enableO2EM or false) o2em ++ optional (cfg.enableO2EM or false) o2em
++ optional (cfg.enableOpera or false) opera ++ optional (cfg.enableOpera or false) opera
++ optional (cfg.enableParallelN64 or false) parallel-n64 ++ optional (cfg.enableParallelN64 or false) parallel-n64