tools/build/feature/Makefile | 6 +- tools/perf/Documentation/Build.txt | 15 ++++ tools/perf/Documentation/android.txt | 80 ++-------------------- tools/perf/Makefile.config | 32 ++++++++- tools/perf/Makefile.perf | 2 +- .../shell/coresight/memcpy_thread/memcpy_thread.c | 2 + .../shell/coresight/thread_loop/thread_loop.c | 4 +- .../unroll_loop_thread/unroll_loop_thread.c | 4 +- tools/perf/util/setup.py | 5 +- 9 files changed, 67 insertions(+), 83 deletions(-)
This series adds support for building perf with Clang, following the discussion in [1]. Because the Android NDK uses Clang by default, enabling Clang builds naturally covers Android as well. The series is organized as follows: - Patches 1–2: Fix two bugs found with Clang. - Patches 3–6: Correct CROSS_ARCH and dismiss Clang build warnings. - Patches 7–8: Enable Clang in the Makefile and update the documentation. Testing: - Clang 15.0.7 on Ubuntu 22.04.5: native and cross-compiling (aarch64) - Clang 18.1.3 on Ubuntu 24.04.2: native and cross-compiling (aarch64) - Android NDK r27d (latest LTS): cross-compiling (aarch64) [1] https://lore.kernel.org/linux-perf-users/20240715143342.52236-1-leo.yan@arm.com/ --- Changes in v2: - Dropped the patch for dismissing warning in bpftool. - Refined the document. (Ian) - Link to v1: https://lore.kernel.org/r/20250925-perf_build_android_ndk-v1-0-8b35aadde3dc@arm.com --- Leo Yan (8): tools build: Align warning options with perf perf python: split Clang options when invoking Popen perf: build: Correct CROSS_ARCH for clang perf test coresight: Dismiss clang warning for memcpy thread perf test coresight: Dismiss clang warning for thread loop perf test coresight: Dismiss clang warning for unroll loop thread perf build: Support build with clang perf docs: Document building with Clang tools/build/feature/Makefile | 6 +- tools/perf/Documentation/Build.txt | 15 ++++ tools/perf/Documentation/android.txt | 80 ++-------------------- tools/perf/Makefile.config | 32 ++++++++- tools/perf/Makefile.perf | 2 +- .../shell/coresight/memcpy_thread/memcpy_thread.c | 2 + .../shell/coresight/thread_loop/thread_loop.c | 4 +- .../unroll_loop_thread/unroll_loop_thread.c | 4 +- tools/perf/util/setup.py | 5 +- 9 files changed, 67 insertions(+), 83 deletions(-) --- base-commit: c17dda8013495d8132c976cbf349be9949d0fbd1 change-id: 20250915-perf_build_android_ndk-500b53bea895 Best regards, -- Leo Yan <leo.yan@arm.com>
On Tue, Sep 30, 2025 at 05:54:48PM +0100, Leo Yan wrote: > This series adds support for building perf with Clang, following the > discussion in [1]. Because the Android NDK uses Clang by default, > enabling Clang builds naturally covers Android as well. > > The series is organized as follows: > > - Patches 1–2: Fix two bugs found with Clang. > - Patches 3–6: Correct CROSS_ARCH and dismiss Clang build warnings. > - Patches 7–8: Enable Clang in the Makefile and update the > documentation. > > Testing: > > - Clang 15.0.7 on Ubuntu 22.04.5: native and cross-compiling (aarch64) > - Clang 18.1.3 on Ubuntu 24.04.2: native and cross-compiling (aarch64) > - Android NDK r27d (latest LTS): cross-compiling (aarch64) LD /tmp/build/perf/util/perf-util-in.o LD /tmp/build/perf/perf-util-in.o AR /tmp/build/perf/libperf-util.a CC /tmp/build/perf/pmu-events/pmu-events.o LD /tmp/build/perf/pmu-events/pmu-events-in.o AR /tmp/build/perf/libpmu-events.a LINK /tmp/build/perf/perf make: Leaving directory '/git/perf-6.17.0-rc6/tools/perf' + rm -rf /tmp/build/perf + mkdir /tmp/build/perf + make 'ARCH=' 'CROSS_COMPILE=' 'EXTRA_CFLAGS=' -C tools/perf 'O=/tmp/build/perf' 'CC=clang' make: Entering directory '/git/perf-6.17.0-rc6/tools/perf' BUILD: Doing 'make -j28' parallel build Makefile.config:494: *** No gnu/libc-version.h found, please install glibc-dev[el]. Stop. make[1]: *** [Makefile.perf:289: sub-make] Error 2 make: *** [Makefile:76: all] Error 2 make: Leaving directory '/git/perf-6.17.0-rc6/tools/perf' + exit 1 toolsbuilder@five:~$ cat dm.log/alpine\:3.22
On Wed, Oct 01, 2025 at 11:21:20AM -0300, Arnaldo Carvalho de Melo wrote: > On Tue, Sep 30, 2025 at 05:54:48PM +0100, Leo Yan wrote: > > This series adds support for building perf with Clang, following the > > discussion in [1]. Because the Android NDK uses Clang by default, > > enabling Clang builds naturally covers Android as well. > > > > The series is organized as follows: > > > > - Patches 1–2: Fix two bugs found with Clang. > > - Patches 3–6: Correct CROSS_ARCH and dismiss Clang build warnings. > > - Patches 7–8: Enable Clang in the Makefile and update the > > documentation. > > > > Testing: > > > > - Clang 15.0.7 on Ubuntu 22.04.5: native and cross-compiling (aarch64) > > - Clang 18.1.3 on Ubuntu 24.04.2: native and cross-compiling (aarch64) > > - Android NDK r27d (latest LTS): cross-compiling (aarch64) > > LD /tmp/build/perf/util/perf-util-in.o > LD /tmp/build/perf/perf-util-in.o > AR /tmp/build/perf/libperf-util.a > CC /tmp/build/perf/pmu-events/pmu-events.o > LD /tmp/build/perf/pmu-events/pmu-events-in.o > AR /tmp/build/perf/libpmu-events.a > LINK /tmp/build/perf/perf > make: Leaving directory '/git/perf-6.17.0-rc6/tools/perf' > + rm -rf /tmp/build/perf > + mkdir /tmp/build/perf > + make 'ARCH=' 'CROSS_COMPILE=' 'EXTRA_CFLAGS=' -C tools/perf 'O=/tmp/build/perf' 'CC=clang' > make: Entering directory '/git/perf-6.17.0-rc6/tools/perf' > BUILD: Doing 'make -j28' parallel build > Makefile.config:494: *** No gnu/libc-version.h found, please install glibc-dev[el]. Stop. > make[1]: *** [Makefile.perf:289: sub-make] Error 2 > make: *** [Makefile:76: all] Error 2 > make: Leaving directory '/git/perf-6.17.0-rc6/tools/perf' > + exit 1 > toolsbuilder@five:~$ cat dm.log/alpine\:3.22 A quick look: the build cannot find both libelf (feature-libelf=0) and glibc (feature-glibc=0), thus lead to build failure. It is good to know what the reason for the feature building failures: tools/perf/feature/test-libelf.make.output tools/perf/feature/test-glibc.make.output I am not surprised for the failure of libelf (this is common case that the package is not installed by default in a distro), but it is a bit confused for the glibc feature failure. It seems the issue occurs on Alpine 3.22, but the highest version supported in container-build is 3.21 [1]. Could you confirm whether the issue reproduces on other distros or versions? Thanks, Leo [1] https://github.com/acmel/linux-tools-container-builds/tree/main/alpine
On Wed, Oct 01, 2025 at 04:22:17PM +0100, Leo Yan wrote: > On Wed, Oct 01, 2025 at 11:21:20AM -0300, Arnaldo Carvalho de Melo wrote: > > On Tue, Sep 30, 2025 at 05:54:48PM +0100, Leo Yan wrote: > > > This series adds support for building perf with Clang, following the > > > discussion in [1]. Because the Android NDK uses Clang by default, > > > enabling Clang builds naturally covers Android as well. > > > > > > The series is organized as follows: > > > > > > - Patches 1–2: Fix two bugs found with Clang. > > > - Patches 3–6: Correct CROSS_ARCH and dismiss Clang build warnings. > > > - Patches 7–8: Enable Clang in the Makefile and update the > > > documentation. > > > > > > Testing: > > > > > > - Clang 15.0.7 on Ubuntu 22.04.5: native and cross-compiling (aarch64) > > > - Clang 18.1.3 on Ubuntu 24.04.2: native and cross-compiling (aarch64) > > > - Android NDK r27d (latest LTS): cross-compiling (aarch64) > > > > LD /tmp/build/perf/util/perf-util-in.o > > LD /tmp/build/perf/perf-util-in.o > > AR /tmp/build/perf/libperf-util.a > > CC /tmp/build/perf/pmu-events/pmu-events.o > > LD /tmp/build/perf/pmu-events/pmu-events-in.o > > AR /tmp/build/perf/libpmu-events.a > > LINK /tmp/build/perf/perf > > make: Leaving directory '/git/perf-6.17.0-rc6/tools/perf' > > + rm -rf /tmp/build/perf > > + mkdir /tmp/build/perf > > + make 'ARCH=' 'CROSS_COMPILE=' 'EXTRA_CFLAGS=' -C tools/perf 'O=/tmp/build/perf' 'CC=clang' > > make: Entering directory '/git/perf-6.17.0-rc6/tools/perf' > > BUILD: Doing 'make -j28' parallel build > > Makefile.config:494: *** No gnu/libc-version.h found, please install glibc-dev[el]. Stop. > > make[1]: *** [Makefile.perf:289: sub-make] Error 2 > > make: *** [Makefile:76: all] Error 2 > > make: Leaving directory '/git/perf-6.17.0-rc6/tools/perf' > > + exit 1 > > toolsbuilder@five:~$ cat dm.log/alpine\:3.22 > A quick look: the build cannot find both libelf (feature-libelf=0) and > glibc (feature-glibc=0), thus lead to build failure. It is good to > know what the reason for the feature building failures: > tools/perf/feature/test-libelf.make.output > tools/perf/feature/test-glibc.make.output > I am not surprised for the failure of libelf (this is common case > that the package is not installed by default in a distro), but it is a > bit confused for the glibc feature failure. > It seems the issue occurs on Alpine 3.22, but the highest version > supported in container-build is 3.21 [1]. Could you confirm whether > the issue reproduces on other distros or versions? It was in all alpine versions I have containers to test on: toolsbuilder@five:~$ grep FAIL dm.log.old/summary 3 71.85 almalinux:9-i386 : FAIL clang version 17.0.6 (AlmaLinux OS Foundation 17.0.6-5.el9) 5 78.60 alpine:3.16 : FAIL gcc version 11.2.1 20220219 (Alpine 11.2.1_git20220219) 6 59.77 alpine:3.17 : FAIL gcc version 12.2.1 20220924 (Alpine 12.2.1_git20220924-r4) 7 56.89 alpine:3.18 : FAIL gcc version 12.2.1 20220924 (Alpine 12.2.1_git20220924-r10) 8 60.86 alpine:3.19 : FAIL gcc version 13.2.1 20231014 (Alpine 13.2.1_git20231014) 9 60.18 alpine:3.20 : FAIL gcc version 13.2.1 20240309 (Alpine 13.2.1_git20240309) 10 64.58 alpine:3.22 : FAIL gcc version 14.2.0 (Alpine 14.2.0) 11 63.36 alpine:edge : FAIL gcc version 14.2.0 (Alpine 14.2.0) toolsbuilder@five:~$ GEN /tmp/build/perf/python/perf.cpython-312-x86_64-linux-musl.so make: Leaving directory '/git/perf-6.17.0-rc6/tools/perf' + rm -rf /tmp/build/perf + mkdir /tmp/build/perf + make 'ARCH=' 'CROSS_COMPILE=' 'EXTRA_CFLAGS=' -C tools/perf 'O=/tmp/build/perf' 'CC=clang' make: Entering directory '/git/perf-6.17.0-rc6/tools/perf' BUILD: Doing 'make -j28' parallel build Makefile.config:494: *** No gnu/libc-version.h found, please install glibc-dev[el]. Stop. make[1]: *** [Makefile.perf:289: sub-make] Error 2 make: *** [Makefile:76: all] Error 2 make: Leaving directory '/git/perf-6.17.0-rc6/tools/perf' + exit 1 toolsbuilder@five:~ $ lemme try to reapply those patches and get the tools/perf/feature/test-libelf.make.output and tools/perf/feature/test-glibc.make.output files. - Arnaldo
On Wed, Oct 01, 2025 at 03:25:56PM -0300, Arnaldo Carvalho de Melo wrote: [...] > It was in all alpine versions I have containers to test on: > > toolsbuilder@five:~$ grep FAIL dm.log.old/summary > 3 71.85 almalinux:9-i386 : FAIL clang version 17.0.6 (AlmaLinux OS Foundation 17.0.6-5.el9) > 5 78.60 alpine:3.16 : FAIL gcc version 11.2.1 20220219 (Alpine 11.2.1_git20220219) > 6 59.77 alpine:3.17 : FAIL gcc version 12.2.1 20220924 (Alpine 12.2.1_git20220924-r4) > 7 56.89 alpine:3.18 : FAIL gcc version 12.2.1 20220924 (Alpine 12.2.1_git20220924-r10) > 8 60.86 alpine:3.19 : FAIL gcc version 13.2.1 20231014 (Alpine 13.2.1_git20231014) > 9 60.18 alpine:3.20 : FAIL gcc version 13.2.1 20240309 (Alpine 13.2.1_git20240309) > 10 64.58 alpine:3.22 : FAIL gcc version 14.2.0 (Alpine 14.2.0) > 11 63.36 alpine:edge : FAIL gcc version 14.2.0 (Alpine 14.2.0) > toolsbuilder@five:~$ > > GEN /tmp/build/perf/python/perf.cpython-312-x86_64-linux-musl.so > make: Leaving directory '/git/perf-6.17.0-rc6/tools/perf' > + rm -rf /tmp/build/perf > + mkdir /tmp/build/perf > + make 'ARCH=' 'CROSS_COMPILE=' 'EXTRA_CFLAGS=' -C tools/perf 'O=/tmp/build/perf' 'CC=clang' > make: Entering directory '/git/perf-6.17.0-rc6/tools/perf' > BUILD: Doing 'make -j28' parallel build > Makefile.config:494: *** No gnu/libc-version.h found, please install glibc-dev[el]. Stop. > make[1]: *** [Makefile.perf:289: sub-make] Error 2 > make: *** [Makefile:76: all] Error 2 > make: Leaving directory '/git/perf-6.17.0-rc6/tools/perf' > + exit 1 > toolsbuilder@five:~ > $ > > lemme try to reapply those patches and get the > tools/perf/feature/test-libelf.make.output and > tools/perf/feature/test-glibc.make.output files. That is fine. I have reproduced at my side, will look into. Thanks, Leo
On Wed, Oct 01, 2025 at 07:32:56PM +0100, Leo Yan wrote: [...] > > + make 'ARCH=' 'CROSS_COMPILE=' 'EXTRA_CFLAGS=' -C tools/perf 'O=/tmp/build/perf' 'CC=clang' > > make: Entering directory '/git/perf-6.17.0-rc6/tools/perf' > > BUILD: Doing 'make -j28' parallel build > > Makefile.config:494: *** No gnu/libc-version.h found, please install glibc-dev[el]. Stop. It does not set correctly --target as x86_64-alpine-linux-musl if distros are using musl libc. Now running the container build for updated code. Once pass test, I will send new series. Thanks, Leo
On Tue, Sep 30, 2025 at 9:55 AM Leo Yan <leo.yan@arm.com> wrote: > > This series adds support for building perf with Clang, following the > discussion in [1]. Because the Android NDK uses Clang by default, > enabling Clang builds naturally covers Android as well. > > The series is organized as follows: > > - Patches 1–2: Fix two bugs found with Clang. > - Patches 3–6: Correct CROSS_ARCH and dismiss Clang build warnings. > - Patches 7–8: Enable Clang in the Makefile and update the > documentation. > > Testing: > > - Clang 15.0.7 on Ubuntu 22.04.5: native and cross-compiling (aarch64) > - Clang 18.1.3 on Ubuntu 24.04.2: native and cross-compiling (aarch64) > - Android NDK r27d (latest LTS): cross-compiling (aarch64) > > [1] https://lore.kernel.org/linux-perf-users/20240715143342.52236-1-leo.yan@arm.com/ > > --- > Changes in v2: > - Dropped the patch for dismissing warning in bpftool. > - Refined the document. (Ian) > - Link to v1: https://lore.kernel.org/r/20250925-perf_build_android_ndk-v1-0-8b35aadde3dc@arm.com Reviewed-by: Ian Rogers <irogers@google.com> Thanks, Ian > --- > Leo Yan (8): > tools build: Align warning options with perf > perf python: split Clang options when invoking Popen > perf: build: Correct CROSS_ARCH for clang > perf test coresight: Dismiss clang warning for memcpy thread > perf test coresight: Dismiss clang warning for thread loop > perf test coresight: Dismiss clang warning for unroll loop thread > perf build: Support build with clang > perf docs: Document building with Clang > > tools/build/feature/Makefile | 6 +- > tools/perf/Documentation/Build.txt | 15 ++++ > tools/perf/Documentation/android.txt | 80 ++-------------------- > tools/perf/Makefile.config | 32 ++++++++- > tools/perf/Makefile.perf | 2 +- > .../shell/coresight/memcpy_thread/memcpy_thread.c | 2 + > .../shell/coresight/thread_loop/thread_loop.c | 4 +- > .../unroll_loop_thread/unroll_loop_thread.c | 4 +- > tools/perf/util/setup.py | 5 +- > 9 files changed, 67 insertions(+), 83 deletions(-) > --- > base-commit: c17dda8013495d8132c976cbf349be9949d0fbd1 > change-id: 20250915-perf_build_android_ndk-500b53bea895 > > Best regards, > -- > Leo Yan <leo.yan@arm.com> >
On Tue, Sep 30, 2025 at 11:14:30AM -0700, Ian Rogers wrote: > On Tue, Sep 30, 2025 at 9:55 AM Leo Yan <leo.yan@arm.com> wrote: > > > > This series adds support for building perf with Clang, following the > > discussion in [1]. Because the Android NDK uses Clang by default, > > enabling Clang builds naturally covers Android as well. > > > > The series is organized as follows: > > > > - Patches 1–2: Fix two bugs found with Clang. > > - Patches 3–6: Correct CROSS_ARCH and dismiss Clang build warnings. > > - Patches 7–8: Enable Clang in the Makefile and update the > > documentation. > > > > Testing: > > > > - Clang 15.0.7 on Ubuntu 22.04.5: native and cross-compiling (aarch64) > > - Clang 18.1.3 on Ubuntu 24.04.2: native and cross-compiling (aarch64) > > - Android NDK r27d (latest LTS): cross-compiling (aarch64) > > > > [1] https://lore.kernel.org/linux-perf-users/20240715143342.52236-1-leo.yan@arm.com/ > > > > --- > > Changes in v2: > > - Dropped the patch for dismissing warning in bpftool. > > - Refined the document. (Ian) > > - Link to v1: https://lore.kernel.org/r/20250925-perf_build_android_ndk-v1-0-8b35aadde3dc@arm.com > > Reviewed-by: Ian Rogers <irogers@google.com> Thanks, applied to perf-tools-next, - Arnaldo
© 2016 - 2025 Red Hat, Inc.