[OE-core] [PATCH] cmake.bbclass: enable usage of ccache

Khem Raj raj.khem at gmail.com
Fri Jan 27 01:51:30 UTC 2017



On 1/26/17 1:57 AM, Yannick Gicquel wrote:
> This allows ccache usage for recipes which inherit cmake.bbclass.
> Since cmake v3.4, it can be enabled using some "-D" options.
> 
> Here below are some metrics while using it for webkitgtk recipe.
> (machine is a 4x core i7 @ 3.4GHz)
> 
> $ bitbake -c fetchall webkitgtk
> $ time bitbake webkitgtk
> <snip>
> real	56m25.191s
> user	359m32.003s
> sys	34m49.356s
> 
> $ bitbake -c clean webkitgtk
> $ bitbake -c cleansstate webkitgtk
> $ time bitbake webkitgtk
> <snip>
> real	25m19.298s
> user	17m57.861s
> sys	6m20.157s

This looks lucerative. However, does this work with cmake in all cmake
based recipes would be interesting to know.

> 
> Signed-off-by: Yannick Gicquel <yannick.gicquel at iot.bzh>
> ---
>  meta/classes/cmake.bbclass | 14 +++++++++-----
>  1 file changed, 9 insertions(+), 5 deletions(-)
> 
> diff --git a/meta/classes/cmake.bbclass b/meta/classes/cmake.bbclass
> index 9e74599..737a4e0 100644
> --- a/meta/classes/cmake.bbclass
> +++ b/meta/classes/cmake.bbclass
> @@ -4,12 +4,9 @@ OECMAKE_SOURCEPATH ?= "${S}"
>  DEPENDS_prepend = "cmake-native "
>  B = "${WORKDIR}/build"
>  
> -# We need to unset CCACHE otherwise cmake gets too confused
> -CCACHE = ""
> -
>  # C/C++ Compiler (without cpu arch/tune arguments)
> -OECMAKE_C_COMPILER ?= "`echo ${CC} | sed 's/^\([^ ]*\).*/\1/'`"
> -OECMAKE_CXX_COMPILER ?= "`echo ${CXX} | sed 's/^\([^ ]*\).*/\1/'`"
> +OECMAKE_C_COMPILER ?= "${@'${CC}'.replace('${CCACHE}','',1).split(' ')[0]}"
> +OECMAKE_CXX_COMPILER ?= "${@'${CXX}'.replace('${CCACHE}','',1).split(' ')[0]}"
>  OECMAKE_AR ?= "${AR}"
>  
>  # Compiler flags
> @@ -108,9 +105,16 @@ cmake_do_configure() {
>  		OECMAKE_SITEFILE=""
>  	fi
>  
> +	if [ -n "${CCACHE}" ]; then
> +		OECMAKE_CCACHE="-DCMAKE_C_COMPILER_LAUNCHER=${CCACHE} -DCMAKE_CXX_COMPILER_LAUNCHER=${CCACHE}"
> +	else
> +		OECMAKE_CCACHE=""
> +	fi
> +
>  	cmake \
>  	  ${OECMAKE_SITEFILE} \
>  	  ${OECMAKE_SOURCEPATH} \
> +	  ${OECMAKE_CCACHE} \
>  	  -DCMAKE_INSTALL_PREFIX:PATH=${prefix} \
>  	  -DCMAKE_INSTALL_BINDIR:PATH=${@os.path.relpath(d.getVar('bindir'), d.getVar('prefix'))} \
>  	  -DCMAKE_INSTALL_SBINDIR:PATH=${@os.path.relpath(d.getVar('sbindir'), d.getVar('prefix'))} \
> 



More information about the Openembedded-core mailing list