Re: [OE-core] [PATCH] kernel.bbclass: avoid duplicates in KERNEL_IMAGETYPE_FOR_MAKE

2018-03-13 Thread Martin Hundebøll

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

2018-03-12 Thread Andre McCurdy
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