linux-perf-users.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* [PATCH 1/1] tools build: Remove libbfd from the set of expected libraries to build perf
@ 2025-04-17  2:18 arnaldo.melo
  2025-04-17 15:49 ` Ian Rogers
  0 siblings, 1 reply; 5+ messages in thread
From: arnaldo.melo @ 2025-04-17  2:18 UTC (permalink / raw)
  To: Namhyung Kim
  Cc: Adrian Hunter, Ian Rogers, James Clark, Jiri Olsa, Kan Liang,
	Quentin Monnet, Linux Kernel Mailing List, linux-perf-users

The tools/build/feature/test-all.c file tries to build with the most
common set of libraries expected to be present to build perf, and these
days libbfd (binutils) isn't one since it was made opt-in via
BUILD_NONDISTRO=1 on the make command line as it has license issues.

Fix this by removing the tests from there.

Fixes: dd317df072071903 ("perf build: Make binutil libraries opt in")
Cc: Adrian Hunter <adrian.hunter@intel.com>
Cc: Ian Rogers <irogers@google.com>
Cc: James Clark <james.clark@linaro.org>
Cc: Jiri Olsa <jolsa@kernel.org>
Cc: Kan Liang <kan.liang@linux.intel.com>
Cc: Namhyung Kim <namhyung@kernel.org>
Cc: Quentin Monnet <qmo@kernel.org>
Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
---
 tools/build/Makefile.feature   | 12 ------------
 tools/build/feature/Makefile   |  2 +-
 tools/build/feature/test-all.c | 19 -------------------
 tools/perf/Makefile.config     |  1 +
 4 files changed, 2 insertions(+), 32 deletions(-)

diff --git a/tools/build/Makefile.feature b/tools/build/Makefile.feature
index 57bd995ce6afa318..da025a8040a9a154 100644
--- a/tools/build/Makefile.feature
+++ b/tools/build/Makefile.feature
@@ -42,17 +42,12 @@ endef
 #
 #   All the others should have lines in tools/build/feature/test-all.c like:
 #
-#    #define main main_test_disassembler_init_styled
-#    # include "test-disassembler-init-styled.c"
-#    #undef main
-#
 #    #define main main_test_libzstd
 #    # include "test-libzstd.c"
 #    #undef main
 #
 #    int main(int argc, char *argv[])
 #    {
-#      main_test_disassembler_four_args();
 #      main_test_libzstd();
 #      return 0;
 #    }
@@ -60,7 +55,6 @@ endef
 #    If the sample above works, then we end up with these lines in the FEATURE-DUMP
 #    file:
 #
-#    feature-disassembler-four-args=1
 #    feature-libzstd=1
 #
 FEATURE_TESTS_BASIC :=                  \
@@ -71,8 +65,6 @@ FEATURE_TESTS_BASIC :=                  \
         get_current_dir_name            \
         gettid				\
         glibc                           \
-        libbfd                          \
-        libbfd-buildid			\
         libelf                          \
         libelf-getphdrnum               \
         libelf-gelf_getnote             \
@@ -102,8 +94,6 @@ FEATURE_TESTS_BASIC :=                  \
         setns				\
         libaio				\
         libzstd				\
-        disassembler-four-args		\
-        disassembler-init-styled	\
         file-handle
 
 # FEATURE_TESTS_BASIC + FEATURE_TESTS_EXTRA is the complete list
@@ -119,8 +109,6 @@ FEATURE_TESTS_EXTRA :=                  \
          hello                          \
          libbabeltrace                  \
          libcapstone                    \
-         libbfd-liberty                 \
-         libbfd-liberty-z               \
          libopencsd                     \
          cxx                            \
          llvm                           \
diff --git a/tools/build/feature/Makefile b/tools/build/feature/Makefile
index b8b5fb183dd40693..76724931f68e1b92 100644
--- a/tools/build/feature/Makefile
+++ b/tools/build/feature/Makefile
@@ -110,7 +110,7 @@ all: $(FILES)
 __BUILD = $(CC) $(CFLAGS) -MD -Wall -Werror -o $@ $(patsubst %.bin,%.c,$(@F)) $(LDFLAGS)
   BUILD = $(__BUILD) > $(@:.bin=.make.output) 2>&1
   BUILD_BFD = $(BUILD) -DPACKAGE='"perf"' -lbfd -ldl
-  BUILD_ALL = $(BUILD) -fstack-protector-all -O2 -D_FORTIFY_SOURCE=2 -ldw -lelf -lnuma -lelf -lslang $(FLAGS_PERL_EMBED) $(FLAGS_PYTHON_EMBED) -DPACKAGE='"perf"' -lbfd -ldl -lz -llzma -lzstd
+  BUILD_ALL = $(BUILD) -fstack-protector-all -O2 -D_FORTIFY_SOURCE=2 -ldw -lelf -lnuma -lelf -lslang $(FLAGS_PERL_EMBED) $(FLAGS_PYTHON_EMBED) -lz -llzma -lzstd
 
 __BUILDXX = $(CXX) $(CXXFLAGS) -MD -Wall -Werror -o $@ $(patsubst %.bin,%.cpp,$(@F)) $(LDFLAGS)
   BUILDXX = $(__BUILDXX) > $(@:.bin=.make.output) 2>&1
diff --git a/tools/build/feature/test-all.c b/tools/build/feature/test-all.c
index 03ddaac6f4c4dfa2..1010f233d9c1ad49 100644
--- a/tools/build/feature/test-all.c
+++ b/tools/build/feature/test-all.c
@@ -66,14 +66,6 @@
 # include "test-libslang.c"
 #undef main
 
-#define main main_test_libbfd
-# include "test-libbfd.c"
-#undef main
-
-#define main main_test_libbfd_buildid
-# include "test-libbfd-buildid.c"
-#undef main
-
 #define main main_test_backtrace
 # include "test-backtrace.c"
 #undef main
@@ -158,14 +150,6 @@
 # include "test-reallocarray.c"
 #undef main
 
-#define main main_test_disassembler_four_args
-# include "test-disassembler-four-args.c"
-#undef main
-
-#define main main_test_disassembler_init_styled
-# include "test-disassembler-init-styled.c"
-#undef main
-
 #define main main_test_libzstd
 # include "test-libzstd.c"
 #undef main
@@ -193,8 +177,6 @@ int main(int argc, char *argv[])
 	main_test_libelf_gelf_getnote();
 	main_test_libelf_getshdrstrndx();
 	main_test_libslang();
-	main_test_libbfd();
-	main_test_libbfd_buildid();
 	main_test_backtrace();
 	main_test_libnuma();
 	main_test_numa_num_possible_cpus();
@@ -213,7 +195,6 @@ int main(int argc, char *argv[])
 	main_test_setns();
 	main_test_libaio();
 	main_test_reallocarray();
-	main_test_disassembler_four_args();
 	main_test_libzstd();
 	main_test_libtraceevent();
 	main_test_libtracefs();
diff --git a/tools/perf/Makefile.config b/tools/perf/Makefile.config
index 9f08a6e96b351707..7e9aa3d910c2cdcc 100644
--- a/tools/perf/Makefile.config
+++ b/tools/perf/Makefile.config
@@ -917,6 +917,7 @@ ifneq ($(NO_JEVENTS),1)
 endif
 
 ifdef BUILD_NONDISTRO
+  $(call feature_check,libbfd)
   ifeq ($(feature-libbfd), 1)
     EXTLIBS += -lbfd -lopcodes
   else
-- 
2.49.0


^ permalink raw reply related	[flat|nested] 5+ messages in thread

* Re: [PATCH 1/1] tools build: Remove libbfd from the set of expected libraries to build perf
  2025-04-17  2:18 [PATCH 1/1] tools build: Remove libbfd from the set of expected libraries to build perf arnaldo.melo
@ 2025-04-17 15:49 ` Ian Rogers
  2025-04-17 21:58   ` Arnaldo Carvalho de Melo
  0 siblings, 1 reply; 5+ messages in thread
From: Ian Rogers @ 2025-04-17 15:49 UTC (permalink / raw)
  To: arnaldo.melo
  Cc: Namhyung Kim, Adrian Hunter, James Clark, Jiri Olsa, Kan Liang,
	Quentin Monnet, Linux Kernel Mailing List, linux-perf-users

On Wed, Apr 16, 2025 at 7:18 PM <arnaldo.melo@gmail.com> wrote:
>
> The tools/build/feature/test-all.c file tries to build with the most
> common set of libraries expected to be present to build perf, and these
> days libbfd (binutils) isn't one since it was made opt-in via
> BUILD_NONDISTRO=1 on the make command line as it has license issues.
>
> Fix this by removing the tests from there.
>
> Fixes: dd317df072071903 ("perf build: Make binutil libraries opt in")
> Cc: Adrian Hunter <adrian.hunter@intel.com>
> Cc: Ian Rogers <irogers@google.com>
> Cc: James Clark <james.clark@linaro.org>
> Cc: Jiri Olsa <jolsa@kernel.org>
> Cc: Kan Liang <kan.liang@linux.intel.com>
> Cc: Namhyung Kim <namhyung@kernel.org>
> Cc: Quentin Monnet <qmo@kernel.org>
> Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>

Reviewed-by: Ian Rogers <irogers@google.com>

There is a wider set of cleanups that remove BUILD_NONDISTRO and
libbfd that I posted back in January:
https://lore.kernel.org/lkml/20250122174308.350350-1-irogers@google.com/
These changes are carried in:
https://github.com/googleprodkernel/linux-perf/commits/google_tools_master/
The remaining use of libbfd for BPF JIT code disassembly is converted
to using either capstone or LLVM:
https://lore.kernel.org/lkml/20250122174308.350350-11-irogers@google.com/
Namhyung had concerns over code like:
https://github.com/googleprodkernel/linux-perf/blob/google_tools_master/tools/perf/util/capstone.c#L23-L132
where structs and enums derived from pahole are declared rather than
gathered from a #include. Doing things this way was deliberate in the
patch series so that the code could assume capstone or llvm support
may be present, falling back when not, and that the build wouldn't
need to have support for a no header file option that could do nothing
(this option would always be to try to fallback on dlopen and nobody
could create a less enabled build by forgetting to have a header
file). Theoretically the structs and defines, incorporated by way of
pahole, could change and a header file dependency would be robust to
this. In practice this would be an ABI incompatible change just as
changing a function name looked up by dlsym would be. Namhyung took
onboard my suggestion that we could reduce the set of structs/enums/..
for capstone by disabling the `print_insn_x86` when using dlopen, but
I think such a change should warn the user of reduced functionality,
cleaning up the warning would just bring back the code as I had
proposed:
https://lore.kernel.org/lkml/CAP-5=fXL0hXFT+t6gHp2RFd4dKnebSkd+rewudpmdentKGPURw@mail.gmail.com/

I think the patch series should be a priority to land as:
1) there is substantial cleanup wrt libbfd, libiberty, .. with
dependencies being factored out into their our C files;
2) the dependencies on libcapstone and libllvm are broken at build
time, allowing distributions to ship perf with a more minimal set of
dependencies and then later get the faster code or better support by
installing the libraries - I think ideally we'd do the same for the
libpython dependency as Namhyung has done in his uftrace;
3) the series adds BPF JIT disassembly.

Maybe this can be an occasion we respect the opinions of the patch
author and land what may be just a good patch series, but not quite
perfect to someone else's definition of perfect. We can always put
patches on top to make things perfect and discuss the merits at that
moment.

Thanks,
Ian

> ---
>  tools/build/Makefile.feature   | 12 ------------
>  tools/build/feature/Makefile   |  2 +-
>  tools/build/feature/test-all.c | 19 -------------------
>  tools/perf/Makefile.config     |  1 +
>  4 files changed, 2 insertions(+), 32 deletions(-)
>
> diff --git a/tools/build/Makefile.feature b/tools/build/Makefile.feature
> index 57bd995ce6afa318..da025a8040a9a154 100644
> --- a/tools/build/Makefile.feature
> +++ b/tools/build/Makefile.feature
> @@ -42,17 +42,12 @@ endef
>  #
>  #   All the others should have lines in tools/build/feature/test-all.c like:
>  #
> -#    #define main main_test_disassembler_init_styled
> -#    # include "test-disassembler-init-styled.c"
> -#    #undef main
> -#
>  #    #define main main_test_libzstd
>  #    # include "test-libzstd.c"
>  #    #undef main
>  #
>  #    int main(int argc, char *argv[])
>  #    {
> -#      main_test_disassembler_four_args();
>  #      main_test_libzstd();
>  #      return 0;
>  #    }
> @@ -60,7 +55,6 @@ endef
>  #    If the sample above works, then we end up with these lines in the FEATURE-DUMP
>  #    file:
>  #
> -#    feature-disassembler-four-args=1
>  #    feature-libzstd=1
>  #
>  FEATURE_TESTS_BASIC :=                  \
> @@ -71,8 +65,6 @@ FEATURE_TESTS_BASIC :=                  \
>          get_current_dir_name            \
>          gettid                         \
>          glibc                           \
> -        libbfd                          \
> -        libbfd-buildid                 \
>          libelf                          \
>          libelf-getphdrnum               \
>          libelf-gelf_getnote             \
> @@ -102,8 +94,6 @@ FEATURE_TESTS_BASIC :=                  \
>          setns                          \
>          libaio                         \
>          libzstd                                \
> -        disassembler-four-args         \
> -        disassembler-init-styled       \
>          file-handle
>
>  # FEATURE_TESTS_BASIC + FEATURE_TESTS_EXTRA is the complete list
> @@ -119,8 +109,6 @@ FEATURE_TESTS_EXTRA :=                  \
>           hello                          \
>           libbabeltrace                  \
>           libcapstone                    \
> -         libbfd-liberty                 \
> -         libbfd-liberty-z               \
>           libopencsd                     \
>           cxx                            \
>           llvm                           \
> diff --git a/tools/build/feature/Makefile b/tools/build/feature/Makefile
> index b8b5fb183dd40693..76724931f68e1b92 100644
> --- a/tools/build/feature/Makefile
> +++ b/tools/build/feature/Makefile
> @@ -110,7 +110,7 @@ all: $(FILES)
>  __BUILD = $(CC) $(CFLAGS) -MD -Wall -Werror -o $@ $(patsubst %.bin,%.c,$(@F)) $(LDFLAGS)
>    BUILD = $(__BUILD) > $(@:.bin=.make.output) 2>&1
>    BUILD_BFD = $(BUILD) -DPACKAGE='"perf"' -lbfd -ldl
> -  BUILD_ALL = $(BUILD) -fstack-protector-all -O2 -D_FORTIFY_SOURCE=2 -ldw -lelf -lnuma -lelf -lslang $(FLAGS_PERL_EMBED) $(FLAGS_PYTHON_EMBED) -DPACKAGE='"perf"' -lbfd -ldl -lz -llzma -lzstd
> +  BUILD_ALL = $(BUILD) -fstack-protector-all -O2 -D_FORTIFY_SOURCE=2 -ldw -lelf -lnuma -lelf -lslang $(FLAGS_PERL_EMBED) $(FLAGS_PYTHON_EMBED) -lz -llzma -lzstd
>
>  __BUILDXX = $(CXX) $(CXXFLAGS) -MD -Wall -Werror -o $@ $(patsubst %.bin,%.cpp,$(@F)) $(LDFLAGS)
>    BUILDXX = $(__BUILDXX) > $(@:.bin=.make.output) 2>&1
> diff --git a/tools/build/feature/test-all.c b/tools/build/feature/test-all.c
> index 03ddaac6f4c4dfa2..1010f233d9c1ad49 100644
> --- a/tools/build/feature/test-all.c
> +++ b/tools/build/feature/test-all.c
> @@ -66,14 +66,6 @@
>  # include "test-libslang.c"
>  #undef main
>
> -#define main main_test_libbfd
> -# include "test-libbfd.c"
> -#undef main
> -
> -#define main main_test_libbfd_buildid
> -# include "test-libbfd-buildid.c"
> -#undef main
> -
>  #define main main_test_backtrace
>  # include "test-backtrace.c"
>  #undef main
> @@ -158,14 +150,6 @@
>  # include "test-reallocarray.c"
>  #undef main
>
> -#define main main_test_disassembler_four_args
> -# include "test-disassembler-four-args.c"
> -#undef main
> -
> -#define main main_test_disassembler_init_styled
> -# include "test-disassembler-init-styled.c"
> -#undef main
> -
>  #define main main_test_libzstd
>  # include "test-libzstd.c"
>  #undef main
> @@ -193,8 +177,6 @@ int main(int argc, char *argv[])
>         main_test_libelf_gelf_getnote();
>         main_test_libelf_getshdrstrndx();
>         main_test_libslang();
> -       main_test_libbfd();
> -       main_test_libbfd_buildid();
>         main_test_backtrace();
>         main_test_libnuma();
>         main_test_numa_num_possible_cpus();
> @@ -213,7 +195,6 @@ int main(int argc, char *argv[])
>         main_test_setns();
>         main_test_libaio();
>         main_test_reallocarray();
> -       main_test_disassembler_four_args();
>         main_test_libzstd();
>         main_test_libtraceevent();
>         main_test_libtracefs();
> diff --git a/tools/perf/Makefile.config b/tools/perf/Makefile.config
> index 9f08a6e96b351707..7e9aa3d910c2cdcc 100644
> --- a/tools/perf/Makefile.config
> +++ b/tools/perf/Makefile.config
> @@ -917,6 +917,7 @@ ifneq ($(NO_JEVENTS),1)
>  endif
>
>  ifdef BUILD_NONDISTRO
> +  $(call feature_check,libbfd)
>    ifeq ($(feature-libbfd), 1)
>      EXTLIBS += -lbfd -lopcodes
>    else
> --
> 2.49.0
>

^ permalink raw reply	[flat|nested] 5+ messages in thread

* Re: [PATCH 1/1] tools build: Remove libbfd from the set of expected libraries to build perf
  2025-04-17 15:49 ` Ian Rogers
