linux-perf-users.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* [PATCH v2 0/8] perf build: Support building with Clang
@ 2025-09-30 16:54 Leo Yan
  2025-09-30 16:54 ` [PATCH v2 1/8] tools build: Align warning options with perf Leo Yan
                   ` (9 more replies)
  0 siblings, 10 replies; 17+ messages in thread
From: Leo Yan @ 2025-09-30 16:54 UTC (permalink / raw)
  To: Arnaldo Carvalho de Melo, Namhyung Kim, Jiri Olsa, Ian Rogers,
	Adrian Hunter, Nathan Chancellor, Nick Desaulniers, Bill Wendling,
	Justin Stitt, Paul Walmsley, Palmer Dabbelt, Albert Ou,
	Alexandre Ghiti, James Clark
  Cc: linux-kernel, linux-perf-users, llvm, linux-riscv, Leo Yan

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>


^ permalink raw reply	[flat|nested] 17+ messages in thread

* [PATCH v2 1/8] tools build: Align warning options with perf
  2025-09-30 16:54 [PATCH v2 0/8] perf build: Support building with Clang Leo Yan
@ 2025-09-30 16:54 ` Leo Yan
  2025-09-30 16:54 ` [PATCH v2 2/8] perf python: split Clang options when invoking Popen Leo Yan
                   ` (8 subsequent siblings)
  9 siblings, 0 replies; 17+ messages in thread
From: Leo Yan @ 2025-09-30 16:54 UTC (permalink / raw)
  To: Arnaldo Carvalho de Melo, Namhyung Kim, Jiri Olsa, Ian Rogers,
	Adrian Hunter, Nathan Chancellor, Nick Desaulniers, Bill Wendling,
	Justin Stitt, Paul Walmsley, Palmer Dabbelt, Albert Ou,
	Alexandre Ghiti, James Clark
  Cc: linux-kernel, linux-perf-users, llvm, linux-riscv, Leo Yan

The feature test programs are built without enabling '-Wall -Werror'
options. As a result, a feature may appear to be available, but later
building in perf can fail with stricter checks.

Make the feature test program use the same warning options as perf.

Fixes: 1925459b4d92 ("tools build: Fix feature Makefile issues with 'O='")
Signed-off-by: Leo Yan <leo.yan@arm.com>
---
 tools/build/feature/Makefile | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/tools/build/feature/Makefile b/tools/build/feature/Makefile
index b41a42818d8ac232ade78ecb41363d26ce2a9471..bd615a708a0aa89ddbe87401f04bd736e384a9c4 100644
--- a/tools/build/feature/Makefile
+++ b/tools/build/feature/Makefile
@@ -316,10 +316,10 @@ $(OUTPUT)test-libcapstone.bin:
 	$(BUILD) # -lcapstone provided by $(FEATURE_CHECK_LDFLAGS-libcapstone)
 
 $(OUTPUT)test-compile-32.bin:
-	$(CC) -m32 -o $@ test-compile.c
+	$(CC) -m32 -Wall -Werror -o $@ test-compile.c
 
 $(OUTPUT)test-compile-x32.bin:
-	$(CC) -mx32 -o $@ test-compile.c
+	$(CC) -mx32 -Wall -Werror -o $@ test-compile.c
 
 $(OUTPUT)test-zlib.bin:
 	$(BUILD) -lz

-- 
2.34.1


^ permalink raw reply related	[flat|nested] 17+ messages in thread

* [PATCH v2 2/8] perf python: split Clang options when invoking Popen
  2025-09-30 16:54 [PATCH v2 0/8] perf build: Support building with Clang Leo Yan
  2025-09-30 16:54 ` [PATCH v2 1/8] tools build: Align warning options with perf Leo Yan
