fixup2
This commit is contained in:
parent
c146f846de
commit
44561593a0
4 changed files with 134 additions and 25 deletions
|
|
@ -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';
|
||||
|
|
|
|||
91
custom/modules/llvm-ccache-stdenv.nix
Normal file
91
custom/modules/llvm-ccache-stdenv.nix
Normal 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;
|
||||
};
|
||||
})
|
||||
];
|
||||
};
|
||||
}
|
||||
|
|
@ -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;
|
||||
});
|
||||
|
||||
|
|
|
|||
10
flake.nix
10
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;
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue