diff mbox series

syslinux: clean old object and dependency files before do_install

Message ID 20250926073618.4162662-1-haixiao.yan.cn@windriver.com
State New
Headers show
Series syslinux: clean old object and dependency files before do_install | expand

Commit Message

Yan, Haixiao (CN) Sept. 26, 2025, 7:36 a.m. UTC
From: Haixiao Yan <haixiao.yan.cn@windriver.com>

Remove all previous .o and .d files from OBJ directories before
running do_install. This prevents stale build artifacts from
interfering with the installation of new binaries and modules,
especially after GCC upgrades that can invalidate existing dependency
files, such as:

make[4]: *** No rule to make target
'/build/tmp-glibc/work/corei7-64-wrs-linux/syslinux/6.04-pre2-r1/recipe-sysroot-native/
usr/lib/x86_64-wrs-linux/gcc/x86_64-wrs-linux/12.4.0/include/stdarg.h',
needed by 'zlib/adler32.o'.  Stop.

Signed-off-by: Haixiao Yan <haixiao.yan.cn@windriver.com>
---
 meta/recipes-devtools/syslinux/syslinux_6.04-pre2.bb | 1 +
 1 file changed, 1 insertion(+)

Comments

Alexander Kanavin Sept. 26, 2025, 7:43 a.m. UTC | #1
On Fri, 26 Sept 2025 at 09:37, Yan, Haixiao (CN) via
lists.openembedded.org
<Haixiao.Yan.CN=windriver.com@lists.openembedded.org> wrote:
> make[4]: *** No rule to make target
> '/build/tmp-glibc/work/corei7-64-wrs-linux/syslinux/6.04-pre2-r1/recipe-sysroot-native/
> usr/lib/x86_64-wrs-linux/gcc/x86_64-wrs-linux/12.4.0/include/stdarg.h',
> needed by 'zlib/adler32.o'.  Stop.
>
> Signed-off-by: Haixiao Yan <haixiao.yan.cn@windriver.com>
> ---
>  meta/recipes-devtools/syslinux/syslinux_6.04-pre2.bb | 1 +
>  1 file changed, 1 insertion(+)
>
> diff --git a/meta/recipes-devtools/syslinux/syslinux_6.04-pre2.bb b/meta/recipes-devtools/syslinux/syslinux_6.04-pre2.bb
> index 449a75ebf8ab..ea4bf6e6a88b 100644
> --- a/meta/recipes-devtools/syslinux/syslinux_6.04-pre2.bb
> +++ b/meta/recipes-devtools/syslinux/syslinux_6.04-pre2.bb
> @@ -107,6 +107,7 @@ do_compile:class-target() {
>  }
>
>  do_install:class-target() {
> +       oe_runmake firmware="bios" clean
>         oe_runmake firmware="bios" install INSTALLROOT="${D}"

I'm not sure I understand what happens here. The issue seem to be that
Makefile refers to a file that no longer exists in the sysroot. How
would performing a 'make clean' address that issue?

Alex
Yan, Haixiao (CN) Sept. 26, 2025, 7:57 a.m. UTC | #2
On 2025/9/26 15:43, Alexander Kanavin wrote:
> CAUTION: This email comes from a non Wind River email account!
> Do not click links or open attachments unless you recognize the sender and know the content is safe.
>
> On Fri, 26 Sept 2025 at 09:37, Yan, Haixiao (CN) via
> lists.openembedded.org
> <Haixiao.Yan.CN=windriver.com@lists.openembedded.org> wrote:
>> make[4]: *** No rule to make target
>> '/build/tmp-glibc/work/corei7-64-wrs-linux/syslinux/6.04-pre2-r1/recipe-sysroot-native/
>> usr/lib/x86_64-wrs-linux/gcc/x86_64-wrs-linux/12.4.0/include/stdarg.h',
>> needed by 'zlib/adler32.o'.  Stop.
>>
>> Signed-off-by: Haixiao Yan <haixiao.yan.cn@windriver.com>
>> ---
>>   meta/recipes-devtools/syslinux/syslinux_6.04-pre2.bb | 1 +
>>   1 file changed, 1 insertion(+)
>>
>> diff --git a/meta/recipes-devtools/syslinux/syslinux_6.04-pre2.bb b/meta/recipes-devtools/syslinux/syslinux_6.04-pre2.bb
>> index 449a75ebf8ab..ea4bf6e6a88b 100644
>> --- a/meta/recipes-devtools/syslinux/syslinux_6.04-pre2.bb
>> +++ b/meta/recipes-devtools/syslinux/syslinux_6.04-pre2.bb
>> @@ -107,6 +107,7 @@ do_compile:class-target() {
>>   }
>>
>>   do_install:class-target() {
>> +       oe_runmake firmware="bios" clean
>>          oe_runmake firmware="bios" install INSTALLROOT="${D}"
> I'm not sure I understand what happens here. The issue seem to be that
> Makefile refers to a file that no longer exists in the sysroot. How
> would performing a 'make clean' address that issue?
Building syslinux normally works fine, but after upgrading GCC from 
12.4.0 to 12.5.0, rebuilding syslinux results in a build failure.
Listing the object and dependency files under 
syslinux/6.04-pre2-r1/syslinux-6.04-pre2/bios/com32/lib/zlib shows:

./            compress.o     deflate.o     inffast.o inftrees.o     
uncompr.o
../           .compress.o.d  .deflate.o.d  .inffast.o.d .inftrees.o.d  
.uncompr.o.d
adler32.o     crc32.o        infback.o     inflate.o trees.o        zutil.o
.adler32.o.d  .crc32.o.d     .infback.o.d  .inflate.o.d .trees.o.d     
.zutil.o.d

The dependency file .adler32.o.d references an outdated header:
/build/tmp-glibc/work/corei7-64-wrs-linux/syslinux/6.04-pre2-r1/recipe-sysroot-native/usr/lib/x86_64-wrs-linux/gcc/x86_64-wrs-linux/12.4.0/include/stdarg.h

Since stdarg.h cannot be found, the build fails.

Executing `make clean` deletes all existing .o and .d files from the OBJ 
directories, ensuring that zlib is rebuilt from scratch and preventing 
stale dependencies from causing build errors.

Thanks,

Haixiao

> Alex
Alexander Kanavin Sept. 26, 2025, 8:27 a.m. UTC | #3
On Fri, 26 Sept 2025 at 10:03, Haixiao Yan <haixiao.yan.cn@windriver.com> wrote:

> Executing `make clean` deletes all existing .o and .d files from the OBJ
> directories, ensuring that zlib is rebuilt from scratch and preventing
> stale dependencies from causing build errors.

Thanks for the explanation. The next question I had was why the
standard clean mechanism that is usually triggered in do_configure()
isn't working, and indeed I am seeing this in the recipe:

do_configure() {
        oe_runmake firmware="bios" clean
}
...

do_configure:class-target() {
        # No need to do anything as we're mostly shipping the
precompiled binaries
        :
}

Should this second function be removed instead, so that the standard
one takes over and does the cleaning?

Alex
Khem Raj Sept. 26, 2025, 5:05 p.m. UTC | #4
On 9/26/25 1:27 AM, Alexander Kanavin via lists.openembedded.org wrote:
> On Fri, 26 Sept 2025 at 10:03, Haixiao Yan <haixiao.yan.cn@windriver.com> wrote:
> 
>> Executing `make clean` deletes all existing .o and .d files from the OBJ
>> directories, ensuring that zlib is rebuilt from scratch and preventing
>> stale dependencies from causing build errors.
> 
> Thanks for the explanation. The next question I had was why the
> standard clean mechanism that is usually triggered in do_configure()
> isn't working, and indeed I am seeing this in the recipe:
> 
> do_configure() {
>          oe_runmake firmware="bios" clean
> }
> ...
> 
> do_configure:class-target() {
>          # No need to do anything as we're mostly shipping the
> precompiled binaries
>          :
> }
> 
> Should this second function be removed instead, so that the standard
> one takes over and does the cleaning?

I wonder, if it is cleaning the pre-compiled stuff too, it seems
the intent is to use pre-compiled binaries for target. So checking
if those are kept intact after clean might be prudent.

> 
> Alex
> 
> 
> 
> -=-=-=-=-=-=-=-=-=-=-=-
> Links: You receive all messages sent to this group.
> View/Reply Online (#224063): https://lists.openembedded.org/g/openembedded-core/message/224063
> Mute This Topic: https://lists.openembedded.org/mt/115444935/1997914
> Group Owner: openembedded-core+owner@lists.openembedded.org
> Unsubscribe: https://lists.openembedded.org/g/openembedded-core/unsub [raj.khem@gmail.com]
> -=-=-=-=-=-=-=-=-=-=-=-
>
Yan, Haixiao (CN) Sept. 29, 2025, 3:02 a.m. UTC | #5
On 9/26/2025 4:27 PM, Alexander Kanavin wrote:
> CAUTION: This email comes from a non Wind River email account!
> Do not click links or open attachments unless you recognize the sender and know the content is safe.
>
> On Fri, 26 Sept 2025 at 10:03, Haixiao Yan <haixiao.yan.cn@windriver.com> wrote:
>
>> Executing `make clean` deletes all existing .o and .d files from the OBJ
>> directories, ensuring that zlib is rebuilt from scratch and preventing
>> stale dependencies from causing build errors.
> Thanks for the explanation. The next question I had was why the
> standard clean mechanism that is usually triggered in do_configure()
> isn't working, and indeed I am seeing this in the recipe:
>
> do_configure() {
>          oe_runmake firmware="bios" clean
> }
> ...
>
> do_configure:class-target() {
>          # No need to do anything as we're mostly shipping the
> precompiled binaries
>          :
> }
>
> Should this second function be removed instead, so that the standard
> one takes over and does the cleaning?

Yes, It works by removing the second function, patch v2 sent.

Thanks,

Haixiao

>
> Alex
Yan, Haixiao (CN) Sept. 29, 2025, 3:08 a.m. UTC | #6
On 9/27/2025 1:05 AM, Khem Raj wrote:
> CAUTION: This email comes from a non Wind River email account!
> Do not click links or open attachments unless you recognize the sender 
> and know the content is safe.
>
> On 9/26/25 1:27 AM, Alexander Kanavin via lists.openembedded.org wrote:
>> On Fri, 26 Sept 2025 at 10:03, Haixiao Yan 
>> <haixiao.yan.cn@windriver.com> wrote:
>>
>>> Executing `make clean` deletes all existing .o and .d files from the 
>>> OBJ
>>> directories, ensuring that zlib is rebuilt from scratch and preventing
>>> stale dependencies from causing build errors.
>>
>> Thanks for the explanation. The next question I had was why the
>> standard clean mechanism that is usually triggered in do_configure()
>> isn't working, and indeed I am seeing this in the recipe:
>>
>> do_configure() {
>>          oe_runmake firmware="bios" clean
>> }
>> ...
>>
>> do_configure:class-target() {
>>          # No need to do anything as we're mostly shipping the
>> precompiled binaries
>>          :
>> }
>>
>> Should this second function be removed instead, so that the standard
>> one takes over and does the cleaning?
>
> I wonder, if it is cleaning the pre-compiled stuff too, it seems
> the intent is to use pre-compiled binaries for target. So checking
> if those are kept intact after clean might be prudent.
>
It will not clean the  pre-compiled binaries.

bitbake syslinux -cdo_configure

find ./bios \( -type f \( -name '*.c32' -o -name 'ldlinux.sys' -o -name 
'ldlinux.bss' \) \) -print | LC_ALL=C sort > prebuilt.after

  cat prebuilt.after
./bios/com32/chain/chain.c32
./bios/com32/cmenu/complex.c32
./bios/com32/cmenu/display.c32
./bios/com32/cmenu/libmenu/libmenu.c32
./bios/com32/cmenu/simple.c32
./bios/com32/cmenu/test.c32
./bios/com32/cmenu/test2.c32
./bios/com32/elflink/ldlinux/ldlinux.c32
./bios/com32/gfxboot/gfxboot.c32
./bios/com32/gpllib/libgpl.c32
./bios/com32/hdt/hdt.c32
./bios/com32/lib/libcom32.c32
./bios/com32/libutil/libutil.c32
./bios/com32/lua/src/cmenu.c32
./bios/com32/lua/src/cpu.c32
./bios/com32/lua/src/dhcp.c32
./bios/com32/lua/src/dmi.c32
./bios/com32/lua/src/lfs.c32
./bios/com32/lua/src/liblua.c32
./bios/com32/lua/src/lua.c32
./bios/com32/lua/src/pci.c32
./bios/com32/lua/src/syslinux.c32
./bios/com32/lua/src/vesa.c32
./bios/com32/mboot/mboot.c32
./bios/com32/menu/menu.c32
./bios/com32/menu/vesamenu.c32
./bios/com32/modules/cat.c32
./bios/com32/modules/cmd.c32
./bios/com32/modules/config.c32
./bios/com32/modules/cptime.c32
./bios/com32/modules/cpuid.c32
./bios/com32/modules/cpuidtest.c32
./bios/com32/modules/debug.c32
./bios/com32/modules/dir.c32
./bios/com32/modules/disk.c32
./bios/com32/modules/dmitest.c32
./bios/com32/modules/elf.c32
./bios/com32/modules/ethersel.c32
./bios/com32/modules/gpxecmd.c32
./bios/com32/modules/hexdump.c32
./bios/com32/modules/host.c32
./bios/com32/modules/ifcpu.c32
./bios/com32/modules/ifcpu64.c32
./bios/com32/modules/ifmemdsk.c32
./bios/com32/modules/ifplop.c32
./bios/com32/modules/kbdmap.c32
./bios/com32/modules/kontron_wdt.c32
./bios/com32/modules/linux.c32
./bios/com32/modules/ls.c32
./bios/com32/modules/meminfo.c32
./bios/com32/modules/pcitest.c32
./bios/com32/modules/pmload.c32
./bios/com32/modules/poweroff.c32
./bios/com32/modules/prdhcp.c32
./bios/com32/modules/pwd.c32
./bios/com32/modules/pxechn.c32
./bios/com32/modules/reboot.c32
./bios/com32/modules/sanboot.c32
./bios/com32/modules/sdi.c32
./bios/com32/modules/vesainfo.c32
./bios/com32/modules/vpdtest.c32
./bios/com32/modules/whichsys.c32
./bios/com32/modules/zzjson.c32
./bios/com32/rosh/rosh.c32
./bios/com32/samples/advdump.c32
./bios/com32/samples/entrydump.c32
./bios/com32/samples/fancyhello.c32
./bios/com32/samples/hello.c32
./bios/com32/samples/keytest.c32
./bios/com32/samples/localboot.c32
./bios/com32/samples/resolv.c32
./bios/com32/samples/serialinfo.c32
./bios/com32/sysdump/sysdump.c32
./bios/core/ldlinux.bss
./bios/core/ldlinux.sys

Thanks,

Haixiao


>>
>> Alex
>>
>>
>>
>> -=-=-=-=-=-=-=-=-=-=-=-
>> Links: You receive all messages sent to this group.
>> View/Reply Online (#224063): 
>> https://lists.openembedded.org/g/openembedded-core/message/224063
>> Mute This Topic: https://lists.openembedded.org/mt/115444935/1997914
>> Group Owner: openembedded-core+owner@lists.openembedded.org
>> Unsubscribe: https://lists.openembedded.org/g/openembedded-core/unsub 
>> [raj.khem@gmail.com]
>> -=-=-=-=-=-=-=-=-=-=-=-
>>
>
diff mbox series

Patch

diff --git a/meta/recipes-devtools/syslinux/syslinux_6.04-pre2.bb b/meta/recipes-devtools/syslinux/syslinux_6.04-pre2.bb
index 449a75ebf8ab..ea4bf6e6a88b 100644
--- a/meta/recipes-devtools/syslinux/syslinux_6.04-pre2.bb
+++ b/meta/recipes-devtools/syslinux/syslinux_6.04-pre2.bb
@@ -107,6 +107,7 @@  do_compile:class-target() {
 }
 
 do_install:class-target() {
+	oe_runmake firmware="bios" clean
 	oe_runmake firmware="bios" install INSTALLROOT="${D}"
 
 	install -d ${D}${datadir}/syslinux/