Enable optimized builds for steam deck.

This commit is contained in:
Tom Alexander 2025-03-24 19:54:09 -04:00
parent 44a49d7ac7
commit 3ecb2fc790
Signed by: talexander
GPG Key ID: D3A179C9A53C0EDE
8 changed files with 211 additions and 98 deletions

View File

@ -8,6 +8,7 @@
{
imports = [
./roles/2ship2harkinian
./roles/global_options
./roles/graphics
./roles/pcsx2
./roles/rpcs3

View File

@ -10,6 +10,7 @@
config = {
me.graphical = true;
me.optimizations.enable = true;
me.pcsx2.enable = true;
me.rpcs3.enable = true;
me.ship2harkinian.enable = true;

View File

@ -54,11 +54,28 @@ in
};
nixpkgs.overlays = [
(final: prev: {
(
final: prev:
let
optimizeWithFlags =
pkg: flags:
pkg.overrideAttrs (old: {
NIX_CFLAGS_COMPILE = [ (old.NIX_CFLAGS_COMPILE or "") ] ++ flags;
});
original_package =
if config.me.optimizations.enable then
(optimizeWithFlags prev._2ship2harkinian [
"-march=znver2"
"-mtune=znver2"
])
else
prev._2ship2harkinian;
in
{
_2ship2harkinian = pkgs.buildEnv {
name = prev._2ship2harkinian.name;
paths = [
(config.lib.nixGL.wrap prev._2ship2harkinian)
(config.lib.nixGL.wrap original_package)
];
extraOutputsToInstall = [
"man"
@ -70,7 +87,8 @@ in
chmod 0555 $out/share/applications/2s2h.desktop
'';
};
})
}
)
];
})
]

View File

@ -0,0 +1,19 @@
{
config,
lib,
pkgs,
...
}:
{
imports = [ ];
options.me = {
optimizations.enable = lib.mkOption {
type = lib.types.bool;
default = false;
example = true;
description = "Whether we want to enable CPU optimizations (will trigger a rebuild from source).";
};
};
}

View File

@ -70,11 +70,28 @@ in
};
nixpkgs.overlays = [
(final: prev: {
(
final: prev:
let
optimizeWithFlags =
pkg: flags:
pkg.overrideAttrs (old: {
NIX_CFLAGS_COMPILE = [ (old.NIX_CFLAGS_COMPILE or "") ] ++ flags;
});
original_package =
if config.me.optimizations.enable then
(optimizeWithFlags prev.pcsx2 [
"-march=znver2"
"-mtune=znver2"
])
else
prev.pcsx2;
in
{
pcsx2 = pkgs.buildEnv {
name = prev.pcsx2.name;
paths = [
(config.lib.nixGL.wrap prev.pcsx2)
(config.lib.nixGL.wrap original_package)
];
extraOutputsToInstall = [
"man"
@ -86,7 +103,8 @@ in
chmod 0555 $out/share/applications/PCSX2.desktop
'';
};
})
}
)
];
})
]

View File

@ -70,11 +70,28 @@ in
};
nixpkgs.overlays = [
(final: prev: {
(
final: prev:
let
optimizeWithFlags =
pkg: flags:
pkg.overrideAttrs (old: {
NIX_CFLAGS_COMPILE = [ (old.NIX_CFLAGS_COMPILE or "") ] ++ flags;
});
original_package =
if config.me.optimizations.enable then
(optimizeWithFlags prev.rpcs3 [
"-march=znver2"
"-mtune=znver2"
])
else
prev.rpcs3;
in
{
rpcs3 = pkgs.buildEnv {
name = prev.rpcs3.name;
paths = [
(config.lib.nixGL.wrap prev.rpcs3)
(config.lib.nixGL.wrap original_package)
];
extraOutputsToInstall = [
"man"
@ -82,11 +99,12 @@ in
"info"
];
# We have to use 555 instead of the normal 444 here because the .desktop file ends up inside $HOME on steam deck and desktop files must be either not in $HOME or must be executable, otherwise KDE Plasma refuses to execute them.
# postBuild = ''
# chmod 0555 $out/share/applications/PCSX2.desktop
# '';
postBuild = ''
chmod 0555 $out/share/applications/rpcs3.desktop
'';
};
})
}
)
];
})
]

View File

@ -54,11 +54,30 @@ in
};
nixpkgs.overlays = [
(final: prev: {
(
final: prev:
let
optimizeWithFlags =
pkg: flags:
pkg.overrideAttrs (old: {
NIX_CFLAGS_COMPILE = [ (old.NIX_CFLAGS_COMPILE or "") ] ++ flags;
});
original_package = prev.shipwright;
# Optimization is broken for shipwright, fails to build "The following attributes are overlapping"
# original_package =
# if !config.me.optimizations.enable then
# (optimizeWithFlags prev.shipwright [
# "-march=znver2"
# "-mtune=znver2"
# ])
# else
# prev.shipwright;
in
{
shipwright = pkgs.buildEnv {
name = prev.shipwright.name;
paths = [
(config.lib.nixGL.wrap prev.shipwright)
(config.lib.nixGL.wrap original_package)
];
extraOutputsToInstall = [
"man"
@ -70,7 +89,8 @@ in
chmod 0555 $out/share/applications/soh.desktop
'';
};
})
}
)
];
})
]

View File

@ -52,7 +52,24 @@ in
};
nixpkgs.overlays = [
(final: prev: {
(
final: prev:
let
optimizeWithFlags =
pkg: flags:
pkg.overrideAttrs (old: {
NIX_CFLAGS_COMPILE = [ (old.NIX_CFLAGS_COMPILE or "") ] ++ flags;
});
original_package =
if config.me.optimizations.enable then
(optimizeWithFlags prev.sm64ex [
"-march=znver2"
"-mtune=znver2"
])
else
prev.sm64ex;
in
{
sm64ex =
let
desktop_item = pkgs.makeDesktopItem {
@ -70,7 +87,7 @@ in
pkgs.buildEnv {
name = prev.sm64ex.name;
paths = [
(config.lib.nixGL.wrap prev.sm64ex)
(config.lib.nixGL.wrap original_package)
];
extraOutputsToInstall = [
"man"
@ -83,7 +100,8 @@ in
install -m 444 -D "${./files/icon.png}" $out/share/pixmaps/sm64ex.png
'';
};
})
}
)
];
})
]