From 3e403451c7dd24c2ffb4f510a3876a152dea0a14 Mon Sep 17 00:00:00 2001 From: Luca Boccassi Date: Fri, 29 Mar 2019 16:29:49 +0000 Subject: [PATCH 1/2] Build shared lib by default, add options to turn it off The vast majority of use cases want a shared library, so to be more user and packager friendly invert the makefile logic and always build both static and shared libraries by default. Add BUILD_STATIC_ONLY variable for the corner cases where only a static library is needed Signed-off-by: Luca Boccassi --- README | 7 +++---- src/Makefile | 4 ++-- 2 files changed, 5 insertions(+), 6 deletions(-) diff --git a/README b/README index a48fdde..d894e7e 100644 --- a/README +++ b/README @@ -19,14 +19,13 @@ successful. Build ===== - -To build static library libbpf.a: +To build both static libbpf.a and shared libbpf.so: cd src make -To build both static libbpf.a and shared libbpf.so libraries in directory +To build only static libbpf.a library in directory build/ and install them together with libbpf headers in a staging directory root/: cd src mkdir build root - BUILD_SHARED=y OBJDIR=build DESTDIR=root make install + BUILD_STATIC_ONLY=y OBJDIR=build DESTDIR=root make install diff --git a/src/Makefile b/src/Makefile index 51b52e8..4846ab8 100644 --- a/src/Makefile +++ b/src/Makefile @@ -10,7 +10,7 @@ ifneq ($(FEATURE_REALLOCARRAY),) ALL_CFLAGS += -DCOMPAT_NEED_REALLOCARRAY endif -ifdef BUILD_SHARED +ifndef BUILD_STATIC_ONLY ALL_CFLAGS += -fPIC -fvisibility=hidden endif @@ -23,7 +23,7 @@ OBJS := $(addprefix $(OBJDIR)/,bpf.o btf.o libbpf.o libbpf_errno.o netlink.o \ nlattr.o str_error.o libbpf_probes.o bpf_prog_linfo.o xsk.o) LIBS := $(OBJDIR)/libbpf.a -ifdef BUILD_SHARED +ifndef BUILD_STATIC_ONLY LIBS += $(OBJDIR)/libbpf.so endif From 438584bfc211ec43a59879bc76f8f09af5ea0ee1 Mon Sep 17 00:00:00 2001 From: Luca Boccassi Date: Thu, 28 Mar 2019 19:31:46 +0000 Subject: [PATCH 2/2] Makefile: use pkg-config to get libelf flags libbpf uses libelf symbols internally, so it depends on it and needs to link against it. Upstream this was fixed by linking directory to libelf: https://git.kernel.org/pub/scm/linux/kernel/git/bpf/bpf.git/commit/?id=89dedaef49d36adc2bb5e7e4c38b52fa3013c7c8 For this project, intended to be used as a general library, try first to use pkg-config instead, and only fallback to just passing -lelf. This will be useful for cross compiling, among other cases. Signed-off-by: Luca Boccassi --- README | 14 ++++++++++++++ src/Makefile | 10 +++++++++- 2 files changed, 23 insertions(+), 1 deletion(-) diff --git a/README b/README index d894e7e..9adc1fc 100644 --- a/README +++ b/README @@ -19,6 +19,13 @@ successful. Build ===== +libelf is an internal dependency of libbpf and thus it is required to link +against and must be installed on the system for applications to work. +pkg-config is used by default to find libelf, and the program called can be +overridden with PKG_CONFIG. +If using pkg-config at build time is not desired, it can be disabled by setting +NO_PKG_CONFIG=1 when calling make. + To build both static libbpf.a and shared libbpf.so: cd src make @@ -29,3 +36,10 @@ root/: cd src mkdir build root BUILD_STATIC_ONLY=y OBJDIR=build DESTDIR=root make install + +To build both static libbpf.a and shared libbpf.so against a custom libelf +dependency installed in /build/root/ and install them together with libbpf +headers in a build directory /build/root/: + + cd src + PKG_CONFIG_PATH=/build/root/lib64/pkgconfig DESTDIR=/build/root make install diff --git a/src/Makefile b/src/Makefile index 4846ab8..b825956 100644 --- a/src/Makefile +++ b/src/Makefile @@ -16,6 +16,14 @@ endif CFLAGS ?= -g -O2 -Werror -Wall ALL_CFLAGS += $(CFLAGS) +ALL_LDFLAGS += $(LDFLAGS) +ifdef NO_PKG_CONFIG + ALL_LDFLAGS += -lelf +else + PKG_CONFIG ?= pkg-config + ALL_CFLAGS += $(shell $(PKG_CONFIG) --cflags libelf) + ALL_LDFLAGS += $(shell $(PKG_CONFIG) --libs libelf) +endif OBJDIR ?= . @@ -54,7 +62,7 @@ $(OBJDIR)/libbpf.a: $(OBJS) $(AR) rcs $@ $^ $(OBJDIR)/libbpf.so: $(OBJS) - $(CC) -shared $(LDFLAGS) $^ -o $@ + $(CC) -shared $(ALL_LDFLAGS) $^ -o $@ $(OBJDIR)/libbpf.pc: sed -e "s|@PREFIX@|$(PREFIX)|" \