tools: fix stale archive members surviving a Kconfig-driven CSRCS change

During the Toybox port to NuttX, Claude noticed that changes in the
menuconfig weren't taking affect. This issue exists for a long time on
NuttX, in fact BayLibre's presentation from 2017 make jokes about our
building system not been reliable:
https://www.youtube.com/watch?v=XUJK2htXxKw&t=320s

Stale archive members from $(AR)'s additive-only behavior can linger
after Kconfig toggles change which files provide a symbol, causing dead
weight or "multiple definition" link errors on incremental builds.
Fixed by splitting ARCHIVE into two macros: ARCHIVE keeps the original
additive behavior for apps/libapps.a, which many independent
subdirectories contribute to across a build, while the new
ARCHIVE_REBUILD deletes then archives for the far more common case
of a single Makefile building its own self-contained $(OBJS)
- all 39 such call sites now use it.

Assisted-By: Claude Sonnet 5
Signed-off-by: Alan C. Assis <acassis@gmail.com>
This commit is contained in:
Alan Carvalho de Assis 2026-07-28 05:52:38 -03:00 committed by Alan C. Assis
parent 69249fc9e6
commit c027e7c3e4
40 changed files with 106 additions and 56 deletions

View file

@ -183,14 +183,14 @@ $(STARTUP_OBJS): %$(OBJEXT): %.c
ifeq ($(CONFIG_BUILD_FLAT),y)
$(BIN): $(STARTUP_OBJS) $(OBJS)
$(call ARCHIVE, $@, $(OBJS))
$(call ARCHIVE_REBUILD, $@, $(OBJS))
else
$(BIN): $(STARTUP_OBJS) $(UOBJS)
$(call ARCHIVE, $@, $(UOBJS))
$(call ARCHIVE_REBUILD, $@, $(UOBJS))
endif
$(KBIN): $(OBJS)
$(call ARCHIVE, $@, $(OBJS))
$(call ARCHIVE_REBUILD, $@, $(OBJS))
board$(DELIM)libboard$(LIBEXT): FORCE
$(Q) $(MAKE) -C board libboard$(LIBEXT) EXTRAFLAGS="$(EXTRAFLAGS)"

View file

@ -147,14 +147,14 @@ $(STARTUP_OBJS): %$(OBJEXT): %.c
ifeq ($(CONFIG_BUILD_FLAT),y)
$(BIN): $(OBJS) $(STARTUP_OBJS)
$(call ARCHIVE, $@, $(OBJS))
$(call ARCHIVE_REBUILD, $@, $(OBJS))
else
$(BIN): $(UOBJS) $(STARTUP_OBJS)
$(call ARCHIVE, $@, $(UOBJS))
$(call ARCHIVE_REBUILD, $@, $(UOBJS))
endif
$(KBIN): $(OBJS)
$(call ARCHIVE, $@, $(OBJS))
$(call ARCHIVE_REBUILD, $@, $(OBJS))
board$(DELIM)libboard$(LIBEXT): FORCE
$(Q) $(MAKE) -C board libboard$(LIBEXT) EXTRAFLAGS="$(EXTRAFLAGS)"

View file

@ -86,7 +86,7 @@ $(COBJS): %$(OBJEXT): %.c
$(call COMPILE, $<, $@)
libarch$(LIBEXT): $(OBJS)
$(call ARCHIVE, $@, $(OBJS))
$(call ARCHIVE_REBUILD, $@, $(OBJS))
board/libboard$(LIBEXT):
$(Q) $(MAKE) -C board libboard$(LIBEXT) EXTRAFLAGS="$(EXTRAFLAGS)"

View file

@ -125,10 +125,10 @@ $(sort $(COBJS) $(UCOBJS)): %$(OBJEXT): %.c
$(call COMPILE, $<, $@)
$(BIN) $(KBIN): $(OBJS)
$(call ARCHIVE, $@, $(OBJS))
$(call ARCHIVE_REBUILD, $@, $(OBJS))
$(UBIN): $(UOBJS)
$(call ARCHIVE, $@, $(UOBJS))
$(call ARCHIVE_REBUILD, $@, $(UOBJS))
board$(DELIM)libboard$(LIBEXT):
ifeq ($(CONFIG_ARCH_XC5),y)

View file

