shadPS4/flake.nix
Connor Garey 619e8f5292
Additions to Nix flake. (#4592)
Added cmake flags as optionals.

Moved X libs into its own list.

Replaced old callPackages.

Moved to let block at top level packages.

Created a function to get the correct attribute set from buildSettings.

.

Import lib

explicitly gave releaseWithDebugInfo callPackage build.

Remove lib output

Prepended pkgsLinux

Formatting.

Remove brace

.

Call the lambda first and get the output after using ()

Added buildDeps

removed fmt and eudev from native

Removed dependencies from devshell and use inputsFrom instead.

Added the inputs for the CMake modules in the derivation inputs.

Changed path and added name.

Added enableSystemLibraries flag

Removed xLibs and added flag for ENABLE_SYSTEM_LIBRARIES

Use sdl3 submodule for compiling locally.

.

.

Formatting.

Building with system libraries enabled.

Added libGL to devshell, added sdl3 and libx11 to buildInputs

Removed comment

Added devshell SDL configuration libs.

.

.

.

.

Use cmakeBool

Made buildInputs with no let in

Removed sdl3

Formatting

.

removed enableTests
2026-06-18 06:13:04 -07:00

229 lines
6.4 KiB
Nix

## SPDX-FileCopyrightText: Copyright 2026 shadPS4 Emulator Project
## SPDX-License-Identifier: GPL-2.0-or-later
{
description = "shadPS4 Nix Flake";
inputs = {
nixpkgs.url = "github:nixos/nixpkgs?ref=nixos-unstable";
};
outputs =
{ self, nixpkgs }:
let
pkgsLinux = nixpkgs.legacyPackages.x86_64-linux;
in
{
formatter.x86_64-linux = pkgsLinux.nixpkgs-fmt;
devShells.x86_64-linux.default =
let
shell =
{ self
, mkShell
, clangStdenv
, clang-tools
, cmake
, pkg-config
, renderdoc
, gef
, strace
, perf
, sdl3
, vulkan-tools
, libGL
, jack1
, fribidi
, libthai
, libpulseaudio
, sndio
, libdrm
, libgbm
, libusb1
, libxkbcommon
, libxcursor
, libxext
, libxfixes
, libxi
, libxinerama
, libxrandr
, libxrender
, libxtst
, libxscrnsaver
, enableDebugTooling ? true
,
}:
mkShell.override { stdenv = clangStdenv; } {
inputsFrom = [ self.packages.x86_64-linux.default ];
packages =
let
# SDL3 requres extra libraries inside the devshell in order to pass CMake's configure.
sdlConfigureDeps = [
libGL
jack1
fribidi
libthai
libpulseaudio
sndio
libdrm
libgbm
libusb1
libxkbcommon
libxcursor
libxext
libxfixes
libxi
libxinerama
libxrandr
libxrender
libxtst
libxscrnsaver
];
in
[
clang-tools
cmake
pkg-config
] ++ sdlConfigureDeps ++ pkgsLinux.lib.optionals enableDebugTooling [ renderdoc gef strace perf vulkan-tools ];
shellHook = ''
echo "Entering shadPS4 development shell!"
'';
CMAKE_C_COMPILER = "clang";
CMAKE_CXX_COMPILER = "clang++";
CMAKE_EXPORT_COMPILE_COMMANDS = "ON";
};
in
pkgsLinux.callPackage shell { inherit self; };
packages.x86_64-linux =
let
buildSettings = {
"release" = { symbols = false; flag = "-DCMAKE_BUILD_TYPE=Release"; };
"relWithDebInfo" = { symbols = true; flag = "-DCMAKE_BUILD_TYPE=RelWithDebInfo"; };
"debug" = { symbols = true; flag = "-DCMAKE_BUILD_TYPE=Debug"; };
};
getBuildSettings = chosenBuild: buildSettings.${chosenBuild} or (abort "Build mode not valid! Use \"debug\", \"release\", or \"relWithDebInfo\".");
build =
{ clangStdenv
, cmake
, ninja
, pkg-config
, libX11
, libxrandr
, libxext
, libxcursor
, libxi
, libxscrnsaver
, libxtst
, libxcb
, boost
, cli11
, ffmpeg
, fmt
, freetype
, glslang
, magic-enum
, miniupnpc
, miniz
, nlohmann_json
, libpng
, openal
, libressl
, renderdoc
, sdl3
, stb
, toml11
, robin-map
, vulkan-headers
, vulkan-memory-allocator
, xbyak
, xxhash
, zlib
, zydis
, pugixml
, libuuid
, systemdMinimal
, libx11
, releaseMode ? "debug"
, enableDiscordRpc ? false
,
}:
clangStdenv.mkDerivation (finalAttrs: {
name = "${finalAttrs.pname}-${finalAttrs.version}-${finalAttrs.system}";
pname = "shadps4";
version = "0.16.1";
system = "x86_64-linux";
src = ./.;
nativeBuildInputs = [
cmake
ninja
pkg-config
];
buildInputs = [
boost
cli11
ffmpeg
fmt
freetype
glslang
magic-enum
miniupnpc
miniz
nlohmann_json
libpng
openal
libressl
renderdoc
sdl3
stb
toml11
robin-map
vulkan-headers
vulkan-memory-allocator
xbyak
xxhash
zlib
zydis
pugixml
libuuid
systemdMinimal
libx11
];
cmakeFlags = [
(getBuildSettings releaseMode).flag
(pkgsLinux.lib.cmakeBool "ENABLE_DISCORD_RPC" enableDiscordRpc)
(pkgsLinux.lib.cmakeBool "ENABLE_TESTS" false)
(pkgsLinux.lib.cmakeBool "ENABLE_SYSTEM_LIBRARIES" true)
];
dontStrip = (getBuildSettings releaseMode).symbols;
# Cannot get the Branch name from the sandbox.
# Getting the commit hash can still be acquired through self.
patchPhase = ''
substituteInPlace src/common/scm_rev.cpp.in \
--replace-fail "@GIT_BRANCH@" "${self.shortRev or "Dirty"}"
substituteInPlace src/common/scm_rev.cpp.in \
--replace-fail "@GIT_DESC@" ""
'';
});
in
{
debug = pkgsLinux.callPackage build { releaseMode = "debug"; };
release = pkgsLinux.callPackage build { releaseMode = "release"; };
releaseWithDebInfo = pkgsLinux.callPackage build { releaseMode = "relWithDebInfo"; };
default = pkgsLinux.callPackage build { releaseMode = "relWithDebInfo"; };
};
};
}