summaryrefslogtreecommitdiffstats
path: root/tools
diff options
context:
space:
mode:
authorDaniel Borkmann <daniel@iogearbox.net>2019-03-22 20:49:10 -0400
committerAlexei Starovoitov <ast@kernel.org>2019-03-24 22:49:04 -0400
commit1d382264d911d91a8be5dbed1f0e053eb3245d81 (patch)
tree0724a02f43a370eb78b400183f0f162f9c09e9cc /tools
parent83d163124cf1104cca5b668d5fe6325715a60855 (diff)
bpf, libbpf: fix version info and add it to shared object
Even though libbpf's versioning script for the linker (libbpf.map) is pointing to 0.0.2, the BPF_EXTRAVERSION in the Makefile has not been updated along with it and is therefore still on 0.0.1. While fixing up, I also noticed that the generated shared object versioning information is missing, typical convention is to have a linker name (libbpf.so), soname (libbpf.so.0) and real name (libbpf.so.0.0.2) for library management. This is based upon the LIBBPF_VERSION as well. The build will then produce the following bpf libraries: # ll libbpf* libbpf.a libbpf.so -> libbpf.so.0.0.2 libbpf.so.0 -> libbpf.so.0.0.2 libbpf.so.0.0.2 # readelf -d libbpf.so.0.0.2 | grep SONAME 0x000000000000000e (SONAME) Library soname: [libbpf.so.0] And install them accordingly: # rm -rf /tmp/bld; mkdir /tmp/bld; make -j$(nproc) O=/tmp/bld install Auto-detecting system features: ... libelf: [ on ] ... bpf: [ on ] CC /tmp/bld/libbpf.o CC /tmp/bld/bpf.o CC /tmp/bld/nlattr.o CC /tmp/bld/btf.o CC /tmp/bld/libbpf_errno.o CC /tmp/bld/str_error.o CC /tmp/bld/netlink.o CC /tmp/bld/bpf_prog_linfo.o CC /tmp/bld/libbpf_probes.o CC /tmp/bld/xsk.o LD /tmp/bld/libbpf-in.o LINK /tmp/bld/libbpf.a LINK /tmp/bld/libbpf.so.0.0.2 LINK /tmp/bld/test_libbpf INSTALL /tmp/bld/libbpf.a INSTALL /tmp/bld/libbpf.so.0.0.2 # ll /usr/local/lib64/libbpf.* /usr/local/lib64/libbpf.a /usr/local/lib64/libbpf.so -> libbpf.so.0.0.2 /usr/local/lib64/libbpf.so.0 -> libbpf.so.0.0.2 /usr/local/lib64/libbpf.so.0.0.2 Fixes: 1bf4b05810fe ("tools: bpftool: add probes for eBPF program types") Fixes: 1b76c13e4b36 ("bpf tools: Introduce 'bpf' library and add bpf feature check") Reported-by: Stanislav Fomichev <sdf@google.com> Signed-off-by: Daniel Borkmann <daniel@iogearbox.net> Signed-off-by: Alexei Starovoitov <ast@kernel.org>
Diffstat (limited to 'tools')
-rw-r--r--tools/lib/bpf/Makefile42
1 files changed, 28 insertions, 14 deletions
diff --git a/tools/lib/bpf/Makefile b/tools/lib/bpf/Makefile
index 61aaacf0cfa1..5bf8e52c41fc 100644
--- a/tools/lib/bpf/Makefile
+++ b/tools/lib/bpf/Makefile
@@ -3,7 +3,7 @@
3 3
4BPF_VERSION = 0 4BPF_VERSION = 0
5BPF_PATCHLEVEL = 0 5BPF_PATCHLEVEL = 0
6BPF_EXTRAVERSION = 1 6BPF_EXTRAVERSION = 2
7 7
8MAKEFLAGS += --no-print-directory 8MAKEFLAGS += --no-print-directory
9 9
@@ -79,8 +79,6 @@ export prefix libdir src obj
79libdir_SQ = $(subst ','\'',$(libdir)) 79libdir_SQ = $(subst ','\'',$(libdir))
80libdir_relative_SQ = $(subst ','\'',$(libdir_relative)) 80libdir_relative_SQ = $(subst ','\'',$(libdir_relative))
81 81
82LIB_FILE = libbpf.a libbpf.so
83
84VERSION = $(BPF_VERSION) 82VERSION = $(BPF_VERSION)
85PATCHLEVEL = $(BPF_PATCHLEVEL) 83PATCHLEVEL = $(BPF_PATCHLEVEL)
86EXTRAVERSION = $(BPF_EXTRAVERSION) 84EXTRAVERSION = $(BPF_EXTRAVERSION)
@@ -88,7 +86,10 @@ EXTRAVERSION = $(BPF_EXTRAVERSION)
88OBJ = $@ 86OBJ = $@
89N = 87N =
90 88
91LIBBPF_VERSION = $(BPF_VERSION).$(BPF_PATCHLEVEL).$(BPF_EXTRAVERSION) 89LIBBPF_VERSION = $(BPF_VERSION).$(BPF_PATCHLEVEL).$(BPF_EXTRAVERSION)
90
91LIB_TARGET = libbpf.a libbpf.so.$(LIBBPF_VERSION)
92LIB_FILE = libbpf.a libbpf.so*
92 93
93# Set compile option CFLAGS 94# Set compile option CFLAGS
94ifdef EXTRA_CFLAGS 95ifdef EXTRA_CFLAGS
@@ -128,16 +129,18 @@ all:
128export srctree OUTPUT CC LD CFLAGS V 129export srctree OUTPUT CC LD CFLAGS V
129include $(srctree)/tools/build/Makefile.include 130include $(srctree)/tools/build/Makefile.include
130 131
131BPF_IN := $(OUTPUT)libbpf-in.o 132BPF_IN := $(OUTPUT)libbpf-in.o
132LIB_FILE := $(addprefix $(OUTPUT),$(LIB_FILE)) 133VERSION_SCRIPT := libbpf.map
133VERSION_SCRIPT := libbpf.map 134
135LIB_TARGET := $(addprefix $(OUTPUT),$(LIB_TARGET))
136LIB_FILE := $(addprefix $(OUTPUT),$(LIB_FILE))
134 137
135GLOBAL_SYM_COUNT = $(shell readelf -s --wide $(BPF_IN) | \ 138GLOBAL_SYM_COUNT = $(shell readelf -s --wide $(BPF_IN) | \
136 awk '/GLOBAL/ && /DEFAULT/ && !/UND/ {s++} END{print s}') 139 awk '/GLOBAL/ && /DEFAULT/ && !/UND/ {s++} END{print s}')
137VERSIONED_SYM_COUNT = $(shell readelf -s --wide $(OUTPUT)libbpf.so | \ 140VERSIONED_SYM_COUNT = $(shell readelf -s --wide $(OUTPUT)libbpf.so | \
138 grep -Eo '[^ ]+@LIBBPF_' | cut -d@ -f1 | sort -u | wc -l) 141 grep -Eo '[^ ]+@LIBBPF_' | cut -d@ -f1 | sort -u | wc -l)
139 142
140CMD_TARGETS = $(LIB_FILE) 143CMD_TARGETS = $(LIB_TARGET)
141 144
142CXX_TEST_TARGET = $(OUTPUT)test_libbpf 145CXX_TEST_TARGET = $(OUTPUT)test_libbpf
143 146
@@ -170,9 +173,13 @@ $(BPF_IN): force elfdep bpfdep
170 echo "Warning: Kernel ABI header at 'tools/include/uapi/linux/if_xdp.h' differs from latest version at 'include/uapi/linux/if_xdp.h'" >&2 )) || true 173 echo "Warning: Kernel ABI header at 'tools/include/uapi/linux/if_xdp.h' differs from latest version at 'include/uapi/linux/if_xdp.h'" >&2 )) || true
171 $(Q)$(MAKE) $(build)=libbpf 174 $(Q)$(MAKE) $(build)=libbpf
172 175
173$(OUTPUT)libbpf.so: $(BPF_IN) 176$(OUTPUT)libbpf.so: $(OUTPUT)libbpf.so.$(LIBBPF_VERSION)
174 $(QUIET_LINK)$(CC) --shared -Wl,--version-script=$(VERSION_SCRIPT) \ 177
175 $^ -o $@ 178$(OUTPUT)libbpf.so.$(LIBBPF_VERSION): $(BPF_IN)
179 $(QUIET_LINK)$(CC) --shared -Wl,-soname,libbpf.so.$(VERSION) \
180 -Wl,--version-script=$(VERSION_SCRIPT) $^ -o $@
181 @ln -sf $(@F) $(OUTPUT)libbpf.so
182 @ln -sf $(@F) $(OUTPUT)libbpf.so.$(VERSION)
176 183
177$(OUTPUT)libbpf.a: $(BPF_IN) 184$(OUTPUT)libbpf.a: $(BPF_IN)
178 $(QUIET_LINK)$(RM) $@; $(AR) rcs $@ $^ 185 $(QUIET_LINK)$(RM) $@; $(AR) rcs $@ $^
@@ -192,6 +199,12 @@ check_abi: $(OUTPUT)libbpf.so
192 exit 1; \ 199 exit 1; \
193 fi 200 fi
194 201
202define do_install_mkdir
203 if [ ! -d '$(DESTDIR_SQ)$1' ]; then \
204 $(INSTALL) -d -m 755 '$(DESTDIR_SQ)$1'; \
205 fi
206endef
207
195define do_install 208define do_install
196 if [ ! -d '$(DESTDIR_SQ)$2' ]; then \ 209 if [ ! -d '$(DESTDIR_SQ)$2' ]; then \
197 $(INSTALL) -d -m 755 '$(DESTDIR_SQ)$2'; \ 210 $(INSTALL) -d -m 755 '$(DESTDIR_SQ)$2'; \
@@ -200,8 +213,9 @@ define do_install
200endef 213endef
201 214
202install_lib: all_cmd 215install_lib: all_cmd
203 $(call QUIET_INSTALL, $(LIB_FILE)) \ 216 $(call QUIET_INSTALL, $(LIB_TARGET)) \
204 $(call do_install,$(LIB_FILE),$(libdir_SQ)) 217 $(call do_install_mkdir,$(libdir_SQ)); \
218 cp -fpR $(LIB_FILE) $(DESTDIR)$(libdir_SQ)
205 219
206install_headers: 220install_headers:
207 $(call QUIET_INSTALL, headers) \ 221 $(call QUIET_INSTALL, headers) \
@@ -219,7 +233,7 @@ config-clean:
219 233
220clean: 234clean:
221 $(call QUIET_CLEAN, libbpf) $(RM) $(TARGETS) $(CXX_TEST_TARGET) \ 235 $(call QUIET_CLEAN, libbpf) $(RM) $(TARGETS) $(CXX_TEST_TARGET) \
222 *.o *~ *.a *.so .*.d .*.cmd LIBBPF-CFLAGS 236 *.o *~ *.a *.so *.so.$(VERSION) .*.d .*.cmd LIBBPF-CFLAGS
223 $(call QUIET_CLEAN, core-gen) $(RM) $(OUTPUT)FEATURE-DUMP.libbpf 237 $(call QUIET_CLEAN, core-gen) $(RM) $(OUTPUT)FEATURE-DUMP.libbpf
224 238
225 239