@ 2025-04-17 21:58   ` Arnaldo Carvalho de Melo
  2025-04-17 23:12     ` Ian Rogers
  0 siblings, 1 reply; 5+ messages in thread
From: Arnaldo Carvalho de Melo @ 2025-04-17 21:58 UTC (permalink / raw)
  To: Ian Rogers
  Cc: arnaldo.melo, Namhyung Kim, Adrian Hunter, James Clark, Jiri Olsa,
	Kan Liang, Quentin Monnet, Linux Kernel Mailing List,
	linux-perf-users

On Thu, Apr 17, 2025 at 08:49:35AM -0700, Ian Rogers wrote:
> On Wed, Apr 16, 2025 at 7:18 PM <arnaldo.melo@gmail.com> wrote:
> >
> > The tools/build/feature/test-all.c file tries to build with the most
> > common set of libraries expected to be present to build perf, and these
> > days libbfd (binutils) isn't one since it was made opt-in via
> > BUILD_NONDISTRO=1 on the make command line as it has license issues.
> >
> > Fix this by removing the tests from there.
> >
> > Fixes: dd317df072071903 ("perf build: Make binutil libraries opt in")
> > Cc: Adrian Hunter <adrian.hunter@intel.com>
> > Cc: Ian Rogers <irogers@google.com>
> > Cc: James Clark <james.clark@linaro.org>
> > Cc: Jiri Olsa <jolsa@kernel.org>
> > Cc: Kan Liang <kan.liang@linux.intel.com>
> > Cc: Namhyung Kim <namhyung@kernel.org>
> > Cc: Quentin Monnet <qmo@kernel.org>
> > Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
> 
> Reviewed-by: Ian Rogers <irogers@google.com>

