Merge pull request #174759 from IvarWithoutBones/init/sm64-coop

sm64ex-coop: init at 0.pre+date=2022-05-14
This commit is contained in:
Thiago Kenji Okada 2022-06-23 21:01:56 +01:00 committed by GitHub
commit e6213e3f47
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
3 changed files with 134 additions and 61 deletions

View file

@ -1,71 +1,55 @@
{ lib, stdenv
{ lib
, stdenv
, fetchFromGitHub
, python3
, pkg-config
, audiofile
, SDL2
, hexdump
, requireFile
, compileFlags ? [ ]
, region ? "us"
, baseRom ? requireFile {
name = "baserom.${region}.z64";
message = ''
This nix expression requires that baserom.${region}.z64 is
already part of the store. To get this file you can dump your Super Mario 64 cartridge's contents
and add it to the nix store with nix-store --add-fixed sha256 <FILE>.
Note that if you are not using a US baserom, you must overwrite the "region" attribute with either "eu" or "jp".
'';
sha256 = {
"us" = "17ce077343c6133f8c9f2d6d6d9a4ab62c8cd2aa57c40aea1f490b4c8bb21d91";
"eu" = "c792e5ebcba34c8d98c0c44cf29747c8ee67e7b907fcc77887f9ff2523f80572";
"jp" = "9cf7a80db321b07a8d461fe536c02c87b7412433953891cdec9191bfad2db317";
}.${region};
}
, callPackage
, autoPatchelfHook
, branch
}:
stdenv.mkDerivation rec {
pname = "sm64ex";
version = "unstable-2021-11-30";
{
sm64ex = callPackage ./generic.nix {
pname = "sm64ex";
version = "0.pre+date=2021-11-30";
src = fetchFromGitHub {
owner = "sm64pc";
repo = "sm64ex";
rev = "db9a6345baa5acb41f9d77c480510442cab26025";
sha256 = "sha256-q7JWDvNeNrDpcKVtIGqB1k7I0FveYwrfqu7ZZK7T8F8=";
src = fetchFromGitHub {
owner = "sm64pc";
repo = "sm64ex";
rev = "db9a6345baa5acb41f9d77c480510442cab26025";
sha256 = "sha256-q7JWDvNeNrDpcKVtIGqB1k7I0FveYwrfqu7ZZK7T8F8=";
};
extraMeta = {
homepage = "https://github.com/sm64pc/sm64ex";
description = "Super Mario 64 port based off of decompilation";
};
};
nativeBuildInputs = [ python3 pkg-config ];
buildInputs = [ audiofile SDL2 hexdump ];
sm64ex-coop = callPackage ./generic.nix {
pname = "sm64ex-coop";
version = "0.pre+date=2022-05-14";
makeFlags = [ "VERSION=${region}" ] ++ compileFlags
++ lib.optionals stdenv.isDarwin [ "OSX_BUILD=1" ];
src = fetchFromGitHub {
owner = "djoslin0";
repo = "sm64ex-coop";
rev = "8200b175607fe2939f067d496627c202a15fe24c";
sha256 = "sha256-c1ZmMBtvYYcaJ/WxkZBVvNGVCeSXfm8NKe/BiAIJtks=";
};
inherit baseRom;
extraNativeBuildInputs = [
autoPatchelfHook
];
preBuild = ''
patchShebangs extract_assets.py
cp $baseRom ./baserom.${region}.z64
'';
installPhase = ''
mkdir -p $out/bin
cp build/${region}_pc/sm64.${region}.f3dex2e $out/bin/sm64ex
'';
enableParallelBuilding = true;
meta = with lib; {
homepage = "https://github.com/sm64pc/sm64ex";
description = "Super Mario 64 port based off of decompilation";
longDescription = ''
Super Mario 64 port based off of decompilation.
Note that you must supply a baserom yourself to extract assets from.
If you are not using an US baserom, you must overwrite the "region" attribute with either "eu" or "jp".
If you would like to use patches sm64ex distributes as makeflags, add them to the "compileFlags" attribute.
postInstall = let
sharedLib = stdenv.hostPlatform.extensions.sharedLibrary;
in ''
mkdir -p $out/lib
cp $src/lib/bass/libbass{,_fx}${sharedLib} $out/lib
cp $src/lib/discordsdk/libdiscord_game_sdk${sharedLib} $out/lib
'';
license = licenses.unfree;
maintainers = with maintainers; [ ivar ];
platforms = platforms.unix;
extraMeta = {
homepage = "https://github.com/djoslin0/sm64ex-coop";
description = "Super Mario 64 online co-op mod, forked from sm64ex";
};
};
}
}.${branch}

View file

@ -0,0 +1,83 @@
{ pname
, version
, src
, extraNativeBuildInputs ? [ ]
, extraMeta ? {}
, compileFlags ? [ ]
, postInstall ? ""
, region ? "us"
, lib
, stdenv
, fetchFromGitHub
, python3
, pkg-config
, audiofile
, SDL2
, hexdump
, requireFile
, baseRom ? requireFile {
name = "baserom.${region}.z64";
message = ''
This nix expression requires that baserom.${region}.z64 is
already part of the store. To get this file you can dump your Super Mario 64 cartridge's contents
and add it to the nix store with nix-store --add-fixed sha256 <FILE>.
Note that if you are not using a US baserom, you must overwrite the "region" attribute with either "eu" or "jp".
'';
sha256 = {
"us" = "17ce077343c6133f8c9f2d6d6d9a4ab62c8cd2aa57c40aea1f490b4c8bb21d91";
"eu" = "c792e5ebcba34c8d98c0c44cf29747c8ee67e7b907fcc77887f9ff2523f80572";
"jp" = "9cf7a80db321b07a8d461fe536c02c87b7412433953891cdec9191bfad2db317";
}.${region};
}
}:
stdenv.mkDerivation rec {
inherit pname version src postInstall;
nativeBuildInputs = [
python3
pkg-config
hexdump
] ++ extraNativeBuildInputs;
buildInputs = [
audiofile
SDL2
];
enableParallelBuilding = true;
makeFlags = [
"VERSION=${region}"
] ++ lib.optionals stdenv.isDarwin [
"OSX_BUILD=1"
] ++ compileFlags;
preBuild = ''
patchShebangs extract_assets.py
ln -s ${baseRom} ./baserom.${region}.z64
'';
installPhase = ''
runHook preInstall
mkdir -p $out/bin
cp build/${region}_pc/sm64.${region}.f3dex2e $out/bin/sm64ex
runHook postInstall
'';
meta = with lib; {
longDescription =
extraMeta.description or "Super Mario 64 port based off of decompilation" + "\n" + ''
Note that you must supply a baserom yourself to extract assets from.
If you are not using an US baserom, you must overwrite the "region" attribute with either "eu" or "jp".
If you would like to use patches sm64ex distributes as makeflags, add them to the "compileFlags" attribute.
'';
mainProgram = "sm64ex";
license = licenses.unfree;
maintainers = with maintainers; [ ivar ];
platforms = platforms.unix;
} // extraMeta;
}

View file

@ -31624,7 +31624,13 @@ with pkgs;
runescape = callPackage ../games/runescape-launcher { };
sm64ex = callPackage ../games/sm64ex { };
sm64ex = callPackage ../games/sm64ex {
branch = "sm64ex";
};
sm64ex-coop = callPackage ../games/sm64ex {
branch = "sm64ex-coop";
};
snipes = callPackage ../games/snipes { };