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

Message ID 20230311065753.3012826-8-irogers@google.com
State New
Headers
Series Perf tool build improvements |

Commit Message

Ian Rogers March 11, 2023, 6:57 a.m. UTC
  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.

Signed-off-by: Ian Rogers <irogers@google.com>
---
 tools/perf/Makefile.config | 25 ++++++++++---------------
 tools/perf/Makefile.perf   |  2 ++
 tools/perf/tests/make      |  2 ++
 3 files changed, 14 insertions(+), 15 deletions(-)
  

Comments

Arnaldo Carvalho de Melo March 13, 2023, 7:37 p.m. UTC | #1
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@google.com>
> ---
>  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
>
  

Patch

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