diff options
author | Daniel Borkmann <daniel@iogearbox.net> | 2019-03-22 20:49:10 -0400 |
---|---|---|
committer | Alexei Starovoitov <ast@kernel.org> | 2019-03-24 22:49:04 -0400 |
commit | 1d382264d911d91a8be5dbed1f0e053eb3245d81 (patch) | |
tree | 0724a02f43a370eb78b400183f0f162f9c09e9cc /tools | |
parent | 83d163124cf1104cca5b668d5fe6325715a60855 (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/Makefile | 42 |
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 | ||
4 | BPF_VERSION = 0 | 4 | BPF_VERSION = 0 |
5 | BPF_PATCHLEVEL = 0 | 5 | BPF_PATCHLEVEL = 0 |
6 | BPF_EXTRAVERSION = 1 | 6 | BPF_EXTRAVERSION = 2 |
7 | 7 | ||
8 | MAKEFLAGS += --no-print-directory | 8 | MAKEFLAGS += --no-print-directory |
9 | 9 | ||
@@ -79,8 +79,6 @@ export prefix libdir src obj | |||
79 | libdir_SQ = $(subst ','\'',$(libdir)) | 79 | libdir_SQ = $(subst ','\'',$(libdir)) |
80 | libdir_relative_SQ = $(subst ','\'',$(libdir_relative)) | 80 | libdir_relative_SQ = $(subst ','\'',$(libdir_relative)) |
81 | 81 | ||
82 | LIB_FILE = libbpf.a libbpf.so | ||
83 | |||
84 | VERSION = $(BPF_VERSION) | 82 | VERSION = $(BPF_VERSION) |
85 | PATCHLEVEL = $(BPF_PATCHLEVEL) | 83 | PATCHLEVEL = $(BPF_PATCHLEVEL) |
86 | EXTRAVERSION = $(BPF_EXTRAVERSION) | 84 | EXTRAVERSION = $(BPF_EXTRAVERSION) |
@@ -88,7 +86,10 @@ EXTRAVERSION = $(BPF_EXTRAVERSION) | |||
88 | OBJ = $@ | 86 | OBJ = $@ |
89 | N = | 87 | N = |
90 | 88 | ||
91 | LIBBPF_VERSION = $(BPF_VERSION).$(BPF_PATCHLEVEL).$(BPF_EXTRAVERSION) | 89 | LIBBPF_VERSION = $(BPF_VERSION).$(BPF_PATCHLEVEL).$(BPF_EXTRAVERSION) |
90 | |||
91 | LIB_TARGET = libbpf.a libbpf.so.$(LIBBPF_VERSION) | ||
92 | LIB_FILE = libbpf.a libbpf.so* | ||
92 | 93 | ||
93 | # Set compile option CFLAGS | 94 | # Set compile option CFLAGS |
94 | ifdef EXTRA_CFLAGS | 95 | ifdef EXTRA_CFLAGS |
@@ -128,16 +129,18 @@ all: | |||
128 | export srctree OUTPUT CC LD CFLAGS V | 129 | export srctree OUTPUT CC LD CFLAGS V |
129 | include $(srctree)/tools/build/Makefile.include | 130 | include $(srctree)/tools/build/Makefile.include |
130 | 131 | ||
131 | BPF_IN := $(OUTPUT)libbpf-in.o | 132 | BPF_IN := $(OUTPUT)libbpf-in.o |
132 | LIB_FILE := $(addprefix $(OUTPUT),$(LIB_FILE)) | 133 | VERSION_SCRIPT := libbpf.map |
133 | VERSION_SCRIPT := libbpf.map | 134 | |
135 | LIB_TARGET := $(addprefix $(OUTPUT),$(LIB_TARGET)) | ||
136 | LIB_FILE := $(addprefix $(OUTPUT),$(LIB_FILE)) | ||
134 | 137 | ||
135 | GLOBAL_SYM_COUNT = $(shell readelf -s --wide $(BPF_IN) | \ | 138 | GLOBAL_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}') |
137 | VERSIONED_SYM_COUNT = $(shell readelf -s --wide $(OUTPUT)libbpf.so | \ | 140 | VERSIONED_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 | ||
140 | CMD_TARGETS = $(LIB_FILE) | 143 | CMD_TARGETS = $(LIB_TARGET) |
141 | 144 | ||
142 | CXX_TEST_TARGET = $(OUTPUT)test_libbpf | 145 | CXX_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 | ||
202 | define do_install_mkdir | ||
203 | if [ ! -d '$(DESTDIR_SQ)$1' ]; then \ | ||
204 | $(INSTALL) -d -m 755 '$(DESTDIR_SQ)$1'; \ | ||
205 | fi | ||
206 | endef | ||
207 | |||
195 | define do_install | 208 | define 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 | |||
200 | endef | 213 | endef |
201 | 214 | ||
202 | install_lib: all_cmd | 215 | install_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 | ||
206 | install_headers: | 220 | install_headers: |
207 | $(call QUIET_INSTALL, headers) \ | 221 | $(call QUIET_INSTALL, headers) \ |
@@ -219,7 +233,7 @@ config-clean: | |||
219 | 233 | ||
220 | clean: | 234 | clean: |
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 | ||