Skip to content

Commit 4772e66

Browse files
Leo-Yanacmel
authored andcommitted
perf build: Support build with clang
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> Reviewed-by: Ian Rogers <irogers@google.com> Link: https://lore.kernel.org/r/20251006-perf_build_android_ndk-v3-8-4305590795b2@arm.com Cc: Palmer Dabbelt <palmer@dabbelt.com> Cc: Albert Ou <aou@eecs.berkeley.edu> Cc: Alexandre Ghiti <alex@ghiti.fr> Cc: Nick Desaulniers <nick.desaulniers+lkml@gmail.com> Cc: Justin Stitt <justinstitt@google.com> Cc: Bill Wendling <morbo@google.com> Cc: Adrian Hunter <adrian.hunter@intel.com> Cc: Arnaldo Carvalho de Melo <acme@kernel.org> Cc: Jiri Olsa <jolsa@kernel.org> Cc: Namhyung Kim <namhyung@kernel.org> Cc: Nathan Chancellor <nathan@kernel.org> Cc: James Clark <james.clark@linaro.org> Cc: linux-riscv@lists.infradead.org Cc: llvm@lists.linux.dev Cc: Paul Walmsley <paul.walmsley@sifive.com> Cc: linux-kernel@vger.kernel.org Cc: linux-perf-users@vger.kernel.org Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
1 parent 9ec46fc commit 4772e66

File tree

1 file changed

+32
-1
lines changed

1 file changed

+32
-1
lines changed

tools/perf/Makefile.config

Lines changed: 32 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -23,8 +23,39 @@ HOSTCFLAGS := $(filter-out -Wnested-externs,$(EXTRA_WARNINGS))
2323
# borrowed from kernel headers depends on it, e.g. put_unaligned_*().
2424
CFLAGS += -fno-strict-aliasing
2525

26-
# Enabled Wthread-safety analysis for clang builds.
26+
# Set target flag and options when using clang as compiler.
2727
ifeq ($(CC_NO_CLANG), 0)
28+
CLANG_TARGET_FLAGS_arm := arm-linux-gnueabi
29+
CLANG_TARGET_FLAGS_arm64 := aarch64-linux-gnu
30+
CLANG_TARGET_FLAGS_m68k := m68k-linux-gnu
31+
CLANG_TARGET_FLAGS_mips := mipsel-linux-gnu
32+
CLANG_TARGET_FLAGS_powerpc := powerpc64le-linux-gnu
33+
CLANG_TARGET_FLAGS_riscv := riscv64-linux-gnu
34+
CLANG_TARGET_FLAGS_s390 := s390x-linux-gnu
35+
CLANG_TARGET_FLAGS_x86 := x86_64-linux-gnu
36+
CLANG_TARGET_FLAGS_x86_64 := x86_64-linux-gnu
37+
38+
# Default to host architecture if ARCH is not explicitly given.
39+
ifeq ($(ARCH), $(HOSTARCH))
40+
CLANG_TARGET_FLAGS := $(shell $(CLANG) -print-target-triple)
41+
else
42+
CLANG_TARGET_FLAGS := $(CLANG_TARGET_FLAGS_$(ARCH))
43+
endif
44+
45+
ifeq ($(CROSS_COMPILE),)
46+
ifeq ($(CLANG_TARGET_FLAGS),)
47+
$(error Specify CROSS_COMPILE or add CLANG_TARGET_FLAGS for $(ARCH))
48+
else
49+
CLANG_FLAGS += --target=$(CLANG_TARGET_FLAGS)
50+
endif # CLANG_TARGET_FLAGS
51+
else
52+
CLANG_FLAGS += --target=$(notdir $(CROSS_COMPILE:%-=%))
53+
endif # CROSS_COMPILE
54+
55+
CC := $(CLANG) $(CLANG_FLAGS) -fintegrated-as
56+
CXX := $(CXX) $(CLANG_FLAGS) -fintegrated-as
57+
58+
# Enabled Wthread-safety analysis for clang builds.
2859
CFLAGS += -Wthread-safety
2960
endif
3061

0 commit comments

Comments
 (0)