@ -98,7 +98,7 @@ $(COBJS): %$(OBJEXT): %.c
$(call COMPILE, $<, $@)
libarch$(LIBEXT): $(OBJS)
$(call ARCHIVE, $@, $(OBJS))
$(call ARCHIVE_REBUILD, $@, $(OBJS))
board/libboard$(LIBEXT):
$(Q) $(MAKE) -C board libboard$(LIBEXT) EXTRAFLAGS="$(EXTRAFLAGS)"

View file

@ -84,7 +84,7 @@ $(COBJS): %$(OBJEXT): %.c
$(call COMPILE, $<, $@)
libarch$(LIBEXT): $(OBJS)
$(call ARCHIVE, $@, $(OBJS))
$(call ARCHIVE_REBUILD, $@, $(OBJS))
board/libboard$(LIBEXT):
$(Q) $(MAKE) -C board libboard$(LIBEXT) EXTRAFLAGS="$(EXTRAFLAGS)"

View file

@ -88,7 +88,7 @@ $(COBJS): %$(OBJEXT): %.c
$(call COMPILE, $<, $@)
libarch$(LIBEXT): $(OBJS)
$(call ARCHIVE, $@, $(OBJS))
$(call ARCHIVE_REBUILD, $@, $(OBJS))
board/libboard$(LIBEXT):
$(Q) $(MAKE) -C board libboard$(LIBEXT) EXTRAFLAGS="$(EXTRAFLAGS)"

View file

@ -115,14 +115,14 @@ $(COBJS) $(UCOBJS): %$(OBJEXT): %.c
ifeq ($(CONFIG_BUILD_FLAT),y)
$(BIN): $(OBJS)
$(call ARCHIVE, $@, $(OBJS))
$(call ARCHIVE_REBUILD, $@, $(OBJS))
else
$(BIN): $(UOBJS)
$(call ARCHIVE, $@, $(UOBJS))
$(call ARCHIVE_REBUILD, $@, $(UOBJS))
endif
$(KBIN): $(OBJS)
$(call ARCHIVE, $@, $(OBJS))
$(call ARCHIVE_REBUILD, $@, $(OBJS))
board$(DELIM)libboard$(LIBEXT):
$(Q) $(MAKE) -C board libboard$(LIBEXT) EXTRAFLAGS="$(EXTRAFLAGS)"

View file

@ -92,7 +92,7 @@ $(COBJS): %$(OBJEXT): %.c
$(call COMPILE, $<, $@)
libarch$(LIBEXT): $(OBJS)
$(call ARCHIVE, $@, $(OBJS))
$(call ARCHIVE_REBUILD, $@, $(OBJS))
board/libboard$(LIBEXT):
$(Q) $(MAKE) -C board libboard$(LIBEXT) EXTRAFLAGS="$(EXTRAFLAGS)"

View file

@ -148,14 +148,14 @@ $(STARTUP_OBJS): %$(OBJEXT): %.c
ifeq ($(CONFIG_BUILD_FLAT),y)
$(BIN): $(STARTUP_OBJS) $(OBJS)
$(call ARCHIVE, $@, $(OBJS))
$(call ARCHIVE_REBUILD, $@, $(OBJS))
else
$(BIN): $(STARTUP_OBJS) $(UOBJS)
$(call ARCHIVE, $@, $(UOBJS))
$(call ARCHIVE_REBUILD, $@, $(UOBJS))
endif
$(KBIN): $(OBJS)
$(call ARCHIVE, $@, $(OBJS))
$(call ARCHIVE_REBUILD, $@, $(OBJS))
board/libboard$(LIBEXT): FORCE
$(Q) $(MAKE) -C board libboard$(LIBEXT) EXTRAFLAGS="$(EXTRAFLAGS)"

View file

@ -417,7 +417,7 @@ $(HOSTMOBJS): %$(OBJEXT): %.m
# The architecture-specific library
libarch$(LIBEXT): $(NUTTXOBJS)
$(call ARCHIVE, $@, $(NUTTXOBJS))
$(call ARCHIVE_REBUILD, $@, $(NUTTXOBJS))
# The "board"-specific library. Of course, there really are no boards in
# the simulation. However, this is a good place to keep parts of the simulation

View file