@ 2025-09-30 16:54 ` Leo Yan
  2025-09-30 16:54 ` [PATCH v2 3/8] perf: build: Correct CROSS_ARCH for clang Leo Yan
                   ` (7 subsequent siblings)
  9 siblings, 0 replies; 17+ messages in thread
From: Leo Yan @ 2025-09-30 16:54 UTC (permalink / raw)
  To: Arnaldo Carvalho de Melo, Namhyung Kim, Jiri Olsa, Ian Rogers,
	Adrian Hunter, Nathan Chancellor, Nick Desaulniers, Bill Wendling,
	Justin Stitt, Paul Walmsley, Palmer Dabbelt, Albert Ou,
	Alexandre Ghiti, James Clark
  Cc: linux-kernel, linux-perf-users, llvm, linux-riscv, Leo Yan

When passing a list to subprocess.Popen, each element maps to one argv
token. Current code bundles multiple Clang flags into a single element,
something like:

  cmd = ['clang',
         '--target=x86_64-linux-gnu -fintegrated-as -Wno-cast-function-type-mismatch',
	 'test-hello.c']

So Clang only sees one long, invalid option instead of separate flags,
as a result, the script cannot capture any log via PIPE.

Fix this by using shlex.split() to separate the string so each option
becomes its own argv element. The fixed list will be:

  cmd = ['clang',
         '--target=x86_64-linux-gnu',
	 '-fintegrated-as',
	 '-Wno-cast-function-type-mismatch',
	 'test-hello.c']

Fixes: 09e6f9f98370 ("perf python: Fix splitting CC into compiler and options")
Signed-off-by: Leo Yan <leo.yan@arm.com>
---
 tools/perf/util/setup.py | 5 ++++-
 1 file changed, 4 insertions(+), 1 deletion(-)

diff --git a/tools/perf/util/setup.py b/tools/perf/util/setup.py
index dd289d15acfd62ff058bbaed7e565bb958e3a3c8..9cae2c472f4ad4d9579e8528b8bb0152df6fe20e 100644
--- a/tools/perf/util/setup.py
+++ b/tools/perf/util/setup.py
@@ -1,6 +1,7 @@
 from os import getenv, path
 from subprocess import Popen, PIPE
 from re import sub
+import shlex
 
 cc = getenv("CC")
 assert cc, "Environment variable CC not set"
@@ -22,7 +23,9 @@ assert srctree, "Environment variable srctree, for the Linux sources, not set"
 src_feature_tests  = f'{srctree}/tools/build/feature'
 
 def clang_has_option(option):
-    cc_output = Popen([cc, cc_options + option, path.join(src_feature_tests, "test-hello.c") ], stderr=PIPE).stderr.readlines()
+    cmd = shlex.split(f"{cc} {cc_options} {option}")
+    cmd.append(path.join(src_feature_tests, "test-hello.c"))
+    cc_output = Popen(cmd, stderr=PIPE).stderr.readlines()
     return [o for o in cc_output if ((b"unknown argument" in o) or (b"is not supported" in o) or (b"unknown warning option" in o))] == [ ]
 
 if cc_is_clang:

-- 
2.34.1


^ permalink raw reply related	[flat|nested] 17+ messages in thread

* [PATCH v2 3/8] perf: build: Correct CROSS_ARCH for clang
  2025-09-30 16:54 [PATCH v2 0/8] perf build: Support building with Clang Leo Yan
  2025-09-30 16:54 ` [PATCH v2 1/8] tools build: Align warning options with perf Leo Yan
  2025-09-30 16:54 ` [PATCH v2 2/8] perf python: split Clang options when invoking Popen Leo Yan
@ 2025-09-30 16:54 ` Leo Yan
  2025-09-30 16:54 ` [PATCH v2 4/8] perf test coresight: Dismiss clang warning for memcpy thread Leo Yan
                   ` (6 subsequent siblings)
  9 siblings, 0 replies; 17+ messages in thread
From: Leo Yan @ 2025-09-30 16:54 UTC (permalink / raw)
  To: Arnaldo Carvalho de Melo, Namhyung Kim, Jiri Olsa, Ian Rogers,
	Adrian Hunter, Nathan Chancellor, Nick Desaulniers, Bill Wendling,
	Justin Stitt, Paul Walmsley, Palmer Dabbelt, Albert Ou,
	Alexandre Ghiti, James Clark
  Cc: linux-kernel, linux-perf-users, llvm, linux-riscv, Leo Yan

Clang's -dumpmachine outputs "aarch64-unknown-linux-gnu", which does not
match the MultiArch convention. This prevents the build system from
detecting installed packages.

Fix by stripping the trailing '-' from CROSS_COMPILE when setting
CROSS_ARCH.

Signed-off-by: Leo Yan <leo.yan@arm.com>
---
 tools/build/feature/Makefile | 2 +-
 tools/perf/Makefile.perf     | 2 +-
 2 files changed, 2 insertions(+), 2 deletions(-)

diff --git a/tools/build/feature/Makefile b/tools/build/feature/Makefile
index bd615a708a0aa89ddbe87401f04bd736e384a9c4..214ccaee69181cce1f8e736b85c8dc940efa6c19 100644
--- a/tools/build/feature/Makefile
+++ b/tools/build/feature/Makefile
@@ -94,7 +94,7 @@ else
   # paths are used instead.
   ifdef CROSS_COMPILE
     ifeq ($(PKG_CONFIG_LIBDIR)$(PKG_CONFIG_PATH)$(PKG_CONFIG_SYSROOT_DIR),)
-      CROSS_ARCH = $(shell $(CC) -dumpmachine)
+      CROSS_ARCH = $(notdir $(CROSS_COMPILE:%-=%))
       PKG_CONFIG_LIBDIR := /usr/local/$(CROSS_ARCH)/lib/pkgconfig/
       PKG_CONFIG_LIBDIR := $(PKG_CONFIG_LIBDIR):/usr/local/lib/$(CROSS_ARCH)/pkgconfig/
       PKG_CONFIG_LIBDIR := $(PKG_CONFIG_LIBDIR):/usr/lib/$(CROSS_ARCH)/pkgconfig/
diff --git a/tools/perf/Makefile.perf b/tools/perf/Makefile.perf
index e2150acc2c13325f93a2d5cd4a60b4a6bfeedc94..47bc9d8a91df90535408c427909bcb3f7cd50970 100644
--- a/tools/perf/Makefile.perf
+++ b/tools/perf/Makefile.perf
@@ -194,7 +194,7 @@ else
   # paths are used instead.
   ifdef CROSS_COMPILE
     ifeq ($(PKG_CONFIG_LIBDIR)$(PKG_CONFIG_PATH)$(PKG_CONFIG_SYSROOT_DIR),)
-      CROSS_ARCH = $(shell $(CC) -dumpmachine)
+      CROSS_ARCH = $(notdir $(CROSS_COMPILE:%-=%))
       PKG_CONFIG_LIBDIR := /usr/local/$(CROSS_ARCH)/lib/pkgconfig/
       PKG_CONFIG_LIBDIR := $(PKG_CONFIG_LIBDIR):/usr/local/lib/$(CROSS_ARCH)/pkgconfig/
       PKG_CONFIG_LIBDIR := $(PKG_CONFIG_LIBDIR):/usr/lib/$(CROSS_ARCH)/pkgconfig/

