[PATCH] libtraceevent: avoid racing recursive builds of both libraries

CaoRuichuang <[email protected]> Mon, 6 Apr 2026 06:21:02 +0800
Newsgroups org.kernel.vger.linux-trace-devel
Message-ID <[email protected]>
A top-level parallel build currently starts separate recursive makes for
libtraceevent.a and libtraceevent.so. Both sub-makes rebuild the same
object files in the same output directory, which can corrupt the .o
files and make the final link fail with file format errors.

Make the default libs target descend into src/ only once and build the
shared library plus static archive from the same sub-make. Keep the
individual top-level library targets unchanged for direct use.

This reliably fixes repeated `make -j8` and `make -j8 libs` failures in a
Linux VM, where the unfixed tree reproduces the race within a few runs.

Link: https://bugzilla.kernel.org/show_bug.cgi?id=217428
Signed-off-by: CaoRuichuang <[email protected]>
---
 Makefile | 7 ++++---
 1 file changed, 4 insertions(+), 3 deletions(-)

diff --git a/Makefile b/Makefile
index e1a10a0..faaeb6c 100644
--- a/Makefile
+++ b/Makefile
@@ -183,9 +183,9 @@ build := -f $(srctree)/build/Makefile.build dir=. obj
 
 LIB_TARGET := libtraceevent.so libtraceevent.a
 
-CMD_TARGETS = $(LIB_TARGET) $(PKG_CONFIG_FILE)
+CMD_TARGETS = libs $(PKG_CONFIG_FILE)
 
-TARGETS = $(CMD_TARGETS)
+TARGETS = $(LIB_TARGET) $(PKG_CONFIG_FILE)
 
 all: all_cmd plugins
 
@@ -206,7 +206,8 @@ all_cmd: $(CMD_TARGETS)
 libtraceevent.a: $(bdir) $(LIBTRACEEVENT_STATIC)
 libtraceevent.so: $(bdir) $(LIBTRACEEVENT_SHARED)
 
-libs: libtraceevent.a libtraceevent.so
+libs: $(bdir) force
+	$(Q)$(call descend,$(src)/src,libtraceevent.so $(LIBTRACEEVENT_STATIC))
 
 $(LIBTRACEEVENT_STATIC): force
 	$(Q)$(call descend,$(src)/src,$@)
-- 
2.39.5 (Apple Git-154)