Thanks.
 
> There is a wider set of cleanups that remove BUILD_NONDISTRO and
> libbfd that I posted back in January:
> https://lore.kernel.org/lkml/20250122174308.350350-1-irogers@google.com/

I thought that discussion hadn't come to a conclusion, then I was in
vacation in January + LSFMM/BPF, lost track of it, will read your
message below and look at it again.

Its just that I recreated my toolbox container for building perf to a
fedora:42 based one and went on trying to build it from the base system
that gets installed in such containers till the point where I found the
above problem.

Now doing 'make -C tools/perf build-test' I'm getting this after the
above patch:

            make_nondistro_O: cd . && make BUILD_NONDISTRO=1 FEATURES_DUMP=/home/acme/git/perf-tools-next/tools/perf/BUILD_TEST_FEATURE_DUMP -j32 O=/tmp/tmp.NssFD0ssxu DESTDIR=/tmp/tmp.oEuROiOLtI
cd . && make BUILD_NONDISTRO=1 FEATURES_DUMP=/home/acme/git/perf-tools-next/tools/perf/BUILD_TEST_FEATURE_DUMP -j32 O=/tmp/tmp.NssFD0ssxu DESTDIR=/tmp/tmp.oEuROiOLtI
  BUILD:   Doing 'make -j32' parallel build
