mirror of
https://github.com/Dillonb/n64.git
synced 2025-04-02 10:42:08 -04:00
102 lines
3.4 KiB
Nix
102 lines
3.4 KiB
Nix
{
|
|
description = "Dillon's N64 Emulator";
|
|
|
|
inputs = {
|
|
nixpkgs.url = "github:NixOS/nixpkgs/nixos-unstable";
|
|
flake-utils.url = "github:numtide/flake-utils";
|
|
n64-tools.url = "github:Dillonb/n64-tools.nix";
|
|
};
|
|
|
|
outputs = { self, nixpkgs, flake-utils, n64-tools }: flake-utils.lib.eachDefaultSystem (system:
|
|
let
|
|
shortRev = with self; if sourceInfo?dirtyShortRev then sourceInfo.dirtyShortRev else sourceInfo.shortRev;
|
|
rev = with self; if sourceInfo?dirtyRev then sourceInfo.dirtyRev else sourceInfo.rev;
|
|
pkgs = import nixpkgs { inherit system; };
|
|
|
|
llvmPackages = pkgs.llvmPackages_19;
|
|
|
|
devShellTools = [
|
|
llvmPackages.clang-tools
|
|
pkgs.git
|
|
];
|
|
|
|
tools = [
|
|
pkgs.gcc
|
|
pkgs.cmake
|
|
pkgs.ninja
|
|
pkgs.shaderc
|
|
pkgs.pkg-config
|
|
pkgs.vulkan-loader
|
|
pkgs.mold-wrapped
|
|
n64-tools.packages.${system}.bass
|
|
n64-tools.packages.${system}.chksum64
|
|
];
|
|
|
|
libs = [
|
|
pkgs.SDL2
|
|
pkgs.capstone
|
|
pkgs.dbus
|
|
pkgs.bzip2
|
|
] ++ pkgs.lib.optionals (!pkgs.stdenv.isDarwin) [
|
|
pkgs.qt6.qtbase # TODO: Qt should work on Darwin too
|
|
pkgs.qt6.wrapQtAppsHook
|
|
];
|
|
stdenv = if pkgs.stdenv.isLinux then pkgs.stdenv
|
|
else if pkgs.stdenv.isDarwin then llvmPackages.stdenv
|
|
else throw "Unsupported platform";
|
|
in
|
|
{
|
|
packages.default = stdenv.mkDerivation
|
|
{
|
|
pname = "dgb-n64";
|
|
version = "0.0.1-${shortRev}";
|
|
src = pkgs.lib.fileset.toSource {
|
|
root = ./.;
|
|
fileset = pkgs.lib.fileset.unions [
|
|
./src
|
|
./CMakeLists.txt
|
|
./cmake
|
|
./tests
|
|
];
|
|
};
|
|
nativeBuildInputs = tools ++ [ pkgs.makeWrapper ];
|
|
buildInputs = libs;
|
|
cmakeFlags = [
|
|
(pkgs.lib.cmakeFeature "N64_GIT_COMMIT_HASH" rev) # Flakes do not have access to the .git dir, so we'll set this manually
|
|
(pkgs.lib.cmakeFeature "CMAKE_BUILD_TYPE" "Release")
|
|
];
|
|
passthru.exePath = "/bin/n64";
|
|
postInstall =
|
|
if pkgs.stdenv.isLinux then ''
|
|
wrapProgram $out/bin/n64 --set LD_LIBRARY_PATH ${pkgs.vulkan-loader}/lib
|
|
wrapProgram $out/bin/n64-qt --set LD_LIBRARY_PATH ${pkgs.vulkan-loader}/lib
|
|
'' else if pkgs.stdenv.isDarwin then ''
|
|
wrapProgram $out/bin/n64 --set DYLD_FALLBACK_LIBRARY_PATH ${pkgs.darwin.moltenvk}/lib
|
|
'' else throw "Unsupported platform";
|
|
|
|
};
|
|
|
|
apps.default = {
|
|
type = "app";
|
|
program = "${self.packages.${system}.default}/bin/n64";
|
|
};
|
|
|
|
apps.qt = {
|
|
type = "app";
|
|
program = "${self.packages.${system}.default}/bin/n64-qt";
|
|
};
|
|
|
|
devShells.default = pkgs.mkShell.override { stdenv = stdenv; }
|
|
{
|
|
buildInputs = devShellTools ++ tools ++ libs;
|
|
shellHook = if stdenv.isLinux then ''
|
|
export LD_LIBRARY_PATH="${pkgs.vulkan-loader}/lib";
|
|
'' else if stdenv.isDarwin then ''
|
|
# clangd needs to come from clang-tools. Because Darwin uses clang stdenv, this is the only way to ensure we use the right clangd.
|
|
export PATH="${llvmPackages.clang-tools}/bin:$PATH";
|
|
export DYLD_FALLBACK_LIBRARY_PATH="${pkgs.darwin.moltenvk}/lib";
|
|
'' else throw "Unsupported platform";
|
|
};
|
|
}
|
|
);
|
|
}
|