more llvm in kernel build

This commit is contained in:
TheK0tYaRa 2026-03-09 06:09:28 +02:00
parent bbc6f283ed
commit ae7c4be05b

View file

@ -35,45 +35,42 @@ pkgs.callPackage (
llvm = pkgs.llvmPackages_latest;
rust = pkgs.rustc-unwrapped;
# buildLinux uses common-flags.nix which sets CC to the *unwrapped* compiler:
# CC=${lib.getExe stdenv.cc.cc}
# and appends extraMakeFlags at the end. :contentReference[oaicite:1]{index=1}
realClang = lib.getExe llvm.clang-unwrapped;
# Host tools are built with buildPackages.stdenv.cc (see common-flags HOSTCC). :contentReference[oaicite:2]{index=2}
buildPkgs = args.buildPackages or pkgs.buildPackages;
realHostCC = lib.getExe' buildPkgs.stdenv.cc "${buildPkgs.stdenv.cc.targetPrefix}cc";
realHostCXX = lib.getExe' buildPkgs.stdenv.cc "${buildPkgs.stdenv.cc.targetPrefix}c++";
buildLlvm = buildPkgs.llvmPackages_latest;
llvmBuildPackages = buildPkgs // {
stdenv = buildLlvm.stdenv;
};
realClang = lib.getExe llvm.clang-unwrapped;
realLd = lib.getExe' llvm.lld "ld.lld";
realAr = lib.getExe' llvm.llvm "llvm-ar";
realNm = lib.getExe' llvm.llvm "llvm-nm";
realStrip = lib.getExe' llvm.llvm "llvm-strip";
realObjcopy = lib.getExe' llvm.llvm "llvm-objcopy";
realObjdump = lib.getExe' llvm.llvm "llvm-objdump";
realReadelf = lib.getExe' llvm.llvm "llvm-readelf";
realHostCC = lib.getExe' buildLlvm.stdenv.cc "${buildLlvm.stdenv.cc.targetPrefix}cc";
realHostCXX = lib.getExe' buildLlvm.stdenv.cc "${buildLlvm.stdenv.cc.targetPrefix}c++";
realHostAr = lib.getExe' buildLlvm.llvm "llvm-ar";
realHostLd = lib.getExe' buildLlvm.lld "ld.lld";
realRustc = lib.getExe rust;
realHostRustc = realRustc;
clangSccache = pkgs.writeShellScriptBin "clang" ''
set -euo pipefail
export SCCACHE_DIR=${lib.escapeShellArg sccacheDir}
if [ -n "''${SCCACHE_ENFORCE_MARKER-}" ]; then
: > "''${SCCACHE_ENFORCE_MARKER}"
fi
exec ${pkgs.sccache}/bin/sccache ${realClang} "$@"
'';
hostccSccache = pkgs.writeShellScriptBin "cc" ''
set -euo pipefail
export SCCACHE_DIR=${lib.escapeShellArg sccacheDir}
if [ -n "''${SCCACHE_ENFORCE_MARKER-}" ]; then
: > "''${SCCACHE_ENFORCE_MARKER}"
fi
exec ${pkgs.sccache}/bin/sccache ${realHostCC} "$@"
'';
hostcxxSccache = pkgs.writeShellScriptBin "c++" ''
set -euo pipefail
export SCCACHE_DIR=${lib.escapeShellArg sccacheDir}
if [ -n "''${SCCACHE_ENFORCE_MARKER-}" ]; then
: > "''${SCCACHE_ENFORCE_MARKER}"
fi
exec ${pkgs.sccache}/bin/sccache ${realHostCXX} "$@"
'';
mkSccacheWrapper =
name: compiler:
pkgs.writeShellScriptBin name ''
set -euo pipefail
export SCCACHE_DIR=${lib.escapeShellArg sccacheDir}
if [ -n "''${SCCACHE_ENFORCE_MARKER-}" ]; then
: > "''${SCCACHE_ENFORCE_MARKER}"
fi
exec ${pkgs.sccache}/bin/sccache ${compiler} "$@"
'';
clangSccache = mkSccacheWrapper "clang" realClang;
hostccSccache = mkSccacheWrapper "cc" realHostCC;
hostcxxSccache = mkSccacheWrapper "c++" realHostCXX;
rustcSccache = pkgs.writeShellScriptBin "rustc" ''
set -euo pipefail
export SCCACHE_DIR=${lib.escapeShellArg sccacheDir}
@ -110,20 +107,29 @@ pkgs.callPackage (
src = kernel-src;
stdenv = llvm.stdenv;
buildPackages = llvmBuildPackages;
extraMakeFlags =
(args.extraMakeFlags or [ ])
++ [
"LLVM=1"
"LLVM_IAS=1"
"CC=${if enforceSccache then lib.getExe clangSccache else realClang}"
"LD=${realLd}"
"AR=${realAr}"
"NM=${realNm}"
"STRIP=${realStrip}"
"OBJCOPY=${realObjcopy}"
"OBJDUMP=${realObjdump}"
"READELF=${realReadelf}"
"HOSTCC=${if enforceSccache then lib.getExe hostccSccache else realHostCC}"
"HOSTCXX=${if enforceSccache then lib.getExe hostcxxSccache else realHostCXX}"
"HOSTAR=${realHostAr}"
"HOSTLD=${realHostLd}"
"RUSTC=${if enforceSccache then lib.getExe rustcSccache else realRustc}"
"HOSTRUSTC=${if enforceSccache then lib.getExe hostrustcSccache else realHostRustc}"
]
++ lib.optionals enforceSccache [
"CC=${lib.getExe clangSccache}"
"HOSTCC=${lib.getExe hostccSccache}"
"HOSTCXX=${lib.getExe hostcxxSccache}"
"RUSTC=${lib.getExe rustcSccache}"
"HOSTRUSTC=${lib.getExe hostrustcSccache}"
];
;
# Start with clean stats so the build-phase check reports only this build.
preBuild =