@ -101,7 +101,7 @@ $(COBJS): %$(OBJEXT): %.c
$(call COMPILE, $<, $@)
libarch$(LIBEXT): $(OBJS)
$(call ARCHIVE, $@, $(OBJS))
$(call ARCHIVE_REBUILD, $@, $(OBJS))
board/libboard$(LIBEXT):
$(Q) $(MAKE) -C board TOPDIR="$(TOPDIR)" libboard$(LIBEXT) EXTRADEFINES=$(EXTRADEFINES)

View file

@ -147,14 +147,14 @@ $(COBJS) $(UCOBJS) $(HEAD_COBJ): %$(OBJEXT): %.c
ifeq ($(CONFIG_BUILD_FLAT),y)
$(BIN): $(OBJS)
$(call ARCHIVE, $@, $(OBJS))
$(call ARCHIVE_REBUILD, $@, $(OBJS))
else
$(BIN): $(UOBJS)
$(call ARCHIVE, $@, $(UOBJS))
$(call ARCHIVE_REBUILD, $@, $(UOBJS))
endif
$(KBIN): $(OBJS)
$(call ARCHIVE, $@, $(OBJS))
$(call ARCHIVE_REBUILD, $@, $(OBJS))
board$(DELIM)libboard$(LIBEXT):
$(Q) $(MAKE) -C board libboard$(LIBEXT) EXTRAFLAGS="$(EXTRAFLAGS)"

View file

@ -110,7 +110,7 @@ $(COBJS): %$(OBJEXT): %.c
$(call COMPILE, $<, $@)
libarch$(LIBEXT): $(OBJS)
$(call ARCHIVE, $@, $(OBJS))
$(call ARCHIVE_REBUILD, $@, $(OBJS))
board/libboard$(LIBEXT):
$(Q) $(MAKE) -C board libboard$(LIBEXT) EXTRAFLAGS="$(EXTRAFLAGS)"

View file

@ -120,14 +120,14 @@ $(STARTUP_OBJS): %$(OBJEXT): %.c
ifeq ($(CONFIG_BUILD_FLAT),y)
$(BIN): $(OBJS) $(STARTUP_OBJS)
$(call ARCHIVE, $@, $(OBJS))
$(call ARCHIVE_REBUILD, $@, $(OBJS))
else
$(BIN): $(UOBJS) $(STARTUP_OBJS)
$(call ARCHIVE, $@, $(UOBJS))
$(call ARCHIVE_REBUILD, $@, $(UOBJS))
endif
$(KBIN): $(OBJS)
$(call ARCHIVE, $@, $(OBJS))
$(call ARCHIVE_REBUILD, $@, $(OBJS))
board/libboard$(LIBEXT): FORCE
$(Q) $(MAKE) -C board libboard$(LIBEXT) EXTRAFLAGS="$(EXTRAFLAGS)"

View file

@ -150,14 +150,14 @@ $(STARTUP_ELF_OBJS): %$(OBJEXT): %.c
ifeq ($(CONFIG_BUILD_FLAT),y)
$(BIN): $(STARTUP_ELF_OBJS) $(OBJS)
$(call ARCHIVE, $@, $(OBJS))
$(call ARCHIVE_REBUILD, $@, $(OBJS))
else
$(BIN): $(STARTUP_ELF_OBJS) $(UOBJS)
$(call ARCHIVE, $@, $(UOBJS))
$(call ARCHIVE_REBUILD, $@, $(UOBJS))
endif
$(KBIN): $(OBJS)
$(call ARCHIVE, $@, $(OBJS))
$(call ARCHIVE_REBUILD, $@, $(OBJS))
board/libboard$(LIBEXT): FORCE
$(Q) $(MAKE) -C board libboard$(LIBEXT) EXTRAFLAGS="$(EXTRAFLAGS)"

View file

@ -78,7 +78,7 @@ $(COBJS): %$(OBJEXT): %.c
$(call COMPILE, $<, $@)
libarch$(LIBEXT): $(OBJS)
$(call ARCHIVE, $@, $(OBJS))
$(call ARCHIVE_REBUILD, $@, $(OBJS))
board/libboard$(LIBEXT):
$(Q) $(MAKE) -C board libboard$(LIBEXT) EXTRAFLAGS="$(EXTRAFLAGS)"