This commit is contained in:
TheK0tYaRa 2026-03-04 07:08:24 +02:00
parent c146f846de
commit 44561593a0
4 changed files with 134 additions and 25 deletions

View file

@ -31,14 +31,10 @@ pkgs.callPackage (
{ buildLinux, ... }@args:
let
llvm = pkgs.llvmPackages_latest;
clang = "${llvm.clang}/bin/clang";
clangpp = "${llvm.clang}/bin/clang++";
lld = "${llvm.lld}/bin/ld.lld";
llvmbin = "${llvm.llvm}/bin";
structuredExtraConfig' =
(with lib.kernel; {
# LTO_CLANG_THIN = yes; # i should find the correct one
LTO_CLANG_THIN = yes;
# LTO_CLANG_FULL = no;
# LTO_NONE = no;
})
@ -49,6 +45,8 @@ pkgs.callPackage (
// {
inherit kernelPatches extraConfig;
stdenv = llvm.stdenv;
version = kver;
modDirVersion = kver;
src = kernel-src;
@ -62,20 +60,6 @@ pkgs.callPackage (
makeFlags = (args.makeFlags or [ ]) ++ [
"LLVM=1"
"LLVM_IAS=1"
# needed due to build script retardation
"CC=${clang}"
"HOSTCC=${clang}"
"HOSTCXX=${clangpp}"
"LD=${lld}"
"HOSTLD=${lld}"
"AR=${llvmbin}/llvm-ar"
"NM=${llvmbin}/llvm-nm"
"STRIP=${llvmbin}/llvm-strip"
"OBJCOPY=${llvmbin}/llvm-objcopy"
"OBJDUMP=${llvmbin}/llvm-objdump"
"READELF=${llvmbin}/llvm-readelf"
];
structuredExtraConfig = structuredExtraConfig';

View file

@ -0,0 +1,91 @@
{ config, lib, ... }:
let
cfg = config.programs.ccache;
in
{
config = lib.mkIf cfg.enable {
# ccache должен быть виден из sandbox
nix.settings.extra-sandbox-paths = [ cfg.cacheDir ];
nixpkgs.overlays = [
(final: prev:
let
llvm = prev.llvmPackages_latest;
realClang = llvm.clang-unwrapped;
realClangLib = prev.lib.getLib realClang;
# "unwrapped clang", но с ccache + per-package CCACHE_DIR
clangUnwrappedCcache =
prev.stdenvNoCC.mkDerivation {
pname = "clang-unwrapped-ccache";
version = realClang.version;
outputs = [ "out" "lib" ];
dontUnpack = true;
installPhase = ''
mkdir -p "$out/bin" "$lib/lib"
mkwrap() {
local name="$1"
local real="$2"
cat > "$out/bin/$name" <<'EOF'
#!${prev.bash}/bin/bash
set -euo pipefail
# base cache dir from NixOS module
base='${cfg.cacheDir}'
# prefer pname (no version), fallback to name, and strip "-<digit>..." if present
pkg="${pname:-${name:-unknown}}"
pkg="${pkg%%-[0-9]*}"
mkdir -p "$base/$pkg"
export CCACHE_DIR="$base/$pkg"
export CCACHE_UMASK=007
# improves hit rate for repeated local rebuilds
export CCACHE_BASEDIR="${NIX_BUILD_TOP:-/build}"
export CCACHE_COMPRESS=1
export CCACHE_SLOPPINESS=random_seed,time_macros
exec ${prev.ccache}/bin/ccache __REAL__ "$@"
EOF
substituteInPlace "$out/bin/$name" --replace "__REAL__" "$real"
chmod +x "$out/bin/$name"
}
mkwrap clang ${realClang}/bin/clang
mkwrap clang++ ${realClang}/bin/clang++
ln -s "$out/bin/clang" "$out/bin/cc"
ln -s "$out/bin/clang++" "$out/bin/c++"
# make lib.getLib(stdenv.cc.cc) point to real clang builtin headers
ln -s ${realClangLib}/lib/clang "$lib/lib/clang"
'';
meta = (realClang.meta or { }) // {
mainProgram = "clang";
};
};
# Wrapped clang package that points its "unwrapped" to our ccache one
clangWrappedCcache = llvm.clang.override { cc = clangUnwrappedCcache; };
# New stdenv: same llvm stdenv, but compiler wrapper uses our ccache-unwrapped clang
llvmCcacheStdenv = prev.overrideCC llvm.stdenv clangWrappedCcache;
in
{
llvmPackages_latest = llvm // {
stdenv = llvmCcacheStdenv;
clang = clangWrappedCcache;
clang-unwrapped = clangUnwrappedCcache;
};
})
];
};
}

View file

@ -1,4 +1,28 @@
final: prev: {
ccacheWrapper = prev.ccacheWrapper.override {
extraConfig = ''
export CCACHE_COMPRESS=1
export CCACHE_SLOPPINESS=random_seed,time_macros
export CCACHE_DIR="/home/thek0tyara/Documents/cache/ccache/"
export CCACHE_UMASK=007
if [ ! -d "$CCACHE_DIR" ]; then
echo "====="
echo "Directory '$CCACHE_DIR' does not exist"
echo "Please create it with:"
echo " sudo mkdir -m0770 '$CCACHE_DIR'"
echo " sudo chown root:nixbld '$CCACHE_DIR'"
echo "====="
exit 1
fi
if [ ! -w "$CCACHE_DIR" ]; then
echo "====="
echo "Directory '$CCACHE_DIR' is not accessible for user $(whoami)"
echo "Please verify its access permissions"
echo "====="
exit 1
fi
'';
};
llama-cpp = prev.llama-cpp.overrideAttrs (old: rec {
version = "8124";
src = prev.fetchFromGitHub {
@ -13,11 +37,13 @@ final: prev: {
(pyFinal: pyPrev: {
sseclient-py = pyPrev.sseclient-py.overridePythonAttrs (old: rec {
format = "pyproject";
nativeBuildInputs = (old.nativeBuildInputs or []) ++ (with pyPrev; [
hatchling
#pypaBuildHook
#pypaInstallHook
]);
nativeBuildInputs =
(old.nativeBuildInputs or [ ])
++ (with pyPrev; [
hatchling
#pypaBuildHook
#pypaInstallHook
]);
doCheck = false;
});

View file

@ -53,6 +53,7 @@
};
modules = [
./custom/modules
./custom/modules/llvm-ccache-stdenv.nix
ragenix.nixosModules.default
niri-flake.nixosModules.niri
nix-index-database.nixosModules.default
@ -102,6 +103,7 @@
"root"
"thek0tyara"
];
extra-sandbox-paths = [ config.programs.ccache.cacheDir ];
download-buffer-size = 160000000;
};
boot = {
@ -202,7 +204,13 @@
};
};
programs = {
ccache.enable = true;
ccache = {
enable = true;
ccacheDir = "/home/thek0tyara/Documents/cache/ccache/";
packageNames = [
# "linux"
];
};
niri = {
enable = true;
package = pkgs.niri-stable;