Message ID | 20190321102531.31810-1-luca.boccassi@gmail.com |
---|---|
State | Changes Requested |
Delegated to: | BPF Maintainers |
Headers | show |
Series | [bpf-next,v4] tools/bpf: generate pkg-config file for libbpf | expand |
luca.boccassi@gmail.com <luca.boccassi@gmail.com> [Thu, 2019-03-21 03:26 -0700]: > From: Luca Boccassi <bluca@debian.org> > > Generate a libbpf.pc file at build time so that users can rely > on pkg-config to find the library, its CFLAGS and LDFLAGS. > > Signed-off-by: Luca Boccassi <bluca@debian.org> > --- > v2: use QUIET_GEN instead of QUIET_LINK to generate pc file, > save kernel version in its own variable instead of calling > make inline > v3: use LIBBPF_VERSION instead of kernel_version > v4: use -I${prefix}/include rather than -I${prefix}/include/bpf > in the Cflags field as requested, to keep consistency with > how the headers are used now and to avoid a dependency from > the pc file to the headers installation Thanks for the change Luca! The other part about install target is nit, so no strong preference. Acked-by: Andrey Ignatov <rdna@fb.com> > tools/lib/bpf/.gitignore | 1 + > tools/lib/bpf/Makefile | 18 +++++++++++++++--- > tools/lib/bpf/libbpf.pc.template | 11 +++++++++++ > 3 files changed, 27 insertions(+), 3 deletions(-) > create mode 100644 tools/lib/bpf/libbpf.pc.template > > diff --git a/tools/lib/bpf/.gitignore b/tools/lib/bpf/.gitignore > index 4db74758c674..7d9e182a1f51 100644 > --- a/tools/lib/bpf/.gitignore > +++ b/tools/lib/bpf/.gitignore > @@ -1,3 +1,4 @@ > libbpf_version.h > +libbpf.pc > FEATURE-DUMP.libbpf > test_libbpf > diff --git a/tools/lib/bpf/Makefile b/tools/lib/bpf/Makefile > index 61aaacf0cfa1..891fe3da1410 100644 > --- a/tools/lib/bpf/Makefile > +++ b/tools/lib/bpf/Makefile > @@ -80,6 +80,7 @@ libdir_SQ = $(subst ','\'',$(libdir)) > libdir_relative_SQ = $(subst ','\'',$(libdir_relative)) > > LIB_FILE = libbpf.a libbpf.so > +PC_FILE = libbpf.pc > > VERSION = $(BPF_VERSION) > PATCHLEVEL = $(BPF_PATCHLEVEL) > @@ -137,7 +138,7 @@ GLOBAL_SYM_COUNT = $(shell readelf -s --wide $(BPF_IN) | \ > VERSIONED_SYM_COUNT = $(shell readelf -s --wide $(OUTPUT)libbpf.so | \ > grep -Eo '[^ ]+@LIBBPF_' | cut -d@ -f1 | sort -u | wc -l) > > -CMD_TARGETS = $(LIB_FILE) > +CMD_TARGETS = $(LIB_FILE) $(PC_FILE) > > CXX_TEST_TARGET = $(OUTPUT)test_libbpf > > @@ -180,6 +181,12 @@ $(OUTPUT)libbpf.a: $(BPF_IN) > $(OUTPUT)test_libbpf: test_libbpf.cpp $(OUTPUT)libbpf.a > $(QUIET_LINK)$(CXX) $(INCLUDES) $^ -lelf -o $@ > > +$(OUTPUT)libbpf.pc: > + $(QUIET_GEN)sed -e "s|@PREFIX@|$(prefix)|" \ > + -e "s|@LIBDIR@|$(libdir_SQ)|" \ > + -e "s|@VERSION@|$(LIBBPF_VERSION)|" \ > + < $@.template > $@ > + > check: check_abi > > check_abi: $(OUTPUT)libbpf.so > @@ -209,7 +216,12 @@ install_headers: > $(call do_install,libbpf.h,$(prefix)/include/bpf,644); > $(call do_install,btf.h,$(prefix)/include/bpf,644); > > -install: install_lib > +install_pkgconfig: $(PC_FILE) > + $(call QUIET_INSTALL, $(PC_FILE)) \ > + $(call do_install,$(PC_FILE),$(libdir_SQ)/pkgconfig,644) > + > + > +install: install_lib install_pkgconfig > > ### Cleaning rules > > @@ -219,7 +231,7 @@ config-clean: > > clean: > $(call QUIET_CLEAN, libbpf) $(RM) $(TARGETS) $(CXX_TEST_TARGET) \ > - *.o *~ *.a *.so .*.d .*.cmd LIBBPF-CFLAGS > + *.o *~ *.a *.so .*.d .*.cmd *.pc LIBBPF-CFLAGS > $(call QUIET_CLEAN, core-gen) $(RM) $(OUTPUT)FEATURE-DUMP.libbpf > > > diff --git a/tools/lib/bpf/libbpf.pc.template b/tools/lib/bpf/libbpf.pc.template > new file mode 100644 > index 000000000000..0ecd334c109f > --- /dev/null > +++ b/tools/lib/bpf/libbpf.pc.template > @@ -0,0 +1,11 @@ > +prefix=@PREFIX@ > +libdir=@LIBDIR@ > +includedir=${prefix}/include > + > +Name: libbpf > +URL: https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git > +Description: Linux kernel BPF library > +Version: @VERSION@ > +Libs: -L${libdir} -lbpf > +Requires.private: libelf > +Cflags: -I${includedir} > -- > 2.20.1 >
On Thu, Mar 21, 2019 at 04:00:46PM +0000, Andrey Ignatov wrote: > luca.boccassi@gmail.com <luca.boccassi@gmail.com> [Thu, 2019-03-21 03:26 -0700]: > > From: Luca Boccassi <bluca@debian.org> > > > > Generate a libbpf.pc file at build time so that users can rely > > on pkg-config to find the library, its CFLAGS and LDFLAGS. > > > > Signed-off-by: Luca Boccassi <bluca@debian.org> ... > > diff --git a/tools/lib/bpf/libbpf.pc.template b/tools/lib/bpf/libbpf.pc.template > > new file mode 100644 > > index 000000000000..0ecd334c109f > > --- /dev/null > > +++ b/tools/lib/bpf/libbpf.pc.template > > @@ -0,0 +1,11 @@ > > +prefix=@PREFIX@ > > +libdir=@LIBDIR@ > > +includedir=${prefix}/include > > + > > +Name: libbpf > > +URL: https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git > > +Description: Linux kernel BPF library github/libbpf/libbpf is a true mirror of kernel's libbpf. I think if we start shipping libbpf.so from kernel and from github it will be very confusing to the users... Which one is the true libbpf? Also the package should mention the license. And the license for libbpf is dual lgpl/bsd. But if we point to the url above it will not make much sense. I think the packages URL should point to github/libbpf/libbpf and packaging scripts should be in github only. Daniel, what do you think?
On 03/21/2019 11:01 PM, Alexei Starovoitov wrote: > On Thu, Mar 21, 2019 at 04:00:46PM +0000, Andrey Ignatov wrote: >> luca.boccassi@gmail.com <luca.boccassi@gmail.com> [Thu, 2019-03-21 03:26 -0700]: >>> From: Luca Boccassi <bluca@debian.org> >>> >>> Generate a libbpf.pc file at build time so that users can rely >>> on pkg-config to find the library, its CFLAGS and LDFLAGS. >>> >>> Signed-off-by: Luca Boccassi <bluca@debian.org> > ... >>> diff --git a/tools/lib/bpf/libbpf.pc.template b/tools/lib/bpf/libbpf.pc.template >>> new file mode 100644 >>> index 000000000000..0ecd334c109f >>> --- /dev/null >>> +++ b/tools/lib/bpf/libbpf.pc.template >>> @@ -0,0 +1,11 @@ >>> +prefix=@PREFIX@ >>> +libdir=@LIBDIR@ >>> +includedir=${prefix}/include >>> + >>> +Name: libbpf >>> +URL: https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git >>> +Description: Linux kernel BPF library > > github/libbpf/libbpf is a true mirror of kernel's libbpf. > I think if we start shipping libbpf.so from kernel and from github > it will be very confusing to the users... > Which one is the true libbpf? > Also the package should mention the license. > And the license for libbpf is dual lgpl/bsd. > But if we point to the url above it will not make much sense. > I think the packages URL should point to github/libbpf/libbpf > and packaging scripts should be in github only. > > Daniel, > what do you think? Looking at [0], I don't see where license would be part of the keyword. Given this is just a pkg-config file where folks using it care mainly about the needed cflags/libs, it would make sense to me to ship it and have it under tools/lib/bpf/ in kernel tree (since this is distro independent). If the URL and Description causes confusion, I would probably just remove the URL field since it's not mandatory either. And description, I'd put something like 'official BPF library' or such, so it's generic enough. [0] https://autotools.io/pkgconfig/file-format.html https://dev.gentoo.org/~mgorny/pkg-config-spec.html#keywords
On Thu, 2019-03-21 at 15:01 -0700, Alexei Starovoitov wrote: > On Thu, Mar 21, 2019 at 04:00:46PM +0000, Andrey Ignatov wrote: > > luca.boccassi@gmail.com <luca.boccassi@gmail.com> [Thu, 2019-03-21 > > 03:26 -0700]: > > > From: Luca Boccassi <bluca@debian.org> > > > > > > Generate a libbpf.pc file at build time so that users can rely > > > on pkg-config to find the library, its CFLAGS and LDFLAGS. > > > > > > Signed-off-by: Luca Boccassi <bluca@debian.org> > ... > > > diff --git a/tools/lib/bpf/libbpf.pc.template > > > b/tools/lib/bpf/libbpf.pc.template > > > new file mode 100644 > > > index 000000000000..0ecd334c109f > > > --- /dev/null > > > +++ b/tools/lib/bpf/libbpf.pc.template > > > @@ -0,0 +1,11 @@ > > > +prefix=@PREFIX@ > > > +libdir=@LIBDIR@ > > > +includedir=${prefix}/include > > > + > > > +Name: libbpf > > > +URL: > > > https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git > > > +Description: Linux kernel BPF library > > github/libbpf/libbpf is a true mirror of kernel's libbpf. > I think if we start shipping libbpf.so from kernel and from github > it will be very confusing to the users... > Which one is the true libbpf? I'm afraid that ship already sailed :-) Users and distributions are already consuming libbpf from the kernel tree. > Also the package should mention the license. > And the license for libbpf is dual lgpl/bsd. I followed the template from the other pkgconfig file (in traceevent) which does not have it, but I can add it in v5. > But if we point to the url above it will not make much sense. > I think the packages URL should point to github/libbpf/libbpf > and packaging scripts should be in github only. If only one side ships the pc file, then you'll have half the users installing libbpf without a pc file, and the other half with it, so it would defeat the point of having one in the first place. > Daniel, > what do you think? >
On Thu, 2019-03-21 at 23:19 +0100, Daniel Borkmann wrote: > On 03/21/2019 11:01 PM, Alexei Starovoitov wrote: > > On Thu, Mar 21, 2019 at 04:00:46PM +0000, Andrey Ignatov wrote: > > > luca.boccassi@gmail.com <luca.boccassi@gmail.com> [Thu, 2019-03- > > > 21 03:26 -0700]: > > > > From: Luca Boccassi <bluca@debian.org> > > > > > > > > Generate a libbpf.pc file at build time so that users can rely > > > > on pkg-config to find the library, its CFLAGS and LDFLAGS. > > > > > > > > Signed-off-by: Luca Boccassi <bluca@debian.org> > > ... > > > > diff --git a/tools/lib/bpf/libbpf.pc.template > > > > b/tools/lib/bpf/libbpf.pc.template > > > > new file mode 100644 > > > > index 000000000000..0ecd334c109f > > > > --- /dev/null > > > > +++ b/tools/lib/bpf/libbpf.pc.template > > > > @@ -0,0 +1,11 @@ > > > > +prefix=@PREFIX@ > > > > +libdir=@LIBDIR@ > > > > +includedir=${prefix}/include > > > > + > > > > +Name: libbpf > > > > +URL: > > > > https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git > > > > +Description: Linux kernel BPF library > > > > github/libbpf/libbpf is a true mirror of kernel's libbpf. > > I think if we start shipping libbpf.so from kernel and from github > > it will be very confusing to the users... > > Which one is the true libbpf? > > Also the package should mention the license. > > And the license for libbpf is dual lgpl/bsd. > > But if we point to the url above it will not make much sense. > > I think the packages URL should point to github/libbpf/libbpf > > and packaging scripts should be in github only. > > > > Daniel, > > what do you think? > > Looking at [0], I don't see where license would be part of the > keyword. Given > this is just a pkg-config file where folks using it care mainly about > the > needed cflags/libs, it would make sense to me to ship it and have it > under > tools/lib/bpf/ in kernel tree (since this is distro independent). If > the URL > and Description causes confusion, I would probably just remove the > URL field > since it's not mandatory either. And description, I'd put something > like > 'official BPF library' or such, so it's generic enough. > > [0] https://autotools.io/pkgconfig/file-format.html > https://dev.gentoo.org/~mgorny/pkg-config-spec.html#keywords I assumed the license referred to the file itself, so I added the SDPX comment. It's not too uncommon for pc files to have the license comment at the top. Removed URL and changed Descriptin in v6, thanks for reviewing!
diff --git a/tools/lib/bpf/.gitignore b/tools/lib/bpf/.gitignore index 4db74758c674..7d9e182a1f51 100644 --- a/tools/lib/bpf/.gitignore +++ b/tools/lib/bpf/.gitignore @@ -1,3 +1,4 @@ libbpf_version.h +libbpf.pc FEATURE-DUMP.libbpf test_libbpf diff --git a/tools/lib/bpf/Makefile b/tools/lib/bpf/Makefile index 61aaacf0cfa1..891fe3da1410 100644 --- a/tools/lib/bpf/Makefile +++ b/tools/lib/bpf/Makefile @@ -80,6 +80,7 @@ libdir_SQ = $(subst ','\'',$(libdir)) libdir_relative_SQ = $(subst ','\'',$(libdir_relative)) LIB_FILE = libbpf.a libbpf.so +PC_FILE = libbpf.pc VERSION = $(BPF_VERSION) PATCHLEVEL = $(BPF_PATCHLEVEL) @@ -137,7 +138,7 @@ GLOBAL_SYM_COUNT = $(shell readelf -s --wide $(BPF_IN) | \ VERSIONED_SYM_COUNT = $(shell readelf -s --wide $(OUTPUT)libbpf.so | \ grep -Eo '[^ ]+@LIBBPF_' | cut -d@ -f1 | sort -u | wc -l) -CMD_TARGETS = $(LIB_FILE) +CMD_TARGETS = $(LIB_FILE) $(PC_FILE) CXX_TEST_TARGET = $(OUTPUT)test_libbpf @@ -180,6 +181,12 @@ $(OUTPUT)libbpf.a: $(BPF_IN) $(OUTPUT)test_libbpf: test_libbpf.cpp $(OUTPUT)libbpf.a $(QUIET_LINK)$(CXX) $(INCLUDES) $^ -lelf -o $@ +$(OUTPUT)libbpf.pc: + $(QUIET_GEN)sed -e "s|@PREFIX@|$(prefix)|" \ + -e "s|@LIBDIR@|$(libdir_SQ)|" \ + -e "s|@VERSION@|$(LIBBPF_VERSION)|" \ + < $@.template > $@ + check: check_abi check_abi: $(OUTPUT)libbpf.so @@ -209,7 +216,12 @@ install_headers: $(call do_install,libbpf.h,$(prefix)/include/bpf,644); $(call do_install,btf.h,$(prefix)/include/bpf,644); -install: install_lib +install_pkgconfig: $(PC_FILE) + $(call QUIET_INSTALL, $(PC_FILE)) \ + $(call do_install,$(PC_FILE),$(libdir_SQ)/pkgconfig,644) + + +install: install_lib install_pkgconfig ### Cleaning rules @@ -219,7 +231,7 @@ config-clean: clean: $(call QUIET_CLEAN, libbpf) $(RM) $(TARGETS) $(CXX_TEST_TARGET) \ - *.o *~ *.a *.so .*.d .*.cmd LIBBPF-CFLAGS + *.o *~ *.a *.so .*.d .*.cmd *.pc LIBBPF-CFLAGS $(call QUIET_CLEAN, core-gen) $(RM) $(OUTPUT)FEATURE-DUMP.libbpf diff --git a/tools/lib/bpf/libbpf.pc.template b/tools/lib/bpf/libbpf.pc.template new file mode 100644 index 000000000000..0ecd334c109f --- /dev/null +++ b/tools/lib/bpf/libbpf.pc.template @@ -0,0 +1,11 @@ +prefix=@PREFIX@ +libdir=@LIBDIR@ +includedir=${prefix}/include + +Name: libbpf +URL: https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git +Description: Linux kernel BPF library +Version: @VERSION@ +Libs: -L${libdir} -lbpf +Requires.private: libelf +Cflags: -I${includedir}