Subject: Re: [PATCH bpf-next] perf build: Install libbpf headers locally when building

From: Arnaldo Carvalho de Melo <[email-masked]>
Date: Sat, 6 Nov 2021 17:12:48 -0300

Em Sat, Nov 06, 2021 at 04:29:16PM -0300, Arnaldo Carvalho de Melo escreveu:
> Em Fri, Nov 05, 2021 at 11:38:50AM -0700, Andrii Nakryiko escreveu:
> > On Thu, Nov 4, 2021 at 7:02 PM Quentin Monnet <[email-masked]> wrote:
> > >
> > > API headers from libbpf should not be accessed directly from the
> > > library's source directory. Instead, they should be exported with "make
> > > install_headers". Let's adjust perf's Makefile to install those headers
> > > locally when building libbpf.
> > >
> > > Signed-off-by: Quentin Monnet <[email-masked]>
> > > ---
> > > Note: Sending to bpf-next because it's directly related to libbpf, and
> > > to similar patches merged through bpf-next, but maybe Arnaldo prefers to
> > > take it?
> > 
> > Arnaldo would know better how to thoroughly test it, so I'd prefer to
> > route this through perf tree. Any objections, Arnaldo?
> 
> Preliminary testing passed for 'BUILD_BPF_SKEL=1' with without
> LIBBPF_DYNAMIC=1 (using the system's libbpf-devel to build perf), so far
> so good, so I tentatively applied it, will see with the full set of
> containers.

Because all the preliminary tests used O= to have that OUTPUT variable
set, when we do simply:

	make -C tools/perf

it breaks:

⬢[acme@toolbox perf]$ make -C tools clean > /dev/null 2>&1
⬢[acme@toolbox perf]$ make JOBS=1 -C tools/perf
make: Entering directory '/var/home/acme/git/perf/tools/perf'
  BUILD:   Doing 'make -j1' parallel build
  HOSTCC  fixdep.o
  HOSTLD  fixdep-in.o
  LINK    fixdep
<SNIP ABI sync warnings>

Auto-detecting system features:
...                         dwarf: [ on  ]
...            dwarf_getlocations: [ on  ]
...                         glibc: [ on  ]
...                        libbfd: [ on  ]
...                libbfd-buildid: [ on  ]
...                        libcap: [ on  ]
...                        libelf: [ on  ]
...                       libnuma: [ on  ]
...        numa_num_possible_cpus: [ on  ]
...                       libperl: [ on  ]
...                     libpython: [ on  ]
...                     libcrypto: [ on  ]
...                     libunwind: [ on  ]
...            libdw-dwarf-unwind: [ on  ]
...                          zlib: [ on  ]
...                          lzma: [ on  ]
...                     get_cpuid: [ on  ]
...                           bpf: [ on  ]
...                        libaio: [ on  ]
...                       libzstd: [ on  ]
...        disassembler-four-args: [ on  ]

  CC      fd/array.o
  LD      fd/libapi-in.o
  CC      fs/fs.o
  CC      fs/tracing_path.o
  CC      fs/cgroup.o
  LD      fs/libapi-in.o
  CC      cpu.o
  CC      debug.o
  CC      str_error_r.o
  LD      libapi-in.o
  AR      libapi.a
  CC      exec-cmd.o
  CC      help.o
  CC      pager.o
  CC      parse-options.o
  CC      run-command.o
  CC      sigchain.o
  CC      subcmd-config.o
  LD      libsubcmd-in.o
  AR      libsubcmd.a
  CC      core.o
  CC      cpumap.o
  CC      threadmap.o
  CC      evsel.o
  CC      evlist.o
  CC      mmap.o
  CC      zalloc.o
  CC      xyarray.o
  CC      lib.o
  LD      libperf-in.o
  AR      libperf.a
make[2]: *** No rule to make target 'libbpf', needed by 'libbpf/libbpf.a'.  Stop.
make[1]: *** [Makefile.perf:240: sub-make] Error 2
make: *** [Makefile:70: all] Error 2
make: Leaving directory '/var/home/acme/git/perf/tools/perf'
⬢[acme@toolbox perf]$

Trying to fix...

- Arnaldo