| Message ID | 20251008002729.1850430-1-raj.khem@gmail.com |
|---|---|
| State | New |
| Headers | show |
| Series | perf: Fix headers related build race condition | expand |
On Tue, 2025-10-07 at 17:27 -0700, Khem Raj via lists.openembedded.org wrote: > libperf specifies paths to includes in its output > directory if they exist, however install_headers target > is run in parallel to source files being built for libperf > and can race with objects being built for libperf. > > This patch ensures that all headers are built/installed before > they are used. > > Specifying additional include paths via EXTRA_CFLAGS is of > no consequence anymore after [1] because it now is appended to > CFLAGS, so if we are trying to do include path oderining via > EXTRA_CFLAGS it will have no effect if those paths already are > in compiler commandline > > [1] https://github.com/torvalds/linux/commit/f5b07010c13c77541e8ade167d05bef3b8a63739 > > Signed-off-by: Khem Raj <raj.khem@gmail.com> > > s > --- > meta/recipes-kernel/perf/perf.bb | 6 +++--- > 1 file changed, 3 insertions(+), 3 deletions(-) > > diff --git a/meta/recipes-kernel/perf/perf.bb b/meta/recipes-kernel/perf/perf.bb > index 3b9e52fdb84..f071685a4be 100644 > --- a/meta/recipes-kernel/perf/perf.bb > +++ b/meta/recipes-kernel/perf/perf.bb > @@ -105,7 +105,7 @@ EXTRA_OEMAKE = '\ > LDSHARED="${CC} -shared" \ > AR="${AR}" \ > LD="${LD}" \ > - EXTRA_CFLAGS="-ldw -I${S} -I${S}/libperf/include -I${S}/tools/lib/perf/include" \ > + EXTRA_CFLAGS="-ldw -I${S}" \ > YFLAGS='-y --file-prefix-map=${WORKDIR}=${TARGET_DBGSRC_DIR}' \ > EXTRA_LDFLAGS="${PERF_EXTRA_LDFLAGS}" \ > perfexecdir=${libexecdir} \ > @@ -173,8 +173,8 @@ do_compile() { > sed -i -e 's|\$(libdir)/traceevent/plugins|\$(libdir)/traceevent_${KERNEL_VERSION}/plugins|g' ${S}/tools/perf/Makefile.config > # There are two copies of internal headers such as: > # libperf/include/internal/xyarray.h and tools/lib/perf/include/internal/xyarray.h > - # For reproducibile binaries, we need to find one copy, hence force libperf to be created first > - oe_runmake ${B}/libperf/libperf.a V=1 > + # For reproducibile binaries, we need to find one copy, so built the headers target first > + oe_runmake -C ${S}/tools/lib/perf DESTDIR=${B}/libperf prefix= install_headers V=1 > oe_runmake all V=1 > } This basically does the same thing as the other make command. Looking at the failure logs, I think the issue is in other libraries so I've taken this idea but applied it to the other libraries too. I'm hoping that fixes this. Cheers, Richard
diff --git a/meta/recipes-kernel/perf/perf.bb b/meta/recipes-kernel/perf/perf.bb index 3b9e52fdb84..f071685a4be 100644 --- a/meta/recipes-kernel/perf/perf.bb +++ b/meta/recipes-kernel/perf/perf.bb @@ -105,7 +105,7 @@ EXTRA_OEMAKE = '\ LDSHARED="${CC} -shared" \ AR="${AR}" \ LD="${LD}" \ - EXTRA_CFLAGS="-ldw -I${S} -I${S}/libperf/include -I${S}/tools/lib/perf/include" \ + EXTRA_CFLAGS="-ldw -I${S}" \ YFLAGS='-y --file-prefix-map=${WORKDIR}=${TARGET_DBGSRC_DIR}' \ EXTRA_LDFLAGS="${PERF_EXTRA_LDFLAGS}" \ perfexecdir=${libexecdir} \ @@ -173,8 +173,8 @@ do_compile() { sed -i -e 's|\$(libdir)/traceevent/plugins|\$(libdir)/traceevent_${KERNEL_VERSION}/plugins|g' ${S}/tools/perf/Makefile.config # There are two copies of internal headers such as: # libperf/include/internal/xyarray.h and tools/lib/perf/include/internal/xyarray.h - # For reproducibile binaries, we need to find one copy, hence force libperf to be created first - oe_runmake ${B}/libperf/libperf.a V=1 + # For reproducibile binaries, we need to find one copy, so built the headers target first + oe_runmake -C ${S}/tools/lib/perf DESTDIR=${B}/libperf prefix= install_headers V=1 oe_runmake all V=1 }
libperf specifies paths to includes in its output directory if they exist, however install_headers target is run in parallel to source files being built for libperf and can race with objects being built for libperf. This patch ensures that all headers are built/installed before they are used. Specifying additional include paths via EXTRA_CFLAGS is of no consequence anymore after [1] because it now is appended to CFLAGS, so if we are trying to do include path oderining via EXTRA_CFLAGS it will have no effect if those paths already are in compiler commandline [1] https://github.com/torvalds/linux/commit/f5b07010c13c77541e8ade167d05bef3b8a63739 Signed-off-by: Khem Raj <raj.khem@gmail.com> s --- meta/recipes-kernel/perf/perf.bb | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-)