On 03/19, Luca Boccassi wrote: > On Tue, 2019-03-19 at 14:23 -0700, Stanislav Fomichev wrote: > > On 03/19, Luca Boccassi wrote: > > > 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 <bl...@debian.org> > > > --- > > > 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 a05c43468bd0..542c64e2a6d9 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 > > > > > > @@ -179,6 +180,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_LINK)sed -e "s|@PREFIX@|$(prefix)|" \ > > > > Maybe QUIET_GEN instead? Or QUIET_INSTALL > > (tools/lib/traceevent/Makefile)? > > Changed to QUIET_GEN in v2. > > > > + -e "s|@LIBDIR@|$(libdir_SQ)|" \ > > > + -e "s|@VERSION@|$(shell make --no-print-directory > > > -sC ../../.. kernelversion)|" \ > > > > Make it its own variable, like we do in bpftool? > > https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/tr > > ee/tools/bpf/bpftool/Makefile#n26 > > Done in v2. > > > Also, I wonder what would happen in the case of out-of-tree libbpf: > > https://github.com/libbpf/libbpf > > > > Should there be some fallback? > > That tree looks like it's autosynced from the kernel tree, isn't it? > Then it will just pick up the change and start generating the pc file > as well, won't it? Yes, it's autosynched, but it autosyncs only tools/lib/bpf directory and it lacks top-level makefile with kernelversion target. I guess in this case make will spill out an error to stderr and version will be empty.
> > -- > Kind regards, > Luca Boccassi