Add basic template structure

This commit is contained in:
Kiana Sheibani 2022-04-27 22:07:42 -04:00
parent 5dad5954cf
commit a238739003
4 changed files with 112 additions and 84 deletions

View file

@ -1,87 +1,10 @@
{ {
description = "SNES emulator with an extensive set of debugging tools"; description = "Templates for coding SNES roms";
inputs = { outputs = { self }: {
nixpkgs.url = "github:NixOS/nixpkgs"; templates.with-asar = {
flake-utils.url = "github:numtide/flake-utils"; description = "A template for programming with the Asar assembler";
path = ./with-asar;
mesen-s.url = "github:NovaSquirrel/Mesen-SX";
asar.url = "github:RPGHacker/asar";
};
outputs = { self,
nixpkgs,
flake-utils,
mesen-s,
asar,
... }@inputs:
flake-utils.lib.eachDefaultSystem (system:
with import nixpkgs { inherit system; };
let
# Executable name
pname = "";
# Project version
version = "";
asar-pkg = stdenv.mkDerivation {
pname = "asar";
version = "1.81";
src = asar;
nativeBuildInputs = [ cmake ];
configurePhase = "cmake src";
installPhase = ''
install -Dm755 asar/asar-standalone $out/bin/asar
'';
}; };
mesen-s-pkg = stdenv.mkDerivation {
pname = "mesen-s";
version = "0.4.0";
src = mesen-s;
nativeBuildInputs = [ clang zip makeWrapper ];
buildInputs = [ mono6 SDL2 glib gtk2-x11 ];
postPatch = "patchShebangs .";
preBuild = "make clean";
makeFlags = [ "LTO=true" ];
# Adapted from the AUR repo's PKGBUILD
installPhase = ''
cat > mesen-s << END
#!/usr/bin/env sh
mono $out/opt/mesen-s/mesen-s "\$@"
END
install -Dm755 mesen-s $out/bin/mesen-s
install -Dm755 bin/x64/Release/Mesen-S.exe $out/opt/mesen-s/mesen-s
install -Dm644 InteropDLL/obj.x64/libMesenSCore.x64.dll $out/lib/libMesenSCore.dll
'';
preFixup = ''
MPATH="$out/lib:${glib.out}/lib:${gtk2-x11}/lib"
wrapProgram $out/bin/mesen-s --prefix MONO_PATH : "$MPATH" --prefix LD_LIBRARY_PATH : "$MPATH" \
--prefix PATH : ${lib.makeBinPath [ stdenv.shell mono6 ]}
'';
}; };
in {
shells.default = mkShell {
packages = [ asar-pkg mesen-s-pkg ];
};
packages.default = stdenv.mkDerivation {
inherit pname version;
src = self;
nativeBuildInputs = [ asar-pkg ];
};
apps.default = {
type = "app";
program = "${self.packages.${system}.default}/bin/${pname}";
};
});
} }

17
with-asar/Makefile Normal file
View file

@ -0,0 +1,17 @@
NAME ?= main
ASM=asar
ASMFLAGS=
VPATH=src
.PHONY: all
all: $(NAME).sfc
$(NAME).sfc: main.asm
$(ASM) $(ASMFLAGS) $^ $@
# Clean directory
.PHONY: clean
clean:
rm $(NAME).sfc

88
with-asar/flake.nix Normal file
View file

@ -0,0 +1,88 @@
{
description = "SNES emulator with an extensive set of debugging tools";
inputs = {
nixpkgs.url = "github:NixOS/nixpkgs";
flake-utils.url = "github:numtide/flake-utils";
mesen-s-src.url = "github:NovaSquirrel/Mesen-SX";
mesen-s-src.flake = false;
asar-src.url = "github:RPGHacker/asar";
asar-src.flake = false;
};
outputs = { self,
nixpkgs,
flake-utils,
mesen-s-src,
asar-src,
... }@inputs:
flake-utils.lib.eachDefaultSystem (system:
with import nixpkgs { inherit system; };
let
# Executable name
pname = "";
# Project version
version = "";
asar = stdenv.mkDerivation {
pname = "asar";
version = "1.81";
src = asar-src;
nativeBuildInputs = [ cmake ];
configurePhase = "cmake src";
installPhase = ''
install -Dm555 asar/asar-standalone $out/bin/asar
'';
};
mesen-s = stdenv.mkDerivation {
pname = "mesen-s";
version = "0.4.0";
src = mesen-s-src;
nativeBuildInputs = [ clang zip makeWrapper ];
buildInputs = [ mono6 SDL2 glib gtk2-x11 ];
preBuild = "make clean";
makeFlags = [ "LTO=true" ];
# Adapted from the AUR repo's PKGBUILD
installPhase = ''
cat > mesen-s << END
#!/usr/bin/env sh
mono $out/opt/mesen-s/mesen-s "\$@"
END
install -Dm555 mesen-s $out/bin/mesen-s
install -Dm555 bin/x64/Release/Mesen-S.exe $out/opt/mesen-s/mesen-s
install -Dm444 InteropDLL/obj.x64/libMesenSCore.x64.dll $out/lib/libMesenSCore.dll
'';
preFixup = ''
MPATH="$out/lib:${glib.out}/lib:${gtk2-x11}/lib"
wrapProgram $out/bin/mesen-s --prefix MONO_PATH : "$MPATH" --prefix LD_LIBRARY_PATH : "$MPATH" \
--prefix PATH : ${lib.makeBinPath [ stdenv.shell mono6 ]}
'';
};
in {
packages.emulator = mesen-s;
shells.default = mkShell {
packages = [ asar mesen-s ];
};
packages.default = stdenv.mkDerivation {
inherit pname version;
src = self;
nativeBuildInputs = [ asar ];
makeFlags = [ "NAME=${pname}" ];
installPhase = "install -m444 ${pname}.sfc $out";
};
});
}

0
with-asar/src/main.asm Normal file
View file