-- 
2.34.1


^ permalink raw reply related	[flat|nested] 17+ messages in thread

* [PATCH v2 4/8] perf test coresight: Dismiss clang warning for memcpy thread
  2025-09-30 16:54 [PATCH v2 0/8] perf build: Support building with Clang Leo Yan
                   ` (2 preceding siblings ...)
  2025-09-30 16:54 ` [PATCH v2 3/8] perf: build: Correct CROSS_ARCH for clang Leo Yan
@ 2025-09-30 16:54 ` Leo Yan
  2025-09-30 16:54 ` [PATCH v2 5/8] perf test coresight: Dismiss clang warning for thread loop Leo Yan
                   ` (5 subsequent siblings)
  9 siblings, 0 replies; 17+ messages in thread
From: Leo Yan @ 2025-09-30 16:54 UTC (permalink / raw)
  To: Arnaldo Carvalho de Melo, Namhyung Kim, Jiri Olsa, Ian Rogers,
	Adrian Hunter, Nathan Chancellor, Nick Desaulniers, Bill Wendling,
	Justin Stitt, Paul Walmsley, Palmer Dabbelt, Albert Ou,
	Alexandre Ghiti, James Clark
  Cc: linux-kernel, linux-perf-users, llvm, linux-riscv, Leo Yan

clang-18.1.3 on Ubuntu 24.04.2 reports warning:

  memcpy_thread.c:30:1: warning: non-void function does not return a value in all control paths [-Wreturn-type]
     30 | }
        | ^

Dismiss the warning with returning NULL from the thread function.

Signed-off-by: Leo Yan <leo.yan@arm.com>
---
 tools/perf/tests/shell/coresight/memcpy_thread/memcpy_thread.c | 2 ++
 1 file changed, 2 insertions(+)

diff --git a/tools/perf/tests/shell/coresight/memcpy_thread/memcpy_thread.c b/tools/perf/tests/shell/coresight/memcpy_thread/memcpy_thread.c
index 5f886cd09e6b3a62b5690dade94f1f8cae3279d2..7e879217be30a86431989dbf1f36d2134ef259cc 100644
--- a/tools/perf/tests/shell/coresight/memcpy_thread/memcpy_thread.c
+++ b/tools/perf/tests/shell/coresight/memcpy_thread/memcpy_thread.c
@@ -27,6 +27,8 @@ static void *thrfn(void *arg)
 	}
 	for (i = 0; i < len; i++)
 		memcpy(dst, src, a->size * 1024);
+
+	return NULL;
 }
 
 static pthread_t new_thr(void *(*fn) (void *arg), void *arg)

-- 
2.34.1


^ permalink raw reply related	[flat|nested] 17+ messages in thread

* [PATCH v2 5/8] perf test coresight: Dismiss clang warning for thread loop
  2025-09-30 16:54 [PATCH v2 0/8] perf build: Support building with Clang Leo Yan
                   ` (3 preceding siblings ...)
  2025-09-30 16:54 ` [PATCH v2 4/8] perf test coresight: Dismiss clang warning for memcpy thread Leo Yan
@ 2025-09-30 16:54 ` Leo Yan
  2025-09-30 16:54 ` [PATCH v2 6/8] perf test coresight: Dismiss clang warning for unroll loop thread Leo Yan
                   ` (4 subsequent siblings)
  9 siblings, 0 replies; 17+ messages in thread
From: Leo Yan @ 2025-09-30 16:54 UTC (permalink / raw)
  To: Arnaldo Carvalho de Melo, Namhyung Kim, Jiri Olsa, Ian Rogers,
	Adrian Hunter, Nathan Chancellor, Nick Desaulniers, Bill Wendling,
	Justin Stitt, Paul Walmsley, Palmer Dabbelt, Albert Ou,
	Alexandre Ghiti, James Clark
  Cc: linux-kernel, linux-perf-users, llvm, linux-riscv, Leo Yan

clang-18.1.3 on Ubuntu 24.04.2 reports warning:

  thread_loop.c:41:23: warning: value size does not match register size specified by the constraint and modifier [-Wasm-operand-widths]
     41 |                 : /* in */ [i] "r" (i), [len] "r" (len)
        |                                     ^
  thread_loop.c:37:8: note: use constraint modifier "w"
     37 |                 "add %[i], %[i], #1\n"
        |                      ^~~~
        |                      %w[i]
  thread_loop.c:41:23: warning: value size does not match register size specified by the constraint and modifier [-Wasm-operand-widths]
     41 |                 : /* in */ [i] "r" (i), [len] "r" (len)
        |                                     ^
  thread_loop.c:37:14: note: use constraint modifier "w"
     37 |                 "add %[i], %[i], #1\n"
        |                            ^~~~
        |                            %w[i]
  thread_loop.c:41:23: warning: value size does not match register size specified by the constraint and modifier [-Wasm-operand-widths]
     41 |                 : /* in */ [i] "r" (i), [len] "r" (len)
        |                                     ^
  thread_loop.c:38:8: note: use constraint modifier "w"
     38 |                 "cmp %[i], %[len]\n"
        |                      ^~~~
        |                      %w[i]
  thread_loop.c:41:38: warning: value size does not match register size specified by the constraint and modifier [-Wasm-operand-widths]
     41 |                 : /* in */ [i] "r" (i), [len] "r" (len)
        |                                                    ^
  thread_loop.c:38:14: note: use constraint modifier "w"
     38 |                 "cmp %[i], %[len]\n"
        |                            ^~~~~~
        |                            %w[len]

