[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Message-ID: <CAP-5=fVX+bLBRJCiziDi_hBySgv2NFtDoghtpheSSxVAvvETGw@mail.gmail.com>
Date: Wed, 17 Sep 2025 11:01:51 -0700
From: Ian Rogers <irogers@...gle.com>
To: Michael Petlan <mpetlan@...hat.com>, Peter Zijlstra <peterz@...radead.org>,
Ingo Molnar <mingo@...hat.com>, Arnaldo Carvalho de Melo <acme@...nel.org>, Namhyung Kim <namhyung@...nel.org>,
Mark Rutland <mark.rutland@....com>,
Alexander Shishkin <alexander.shishkin@...ux.intel.com>, Jiri Olsa <jolsa@...nel.org>,
Ian Rogers <irogers@...gle.com>, Adrian Hunter <adrian.hunter@...el.com>,
Kan Liang <kan.liang@...ux.intel.com>, "Steven Rostedt (Google)" <rostedt@...dmis.org>,
James Clark <james.clark@...aro.org>, Tomas Glozar <tglozar@...hat.com>,
Quentin Monnet <qmo@...nel.org>, Leo Yan <leo.yan@....com>, Charlie Jenkins <charlie@...osinc.com>,
linux-kernel@...r.kernel.org, linux-perf-users@...r.kernel.org
Subject: Re: [PATCH v1] tools build: Make libperl opt-in rather than opt-out, deprecate
On Mon, Sep 8, 2025 at 11:19 AM Ian Rogers <irogers@...gle.com> wrote:
>
> If libperl is installed then the perf tool build will build against
> it. There appears to be limited interest in the scripting support for
> perl so let's make it opt-in and deprecate it.
>
> Signed-off-by: Ian Rogers <irogers@...gle.com>
> ---
> In the future it would be nice to refactor the python support, for
> example, so that perf doesn't steal the main thread which UIs like
> textual assume they can have. When such work is done, any equivalent
> perl work will be a challenge and it might just be best to delete it.
In:
https://lore.kernel.org/lkml/aMrk03gigBlGcYLK@x1/
Arnaldo mentioned:
> Maybe we should be a tad more cautious and start with emitting a warning
> that "libperl is deprecated (holler if you disagree if you use it!)" and
> then make it opt-in, and then remove it.
With this patch applied you need to add LIBPERL=1 to get libperl
support in perf - there is no warning if libperl is missing, but
building will fail if libperl is missing and the build has LIBPERL=1.
The perf version output is changed to:
```
$ perf version --build-options
perf version 6.17.rc3.g8eca69269947
aio: [ on ] # HAVE_AIO_SUPPORT
bpf: [ on ] # HAVE_LIBBPF_SUPPORT
bpf_skeletons: [ on ] # HAVE_BPF_SKEL
debuginfod: [ on ] # HAVE_DEBUGINFOD_SUPPORT
dwarf: [ on ] # HAVE_LIBDW_SUPPORT
dwarf_getlocations: [ on ] # HAVE_LIBDW_SUPPORT
dwarf-unwind: [ on ] # HAVE_DWARF_UNWIND_SUPPORT
auxtrace: [ on ] # HAVE_AUXTRACE_SUPPORT
libbfd: [ OFF ] # HAVE_LIBBFD_SUPPORT ( tip:
Deprecated, license incompatibility, use BUILD_NONDISTRO=1 and install
binutils-dev[el] )
libbpf-strings: [ on ] # HAVE_LIBBPF_STRINGS_SUPPORT
libcapstone: [ on ] # HAVE_LIBCAPSTONE_SUPPORT
libdw-dwarf-unwind: [ on ] # HAVE_LIBDW_SUPPORT
libelf: [ on ] # HAVE_LIBELF_SUPPORT
libnuma: [ on ] # HAVE_LIBNUMA_SUPPORT
libopencsd: [ OFF ] # HAVE_CSTRACE_SUPPORT
libperl: [ OFF ] # HAVE_LIBPERL_SUPPORT ( tip:
Deprecated, use LIBPERL=1 and install libperl-dev to build with it )
libpfm4: [ on ] # HAVE_LIBPFM
libpython: [ on ] # HAVE_LIBPYTHON_SUPPORT
libslang: [ on ] # HAVE_SLANG_SUPPORT
libtraceevent: [ on ] # HAVE_LIBTRACEEVENT
libunwind: [ OFF ] # HAVE_LIBUNWIND_SUPPORT ( tip:
Deprecated, use LIBUNWIND=1 and install libunwind-dev[el] to build
with it )
lzma: [ on ] # HAVE_LZMA_SUPPORT
numa_num_possible_cpus: [ on ] # HAVE_LIBNUMA_SUPPORT
zlib: [ on ] # HAVE_ZLIB_SUPPORT
zstd: [ on ] # HAVE_ZSTD_SUPPORT
```
ie there is a tip saying about deprecation and how to get support back.
Thanks,
Ian
> ---
> tools/build/Makefile.feature | 3 +--
> tools/build/feature/test-all.c | 9 ++-------
> tools/perf/Makefile.config | 12 +++---------
> tools/perf/Makefile.perf | 4 ++--
> tools/perf/builtin-check.c | 2 +-
> tools/perf/tests/make | 8 ++++----
> 6 files changed, 13 insertions(+), 25 deletions(-)
>
> diff --git a/tools/build/Makefile.feature b/tools/build/Makefile.feature
> index 649c5ab8e8f2..9c1a69d26f51 100644
> --- a/tools/build/Makefile.feature
> +++ b/tools/build/Makefile.feature
> @@ -80,7 +80,6 @@ FEATURE_TESTS_BASIC := \
> libelf-zstd \
> libnuma \
> numa_num_possible_cpus \
> - libperl \
> libpython \
> libslang \
> libtraceevent \
> @@ -121,6 +120,7 @@ FEATURE_TESTS_EXTRA := \
> libbfd-liberty \
> libbfd-liberty-z \
> libopencsd \
> + libperl \
> cxx \
> llvm \
> clang \
> @@ -144,7 +144,6 @@ FEATURE_DISPLAY ?= \
> libelf \
> libnuma \
> numa_num_possible_cpus \
> - libperl \
> libpython \
> libcapstone \
> llvm-perf \
> diff --git a/tools/build/feature/test-all.c b/tools/build/feature/test-all.c
> index 4419fb4710bd..e1847db6f8e6 100644
> --- a/tools/build/feature/test-all.c
> +++ b/tools/build/feature/test-all.c
> @@ -7,17 +7,13 @@
> */
>
> /*
> - * Quirk: Python and Perl headers cannot be in arbitrary places, so keep
> - * these 3 testcases at the top:
> + * Quirk: Python headers cannot be in arbitrary places, so keep this testcase at
> + * the top:
> */
> #define main main_test_libpython
> # include "test-libpython.c"
> #undef main
>
> -#define main main_test_libperl
> -# include "test-libperl.c"
> -#undef main
> -
> #define main main_test_hello
> # include "test-hello.c"
> #undef main
> @@ -161,7 +157,6 @@
> int main(int argc, char *argv[])
> {
> main_test_libpython();
> - main_test_libperl();
> main_test_hello();
> main_test_libelf();
> main_test_get_current_dir_name();
> diff --git a/tools/perf/Makefile.config b/tools/perf/Makefile.config
> index 5a5832ee7b53..0f4b297fbacc 100644
> --- a/tools/perf/Makefile.config
> +++ b/tools/perf/Makefile.config
> @@ -817,9 +817,7 @@ ifdef GTK2
> endif
> endif
>
> -ifdef NO_LIBPERL
> - CFLAGS += -DNO_LIBPERL
> -else
> +ifdef LIBPERL
> PERL_EMBED_LDOPTS = $(shell perl -MExtUtils::Embed -e ldopts 2>/dev/null)
> PERL_EMBED_LDFLAGS = $(call strip-libs,$(PERL_EMBED_LDOPTS))
> PERL_EMBED_LIBADD = $(call grep-libs,$(PERL_EMBED_LDOPTS))
> @@ -829,17 +827,13 @@ else
> PERL_EMBED_LDOPTS := $(filter-out -specs=%,$(PERL_EMBED_LDOPTS))
> FLAGS_PERL_EMBED=$(PERL_EMBED_CCOPTS) $(PERL_EMBED_LDOPTS)
>
> + $(call feature_check,libperl)
> ifneq ($(feature-libperl), 1)
> - CFLAGS += -DNO_LIBPERL
> - NO_LIBPERL := 1
> - $(warning Missing perl devel files. Disabling perl scripting support, please install perl-ExtUtils-Embed/libperl-dev)
> + $(error Missing perl devel files. Please install perl-ExtUtils-Embed/libperl-dev)
> else
> LDFLAGS += $(PERL_EMBED_LDFLAGS)
> EXTLIBS += $(PERL_EMBED_LIBADD)
> CFLAGS += -DHAVE_LIBPERL_SUPPORT
> - ifeq ($(CC_NO_CLANG), 0)
> - CFLAGS += -Wno-compound-token-split-by-macro
> - endif
> $(call detected,CONFIG_LIBPERL)
> endif
> endif
> diff --git a/tools/perf/Makefile.perf b/tools/perf/Makefile.perf
> index e2150acc2c13..7d6ac03a7109 100644
> --- a/tools/perf/Makefile.perf
> +++ b/tools/perf/Makefile.perf
> @@ -17,7 +17,7 @@ include ../scripts/utilities.mak
> #
> # Define CROSS_COMPILE as prefix name of compiler if you want cross-builds.
> #
> -# Define NO_LIBPERL to disable perl script extension.
> +# Define LIBPERL to enable perl script extension.
> #
> # Define NO_LIBPYTHON to disable python script extension.
> #
> @@ -1103,7 +1103,7 @@ endif
> $(INSTALL) $(OUTPUT)perf-archive -t '$(DESTDIR_SQ)$(perfexec_instdir_SQ)'
> $(call QUIET_INSTALL, perf-iostat) \
> $(INSTALL) $(OUTPUT)perf-iostat -t '$(DESTDIR_SQ)$(perfexec_instdir_SQ)'
> -ifndef NO_LIBPERL
> +ifdef LIBPERL
> $(call QUIET_INSTALL, perl-scripts) \
> $(INSTALL) -d -m 755 '$(DESTDIR_SQ)$(perfexec_instdir_SQ)/scripts/perl/Perf-Trace-Util/lib/Perf/Trace'; \
> $(INSTALL) scripts/perl/Perf-Trace-Util/lib/Perf/Trace/* -m 644 -t '$(DESTDIR_SQ)$(perfexec_instdir_SQ)/scripts/perl/Perf-Trace-Util/lib/Perf/Trace'; \
> diff --git a/tools/perf/builtin-check.c b/tools/perf/builtin-check.c
> index b1e205871ab1..5457762f7dd5 100644
> --- a/tools/perf/builtin-check.c
> +++ b/tools/perf/builtin-check.c
> @@ -49,7 +49,7 @@ struct feature_status supported_features[] = {
> FEATURE_STATUS("libelf", HAVE_LIBELF_SUPPORT),
> FEATURE_STATUS("libnuma", HAVE_LIBNUMA_SUPPORT),
> FEATURE_STATUS("libopencsd", HAVE_CSTRACE_SUPPORT),
> - FEATURE_STATUS("libperl", HAVE_LIBPERL_SUPPORT),
> + FEATURE_STATUS_TIP("libperl", HAVE_LIBPERL_SUPPORT, "Deprecated, use LIBPERL=1 and install libperl-dev to build with it"),
> FEATURE_STATUS("libpfm4", HAVE_LIBPFM),
> FEATURE_STATUS("libpython", HAVE_LIBPYTHON_SUPPORT),
> FEATURE_STATUS("libslang", HAVE_SLANG_SUPPORT),
> diff --git a/tools/perf/tests/make b/tools/perf/tests/make
> index c574a678c28a..b650ce8864ed 100644
> --- a/tools/perf/tests/make
> +++ b/tools/perf/tests/make
> @@ -73,9 +73,9 @@ make_extra_tests := EXTRA_TESTS=1
> make_jevents_all := JEVENTS_ARCH=all
> make_no_bpf_skel := BUILD_BPF_SKEL=0
> make_gen_vmlinux_h := GEN_VMLINUX_H=1
> -make_no_libperl := NO_LIBPERL=1
> +make_libperl := LIBPERL=1
> make_no_libpython := NO_LIBPYTHON=1
> -make_no_scripts := NO_LIBPYTHON=1 NO_LIBPERL=1
> +make_no_scripts := NO_LIBPYTHON=1
> make_no_slang := NO_SLANG=1
> make_no_gtk2 := NO_GTK2=1
> make_no_ui := NO_SLANG=1 NO_GTK2=1
> @@ -118,7 +118,7 @@ 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_LIBPERL=1 NO_LIBPYTHON=1 NO_GTK2=1
> +make_minimal := NO_LIBPYTHON=1 NO_GTK2=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_LIBDW_DWARF_UNWIND=1 NO_AUXTRACE=1 NO_LIBBPF=1
> @@ -143,7 +143,7 @@ run += make_extra_tests
> run += make_jevents_all
> run += make_no_bpf_skel
> run += make_gen_vmlinux_h
> -run += make_no_libperl
> +run += make_libperl
> run += make_no_libpython
> run += make_no_scripts
> run += make_no_slang
> --
> 2.51.0.384.g4c02a37b29-goog
>
Powered by blists - more mailing lists