From: Sasha Levin <sashal@kernel.org>
To: Nathan Chancellor <nathan@kernel.org>,
Nicolas Schier <nsc@kernel.org>,
linux-kbuild@vger.kernel.org
Cc: "Sasha Levin" <sashal@kernel.org>,
"Shuah Khan" <shuah@kernel.org>,
linux-kselftest@vger.kernel.org,
"Peter Zijlstra" <peterz@infradead.org>,
"Ingo Molnar" <mingo@redhat.com>,
"Arnaldo Carvalho de Melo" <acme@kernel.org>,
"Namhyung Kim" <namhyung@kernel.org>,
"Mark Rutland" <mark.rutland@arm.com>,
"Alexander Shishkin" <alexander.shishkin@linux.intel.com>,
"Jiri Olsa" <jolsa@kernel.org>, "Ian Rogers" <irogers@google.com>,
"Adrian Hunter" <adrian.hunter@intel.com>,
"James Clark" <james.clark@linaro.org>,
linux-perf-users@vger.kernel.org,
"Thomas Weißschuh" <linux@weissschuh.net>,
"Andrew Morton" <akpm@linux-foundation.org>,
"Thorsten Leemhuis" <linux@leemhuis.info>,
linux-kernel@vger.kernel.org
Subject: [PATCH v4 4/7] tools: build perf in tools_build
Date: Thu, 12 Nov 2026 14:54:24 -0500 [thread overview]
Message-ID: <20261112195427.3411746-5-sashal@kernel.org> (raw)
In-Reply-To: <20261112195427.3411746-1-sashal@kernel.org>
Add CONFIG_TOOLS_BUILD_PERF. perf is built as it is built standalone,
with optional features enabled when their libraries are installed, and
with perf's WERROR setting following CONFIG_WERROR. The feature table is
left out of the kernel build log.
CONFIG_TOOLS_BUILD_PERF_MINIMAL builds it with MINIMAL=1 instead, which
turns every optional feature off, so the result does not depend on the
build machine. Without MINIMAL=1 perf does not build when pkg-config,
libelf or libtraceevent is missing, so the option can only be turned
off when Kconfig finds all three for the target, and never with
CONFIG_COMPILE_TEST. A build test, randconfig included, then does not
fail over a library the machine does not have.
Signed-off-by: Sasha Levin <sashal@kernel.org>
Acked-by: Namhyung Kim <namhyung@kernel.org>
---
tools/Kconfig | 24 ++++++++++++++++++++++++
tools/Makefile.kbuild | 10 ++++++++++
2 files changed, 34 insertions(+)
diff --git a/tools/Kconfig b/tools/Kconfig
index 04896e6b0ca51..ab1e15beb9fe3 100644
--- a/tools/Kconfig
+++ b/tools/Kconfig
@@ -60,6 +60,30 @@ config TOOLS_BUILD_IIO
help
Build tools/iio (lsiio, iio_event_monitor, iio_generic_buffer).
+config TOOLS_BUILD_PERF
+ bool "perf"
+ help
+ Build tools/perf. As in a standalone perf build, optional
+ features are enabled when the libraries they need are installed.
+
+# What perf does not build without, unless it is built with MINIMAL=1
+config TOOLS_BUILD_PERF_LIBS
+ def_bool $(success,command -v $(CROSS_COMPILE)pkg-config || command -v pkg-config) && \
+ $(success,echo 'int main(void) { return 0; }' | $(CC) $(CLANG_FLAGS) $(USERCFLAGS) $(USERLDFLAGS) $(m64-flag) `$(CROSS_COMPILE)pkg-config --cflags --libs libtraceevent 2>/dev/null || pkg-config --cflags --libs libtraceevent` -include libelf.h -include trace-seq.h -x c - -o /dev/null -lelf)
+
+config TOOLS_BUILD_PERF_MINIMAL
+ bool "Build perf with all optional features disabled" if TOOLS_BUILD_PERF_LIBS && !COMPILE_TEST
+ depends on TOOLS_BUILD_PERF
+ default !TOOLS_BUILD_PERF_LIBS || COMPILE_TEST
+ help
+ Build perf with MINIMAL=1, which turns off every optional
+ feature, so that the result does not depend on which libraries
+ the build machine has installed. This is always on when
+ pkg-config, libelf or libtraceevent is missing for the target,
+ as perf does not build without them otherwise, and with
+ COMPILE_TEST, which keeps build tests such as allmodconfig the
+ same on every machine.
+
config TOOLS_BUILD_SPI
bool "SPI tools"
help
diff --git a/tools/Makefile.kbuild b/tools/Makefile.kbuild
index 7a26e7c3d5769..5cf8441989fac 100644
--- a/tools/Makefile.kbuild
+++ b/tools/Makefile.kbuild
@@ -79,6 +79,16 @@ PHONY += $(tool-targets)
$(tool-targets): tool-%: FORCE
$(call build,$(outdir)/$*,-C $(toolsdir)/$* O=$(outdir)/$* CC='$(call escsq,$(tools-cc))',,TOOLS_BUILD_$(shell echo $* | tr a-z A-Z))
+# perf, without the feature table in the kernel build log
+perf-flags := CC='$(call escsq,$(tools-cc))' FEATURE_DISPLAY= WERROR=$(if $(CONFIG_WERROR),1,0)
+perf-flags-$(CONFIG_TOOLS_BUILD_PERF_MINIMAL) += MINIMAL=1
+
+__tools_build: $(if $(CONFIG_TOOLS_BUILD_PERF),perf)
+
+PHONY += perf
+perf: FORCE
+ $(call build,$(outdir)/perf,-C $(toolsdir)/perf -f Makefile.perf O=$(outdir)/perf $(perf-flags) $(perf-flags-y),,TOOLS_BUILD_PERF)
+
PHONY += FORCE
FORCE:
--
2.53.0
next prev parent reply other threads:[~2026-11-12 19:54 UTC|newest]
Thread overview: 17+ messages / expand[flat|nested] mbox.gz Atom feed top
2026-11-12 19:54 [PATCH v4 0/7] kbuild: build the userspace tools in tools/ with the kernel Sasha Levin
2026-11-12 19:54 ` [PATCH v4 1/7] kbuild: factor the userspace ABI flags out into KBUILD_USERABI Sasha Levin
2026-11-13 19:55 ` sashiko-bot
2026-11-12 19:54 ` [PATCH v4 2/7] kbuild: add "make tools_build" to build userspace tools from tools/ Sasha Levin
2026-11-13 19:55 ` sashiko-bot
2026-11-12 19:54 ` [PATCH v4 3/7] perf build: Add MINIMAL=1 to build without optional features Sasha Levin
2026-11-13 19:55 ` sashiko-bot
2026-11-12 19:54 ` Sasha Levin [this message]
2026-11-13 19:55 ` [PATCH v4 4/7] tools: build perf in tools_build sashiko-bot
2026-11-12 19:54 ` [PATCH v4 5/7] tools: build kernel selftests " Sasha Levin
2026-11-13 19:55 ` sashiko-bot
2026-11-12 19:54 ` [PATCH v4 6/7] kbuild: build the tools selected in tools/Kconfig as part of "make all" Sasha Levin
2026-11-13 19:55 ` sashiko-bot
2026-11-12 19:54 ` [PATCH v4 7/7] Documentation: describe building tools with the kernel Sasha Levin
2026-11-13 19:55 ` sashiko-bot
2026-11-12 20:23 ` [PATCH v4 0/7] kbuild: build the userspace tools in tools/ " Andrew Morton
2026-11-13 1:52 ` Sasha Levin
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20261112195427.3411746-5-sashal@kernel.org \
--to=sashal@kernel.org \
--cc=acme@kernel.org \
--cc=adrian.hunter@intel.com \
--cc=akpm@linux-foundation.org \
--cc=alexander.shishkin@linux.intel.com \
--cc=irogers@google.com \
--cc=james.clark@linaro.org \
--cc=jolsa@kernel.org \
--cc=linux-kbuild@vger.kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-kselftest@vger.kernel.org \
--cc=linux-perf-users@vger.kernel.org \
--cc=linux@leemhuis.info \
--cc=linux@weissschuh.net \
--cc=mark.rutland@arm.com \
--cc=mingo@redhat.com \
--cc=namhyung@kernel.org \
--cc=nathan@kernel.org \
--cc=nsc@kernel.org \
--cc=peterz@infradead.org \
--cc=shuah@kernel.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.