Re: [OE-core] [PATCH] kernel.bbclass: avoid duplicates in KERNEL_IMAGETYPE_FOR_MAKE
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--- 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 -- ___ Openembedded-core mailing list Openembedded-core@lists.openembedded.org http://lists.openembedded.org/mailman/listinfo/openembedded-core
[OE-core] [PATCH] kernel.bbclass: avoid duplicates in KERNEL_IMAGETYPE_FOR_MAKE
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--- 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) +kname = d.getVar('KERNEL_PACKAGE_NAME') or "kernel" +imagedest = d.getVar('KERNEL_IMAGEDEST') + for type in types.split(): typelower = type.lower() -imagedest = d.getVar('KERNEL_IMAGEDEST') - d.appendVar('PACKAGES', ' %s-image-%s' % (kname, typelower)) - d.setVar('FILES_' + kname + '-image-' + typelower, '/' + imagedest + '/' + type + '-${KERNEL_VERSION_NAME}' + ' /' + imagedest + '/' + type) - d.appendVar('RDEPENDS_%s-image' % kname, ' %s-image-%s' % (kname, typelower)) - d.setVar('PKG_%s-image-%s' % (kname,typelower), '%s-image-%s-${KERNEL_VERSION_PKG_NAME}' % (kname, typelower)) - d.setVar('ALLOW_EMPTY_%s-image-%s' % (kname, typelower), '1') image = d.getVar('INITRAMFS_IMAGE') -- 1.9.1 -- ___ Openembedded-core mailing list Openembedded-core@lists.openembedded.org http://lists.openembedded.org/mailman/listinfo/openembedded-core