[OE-core] [PATCH] kernel.bbclass: avoid duplicates in KERNEL_IMAGETYPE_FOR_MAKE
Martin Hundebøll
mnhu at prevas.dk
Tue Mar 13 06:58:47 UTC 2018
Hi Andre,
On 2018-03-13 00:19, Andre McCurdy wrote:
> Currently if KERNEL_IMAGETYPES contains both vmlinux and vmlinux.gz,
> KERNEL_IMAGETYPE_FOR_MAKE will end up containing two copies of
> vmlinux, which will result in two calls to "make vmlinux" from
> kernel_do_compile().
>
> Avoid duplicating vmlinux in KERNEL_IMAGETYPE_FOR_MAKE plus some
> minor non-functional updates to formatting and comments.
>
> Signed-off-by: Andre McCurdy<armccurdy at gmail.com>
> ---
> meta/classes/kernel.bbclass | 28 +++++++++++++++++-----------
> 1 file changed, 17 insertions(+), 11 deletions(-)
>
> diff --git a/meta/classes/kernel.bbclass b/meta/classes/kernel.bbclass
> index dc0152f..4bcaa61 100644
> --- a/meta/classes/kernel.bbclass
> +++ b/meta/classes/kernel.bbclass
> @@ -62,31 +62,37 @@ python __anonymous () {
> type = d.getVar('KERNEL_IMAGETYPE') or ""
> alttype = d.getVar('KERNEL_ALT_IMAGETYPE') or ""
> types = d.getVar('KERNEL_IMAGETYPES') or ""
> - kname = d.getVar('KERNEL_PACKAGE_NAME') or "kernel"
> if type not in types.split():
> types = (type + ' ' + types).strip()
> if alttype not in types.split():
> types = (alttype + ' ' + types).strip()
> d.setVar('KERNEL_IMAGETYPES', types)
>
> - # some commonly used kernel images aren't generated by the kernel build system, such as vmlinux.gz
> - # typeformake lists only valid kernel make targets, and post processing can be done after the kernel
> - # is built (such as using gzip to compress vmlinux)
> - typeformake = types.replace('vmlinux.gz', 'vmlinux')
> + # KERNEL_IMAGETYPES may contain a mixture of image types supported directly
> + # by the kernel build system and others which are created by post-processing
> + # (e.g. compressing vmlinux -> vmlinux.gz in kernel_do_compile()).
> + # KERNEL_IMAGETYPE_FOR_MAKE should contain only image types supported
> + # directly by the kernel build system.
> +
> + typeformake = ""
> + for type in types.split():
> + if type == 'vmlinux.gz':
> + type = 'vmlinux'
> + if type in types.split():
> + continue
> + typeformake = (typeformake + ' ' + type).strip()
> +
> d.setVar('KERNEL_IMAGETYPE_FOR_MAKE', typeformake)
I think this hunk go be better implemented using a python set(), e.g.
something like this (untested) piece:
> typeformake = set()
> post_extensions = ('gz', 'xz', 'bz2')
> for type in types.split():
> extsplit = type.rsplit('.', 1)
> if len(extsplit) == 2 and extsplit[1] in post_extensions:
> typeformake.add(extsplit[0])
> else:
> typeformake.add(type)
>
> d.setVar('KERNEL_IMAGETYPE_FOR_MAKE', " ".join(typeformake))
This should allow easier addition of other OE-supported extensions...
// Martin
More information about the Openembedded-core
mailing list