diff mbox series

perf: Fix headers related build race condition

Message ID 20251008002729.1850430-1-raj.khem@gmail.com
State New
Headers show
Series perf: Fix headers related build race condition | expand

Commit Message

Khem Raj Oct. 8, 2025, 12:27 a.m. UTC
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(-)

Comments

Richard Purdie Oct. 13, 2025, 11:36 a.m. UTC | #1
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 mbox series

Patch

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
 }