more llvm in kernel build
This commit is contained in:
parent
bbc6f283ed
commit
ae7c4be05b
1 changed files with 47 additions and 41 deletions
|
|
@ -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 =
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue