]> code.ossystems Code Review - openembedded-core.git/commitdiff
kernel: stop using -exec rm for deleting files
authorBruce Ashfield <bruce.ashfield@windriver.com>
Mon, 10 Feb 2014 20:15:29 +0000 (15:15 -0500)
committerRichard Purdie <richard.purdie@linuxfoundation.org>
Tue, 11 Feb 2014 11:55:51 +0000 (11:55 +0000)
Removing files from the source tree via find, exec and rm is not the
most efficient operation, due to (among other things) the many forked
processes.

If we use -delete, it saves a significant amount of time. But -delete
does not work with -prune (since it forces -depth). To maintain the
lib, tools and scripts source files, we can hide them temporarily,
skip their hidden directories and then finally restore them.

Time for install before this change:

 real    2m48.563s
 user    0m35.220s
 sys     0m33.036s

Time for install after this change:

 real    1m21.301s
 user    0m33.160s
 sys     0m28.388s

We could further speed this up by using inline perl to delete the files,
but that complexity is avoided for now.

Signed-off-by: Bruce Ashfield <bruce.ashfield@windriver.com>
Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
meta/classes/kernel.bbclass

index 51626b03f824fa7a5dcd0113c7c1b3383af5980a..db5d4790001150c6e4f621d9a643314eb1954fec 100644 (file)
@@ -260,9 +260,21 @@ kernel_do_install() {
        # we clean the scripts dir while leaving the generated config
        # and include files.
        #
-       oe_runmake -C $kerneldir CC="${KERNEL_CC}" LD="${KERNEL_LD}" clean
-       make -C $kerneldir _mrproper_scripts
-       find $kerneldir -path $kerneldir/lib -prune -o -path $kerneldir/tools -prune -o -path $kerneldir/scripts -prune -o -name "*.[csS]" -exec rm '{}' \;
+       oe_runmake -C $kerneldir CC="${KERNEL_CC}" LD="${KERNEL_LD}" clean _mrproper_scripts 
+
+       # hide directories that shouldn't have their .c, s and S files deleted
+       for d in tools scripts lib; do
+               mv $kerneldir/$d $kerneldir/.$d
+       done
+
+       # delete .c, .s and .S files, unless we hid a directory as .<dir>. This technique is 
+       # much faster than find -prune and -exec
+       find $kerneldir -not -path '*/\.*' -type f -name "*.[csS]" -delete
+
+       # put the hidden dirs back
+       for d in tools scripts lib; do
+               mv $kerneldir/.$d $kerneldir/$d
+       done
 
        # As of Linux kernel version 3.0.1, the clean target removes
        # arch/powerpc/lib/crtsavres.o which is present in