kernel: Reduce peak disk usage during build

Since commit f620b1b693ec25af, the build directory is located inside the
source directory. Thus, the `cp -dpR` copies gigabytes worth of .o files
only to be deleted later on when we trim all non-essential files from
`$dev/lib/modules/${modDirVersion}/source/` thus causing a significant
amount of wasted I/O and peak disk usage.

As `cp` doesn't come with a `--exclude` flag, use rsync. And throw out
the Documentation folder while at it.

Changed files
+10 -4
pkgs
os-specific
linux
+10 -4
pkgs/os-specific/linux/kernel/manual-config.nix
···
-
{ buildPackages, runCommand, nettools, bc, bison, flex, perl, gmp, libmpc, mpfr, openssl
, libelf
, utillinux
, writeTextFile
···
unlink $out/lib/modules/${modDirVersion}/build
unlink $out/lib/modules/${modDirVersion}/source
-
mkdir -p $dev/lib/modules/${modDirVersion}/build
-
cp -dpR .. $dev/lib/modules/${modDirVersion}/source
cd $dev/lib/modules/${modDirVersion}/source
cp $buildRoot/{.config,Module.symvers} $dev/lib/modules/${modDirVersion}/build
···
enableParallelBuilding = true;
depsBuildBuild = [ buildPackages.stdenv.cc ];
-
nativeBuildInputs = [ perl bc nettools openssl gmp libmpc mpfr ]
++ optional (stdenv.hostPlatform.platform.kernelTarget == "uImage") buildPackages.ubootTools
++ optional (stdenv.lib.versionAtLeast version "4.14") libelf
++ optional (stdenv.lib.versionAtLeast version "4.15") utillinux
···
+
{ buildPackages, runCommand, nettools, bc, bison, flex, perl, rsync, gmp, libmpc, mpfr, openssl
, libelf
, utillinux
, writeTextFile
···
unlink $out/lib/modules/${modDirVersion}/build
unlink $out/lib/modules/${modDirVersion}/source
+
mkdir -p $dev/lib/modules/${modDirVersion}/{build,source}
+
+
# To save space, exclude a bunch of unneeded stuff when copying.
+
(cd .. && rsync --archive --prune-empty-dirs \
+
--exclude='/build/' \
+
--exclude='/Documentation/' \
+
* $dev/lib/modules/${modDirVersion}/source/)
+
cd $dev/lib/modules/${modDirVersion}/source
cp $buildRoot/{.config,Module.symvers} $dev/lib/modules/${modDirVersion}/build
···
enableParallelBuilding = true;
depsBuildBuild = [ buildPackages.stdenv.cc ];
+
nativeBuildInputs = [ perl bc nettools openssl rsync gmp libmpc mpfr ]
++ optional (stdenv.hostPlatform.platform.kernelTarget == "uImage") buildPackages.ubootTools
++ optional (stdenv.lib.versionAtLeast version "4.14") libelf
++ optional (stdenv.lib.versionAtLeast version "4.15") utillinux