* [PATCH] libtraceevent: avoid racing recursive builds of both libraries
@ 2026-04-05 22:21 CaoRuichuang
2026-04-06 6:28 ` [PATCH v2] " CaoRuichuang
0 siblings, 1 reply; 2+ messages in thread
From: CaoRuichuang @ 2026-04-05 22:21 UTC (permalink / raw)
To: linux-trace-devel; +Cc: rostedt, tz.stoyanov, create0818
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 <create0818@163.com>
---
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)
^ permalink raw reply related [flat|nested] 2+ messages in thread
* [PATCH v2] libtraceevent: avoid racing recursive builds of both libraries
2026-04-05 22:21 [PATCH] libtraceevent: avoid racing recursive builds of both libraries CaoRuichuang
@ 2026-04-06 6:28 ` CaoRuichuang
0 siblings, 0 replies; 2+ messages in thread
From: CaoRuichuang @ 2026-04-06 6:28 UTC (permalink / raw)
To: linux-trace-devel; +Cc: rostedt, tz.stoyanov, create0818
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.
The src/ Makefile already builds libtraceevent.so as part of the
libtraceevent.a target. Reflect that at the top level too by making the
shared library target depend on the static library target, so parallel
requests for either or both libraries funnel through a single recursive
make.
This fixes repeated `make -j8`, `make -j8 libs`, and
`make -j8 libtraceevent.a libtraceevent.so` 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 <create0818@163.com>
---
Makefile | 3 +--
1 file changed, 1 insertion(+), 2 deletions(-)
diff --git a/Makefile b/Makefile
index e1a10a0..6649303 100644
--- a/Makefile
+++ b/Makefile
@@ -211,8 +211,7 @@ libs: libtraceevent.a libtraceevent.so
$(LIBTRACEEVENT_STATIC): force
$(Q)$(call descend,$(src)/src,$@)
-$(LIBTRACEEVENT_SHARED): force
- $(Q)$(call descend,$(src)/src,libtraceevent.so)
+$(LIBTRACEEVENT_SHARED): $(LIBTRACEEVENT_STATIC)
$(bdir)/libtraceevent.so: $(bdir)/libtraceevent.so.$(EP_VERSION)
@ln -sf $(<F) $@
--
2.39.5 (Apple Git-154)
^ permalink raw reply related [flat|nested] 2+ messages in thread
end of thread, other threads:[~2026-04-06 6:29 UTC | newest]
Thread overview: 2+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2026-04-05 22:21 [PATCH] libtraceevent: avoid racing recursive builds of both libraries CaoRuichuang
2026-04-06 6:28 ` [PATCH v2] " CaoRuichuang
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox