Add symlinks for DSO

Add symlinks with version suffix in a way similar to how it's done in
kernel tree.

The differences with kernel tree version:

* LIBS is used to handle both files and targets w/o separation;

* Version symlink is created in corresponding target as opposed to do
  everything in libbpf.so.$(LIBBPF_VERSION).

Example:

  % OBJDIR=build DESTDIR=root make install
  ...
  % find root/ ! -type d -exec ls -l {} +
  -rw-r--r--. 1 rdna users   6046 Apr  2 18:09 root/usr/include/bpf/bpf.h
  -rw-r--r--. 1 rdna users   3485 Apr  2 18:09 root/usr/include/bpf/btf.h
  -rw-r--r--. 1 rdna users  16454 Apr  2 18:09 root/usr/include/bpf/libbpf.h
  -rw-r--r--. 1 rdna users 602030 Apr  2 18:09 root/usr/lib64/libbpf.a
  lrwxrwxrwx. 1 rdna users     11 Apr  2 18:09 root/usr/lib64/libbpf.so -> libbpf.so.0
  lrwxrwxrwx. 1 rdna users     15 Apr  2 18:09 root/usr/lib64/libbpf.so.0 -> libbpf.so.0.0.2
  -rwxr-xr-x. 1 rdna users 377640 Apr  2 18:09 root/usr/lib64/libbpf.so.0.0.2
  -rw-r--r--. 1 rdna users    241 Apr  2 18:09 root/usr/lib64/pkgconfig/libbpf.pc

Signed-off-by: Andrey Ignatov <rdna@fb.com>
This commit is contained in:
Andrey Ignatov
2019-04-02 18:07:41 -07:00
parent c3b329c387
commit db1adc8658

View File

@@ -38,7 +38,9 @@ OBJS := $(addprefix $(OBJDIR)/,bpf.o btf.o libbpf.o libbpf_errno.o netlink.o \
LIBS := $(OBJDIR)/libbpf.a
ifndef BUILD_STATIC_ONLY
LIBS += $(OBJDIR)/libbpf.so
LIBS += $(OBJDIR)/libbpf.so \
$(OBJDIR)/libbpf.so.$(VERSION) \
$(OBJDIR)/libbpf.so.$(LIBBPF_VERSION)
VERSION_SCRIPT := libbpf.map
endif
@@ -68,7 +70,13 @@ all: $(LIBS) $(PC_FILE)
$(OBJDIR)/libbpf.a: $(OBJS)
$(AR) rcs $@ $^
$(OBJDIR)/libbpf.so: $(OBJS)
$(OBJDIR)/libbpf.so: $(OBJDIR)/libbpf.so.$(VERSION)
ln -sf $(^F) $@
$(OBJDIR)/libbpf.so.$(VERSION): $(OBJDIR)/libbpf.so.$(LIBBPF_VERSION)
ln -sf $(^F) $@
$(OBJDIR)/libbpf.so.$(LIBBPF_VERSION): $(OBJS)
$(CC) -shared $(ALL_LDFLAGS) -Wl,--version-script=$(VERSION_SCRIPT) \
$^ -o $@
@@ -88,8 +96,16 @@ define do_install
$(INSTALL) $1 $(if $3,-m $3,) '$(DESTDIR)$2'
endef
# Preserve symlinks at installation.
define do_s_install
if [ ! -d '$(DESTDIR)$2' ]; then \
$(INSTALL) -d -m 755 '$(DESTDIR)$2'; \
fi; \
cp -fpR $1 '$(DESTDIR)$2'
endef
install: all install_headers install_pkgconfig
$(call do_install,$(LIBS),$(LIBDIR))
$(call do_s_install,$(LIBS),$(LIBDIR))
install_headers:
$(call do_install,$(HEADERS),$(INCLUDEDIR)/bpf,644)
@@ -103,4 +119,4 @@ install_pkgconfig: $(PC_FILE)
$(call do_install,$(PC_FILE),$(LIBDIR)/pkgconfig,644)
clean:
rm -f *.o *.a *.so *.pc
rm -f *.o *.a *.so *.so.* *.pc