On Fri, Oct 16, 2026 at 7:31 AM Sasha Levin <[email protected]> wrote: > > Turning off every optional feature takes a long list of NO_* variables, > and the list has to follow features as they are added and renamed. The > one in tests/make for make_minimal has fallen behind: it leaves > libtraceevent, jevents, slang, AIO, LZMA, zlib, libLLVM and Rust to be > detected, so a make_minimal build still needs libtraceevent and python. > > Add MINIMAL=1, which turns off every optional feature, the BPF skeletons > and the shellcheck run. perf then builds, natively or cross, with no > library beyond the C library and without python, pkg-config, clang or > rustc, and the result does not depend on what is installed on the build > machine. > > A MINIMAL=1 build also leaves out the notices that post unwind and > python support are disabled, which it asked for, and the one about the > pkg-config search path for cross builds, as pkg-config is not needed > then. > > It is handled in Makefile.perf rather than Makefile.config, as > Makefile.config is included after the pkg-config and shellcheck setup. > > Use it for make_minimal in tests/make. > > Suggested-by: Ian Rogers <[email protected]> > Link: > https://lore.kernel.org/r/CAP-5=fwfy-tpjz2vcbzvurwdzy5gwd8cuteme9q1rtz0vi0...@mail.gmail.com > Assisted-by: LLM > Signed-off-by: Sasha Levin <[email protected]> > --- > tools/perf/Makefile.config | 8 ++++++-- > tools/perf/Makefile.perf | 40 ++++++++++++++++++++++++++++++++++++-- > tools/perf/tests/make | 8 +------- > 3 files changed, 45 insertions(+), 11 deletions(-) > > diff --git a/tools/perf/Makefile.config b/tools/perf/Makefile.config > index 4d5993da9f945..137c9e120670b 100644 > --- a/tools/perf/Makefile.config > +++ b/tools/perf/Makefile.config > @@ -742,7 +742,9 @@ dwarf-post-unwind-text := BUG > # setup DWARF post unwinder > ifdef NO_LIBUNWIND > ifdef NO_LIBDW > - $(warning Disabling post unwind, no support found.) > + ifneq ($(MINIMAL),1) > + $(warning Disabling post unwind, no support found.) > + endif > dwarf-post-unwind := 0 > else > dwarf-post-unwind-text := libdw > @@ -828,7 +830,9 @@ endef > > PYTHON_EXTENSION_SUFFIX := '.so' > ifdef NO_LIBPYTHON > - $(call disable-python,Python support disabled by user) > + ifneq ($(MINIMAL),1) > + $(call disable-python,Python support disabled by user) > + endif
Thanks for the clean up! In perf-tools-next/linux-next both LIBPYTHON and LIBPERL are gone (context in https://lore.kernel.org/linux-perf-users/[email protected]/#t ). > else > > ifndef PYTHON > diff --git a/tools/perf/Makefile.perf b/tools/perf/Makefile.perf > index 29cfd44c427f3..c770077e7d392 100644 > --- a/tools/perf/Makefile.perf > +++ b/tools/perf/Makefile.perf > @@ -129,6 +129,9 @@ include ../scripts/utilities.mak > # Define GEN_VMLINUX_H to generate vmlinux.h from the BTF. > # > # Define NO_SHELLCHECK if you do not want to run shellcheck during build > +# > +# Define MINIMAL=1 to build without any optional feature, needing only a C > +# compiler and library, flex and bison > > # As per kernel Makefile, avoid funny character set dependencies > unexport LC_ALL > @@ -174,6 +177,37 @@ endef > > LD += $(EXTRA_LDFLAGS) > > +# MINIMAL=1 is handled here rather than in Makefile.config, which is included > +# after the pkg-config and shellcheck setup below > +ifeq ($(MINIMAL),1) > + NO_LIBELF := 1 > + NO_LIBDW := 1 > + NO_LIBTRACEEVENT := 1 > + NO_JEVENTS := 1 > + NO_LIBPYTHON := 1 > + NO_LIBBPF := 1 > + BUILD_BPF_SKEL := 0 > + NO_SLANG := 1 > + NO_DEMANGLE := 1 > + NO_BACKTRACE := 1 > + NO_AIO := 1 > + NO_ZLIB := 1 > + NO_LZMA := 1 > + NO_LIBZSTD := 1 > + NO_LIBNUMA := 1 > + NO_LIBLLVM := 1 > + NO_CAPSTONE := 1 > + NO_LIBPFM4 := 1 > + NO_LIBDEBUGINFOD := 1 > + NO_BABELTRACE2 := 1 > + NO_SDT := 1 > + NO_JVMTI := 1 > + NO_RUST := 1 > + NO_PERF_READ_VDSO32 := 1 > + NO_PERF_READ_VDSOX32 := 1 > + NO_SHELLCHECK := 1 We should expand this with NO_MYPY and NO_PYLINT for the perf-tools-next version. Thanks, Ian > +endif > + > # Some distros provide the command $(CROSS_COMPILE)pkg-config for > # searching packges installed with Multiarch. Use it for cross > # compilation if it is existed. > @@ -195,8 +229,10 @@ else > PKG_CONFIG_LIBDIR := $(PKG_CONFIG_LIBDIR):/usr/local/share/pkgconfig/ > PKG_CONFIG_LIBDIR := $(PKG_CONFIG_LIBDIR):/usr/share/pkgconfig/ > export PKG_CONFIG_LIBDIR > - $(warning Missing PKG_CONFIG_LIBDIR, PKG_CONFIG_PATH and > PKG_CONFIG_SYSROOT_DIR for cross compilation,) > - $(warning set PKG_CONFIG_LIBDIR for using Multiarch libs.) > + ifneq ($(MINIMAL),1) > + $(warning Missing PKG_CONFIG_LIBDIR, PKG_CONFIG_PATH and > PKG_CONFIG_SYSROOT_DIR for cross compilation,) > + $(warning set PKG_CONFIG_LIBDIR for using Multiarch libs.) > + endif > endif > endif > endif > diff --git a/tools/perf/tests/make b/tools/perf/tests/make > index d2c2f526e1db0..dbbc971a144b2 100644 > --- a/tools/perf/tests/make > +++ b/tools/perf/tests/make > @@ -115,13 +115,7 @@ make_install_prefix := install prefix=/tmp/krava > make_install_prefix_slash := install prefix=/tmp/krava/ > make_static := LDFLAGS=-static NO_PERF_READ_VDSO32=1 > NO_PERF_READ_VDSOX32=1 NO_JVMTI=1 NO_LIBTRACEEVENT=1 NO_LIBELF=1 > > -# all the NO_* variable combined > -make_minimal := NO_LIBPYTHON=1 > -make_minimal += NO_DEMANGLE=1 NO_LIBELF=1 NO_BACKTRACE=1 > -make_minimal += NO_LIBNUMA=1 NO_LIBBIONIC=1 NO_LIBDW=1 > -make_minimal += NO_LIBBPF=1 > -make_minimal += NO_SDT=1 NO_JVMTI=1 NO_LIBZSTD=1 > -make_minimal += NO_CAPSTONE=1 > +make_minimal := MINIMAL=1 > > # binutils 2_42 and newer have bfd_thread_init() > new_libbfd := $(shell echo '#include <bfd.h>' | $(CC) -E -x c - | grep > bfd_thread_init) > -- > 2.53.0 >

