On Wed, May 31, 2017 at 3:04 PM, Andre McCurdy <armccu...@gmail.com> wrote: > On Wed, May 31, 2017 at 3:26 AM, Nicolas Dechesne > <nicolas.deche...@linaro.org> wrote: >> On Tue, May 30, 2017 at 11:56 PM, Andre McCurdy <armccu...@gmail.com> wrote: >>> On Tue, May 30, 2017 at 1:26 PM, Nicolas Dechesne >>> <nicolas.deche...@linaro.org> wrote: >>>> so, to backtrack a bit, i think it should be safe to only treat >>>> vmlinux.gz as a 'special' case, and then it is there in >>>> KERNEL_IMAGETYPE, then we do a "make vmlinux" and we manually compress >>>> the file, otherwise we just trust that KERNEL_IMAGETYPE is a valid >>>> type and give it to kernel make command line. that should be enough >>>> to fix the Image.gz cases on all platforms where it's relevant (like >>>> arm). >>> >>> That sounds reasonable. >> >> I've been playing with this today, and that *seems* to work fine. At >> least I can still build vmlinux, vmlinux.gz and it fixes the build of >> Image.gz as well.. >> >> I would appreciate some feedback on this one. I can then send a proper >> patch. Could that break badly for anyone? >> >> diff --git a/meta/classes/kernel.bbclass b/meta/classes/kernel.bbclass >> index 7a134d5c29..459b6d66a3 100644 >> --- a/meta/classes/kernel.bbclass >> +++ b/meta/classes/kernel.bbclass >> @@ -44,7 +44,10 @@ python __anonymous () { >> types = (alttype + ' ' + types).strip() >> d.setVar('KERNEL_IMAGETYPES', types) >> >> - typeformake = re.sub(r'\.gz', '', 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 = re.sub(r'vmlinux\.gz', 'vmlinux', types) >> d.setVar('KERNEL_IMAGETYPE_FOR_MAKE', typeformake) >> >> for type in types.split(): >> > > Looks good to me. Below is a version which takes the cleanup slightly > further (it will no doubt get mangled since I'm copying and pasting > into gmail, but maybe gives some more ideas for the final patch). > > diff --git a/meta/classes/kernel.bbclass b/meta/classes/kernel.bbclass > index 8954b28..264d5b7 100644 > --- a/meta/classes/kernel.bbclass > +++ b/meta/classes/kernel.bbclass > @@ -32,8 +32,6 @@ KERNEL_VERSION_PKG_NAME = > "${@legitimize_package_name(d.getVar('KERNEL_VERSION') > KERNEL_VERSION_PKG_NAME[vardepvalue] = "${LINUX_VERSION}" > > python __anonymous () { > - import re > - > # Merge KERNEL_IMAGETYPE and KERNEL_ALT_IMAGETYPE into KERNEL_IMAGETYPES > type = d.getVar('KERNEL_IMAGETYPE') or "" > alttype = d.getVar('KERNEL_ALT_IMAGETYPE') or "" > @@ -44,7 +42,13 @@ python __anonymous () { > types = (alttype + ' ' + types).strip() > d.setVar('KERNEL_IMAGETYPES', types) > > - typeformake = re.sub(r'\.gz', '', types) > + # Almost all commonly used kernel images are generated by the kernel > build > + # system directly. However some, such as vmlinux.gz, are created as > special > + # cases by post-processing steps in kernel_do_compile() and > should therefore > + # not be included in typeformake. > + > + typeformake = types.replace('vmlinux.gz', '').strip()
Unfortunately this doesn't work if "vmlinux" isn't already included in KERNEL_IMAGETYPES etc, so we either need to search and replace as before, or add something like: typeformake = types if 'vmlinux.gz' in types.split(): typeformake = typeformake.replace('vmlinux.gz', '').strip() if 'vmlinux' not in typeformake.split(): typeformake = typeformake + ' vmlinux' which is a little more complex, but has the advantage of not risking duplicating "vmlinux" in typeformake, and therefore not calling "make vmlinux" twice in kernel_do_compile(), which I guess we sometimes do now... > + > d.setVar('KERNEL_IMAGETYPE_FOR_MAKE', typeformake) > > for type in types.split(): > @@ -266,14 +270,11 @@ kernel_do_compile() { > fi > for typeformake in ${KERNEL_IMAGETYPE_FOR_MAKE} ; do > oe_runmake ${typeformake} CC="${KERNEL_CC}" > LD="${KERNEL_LD}" ${KERNEL_EXTRA_ARGS} $use_alternate_initrd > - for type in ${KERNEL_IMAGETYPES} ; do > - if test "${typeformake}.gz" = "${type}"; then > - mkdir -p "${KERNEL_OUTPUT_DIR}" > - gzip -9c < "${typeformake}" > > "${KERNEL_OUTPUT_DIR}/${type}" > - break; > - fi > - done > done > + if (echo "${KERNEL_IMAGETYPES}" | grep -wq "vmlinux\.gz"); then > + mkdir -p "${KERNEL_OUTPUT_DIR}" > + gzip -9c < ${B}/vmlinux > "${KERNEL_OUTPUT_DIR}/vmlinux.gz" > + fi > } > > do_compile_kernelmodules() { -- _______________________________________________ Openembedded-core mailing list Openembedded-core@lists.openembedded.org http://lists.openembedded.org/mailman/listinfo/openembedded-core