From 44561593a0a1b24f0e43bba3e078ad303aaaaa57 Mon Sep 17 00:00:00 2001 From: TheK0tYaRa Date: Wed, 4 Mar 2026 07:08:24 +0200 Subject: [PATCH] fixup2 --- custom/modules/kernel.nix | 22 +------ custom/modules/llvm-ccache-stdenv.nix | 91 +++++++++++++++++++++++++++ custom/override.nix | 36 +++++++++-- flake.nix | 10 ++- 4 files changed, 134 insertions(+), 25 deletions(-) create mode 100644 custom/modules/llvm-ccache-stdenv.nix diff --git a/custom/modules/kernel.nix b/custom/modules/kernel.nix index 18fc764..060e65f 100644 --- a/custom/modules/kernel.nix +++ b/custom/modules/kernel.nix @@ -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'; diff --git a/custom/modules/llvm-ccache-stdenv.nix b/custom/modules/llvm-ccache-stdenv.nix new file mode 100644 index 0000000..c5650a4 --- /dev/null +++ b/custom/modules/llvm-ccache-stdenv.nix @@ -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 "-..." 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; + }; + }) + ]; + }; +} \ No newline at end of file diff --git a/custom/override.nix b/custom/override.nix index d86ab82..1b007ea 100644 --- a/custom/override.nix +++ b/custom/override.nix @@ -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; }); diff --git a/flake.nix b/flake.nix index 1f79ae5..926e62d 100644 --- a/flake.nix +++ b/flake.nix @@ -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;