[OE-core] [PATCH] sstate.bbclass: Optimise sstate_hardcode_path

Joshua Lock josh at linux.intel.com
Fri Feb 10 02:23:14 UTC 2012


On 09/02/12 16:07, Richard Purdie wrote:
> The sstate_hardcode_path() function triggered large numbers of exec()
> calls when processing packages with large numbers of file relocations
> (e.g. perl). This patch optimises those calls into longer single commands
> which make the code significantly more efficient.
>
> This reduced the do_package time for perl by 2 minutes (from 4.75 minutes)
> for me.

Very nice speed up!

> Signed-off-by: Richard Purdie<richard.purdie at linuxfoundation.org>

A minor api/style nit below but:

Acked-by: Joshua Lock <josh at linux.intel.com>

> ---
> diff --git a/meta/classes/sstate.bbclass b/meta/classes/sstate.bbclass
> index 4bd3712..d4f95c1 100644
> --- a/meta/classes/sstate.bbclass
> +++ b/meta/classes/sstate.bbclass
> @@ -317,19 +317,24 @@ def sstate_hardcode_path(d):
>   	staging_host = d.getVar('STAGING_DIR_HOST', True)
>   	sstate_builddir = d.getVar('SSTATE_BUILDDIR', True)
>
> -	for i in file_list.split('\n'):
> -		if not i:
> -			continue
> -		if bb.data.inherits_class('native', d) or bb.data.inherits_class('nativesdk', d) or bb.data.inherits_class('crosssdk', d) or bb.data.inherits_class('cross-canadian', d):
> -			cmd = "sed -i -e s:%s:FIXMESTAGINGDIR:g %s" % (staging, i)
> -		elif bb.data.inherits_class('cross', d):
> -			cmd = "sed -i -e s:%s:FIXMESTAGINGDIRTARGET:g %s \
> -				sed -i -e s:%s:FIXMESTAGINGDIR:g %s" % (staging_target, i, staging, i)
> -		else:
> -			cmd = "sed -i -e s:%s:FIXMESTAGINGDIRHOST:g %s" % (staging_host, i)
> +	files = " ".join(file_list.split('\n'))
>
> +	if bb.data.inherits_class('native', d) or bb.data.inherits_class('nativesdk', d) or bb.data.inherits_class('crosssdk', d) or bb.data.inherits_class('cross-canadian', d):

I think this can be replaced by a single call to the inherits method of 
the oe.utils module:

oe.utils.inherits(d, 'native', 'nativesdk', 'crosssdk', 'cross-canadian')

which makes this a little more concise.

> +		cmd = "sed -i -e s:%s:FIXMESTAGINGDIR:g %s" % (staging, files)
> +	elif bb.data.inherits_class('cross', d):
> +		cmd = "sed -i -e s:%s:FIXMESTAGINGDIRTARGET:g %s \
> +			sed -i -e s:%s:FIXMESTAGINGDIR:g %s" % (staging_target, files, staging, files)
> +	else:
> +		cmd = "sed -i -e s:%s:FIXMESTAGINGDIRHOST:g %s" % (staging_host, files)
> +
> +	if files:
>   		os.system(cmd)
> -		os.system("echo %s | sed -e 's:%s::'>>  %sfixmepath" % (i, sstate_builddir, sstate_builddir))
> +		fix = open("%sfixmepath" % (sstate_builddir), "w")
> +		fixme = []
> +		for f in file_list.split('\n'):
> +			fixme.append(f.replace(sstate_builddir, ""))
> +		fix.write("\n".join(fixme))
> +		fix.close()
>   	p.close()
>
>   def sstate_package(ss, d):
>
>
>
> _______________________________________________
> Openembedded-core mailing list
> Openembedded-core at lists.openembedded.org
> http://lists.linuxtogo.org/cgi-bin/mailman/listinfo/openembedded-core

-- 
Joshua Lock
         Yocto Project "Johannes factotum"
         Intel Open Source Technology Centre




More information about the Openembedded-core mailing list