Re: [PATCH dwarves] libbpf: allow to use packaged version

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On Sun, Jan 3, 2021 at 1:30 PM Luca Boccassi <bluca@xxxxxxxxxx> wrote:
>
> On Sun, 2021-01-03 at 11:10 -0800, Andrii Nakryiko wrote:
> > On Sat, Jan 2, 2021 at 10:25 AM Luca Boccassi <bluca@xxxxxxxxxx>
> > wrote:
> > >
> > > Add a new CMake option, LIBBPF_EMBEDDED, to switch between the
> > > embedded version and the system version (searched via pkg-config)
> > > of libbpf. Set the system version as the default.
> > >
> >
> > There's been a lot of arguments about libbpf as a submodule, so I
> > don't think we need to go about pros and cons again, but I just
> > wanted
> > to cast my vote against doing this at all. Having pahole built with
> > libbpf statically (only) was a great thing for me so far with
> > iterating quickly and adopting new APIs without overcomplicating the
> > source code with all sorts of feature detection code. Without it,
> > adopting libbpf's faster string deduplication, BTF writing APIs,
> > module/split BTFs, etc, etc, would be much bigger PITA and/or would
> > prolong such changes. To the point that I personally wouldn't bother
> > with some of them at all. Distro maintainers obviously don't care
> > about such inconveniences for developers, but it's a real factor in
> > determining what kind of functionality is implemented in pahole, so I
> > hope Arnaldo won't dismiss this without thinking about this
> > carefully.
>
> You know very well that it's not about caring or not caring :-) There
> are simply conflicting interests, and both sides are valid.

I didn't mean it in a negative way. Different priorities and interests
is a better way to put it, sure.

> I believe we can have best of both worlds with this. The user who does
> the build is empowered to choose what they prefer. The additional cost
> would be to set the correct minimum version required in the CMake file,
> as it's done with other dependencies, including CMake itself.
>
> > > Signed-off-by: Luca Boccassi <bluca@xxxxxxxxxx>
> > > ---
> > > Note: I can switch the default around if you prefer.
> >
> > With BCC you seem to go with the default preserving existing behavior
> > (using libbpf from a submodule), so if we do this, I think the
> > default
> > should be flipped.
>
> Sure, sent v2.
>
> > >
> > >  CMakeLists.txt   | 49 +++++++++++++++++++++++++++++++++++---------
> > > ----
> > >  btf_encoder.c    |  5 +++++
> > >  btf_loader.c     |  4 ++++
> > >  libbtf.c         |  6 ++++++
> > >  libbtf.h         |  4 ++++
> > >  pahole.c         |  4 ++++
> > >  pahole_strings.h |  4 ++++
> > >  strings.c        |  4 ++++
> > >  8 files changed, 67 insertions(+), 13 deletions(-)
> > >
> >
> > [...]
> >
> > >  #include "dutil.h"
> > > +#ifdef LIBBPF_FOUND
> > > +#include <bpf/libbpf.h>
> > > +#else
> > >  #include "lib/bpf/src/libbpf.h"
> > > +#endif
> >
> > this is horrible, are you sure there is no way to make <bpf/libbpf.h>
> > work for both cases?
>
> It really is, but unfortunately I don't see other ways that are not
> just as horrible. Suggestions welcome. The only thing I can think of,
> is if libbpf used the same directory hierarchy in-tree as it does in
> the installed tree. Ie: move those headers from libbpf/src/foo.h to
> libbpf/include/bpf/foo.h. Then we would just have the -Ilib/bpf/include
> in CPPFLAGS for the embedded build defined in the CMake files, and the
> sources would only use the "system" includes everywhere, without
> ifdeffery.
>
> Given you maintain libbpf, would that be something you'd accept? It's
> quite a common pattern for libraries to store their public headers in a
> separate directory in the git tree, after all.

It's quite risky, as there are plenty of (sometimes private)
integrations that assume such a layout of libbpf, so we'll be breaking
them badly. Makefile-based projects do `make install_headers` to put
*only exported* headers into the desired location. I'm not sure what's
the best way to achieve the same with Cmake, though.

One quick and easy hack would be to put a symlink lib/include/bpf ->
lib/bpf/src into pahole repo. And add -Ilib/include to let compiler
handle <bpf/*.h> properly.

>
> --
> Kind regards,
> Luca Boccassi



[Index of Archives]     [Linux USB Devel]     [Linux Audio Users]     [Yosemite News]     [Linux Kernel]     [Linux SCSI]

  Powered by Linux