Warning: Kernel ABI header differences:
  diff -u tools/include/uapi/linux/bits.h include/uapi/linux/bits.h
  diff -u tools/include/linux/bits.h include/linux/bits.h
  diff -u tools/include/vdso/unaligned.h include/vdso/unaligned.h
  diff -u tools/arch/arm64/include/asm/cputype.h arch/arm64/include/asm/cputype.h
Makefile.config:952: Old version of libbfd/binutils things like PE executable profiling will not be available
Makefile.config:968: No libllvm 13+ found, slower source file resolution, please install llvm-devel/llvm-dev
Makefile.config:1147: No openjdk development package found, please install JDK package, e.g. openjdk-8-jdk, java-1.8.0-openjdk-devel

  GEN     /tmp/tmp.NssFD0ssxu/common-cmds.h
<SNIP>
In file included from util/disasm_bpf.c:18:
/home/acme/git/perf-tools-next/tools/include/tools/dis-asm-compat.h:10:6: error: redeclaration of ‘enum disassembler_style’
   10 | enum disassembler_style {DISASSEMBLER_STYLE_NOT_EMPTY};
      |      ^~~~~~~~~~~~~~~~~~
In file included from util/disasm_bpf.c:15:
/usr/include/dis-asm.h:53:6: note: originally defined here
   53 | enum disassembler_style
      |      ^~~~~~~~~~~~~~~~~~
