On Fri, 2013-11-08 at 15:17 +0000, Richard Purdie wrote:
> Whilst the comment says we can't do this, its incorrect, install operates
> on WORKDIR and its hard for different parts of WORKDIR to be on different

Is it hard? Or is it not possible / not supported?

My understanding was it was possible and therefor we couldn't hardlink.
I'm thrilled at the prospect of being wrong there though!

> filesystems. Hardlinking instead of copying is therefore a nice performance
> gain.
> 
> Also, completely skip the Documentation directory (adding a dummy Makefile
> to keep make happy) and tweak the other cp commands to link since if we
> don't we'd get "this is the same file" type errors from cp for some kernel
> versions.
> 
> For do_install on linux-yocto, this takes it from 227s -> 84s.

This, and the others, are fantastic improvements, thanks RP!

--
Darren

> 
> Signed-off-by: Richard Purdie <[email protected]>
> ---
> diff --git a/meta/classes/kernel.bbclass b/meta/classes/kernel.bbclass
> index a4db9f5..0b6360f 100644
> --- a/meta/classes/kernel.bbclass
> +++ b/meta/classes/kernel.bbclass
> @@ -236,20 +236,21 @@ kernel_do_install() {
>       # dir. This ensures the original Makefiles are used and not the
>       # redirecting Makefiles in the build directory.
>       #
> -     # work and sysroots can be on different partitions, so we can't rely on
> -     # hardlinking, unfortunately.
> -     #
> -     find . -depth -not -name "*.cmd" -not -name "*.o" -not -path "./.*" 
> -print0 | cpio --null -pdu $kerneldir
> +     find . -depth -not -name "*.cmd" -not -name "*.o" -not -path 
> "./Documentation*" -not -path "./.*" -print0 | cpio --null -pdlu $kerneldir
>       cp .config $kerneldir
>       if [ "${S}" != "${B}" ]; then
>               pwd="$PWD"
>               cd "${S}"
> -             find . -depth -not -path "./.*" -print0 | cpio --null -pdu 
> $kerneldir
> +             find . -depth -not -path "./Documentation*" -not -path "./.*" 
> -print0 | cpio --null -pdlu $kerneldir
>               cd "$pwd"
>       fi
>       install -m 0644 ${KERNEL_OUTPUT} $kerneldir/${KERNEL_IMAGETYPE}
>       install -m 0644 System.map $kerneldir/System.map-${KERNEL_VERSION}
>  
> +     # Dummy Makefile so the clean below works
> +        mkdir $kerneldir/Documentation
> +        touch $kerneldir/Documentation/Makefile
> +
>       #
>       # Clean and remove files not needed for building modules.
>       # Some distributions go through a lot more trouble to strip out
> @@ -262,22 +263,21 @@ kernel_do_install() {
>       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 '{}' \;
> -     find $kerneldir/Documentation -name "*.txt" -exec rm '{}' \;
>  
>       # As of Linux kernel version 3.0.1, the clean target removes
>       # arch/powerpc/lib/crtsavres.o which is present in
>       # KBUILD_LDFLAGS_MODULE, making it required to build external modules.
>       if [ ${ARCH} = "powerpc" ]; then
> -             cp arch/powerpc/lib/crtsavres.o 
> $kerneldir/arch/powerpc/lib/crtsavres.o
> +             cp -nl arch/powerpc/lib/crtsavres.o 
> $kerneldir/arch/powerpc/lib/crtsavres.o
>       fi
>  
>       # Necessary for building modules like compat-wireless.
>       if [ -f include/generated/bounds.h ]; then
> -             cp include/generated/bounds.h 
> $kerneldir/include/generated/bounds.h
> +             cp -nl include/generated/bounds.h 
> $kerneldir/include/generated/bounds.h
>       fi
>       if [ -d arch/${ARCH}/include/generated ]; then
>               mkdir -p $kerneldir/arch/${ARCH}/include/generated/
> -             cp -fR arch/${ARCH}/include/generated/* 
> $kerneldir/arch/${ARCH}/include/generated/
> +             cp -fnlR arch/${ARCH}/include/generated/* 
> $kerneldir/arch/${ARCH}/include/generated/
>       fi
>  
>       # Remove the following binaries which cause strip or arch QA errors
> 
> 

-- 
Darren Hart
Intel Open Source Technology Center
Yocto Project - Linux Kernel

_______________________________________________
Openembedded-core mailing list
[email protected]
http://lists.openembedded.org/mailman/listinfo/openembedded-core

Reply via email to