Re: [PATCH v1 07/13] perf build: Make binutil libraries opt in

From: Arnaldo Carvalho de Melo
Date: Mon Mar 13 2023 - 15:38:05 EST


Em Fri, Mar 10, 2023 at 10:57:47PM -0800, Ian Rogers escreveu:
> binutils is GPLv3 so distributions cannot ship perf linked against
> libbfd and libiberty as the licenses are incompatible. Rather than
> defaulting the build to opting in to libbfd and libiberty support and
> opting out via NO_LIBBFD=1 and NO_DEMANGLE=1, make building against
> the libraries optional and enabled with BUILD_NONDISTRO=1.

So now I get this:

⬢[acme@toolbox perf-tools-next]$ perf -vv
perf version 6.3.rc1.gace4d44d094c
dwarf: [ on ] # HAVE_DWARF_SUPPORT
dwarf_getlocations: [ on ] # HAVE_DWARF_GETLOCATIONS_SUPPORT
syscall_table: [ on ] # HAVE_SYSCALL_TABLE_SUPPORT
libbfd: [ OFF ] # HAVE_LIBBFD_SUPPORT
debuginfod: [ on ] # HAVE_DEBUGINFOD_SUPPORT
libelf: [ on ] # HAVE_LIBELF_SUPPORT
libnuma: [ on ] # HAVE_LIBNUMA_SUPPORT
numa_num_possible_cpus: [ on ] # HAVE_LIBNUMA_SUPPORT
libperl: [ on ] # HAVE_LIBPERL_SUPPORT
libpython: [ on ] # HAVE_LIBPYTHON_SUPPORT
libslang: [ on ] # HAVE_SLANG_SUPPORT
libcrypto: [ on ] # HAVE_LIBCRYPTO_SUPPORT
libunwind: [ on ] # HAVE_LIBUNWIND_SUPPORT
libdw-dwarf-unwind: [ on ] # HAVE_DWARF_SUPPORT
zlib: [ on ] # HAVE_ZLIB_SUPPORT
lzma: [ on ] # HAVE_LZMA_SUPPORT
get_cpuid: [ on ] # HAVE_AUXTRACE_SUPPORT
bpf: [ on ] # HAVE_LIBBPF_SUPPORT
aio: [ on ] # HAVE_AIO_SUPPORT
zstd: [ on ] # HAVE_ZSTD_SUPPORT
libpfm4: [ on ] # HAVE_LIBPFM
libtraceevent: [ on ] # HAVE_LIBTRACEEVENT
BPF skeletons: [ on ] # HAVE_BPF_SKEL
⬢[acme@toolbox perf-tools-next]$

Shouldn't we have, right next to libbpf that libstdc++ feature status?

- Arnaldo

> Signed-off-by: Ian Rogers <irogers@xxxxxxxxxx>
> ---
> tools/perf/Makefile.config | 25 ++++++++++---------------
> tools/perf/Makefile.perf | 2 ++
> tools/perf/tests/make | 2 ++
> 3 files changed, 14 insertions(+), 15 deletions(-)
>
> diff --git a/tools/perf/Makefile.config b/tools/perf/Makefile.config
> index 2557654d8e29..5756498248e0 100644
> --- a/tools/perf/Makefile.config
> +++ b/tools/perf/Makefile.config
> @@ -882,7 +882,7 @@ ifneq ($(NO_JEVENTS),1)
> endif
> endif
>
> -ifndef NO_LIBBFD
> +ifdef BUILD_NONDISTRO
> ifeq ($(feature-libbfd), 1)
> EXTLIBS += -lbfd -lopcodes
> else
> @@ -905,6 +905,7 @@ ifndef NO_LIBBFD
> $(call feature_check,disassembler-init-styled)
> endif
>
> + CFLAGS += -DHAVE_LIBBFD_SUPPORT
> ifeq ($(feature-libbfd-buildid), 1)
> CFLAGS += -DHAVE_LIBBFD_BUILDID_SUPPORT
> else
> @@ -915,32 +916,26 @@ endif
> ifdef NO_DEMANGLE
> CFLAGS += -DNO_DEMANGLE
> else
> - ifdef HAVE_CPLUS_DEMANGLE_SUPPORT
> - EXTLIBS += -liberty
> - else
> + ifdef BUILD_NONDISTRO
> ifeq ($(filter -liberty,$(EXTLIBS)),)
> - $(call feature_check,cplus-demangle)
> -
> - # we dont have neither HAVE_CPLUS_DEMANGLE_SUPPORT
> - # or any of 'bfd iberty z' trinity
> - ifeq ($(feature-cplus-demangle), 1)
> + ifdef HAVE_CPLUS_DEMANGLE_SUPPORT
> EXTLIBS += -liberty
> else
> - msg := $(warning No bfd.h/libbfd found, please install binutils-dev[el]/zlib-static/libiberty-dev to gain symbol demangling)
> - CFLAGS += -DNO_DEMANGLE
> + $(call feature_check,cplus-demangle)
> + ifeq ($(feature-cplus-demangle), 1)
> + EXTLIBS += -liberty
> + endif
> endif
> endif
> endif
>
> ifneq ($(filter -liberty,$(EXTLIBS)),)
> CFLAGS += -DHAVE_CPLUS_DEMANGLE_SUPPORT
> + else
> + CFLAGS += -DNO_DEMANGLE
> endif
> endif
>
> -ifneq ($(filter -lbfd,$(EXTLIBS)),)
> - CFLAGS += -DHAVE_LIBBFD_SUPPORT
> -endif
> -
> ifndef NO_ZLIB
> ifeq ($(feature-zlib), 1)
> CFLAGS += -DHAVE_ZLIB_SUPPORT
> diff --git a/tools/perf/Makefile.perf b/tools/perf/Makefile.perf
> index 283ee4f56234..a35bc995d5d8 100644
> --- a/tools/perf/Makefile.perf
> +++ b/tools/perf/Makefile.perf
> @@ -128,6 +128,8 @@ include ../scripts/utilities.mak
> #
> # Define NO_BPF_SKEL to disable BPF skeletons
> #
> +# Define BUILD_NONDISTRO to enable building an linking against libbfd and
> +# libiberty distribution license incompatible libraries.
>
> # As per kernel Makefile, avoid funny character set dependencies
> unexport LC_ALL
> diff --git a/tools/perf/tests/make b/tools/perf/tests/make
> index deb37fb982e9..c2f74ed43418 100644
> --- a/tools/perf/tests/make
> +++ b/tools/perf/tests/make
> @@ -68,6 +68,7 @@ python_perf_so := $(shell $(MAKE) python_perf_target|grep "Target is:"|awk '{pri
> make_clean_all := clean all
> make_python_perf_so := $(python_perf_so)
> make_debug := DEBUG=1
> +make_nondistro := BUILD_NONDISTRO=1
> make_no_libperl := NO_LIBPERL=1
> make_no_libpython := NO_LIBPYTHON=1
> make_no_scripts := NO_LIBPYTHON=1 NO_LIBPERL=1
> @@ -134,6 +135,7 @@ MAKE_F := $(MAKE) -f $(MK)
> endif
> run += make_python_perf_so
> run += make_debug
> +run += make_nondistro
> run += make_no_libperl
> run += make_no_libpython
> run += make_no_scripts
> --
> 2.40.0.rc1.284.g88254d51c5-goog
>

--

- Arnaldo