/home/acme/git/perf-tools-next/tools/include/tools/dis-asm-compat.h: In function ‘init_disassemble_info_compat’:
/home/acme/git/perf-tools-next/tools/include/tools/dis-asm-compat.h:50:9: error: too few arguments to function ‘init_disassemble_info’; expected 4, have 3
   50 |         init_disassemble_info(info, stream,
      |         ^~~~~~~~~~~~~~~~~~~~~
/usr/include/dis-asm.h:482:13: note: declared here
  482 | extern void init_disassemble_info (struct disassemble_info *dinfo, void *stream,
      |             ^~~~~~~~~~~~~~~~~~~~~
util/disasm_bpf.c: In function ‘symbol__disassemble_bpf’:
util/disasm_bpf.c:109:36: error: incompatible type for argument 1 of ‘disassembler’
  109 |         disassemble = disassembler(bfdf);
      |                                    ^~~~
      |                                    |
      |                                    bfd *
/usr/include/dis-asm.h:411:63: note: expected ‘enum bfd_architecture’ but argument is of type ‘bfd *’
  411 | extern disassembler_ftype disassembler (enum bfd_architecture arc,
      |                                         ~~~~~~~~~~~~~~~~~~~~~~^~~
util/disasm_bpf.c:109:23: error: too few arguments to function ‘disassembler’; expected 4, have 1
  109 |         disassemble = disassembler(bfdf);
      |                       ^~~~~~~~~~~~
/usr/include/dis-asm.h:411:27: note: declared here
  411 | extern disassembler_ftype disassembler (enum bfd_architecture arc,
      |                           ^~~~~~~~~~~~
make[6]: *** [/home/acme/git/perf-tools-next/tools/build/Makefile.build:86: /tmp/tmp.NssFD0ssxu/util/disasm_bpf.o] Error 1
make[6]: *** Waiting for unfinished jobs....
  CC      /tmp/tmp.NssFD0ssxu/bench/mem-memcpy-x86-64-asm.o
<SNIP>
make[5]: *** [/home/acme/git/perf-tools-next/tools/build/Makefile.build:142: util] Error 2
make[4]: *** [Makefile.perf:798: /tmp/tmp.NssFD0ssxu/perf-util-in.o] Error 2
make[4]: *** Waiting for unfinished jobs....
  LD      /tmp/tmp.NssFD0ssxu/tests/workloads/perf-test-in.o
  LD      /tmp/tmp.NssFD0ssxu/tests/perf-test-in.o
  LD      /tmp/tmp.NssFD0ssxu/perf-test-in.o
  LD      /tmp/tmp.NssFD0ssxu/perf-in.o
  CC      /tmp/tmp.NssFD0ssxu/pmu-events/pmu-events.o
  LD      /tmp/tmp.NssFD0ssxu/pmu-events/pmu-events-in.o
make[3]: *** [Makefile.perf:290: sub-make] Error 2
make[2]: *** [Makefile:76: all] Error 2
make[1]: *** [tests/make:341: make_nondistro_O] Error 1
make: *** [Makefile:109: build-test] Error 2
make: Leaving directory '/home/acme/git/perf-tools-next/tools/perf'

- Arnaldo

> These changes are carried in:
> https://github.com/googleprodkernel/linux-perf/commits/google_tools_master/
> The remaining use of libbfd for BPF JIT code disassembly is converted
> to using either capstone or LLVM:
> https://lore.kernel.org/lkml/20250122174308.350350-11-irogers@google.com/
> Namhyung had concerns over code like:
> https://github.com/googleprodkernel/linux-perf/blob/google_tools_master/tools/perf/util/capstone.c#L23-L132
> where structs and enums derived from pahole are declared rather than
> gathered from a #include. Doing things this way was deliberate in the
> patch series so that the code could assume capstone or llvm support
> may be present, falling back when not, and that the build wouldn't
> need to have support for a no header file option that could do nothing
> (this option would always be to try to fallback on dlopen and nobody
> could create a less enabled build by forgetting to have a header
> file). Theoretically the structs and defines, incorporated by way of
> pahole, could change and a header file dependency would be robust to
> this. In practice this would be an ABI incompatible change just as
> changing a function name looked up by dlsym would be. Namhyung took
> onboard my suggestion that we could reduce the set of structs/enums/..
> for capstone by disabling the `print_insn_x86` when using dlopen, but
> I think such a change should warn the user of reduced functionality,
> cleaning up the warning would just bring back the code as I had
> proposed:
> https://lore.kernel.org/lkml/CAP-5=fXL0hXFT+t6gHp2RFd4dKnebSkd+rewudpmdentKGPURw@mail.gmail.com/
> 
> I think the patch series should be a priority to land as:
> 1) there is substantial cleanup wrt libbfd, libiberty, .. with
> dependencies being factored out into their our C files;
> 2) the dependencies on libcapstone and libllvm are broken at build
> time, allowing distributions to ship perf with a more minimal set of
> dependencies and then later get the faster code or better support by
> installing the libraries - I think ideally we'd do the same for the
> libpython dependency as Namhyung has done in his uftrace;
> 3) the series adds BPF JIT disassembly.
> 
> Maybe this can be an occasion we respect the opinions of the patch
> author and land what may be just a good patch series, but not quite
> perfect to someone else's definition of perfect. We can always put
> patches on top to make things perfect and discuss the merits at that
> moment.
> 
> Thanks,
> Ian
> 
> > ---
> >  tools/build/Makefile.feature   | 12 ------------
> >  tools/build/feature/Makefile   |  2 +-
> >  tools/build/feature/test-all.c | 19 -------------------
> >  tools/perf/Makefile.config     |  1 +
> >  4 files changed, 2 insertions(+), 32 deletions(-)
> >
> > diff --git a/tools/build/Makefile.feature b/tools/build/Makefile.feature
> > index 57bd995ce6afa318..da025a8040a9a154 100644
> > --- a/tools/build/Makefile.feature
> > +++ b/tools/build/Makefile.feature
> > @@ -42,17 +42,12 @@ endef
> >  #
> >  #   All the others should have lines in tools/build/feature/test-all.c like:
> >  #
> > -#    #define main main_test_disassembler_init_styled
> > -#    # include "test-disassembler-init-styled.c"
> > -#    #undef main
> > -#
> >  #    #define main main_test_libzstd
> >  #    # include "test-libzstd.c"
> >  #    #undef main
> >  #
> >  #    int main(int argc, char *argv[])
> >  #    {
> > -#      main_test_disassembler_four_args();
> >  #      main_test_libzstd();
> >  #      return 0;
> >  #    }
> > @@ -60,7 +55,6 @@ endef
> >  #    If the sample above works, then we end up with these lines in the FEATURE-DUMP
> >  #    file:
> >  #
> > -#    feature-disassembler-four-args=1
> >  #    feature-libzstd=1
> >  #
> >  FEATURE_TESTS_BASIC :=                  \
> > @@ -71,8 +65,6 @@ FEATURE_TESTS_BASIC :=                  \
> >          get_current_dir_name            \
> >          gettid                         \
> >          glibc                           \
> > -        libbfd                          \
> > -        libbfd-buildid                 \
> >          libelf                          \
> >          libelf-getphdrnum               \
> >          libelf-gelf_getnote             \
> > @@ -102,8 +94,6 @@ FEATURE_TESTS_BASIC :=                  \
> >          setns                          \
> >          libaio                         \
> >          libzstd                                \
> > -        disassembler-four-args         \
> > -        disassembler-init-styled       \
> >          file-handle
> >
> >  # FEATURE_TESTS_BASIC + FEATURE_TESTS_EXTRA is the complete list
> > @@ -119,8 +109,6 @@ FEATURE_TESTS_EXTRA :=                  \
> >           hello                          \
> >           libbabeltrace                  \
> >           libcapstone                    \
> > -         libbfd-liberty                 \
> > -         libbfd-liberty-z               \
> >           libopencsd                     \
> >           cxx                            \
> >           llvm                           \
> > diff --git a/tools/build/feature/Makefile b/tools/build/feature/Makefile
> > index b8b5fb183dd40693..76724931f68e1b92 100644
> > --- a/tools/build/feature/Makefile
> > +++ b/tools/build/feature/Makefile
> > @@ -110,7 +110,7 @@ all: $(FILES)
> >  __BUILD = $(CC) $(CFLAGS) -MD -Wall -Werror -o $@ $(patsubst %.bin,%.c,$(@F)) $(LDFLAGS)
> >    BUILD = $(__BUILD) > $(@:.bin=.make.output) 2>&1
> >    BUILD_BFD = $(BUILD) -DPACKAGE='"perf"' -lbfd -ldl
> > -  BUILD_ALL = $(BUILD) -fstack-protector-all -O2 -D_FORTIFY_SOURCE=2 -ldw -lelf -lnuma -lelf -lslang $(FLAGS_PERL_EMBED) $(FLAGS_PYTHON_EMBED) -DPACKAGE='"perf"' -lbfd -ldl -lz -llzma -lzstd
> > +  BUILD_ALL = $(BUILD) -fstack-protector-all -O2 -D_FORTIFY_SOURCE=2 -ldw -lelf -lnuma -lelf -lslang $(FLAGS_PERL_EMBED) $(FLAGS_PYTHON_EMBED) -lz -llzma -lzstd
> >
> >  __BUILDXX = $(CXX) $(CXXFLAGS) -MD -Wall -Werror -o $@ $(patsubst %.bin,%.cpp,$(@F)) $(LDFLAGS)
> >    BUILDXX = $(__BUILDXX) > $(@:.bin=.make.output) 2>&1
> > diff --git a/tools/build/feature/test-all.c b/tools/build/feature/test-all.c
> > index 03ddaac6f4c4dfa2..1010f233d9c1ad49 100644
> > --- a/tools/build/feature/test-all.c
> > +++ b/tools/build/feature/test-all.c
> > @@ -66,14 +66,6 @@
> >  # include "test-libslang.c"
> >  #undef main
> >
> > -#define main main_test_libbfd
> > -# include "test-libbfd.c"
> > -#undef main
> > -
> > -#define main main_test_libbfd_buildid
> > -# include "test-libbfd-buildid.c"
> > -#undef main
> > -
> >  #define main main_test_backtrace
> >  # include "test-backtrace.c"
> >  #undef main
> > @@ -158,14 +150,6 @@
> >  # include "test-reallocarray.c"
> >  #undef main
> >
> > -#define main main_test_disassembler_four_args
> > -# include "test-disassembler-four-args.c"
> > -#undef main
> > -
> > -#define main main_test_disassembler_init_styled
> > -# include "test-disassembler-init-styled.c"
> > -#undef main
> > -
> >  #define main main_test_libzstd
> >  # include "test-libzstd.c"
> >  #undef main
> > @@ -193,8 +177,6 @@ int main(int argc, char *argv[])
> >         main_test_libelf_gelf_getnote();
> >         main_test_libelf_getshdrstrndx();
> >         main_test_libslang();
> > -       main_test_libbfd();
> > -       main_test_libbfd_buildid();
> >         main_test_backtrace();
> >         main_test_libnuma();
> >         main_test_numa_num_possible_cpus();
> > @@ -213,7 +195,6 @@ int main(int argc, char *argv[])
> >         main_test_setns();
> >         main_test_libaio();
> >         main_test_reallocarray();
> > -       main_test_disassembler_four_args();
> >         main_test_libzstd();
> >         main_test_libtraceevent();
> >         main_test_libtracefs();
> > diff --git a/tools/perf/Makefile.config b/tools/perf/Makefile.config
> > index 9f08a6e96b351707..7e9aa3d910c2cdcc 100644
> > --- a/tools/perf/Makefile.config
> > +++ b/tools/perf/Makefile.config
> > @@ -917,6 +917,7 @@ ifneq ($(NO_JEVENTS),1)
> >  endif
> >
> >  ifdef BUILD_NONDISTRO
> > +  $(call feature_check,libbfd)
> >    ifeq ($(feature-libbfd), 1)
> >      EXTLIBS += -lbfd -lopcodes
> >    else
> > --
> > 2.49.0
> >

^ permalink raw reply	[flat|nested] 5+ messages in thread

* Re: [PATCH 1/1] tools build: Remove libbfd from the set of expected libraries to build perf
  2025-04-17 21:58   ` Arnaldo Carvalho de Melo
@ 2025-04-17 23:12     ` Ian Rogers
  2025-04-18 15:23       ` Arnaldo Carvalho de Melo
  0 siblings, 1 reply; 5+ messages in thread
From: Ian Rogers @ 2025-04-17 23:12 UTC (permalink / raw)
  To: Arnaldo Carvalho de Melo
  Cc: arnaldo.melo, Namhyung Kim, Adrian Hunter, James Clark, Jiri Olsa,
	Kan Liang, Quentin Monnet, Linux Kernel Mailing List,
	linux-perf-users

On Thu, Apr 17, 2025 at 2:58 PM Arnaldo Carvalho de Melo
<acme@kernel.org> wrote:
> > There is a wider set of cleanups that remove BUILD_NONDISTRO and
> > libbfd that I posted back in January:
> > https://lore.kernel.org/lkml/20250122174308.350350-1-irogers@google.com/
>
> I thought that discussion hadn't come to a conclusion, then I was in
> vacation in January + LSFMM/BPF, lost track of it, will read your
> message below and look at it again.
>
> Its just that I recreated my toolbox container for building perf to a
> fedora:42 based one and went on trying to build it from the base system
> that gets installed in such containers till the point where I found the
> above problem.
>
> Now doing 'make -C tools/perf build-test' I'm getting this after the
> above patch:
>
>             make_nondistro_O: cd . && make BUILD_NONDISTRO=1 FEATURES_DUMP=/home/acme/git/perf-tools-next/tools/perf/BUILD_TEST_FEATURE_DUMP -j32 O=/tmp/tmp.NssFD0ssxu DESTDIR=/tmp/tmp.oEuROiOLtI
> cd . && make BUILD_NONDISTRO=1 FEATURES_DUMP=/home/acme/git/perf-tools-next/tools/perf/BUILD_TEST_FEATURE_DUMP -j32 O=/tmp/tmp.NssFD0ssxu DESTDIR=/tmp/tmp.oEuROiOLtI
>   BUILD:   Doing 'make -j32' parallel build
> Warning: Kernel ABI header differences:
>   diff -u tools/include/uapi/linux/bits.h include/uapi/linux/bits.h
>   diff -u tools/include/linux/bits.h include/linux/bits.h
>   diff -u tools/include/vdso/unaligned.h include/vdso/unaligned.h
>   diff -u tools/arch/arm64/include/asm/cputype.h arch/arm64/include/asm/cputype.h
> Makefile.config:952: Old version of libbfd/binutils things like PE executable profiling will not be available
> Makefile.config:968: No libllvm 13+ found, slower source file resolution, please install llvm-devel/llvm-dev
> Makefile.config:1147: No openjdk development package found, please install JDK package, e.g. openjdk-8-jdk, java-1.8.0-openjdk-devel
>
>   GEN     /tmp/tmp.NssFD0ssxu/common-cmds.h
> <SNIP>
> In file included from util/disasm_bpf.c:18:
> /home/acme/git/perf-tools-next/tools/include/tools/dis-asm-compat.h:10:6: error: redeclaration of ‘enum disassembler_style’
>    10 | enum disassembler_style {DISASSEMBLER_STYLE_NOT_EMPTY};
>       |      ^~~~~~~~~~~~~~~~~~
> In file included from util/disasm_bpf.c:15:
> /usr/include/dis-asm.h:53:6: note: originally defined here
>    53 | enum disassembler_style
>       |      ^~~~~~~~~~~~~~~~~~
> /home/acme/git/perf-tools-next/tools/include/tools/dis-asm-compat.h: In function ‘init_disassemble_info_compat’:
> /home/acme/git/perf-tools-next/tools/include/tools/dis-asm-compat.h:50:9: error: too few arguments to function ‘init_disassemble_info’; expected 4, have 3
>    50 |         init_disassemble_info(info, stream,
>       |         ^~~~~~~~~~~~~~~~~~~~~
> /usr/include/dis-asm.h:482:13: note: declared here
>   482 | extern void init_disassemble_info (struct disassemble_info *dinfo, void *stream,
>       |             ^~~~~~~~~~~~~~~~~~~~~
> util/disasm_bpf.c: In function ‘symbol__disassemble_bpf’:
> util/disasm_bpf.c:109:36: error: incompatible type for argument 1 of ‘disassembler’
>   109 |         disassemble = disassembler(bfdf);
>       |                                    ^~~~
>       |                                    |
>       |                                    bfd *
> /usr/include/dis-asm.h:411:63: note: expected ‘enum bfd_architecture’ but argument is of type ‘bfd *’
>   411 | extern disassembler_ftype disassembler (enum bfd_architecture arc,
>       |                                         ~~~~~~~~~~~~~~~~~~~~~~^~~
> util/disasm_bpf.c:109:23: error: too few arguments to function ‘disassembler’; expected 4, have 1
>   109 |         disassemble = disassembler(bfdf);
>       |                       ^~~~~~~~~~~~
> /usr/include/dis-asm.h:411:27: note: declared here
>   411 | extern disassembler_ftype disassembler (enum bfd_architecture arc,
>       |                           ^~~~~~~~~~~~
> make[6]: *** [/home/acme/git/perf-tools-next/tools/build/Makefile.build:86: /tmp/tmp.NssFD0ssxu/util/disasm_bpf.o] Error 1
> make[6]: *** Waiting for unfinished jobs....
>   CC      /tmp/tmp.NssFD0ssxu/bench/mem-memcpy-x86-64-asm.o
> <SNIP>
> make[5]: *** [/home/acme/git/perf-tools-next/tools/build/Makefile.build:142: util] Error 2
> make[4]: *** [Makefile.perf:798: /tmp/tmp.NssFD0ssxu/perf-util-in.o] Error 2
> make[4]: *** Waiting for unfinished jobs....
>   LD      /tmp/tmp.NssFD0ssxu/tests/workloads/perf-test-in.o
>   LD      /tmp/tmp.NssFD0ssxu/tests/perf-test-in.o
>   LD      /tmp/tmp.NssFD0ssxu/perf-test-in.o
>   LD      /tmp/tmp.NssFD0ssxu/perf-in.o
>   CC      /tmp/tmp.NssFD0ssxu/pmu-events/pmu-events.o
>   LD      /tmp/tmp.NssFD0ssxu/pmu-events/pmu-events-in.o
> make[3]: *** [Makefile.perf:290: sub-make] Error 2
> make[2]: *** [Makefile:76: all] Error 2
> make[1]: *** [tests/make:341: make_nondistro_O] Error 1
> make: *** [Makefile:109: build-test] Error 2
> make: Leaving directory '/home/acme/git/perf-tools-next/tools/perf'

Looked like a bad cherry pick, I sent rebased versions of the patches
and an extra small cleanup patch in the v4 patch series:
https://lore.kernel.org/lkml/20250417230740.86048-1-irogers@google.com/

Thanks,
Ian

> - Arnaldo

^ permalink raw reply	[flat|nested] 5+ messages in thread

* Re: [PATCH 1/1] tools build: Remove libbfd from the set of expected libraries to build perf
  2025-04-17 23:12     ` Ian Rogers
@ 2025-04-18 15:23       ` Arnaldo Carvalho de Melo
  0 siblings, 0 replies; 5+ messages in thread
From: Arnaldo Carvalho de Melo @ 2025-04-18 15:23 UTC (permalink / raw)
  To: Ian Rogers
  Cc: arnaldo.melo, Namhyung Kim, Adrian Hunter, James Clark, Jiri Olsa,
	Kan Liang, Quentin Monnet, Linux Kernel Mailing List,
	linux-perf-users

On Thu, Apr 17, 2025 at 04:12:16PM -0700, Ian Rogers wrote:
> On Thu, Apr 17, 2025 at 2:58 PM Arnaldo Carvalho de Melo <acme@kernel.org> wrote:
> > > There is a wider set of cleanups that remove BUILD_NONDISTRO and
> > > libbfd that I posted back in January:
> > > https://lore.kernel.org/lkml/20250122174308.350350-1-irogers@google.com/

> > I thought that discussion hadn't come to a conclusion, then I was in
> > vacation in January + LSFMM/BPF, lost track of it, will read your
> > message below and look at it again.

> > Its just that I recreated my toolbox container for building perf to a
> > fedora:42 based one and went on trying to build it from the base system
> > that gets installed in such containers till the point where I found the
> > above problem.

> > Now doing 'make -C tools/perf build-test' I'm getting this after the
> > above patch:

> >             make_nondistro_O: cd . && make BUILD_NONDISTRO=1 FEATURES_DUMP=/home/acme/git/perf-tools-next/tools/perf/BUILD_TEST_FEATURE_DUMP -j32 O=/tmp/tmp.NssFD0ssxu DESTDIR=/tmp/tmp.oEuROiOLtI
> > cd . && make BUILD_NONDISTRO=1 FEATURES_DUMP=/home/acme/git/perf-tools-next/tools/perf/BUILD_TEST_FEATURE_DUMP -j32 O=/tmp/tmp.NssFD0ssxu DESTDIR=/tmp/tmp.oEuROiOLtI
> >   BUILD:   Doing 'make -j32' parallel build

<SNIP>

> > util/disasm_bpf.c:109:23: error: too few arguments to function ‘disassembler’; expected 4, have 1
> >   109 |         disassemble = disassembler(bfdf);
> >       |                       ^~~~~~~~~~~~
> > /usr/include/dis-asm.h:411:27: note: declared here
> >   411 | extern disassembler_ftype disassembler (enum bfd_architecture arc,
> >       |                           ^~~~~~~~~~~~
> > make[6]: *** [/home/acme/git/perf-tools-next/tools/build/Makefile.build:86: /tmp/tmp.NssFD0ssxu/util/disasm_bpf.o] Error 1
> > make[6]: *** Waiting for unfinished jobs....
> >   CC      /tmp/tmp.NssFD0ssxu/bench/mem-memcpy-x86-64-asm.o
> > <SNIP>

<SNIP>
 
> Looked like a bad cherry pick, I sent rebased versions of the patches

I didn't cherry pick from your series, I mean on what is in
perf-tools-next/perf-tools-next

> and an extra small cleanup patch in the v4 patch series:
> https://lore.kernel.org/lkml/20250417230740.86048-1-irogers@google.com/

Thanks for resending it, I'll test with it.

- Arnaldo

^ permalink raw reply	[flat|nested] 5+ messages in thread

end of thread, other threads:[~2025-04-18 15:23 UTC | newest]

Thread overview: 5+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2025-04-17  2:18 [PATCH 1/1] tools build: Remove libbfd from the set of expected libraries to build perf arnaldo.melo
2025-04-17 15:49 ` Ian Rogers
2025-04-17 21:58   ` Arnaldo Carvalho de Melo
2025-04-17 23:12     ` Ian Rogers
2025-04-18 15:23       ` Arnaldo Carvalho de Melo

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).