Use the modifier "w" for 32-bit register access.

Signed-off-by: Leo Yan <leo.yan@arm.com>
---
 tools/perf/tests/shell/coresight/thread_loop/thread_loop.c | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/tools/perf/tests/shell/coresight/thread_loop/thread_loop.c b/tools/perf/tests/shell/coresight/thread_loop/thread_loop.c
index e05a559253ca9d9366ad321d520349042fb07fca..86f3f548b00631682767665fc5e9d5b8551a3634 100644
--- a/tools/perf/tests/shell/coresight/thread_loop/thread_loop.c
+++ b/tools/perf/tests/shell/coresight/thread_loop/thread_loop.c
@@ -34,8 +34,8 @@ static void *thrfn(void *arg)
 	}
 	asm volatile(
 		"loop:\n"
-		"add %[i], %[i], #1\n"
-		"cmp %[i], %[len]\n"
+		"add %w[i], %w[i], #1\n"
+		"cmp %w[i], %w[len]\n"
 		"blt loop\n"
 		: /* out */
 		: /* in */ [i] "r" (i), [len] "r" (len)

-- 
2.34.1


^ permalink raw reply related	[flat|nested] 17+ messages in thread

* [PATCH v2 6/8] perf test coresight: Dismiss clang warning for unroll loop thread
  2025-09-30 16:54 [PATCH v2 0/8] perf build: Support building with Clang Leo Yan
                   ` (4 preceding siblings ...)
  2025-09-30 16:54 ` [PATCH v2 5/8] perf test coresight: Dismiss clang warning for thread loop Leo Yan
@ 2025-09-30 16:54 ` Leo Yan
  2025-09-30 16:54 ` [PATCH v2 7/8] perf build: Support build with clang Leo Yan
                   ` (3 subsequent siblings)
  9 siblings, 0 replies; 17+ messages in thread
From: Leo Yan @ 2025-09-30 16:54 UTC (permalink / raw)
  To: Arnaldo Carvalho de Melo, Namhyung Kim, Jiri Olsa, Ian Rogers,
	Adrian Hunter, Nathan Chancellor, Nick Desaulniers, Bill Wendling,
	Justin Stitt, Paul Walmsley, Palmer Dabbelt, Albert Ou,
	Alexandre Ghiti, James Clark
  Cc: linux-kernel, linux-perf-users, llvm, linux-riscv, Leo Yan

clang-18.1.3 on Ubuntu 24.04.2 reports warning:

  unroll_loop_thread.c:35:25: warning: value size does not match register size specified by the constraint and modifier [-Wasm-operand-widths]
     35 |                         : /* in */ [in] "r" (in)
        |                                              ^
  unroll_loop_thread.c:39:1: warning: non-void function does not return a value [-Wreturn-type]
     39 | }
        | ^

Use the modifier "w" for 32-bit register access and return NULL at the
end of thread function.

Signed-off-by: Leo Yan <leo.yan@arm.com>
---
 .../tests/shell/coresight/unroll_loop_thread/unroll_loop_thread.c     | 4 +++-
 1 file changed, 3 insertions(+), 1 deletion(-)

diff --git a/tools/perf/tests/shell/coresight/unroll_loop_thread/unroll_loop_thread.c b/tools/perf/tests/shell/coresight/unroll_loop_thread/unroll_loop_thread.c
index 0fc7bf1a25af3607b40f091f62176134ddb7f9f6..8f4e1c985ca38ab545a05189432a14a6d888d34c 100644
--- a/tools/perf/tests/shell/coresight/unroll_loop_thread/unroll_loop_thread.c
+++ b/tools/perf/tests/shell/coresight/unroll_loop_thread/unroll_loop_thread.c
@@ -20,7 +20,7 @@ static void *thrfn(void *arg)
 	for (i = 0; i < 10000; i++) {
 		asm volatile (
 // force an unroll of thia add instruction so we can test long runs of code
-#define SNIP1 "add %[in], %[in], #1\n"
+#define SNIP1 "add %w[in], %w[in], #1\n"
 // 10
 #define SNIP2 SNIP1 SNIP1 SNIP1 SNIP1 SNIP1 SNIP1 SNIP1 SNIP1 SNIP1 SNIP1
 // 100
@@ -36,6 +36,8 @@ static void *thrfn(void *arg)
 			: /* clobber */
 		);
 	}
+
+	return NULL;
 }
 
 static pthread_t new_thr(void *(*fn) (void *arg), void *arg)

-- 
2.34.1


^ permalink raw reply related	[flat|nested] 17+ messages in thread

* [PATCH v2 7/8] perf build: Support build with clang
  2025-09-30 16:54 [PATCH v2 0/8] perf build: Support building with Clang Leo Yan
                   ` (5 preceding siblings ...)
  2025-09-30 16:54 ` [PATCH v2 6/8] perf test coresight: Dismiss clang warning for unroll loop thread Leo Yan
@ 2025-09-30 16:54 ` Leo Yan
  2025-09-30 16:54 ` [PATCH v2 8/8] perf docs: Document building with Clang Leo Yan
                   ` (2 subsequent siblings)
  9 siblings, 0 replies; 17+ messages in thread
From: Leo Yan @ 2025-09-30 16:54 UTC (permalink / raw)
  To: Arnaldo Carvalho de Melo, Namhyung Kim, Jiri Olsa, Ian Rogers,
	Adrian Hunter, Nathan Chancellor, Nick Desaulniers, Bill Wendling,
	Justin Stitt, Paul Walmsley, Palmer Dabbelt, Albert Ou,
	Alexandre Ghiti, James Clark
  Cc: linux-kernel, linux-perf-users, llvm, linux-riscv, Leo Yan

Add support for building perf with clang. For cross compilation, the
Makefile dynamically selects target flag for corresponding arch.

This patch has been verified on x86_64 machine with Ubuntu distro, it
can build successfully for native target, and for cross building Arm64
and s390.

Example: native build on x86_64 / Ubuntu machine:

  $ HOSTCC=clang CC=clang CXX=clang++ make -C tools/perf

Example: cross building s390 target on x86_64 / Ubuntu machine:

  # Install x390x cross toolchain and headers
  $ sudo apt-get install gcc-s390x-linux-gnu g++-s390x-linux-gnu \
         libc6-dev-s390x-cross linux-libc-dev-s390x-cross

  # Build with clang
  $ HOSTCC=clang CC=clang CXX=clang++ \
    ARCH=s390 CROSS_COMPILE=s390x-linux-gnu- \
    make -C tools/perf NO_LIBELF=1 NO_LIBTRACEEVENT=1 NO_LIBPYTHON=1

Signed-off-by: Leo Yan <leo.yan@arm.com>
---
 tools/perf/Makefile.config | 32 +++++++++++++++++++++++++++++++-
 1 file changed, 31 insertions(+), 1 deletion(-)

diff --git a/tools/perf/Makefile.config b/tools/perf/Makefile.config
index 5a5832ee7b53c604ec0d90c5ca7e2bee5bfa6a17..a2b5c291a364cbf331c16384764520dfe330a04c 100644
--- a/tools/perf/Makefile.config
+++ b/tools/perf/Makefile.config
@@ -23,8 +23,38 @@ HOSTCFLAGS := $(filter-out -Wnested-externs,$(EXTRA_WARNINGS))
 # borrowed from kernel headers depends on it, e.g. put_unaligned_*().
 CFLAGS += -fno-strict-aliasing
 
-# Enabled Wthread-safety analysis for clang builds.
+# Set target flag and options when using clang as compiler.
 ifeq ($(CC_NO_CLANG), 0)
+  CLANG_TARGET_FLAGS_arm	:= arm-linux-gnueabi
+  CLANG_TARGET_FLAGS_arm64	:= aarch64-linux-gnu
+  CLANG_TARGET_FLAGS_m68k	:= m68k-linux-gnu
+  CLANG_TARGET_FLAGS_mips	:= mipsel-linux-gnu
+  CLANG_TARGET_FLAGS_powerpc	:= powerpc64le-linux-gnu
+  CLANG_TARGET_FLAGS_riscv	:= riscv64-linux-gnu
+  CLANG_TARGET_FLAGS_s390	:= s390x-linux-gnu
+  CLANG_TARGET_FLAGS_x86	:= x86_64-linux-gnu
+
+  # Default to host architecture if ARCH is not explicitly given.
+  ifeq ($(ARCH),)
+    CLANG_TARGET_FLAGS := $(shell $(CLANG) -print-target-triple)
+  else
+    CLANG_TARGET_FLAGS := $(CLANG_TARGET_FLAGS_$(ARCH))
+  endif
+
+  ifeq ($(CROSS_COMPILE),)
+    ifeq ($(CLANG_TARGET_FLAGS),)
+      $(error Specify CROSS_COMPILE or add CLANG_TARGET_FLAGS for $(ARCH))
+    else
+      CLANG_FLAGS += --target=$(CLANG_TARGET_FLAGS)
+    endif # CLANG_TARGET_FLAGS
+  else
+    CLANG_FLAGS += --target=$(notdir $(CROSS_COMPILE:%-=%))
+  endif # CROSS_COMPILE
+
+  CC := $(CLANG) $(CLANG_FLAGS) -fintegrated-as
+  CXX := $(CXX) $(CLANG_FLAGS) -fintegrated-as
+
+  # Enabled Wthread-safety analysis for clang builds.
   CFLAGS += -Wthread-safety
 endif
 

-- 
2.34.1


^ permalink raw reply related	[flat|nested] 17+ messages in thread

* [PATCH v2 8/8] perf docs: Document building with Clang
  2025-09-30 16:54 [PATCH v2 0/8] perf build: Support building with Clang Leo Yan
                   ` (6 preceding siblings ...)
  2025-09-30 16:54 ` [PATCH v2 7/8] perf build: Support build with clang Leo Yan
@ 2025-09-30 16:54 ` Leo Yan
  2025-09-30 18:14 ` [PATCH v2 0/8] perf build: Support " Ian Rogers
  2025-10-01 14:21 ` Arnaldo Carvalho de Melo
  9 siblings, 0 replies; 17+ messages in thread
From: Leo Yan @ 2025-09-30 16:54 UTC (permalink / raw)
  To: Arnaldo Carvalho de Melo, Namhyung Kim, Jiri Olsa, Ian Rogers,
	Adrian Hunter, Nathan Chancellor, Nick Desaulniers, Bill Wendling,
	Justin Stitt, Paul Walmsley, Palmer Dabbelt, Albert Ou,
	Alexandre Ghiti, James Clark
  Cc: linux-kernel, linux-perf-users, llvm, linux-riscv, Leo Yan

Add example commands for building perf with Clang.

Since recent Android NDK releases use Clang as the default compiler, a
separate Android specific document is no longer needed; point to the
general build documentation instead.

Signed-off-by: Leo Yan <leo.yan@arm.com>
---
 tools/perf/Documentation/Build.txt   | 15 +++++++
 tools/perf/Documentation/android.txt | 80 +++---------------------------------
 2 files changed, 21 insertions(+), 74 deletions(-)

diff --git a/tools/perf/Documentation/Build.txt b/tools/perf/Documentation/Build.txt
index 83dc87c662b63ecc17553a15cc15a6b8d6f01d83..57b226e7fc2f8e849dfe58b3af31891f58dfd0af 100644
--- a/tools/perf/Documentation/Build.txt
+++ b/tools/perf/Documentation/Build.txt
@@ -99,3 +99,18 @@ configuration paths for cross building:
 In this case, the variable PKG_CONFIG_SYSROOT_DIR can be used alongside the
 variable PKG_CONFIG_LIBDIR or PKG_CONFIG_PATH to prepend the sysroot path to
 the library paths for cross compilation.
+
+5) Build with Clang
+===================
+By default, the makefile uses GCC as compiler. With specifying environment
+variables HOSTCC, CC and CXX, it allows to build perf with Clang.
+
+Using Clang for a native build:
+
+  $ HOSTCC=clang CC=clang CXX=clang++ make -C tools/perf
+
+Specifying ARCH and CROSS_COMPILE for cross compilation:
+
+  $ HOSTCC=clang CC=clang CXX=clang++ \
+    ARCH=arm64 CROSS_COMPILE=aarch64-linux-gnu- \
+    make -C tools/perf
diff --git a/tools/perf/Documentation/android.txt b/tools/perf/Documentation/android.txt
index 24a59998fc91e814ad96f658d3481d88d798b60c..3f3cc7ac3d139c5517ec9458f13c06249c701429 100644
--- a/tools/perf/Documentation/android.txt
+++ b/tools/perf/Documentation/android.txt
@@ -1,78 +1,10 @@
 How to compile perf for Android
-=========================================
+===============================
 
-I. Set the Android NDK environment
-------------------------------------------------
+There are two ways to build perf and run it on Android:
 
-(a). Use the Android NDK
-------------------------------------------------
-1. You need to download and install the Android Native Development Kit (NDK).
-Set the NDK variable to point to the path where you installed the NDK:
-  export NDK=/path/to/android-ndk
+- Method 1: Build perf with static linking. See Build.txt, section
+  "4) Cross compilation" for how to build a static perf binary.
 
-2. Set cross-compiling environment variables for NDK toolchain and sysroot.
-For arm:
-  export NDK_TOOLCHAIN=${NDK}/toolchains/arm-linux-androideabi-4.9/prebuilt/linux-x86_64/bin/arm-linux-androideabi-
-  export NDK_SYSROOT=${NDK}/platforms/android-24/arch-arm
-For x86:
-  export NDK_TOOLCHAIN=${NDK}/toolchains/x86-4.9/prebuilt/linux-x86_64/bin/i686-linux-android-
-  export NDK_SYSROOT=${NDK}/platforms/android-24/arch-x86
-
-This method is only tested for Android NDK versions Revision 11b and later.
-perf uses some bionic enhancements that are not included in prior NDK versions.
-You can use method (b) described below instead.
-
-(b). Use the Android source tree
------------------------------------------------
-1. Download the master branch of the Android source tree.
-Set the environment for the target you want using:
-  source build/envsetup.sh
-  lunch
-
-2. Build your own NDK sysroot to contain latest bionic changes and set the
-NDK sysroot environment variable.
-  cd ${ANDROID_BUILD_TOP}/ndk
-For arm:
-  ./build/tools/build-ndk-sysroot.sh --abi=arm
-  export NDK_SYSROOT=${ANDROID_BUILD_TOP}/ndk/build/platforms/android-3/arch-arm
-For x86:
-  ./build/tools/build-ndk-sysroot.sh --abi=x86
-  export NDK_SYSROOT=${ANDROID_BUILD_TOP}/ndk/build/platforms/android-3/arch-x86
-
-3. Set the NDK toolchain environment variable.
-For arm:
-  export NDK_TOOLCHAIN=${ANDROID_TOOLCHAIN}/arm-linux-androideabi-
-For x86:
-  export NDK_TOOLCHAIN=${ANDROID_TOOLCHAIN}/i686-linux-android-
-
-II. Compile perf for Android
-------------------------------------------------
-You need to run make with the NDK toolchain and sysroot defined above:
-For arm:
-  make WERROR=0 ARCH=arm CROSS_COMPILE=${NDK_TOOLCHAIN} EXTRA_CFLAGS="-pie --sysroot=${NDK_SYSROOT}"
-For x86:
-  make WERROR=0 ARCH=x86 CROSS_COMPILE=${NDK_TOOLCHAIN} EXTRA_CFLAGS="-pie --sysroot=${NDK_SYSROOT}"
-
-III. Install perf
------------------------------------------------
-You need to connect to your Android device/emulator using adb.
-Install perf using:
-  adb push perf /data/perf
-
-If you also want to use perf-archive you need busybox tools for Android.
-For installing perf-archive, you first need to replace #!/bin/bash with #!/system/bin/sh:
-  sed 's/#!\/bin\/bash/#!\/system\/bin\/sh/g' perf-archive >> /tmp/perf-archive
-  chmod +x /tmp/perf-archive
-  adb push /tmp/perf-archive /data/perf-archive
-
-IV. Environment settings for running perf
-------------------------------------------------
-Some perf features need environment variables to run properly.
-You need to set these before running perf on the target:
-  adb shell
-  # PERF_PAGER=cat
-
-IV. Run perf
-------------------------------------------------
-Run perf on your device/emulator to which you previously connected using adb:
-  # ./data/perf
+- Method 2: Download the Android NDK and use the bundled Clang to
+  build perf. See Build.txt, section "5) Build with clang" for details.

-- 
2.34.1


^ permalink raw reply related	[flat|nested] 17+ messages in thread

* Re: [PATCH v2 0/8] perf build: Support building with Clang
  2025-09-30 16:54 [PATCH v2 0/8] perf build: Support building with Clang Leo Yan
                   ` (7 preceding siblings ...)
  2025-09-30 16:54 ` [PATCH v2 8/8] perf docs: Document building with Clang Leo Yan
@ 2025-09-30 18:14 ` Ian Rogers
  2025-10-01 13:45   ` Arnaldo Carvalho de Melo
  2025-10-01 14:21 ` Arnaldo Carvalho de Melo
  9 siblings, 1 reply; 17+ messages in thread
From: Ian Rogers @ 2025-09-30 18:14 UTC (permalink / raw)
  To: Leo Yan
  Cc: Arnaldo Carvalho de Melo, Namhyung Kim, Jiri Olsa, Adrian Hunter,
	Nathan Chancellor, Nick Desaulniers, Bill Wendling, Justin Stitt,
	Paul Walmsley, Palmer Dabbelt, Albert Ou, Alexandre Ghiti,
	James Clark, linux-kernel, linux-perf-users, llvm, linux-riscv

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>
>

^ permalink raw reply	[flat|nested] 17+ messages in thread

* Re: [PATCH v2 0/8] perf build: Support building with Clang
  2025-09-30 18:14 ` [PATCH v2 0/8] perf build: Support " Ian Rogers
@ 2025-10-01 13:45   ` Arnaldo Carvalho de Melo
  0 siblings, 0 replies; 17+ messages in thread
From: Arnaldo Carvalho de Melo @ 2025-10-01 13:45 UTC (permalink / raw)
  To: Ian Rogers
  Cc: Leo Yan, Namhyung Kim, Jiri Olsa, Adrian Hunter,
	Nathan Chancellor, Nick Desaulniers, Bill Wendling, Justin Stitt,
	Paul Walmsley, Palmer Dabbelt, Albert Ou, Alexandre Ghiti,
	James Clark, linux-kernel, linux-perf-users, llvm, linux-riscv

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

^ permalink raw reply	[flat|nested] 17+ messages in thread

* Re: [PATCH v2 0/8] perf build: Support building with Clang
  2025-09-30 16:54 [PATCH v2 0/8] perf build: Support building with Clang Leo Yan
                   ` (8 preceding siblings ...)
  2025-09-30 18:14 ` [PATCH v2 0/8] perf build: Support " Ian Rogers
@ 2025-10-01 14:21 ` Arnaldo Carvalho de Melo
  2025-10-01 15:22   ` Leo Yan
  9 siblings, 1 reply; 17+ messages in thread
From: Arnaldo Carvalho de Melo @ 2025-10-01 14:21 UTC (permalink / raw)
  To: Leo Yan
  Cc: Namhyung Kim, Jiri Olsa, Ian Rogers, Adrian Hunter,
	Nathan Chancellor, Nick Desaulniers, Bill Wendling, Justin Stitt,
	Paul Walmsley, Palmer Dabbelt, Albert Ou, Alexandre Ghiti,
	James Clark, linux-kernel, linux-perf-users, llvm, linux-riscv

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

^ permalink raw reply	[flat|nested] 17+ messages in thread

* Re: [PATCH v2 0/8] perf build: Support building with Clang
  2025-10-01 14:21 ` Arnaldo Carvalho de Melo
@ 2025-10-01 15:22   ` Leo Yan
  2025-10-01 18:25     ` Arnaldo Carvalho de Melo
  0 siblings, 1 reply; 17+ messages in thread
From: Leo Yan @ 2025-10-01 15:22 UTC (permalink / raw)
  To: Arnaldo Carvalho de Melo
  Cc: Namhyung Kim, Jiri Olsa, Ian Rogers, Adrian Hunter,
	Nathan Chancellor, Nick Desaulniers, Bill Wendling, Justin Stitt,
	Paul Walmsley, Palmer Dabbelt, Albert Ou, Alexandre Ghiti,
	James Clark, linux-kernel, linux-perf-users, llvm, linux-riscv

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

^ permalink raw reply	[flat|nested] 17+ messages in thread

* Re: [PATCH v2 0/8] perf build: Support building with Clang
  2025-10-01 15:22   ` Leo Yan
@ 2025-10-01 18:25     ` Arnaldo Carvalho de Melo
  2025-10-01 18:32       ` Leo Yan
  0 siblings, 1 reply; 17+ messages in thread
From: Arnaldo Carvalho de Melo @ 2025-10-01 18:25 UTC (permalink / raw)
  To: Leo Yan
  Cc: Namhyung Kim, Jiri Olsa, Ian Rogers, Adrian Hunter,
	Nathan Chancellor, Nick Desaulniers, Bill Wendling, Justin Stitt,
	Paul Walmsley, Palmer Dabbelt, Albert Ou, Alexandre Ghiti,
	James Clark, linux-kernel, linux-perf-users, llvm, linux-riscv

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

^ permalink raw reply	[flat|nested] 17+ messages in thread

* Re: [PATCH v2 0/8] perf build: Support building with Clang
  2025-10-01 18:25     ` Arnaldo Carvalho de Melo
@ 2025-10-01 18:32       ` Leo Yan
  2025-10-01 20:20         ` Leo Yan
  0 siblings, 1 reply; 17+ messages in thread
From: Leo Yan @ 2025-10-01 18:32 UTC (permalink / raw)
  To: Arnaldo Carvalho de Melo
  Cc: Namhyung Kim, Jiri Olsa, Ian Rogers, Adrian Hunter,
	Nathan Chancellor, Nick Desaulniers, Bill Wendling, Justin Stitt,
	Paul Walmsley, Palmer Dabbelt, Albert Ou, Alexandre Ghiti,
	James Clark, linux-kernel, linux-perf-users, llvm, linux-riscv

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

^ permalink raw reply	[flat|nested] 17+ messages in thread

* Re: [PATCH v2 0/8] perf build: Support building with Clang
  2025-10-01 18:32       ` Leo Yan
@ 2025-10-01 20:20         ` Leo Yan
  2025-10-02 17:43           ` Arnaldo Carvalho de Melo
  0 siblings, 1 reply; 17+ messages in thread
From: Leo Yan @ 2025-10-01 20:20 UTC (permalink / raw)
  To: Arnaldo Carvalho de Melo
  Cc: Namhyung Kim, Jiri Olsa, Ian Rogers, Adrian Hunter,
	Nathan Chancellor, Nick Desaulniers, Bill Wendling, Justin Stitt,
	Paul Walmsley, Palmer Dabbelt, Albert Ou, Alexandre Ghiti,
	James Clark, linux-kernel, linux-perf-users, llvm, linux-riscv

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

^ permalink raw reply	[flat|nested] 17+ messages in thread

* Re: [PATCH v2 0/8] perf build: Support building with Clang
  2025-10-01 20:20         ` Leo Yan
@ 2025-10-02 17:43           ` Arnaldo Carvalho de Melo
  0 siblings, 0 replies; 17+ messages in thread
From: Arnaldo Carvalho de Melo @ 2025-10-02 17:43 UTC (permalink / raw)
  To: Leo Yan
  Cc: Namhyung Kim, Jiri Olsa, Ian Rogers, Adrian Hunter,
	Nathan Chancellor, Nick Desaulniers, Bill Wendling, Justin Stitt,
	Paul Walmsley, Palmer Dabbelt, Albert Ou, Alexandre Ghiti,
	James Clark, linux-kernel, linux-perf-users, llvm, linux-riscv

On Wed, Oct 01, 2025 at 09:20:50PM +0100, Leo Yan wrote:
> 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 for spotting the problem after taking the trouble of starting a
container! Hopefully that will save time for other people trying to
cross-build perf.

Cheers,

- Arnaldo

^ permalink raw reply	[flat|nested] 17+ messages in thread

end of thread, other threads:[~2025-10-02 17:43 UTC | newest]

Thread overview: 17+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2025-09-30 16:54 [PATCH v2 0/8] perf build: Support building with Clang Leo Yan
2025-09-30 16:54 ` [PATCH v2 1/8] tools build: Align warning options with perf Leo Yan
2025-09-30 16:54 ` [PATCH v2 2/8] perf python: split Clang options when invoking Popen Leo Yan
2025-09-30 16:54 ` [PATCH v2 3/8] perf: build: Correct CROSS_ARCH for clang Leo Yan
2025-09-30 16:54 ` [PATCH v2 4/8] perf test coresight: Dismiss clang warning for memcpy thread Leo Yan
2025-09-30 16:54 ` [PATCH v2 5/8] perf test coresight: Dismiss clang warning for thread loop Leo Yan
2025-09-30 16:54 ` [PATCH v2 6/8] perf test coresight: Dismiss clang warning for unroll loop thread Leo Yan
2025-09-30 16:54 ` [PATCH v2 7/8] perf build: Support build with clang Leo Yan
2025-09-30 16:54 ` [PATCH v2 8/8] perf docs: Document building with Clang Leo Yan
2025-09-30 18:14 ` [PATCH v2 0/8] perf build: Support " Ian Rogers
2025-10-01 13:45   ` Arnaldo Carvalho de Melo
2025-10-01 14:21 ` Arnaldo Carvalho de Melo
2025-10-01 15:22   ` Leo Yan
2025-10-01 18:25     ` Arnaldo Carvalho de Melo
2025-10-01 18:32       ` Leo Yan
2025-10-01 20:20         ` Leo Yan
2025-10-02 17:43           ` Arnaldo Carvalho de Melo

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).