summary refs log tree commit diff
path: root/pkgs/os-specific
diff options
context:
space:
mode:
authorTuomas Tynkkynen <tuomas@tuxera.com>2018-07-18 13:24:36 +0300
committerTuomas Tynkkynen <tuomas@tuxera.com>2018-07-24 23:36:06 +0300
commit29b84841d2a83a846a27ab2cea03fc84eec57e51 (patch)
treef4137d23fd29cbe3bb2974fa7e13146622abb6e8 /pkgs/os-specific
parent4cec65482a1bd0c4bbfa9181d62d7f006269015b (diff)
downloadnixlib-29b84841d2a83a846a27ab2cea03fc84eec57e51.tar
nixlib-29b84841d2a83a846a27ab2cea03fc84eec57e51.tar.gz
nixlib-29b84841d2a83a846a27ab2cea03fc84eec57e51.tar.bz2
nixlib-29b84841d2a83a846a27ab2cea03fc84eec57e51.tar.lz
nixlib-29b84841d2a83a846a27ab2cea03fc84eec57e51.tar.xz
nixlib-29b84841d2a83a846a27ab2cea03fc84eec57e51.tar.zst
nixlib-29b84841d2a83a846a27ab2cea03fc84eec57e51.zip
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.
Diffstat (limited to 'pkgs/os-specific')
-rw-r--r--pkgs/os-specific/linux/kernel/manual-config.nix14
1 files changed, 10 insertions, 4 deletions
diff --git a/pkgs/os-specific/linux/kernel/manual-config.nix b/pkgs/os-specific/linux/kernel/manual-config.nix
index 5d08ab05d97f..80721c4b401d 100644
--- a/pkgs/os-specific/linux/kernel/manual-config.nix
+++ b/pkgs/os-specific/linux/kernel/manual-config.nix
@@ -1,4 +1,4 @@
-{ buildPackages, runCommand, nettools, bc, bison, flex, perl, gmp, libmpc, mpfr, openssl
+{ buildPackages, runCommand, nettools, bc, bison, flex, perl, rsync, gmp, libmpc, mpfr, openssl
 , libelf
 , utillinux
 , writeTextFile
@@ -164,8 +164,14 @@ let
         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
+        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
@@ -251,7 +257,7 @@ stdenv.mkDerivation ((drvAttrs config hostPlatform.platform kernelPatches config
   enableParallelBuilding = true;
 
   depsBuildBuild = [ buildPackages.stdenv.cc ];
-  nativeBuildInputs = [ perl bc nettools openssl gmp libmpc mpfr ]
+  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