2018-10-09 21:45:49 -07:00
|
|
|
# SPDX-License-Identifier: (LGPL-2.1 OR BSD-2-Clause)
|
|
|
|
|
|
2019-04-02 16:37:26 -07:00
|
|
|
VERSION = 0
|
|
|
|
|
PATCHLEVEL = 0
|
2019-07-31 12:34:43 -07:00
|
|
|
EXTRAVERSION = 4
|
2019-04-02 16:37:26 -07:00
|
|
|
|
|
|
|
|
LIBBPF_VERSION = $(VERSION).$(PATCHLEVEL).$(EXTRAVERSION)
|
|
|
|
|
|
2018-10-09 21:45:49 -07:00
|
|
|
TOPDIR = ..
|
2018-10-11 14:58:49 -07:00
|
|
|
|
|
|
|
|
INCLUDES := -I. -I$(TOPDIR)/include -I$(TOPDIR)/include/uapi
|
|
|
|
|
ALL_CFLAGS := $(INCLUDES)
|
2018-10-09 21:45:49 -07:00
|
|
|
|
|
|
|
|
FEATURE_REALLOCARRAY := $(shell $(TOPDIR)/scripts/check-reallocarray.sh)
|
|
|
|
|
ifneq ($(FEATURE_REALLOCARRAY),)
|
2018-10-11 14:58:49 -07:00
|
|
|
ALL_CFLAGS += -DCOMPAT_NEED_REALLOCARRAY
|
|
|
|
|
endif
|
|
|
|
|
|
2019-03-29 16:29:49 +00:00
|
|
|
ifndef BUILD_STATIC_ONLY
|
2018-10-16 17:24:08 -07:00
|
|
|
ALL_CFLAGS += -fPIC -fvisibility=hidden
|
2018-10-11 14:58:49 -07:00
|
|
|
endif
|
|
|
|
|
|
|
|
|
|
CFLAGS ?= -g -O2 -Werror -Wall
|
|
|
|
|
ALL_CFLAGS += $(CFLAGS)
|
2019-03-28 19:31:46 +00:00
|
|
|
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
|
2018-10-11 14:58:49 -07:00
|
|
|
|
|
|
|
|
OBJDIR ?= .
|
|
|
|
|
|
|
|
|
|
OBJS := $(addprefix $(OBJDIR)/,bpf.o btf.o libbpf.o libbpf_errno.o netlink.o \
|
2019-05-30 15:07:51 -07:00
|
|
|
nlattr.o str_error.o libbpf_probes.o bpf_prog_linfo.o xsk.o \
|
|
|
|
|
btf_dump.o hashmap.o)
|
2018-10-11 14:58:49 -07:00
|
|
|
|
|
|
|
|
LIBS := $(OBJDIR)/libbpf.a
|
2019-03-29 16:29:49 +00:00
|
|
|
ifndef BUILD_STATIC_ONLY
|
2019-04-02 18:07:41 -07:00
|
|
|
LIBS += $(OBJDIR)/libbpf.so \
|
|
|
|
|
$(OBJDIR)/libbpf.so.$(VERSION) \
|
|
|
|
|
$(OBJDIR)/libbpf.so.$(LIBBPF_VERSION)
|
2019-04-02 16:33:00 -07:00
|
|
|
VERSION_SCRIPT := libbpf.map
|
2018-10-11 14:58:49 -07:00
|
|
|
endif
|
|
|
|
|
|
2019-05-21 16:09:46 +02:00
|
|
|
HEADERS := bpf.h libbpf.h btf.h xsk.h libbpf_util.h
|
2019-02-15 14:43:41 -08:00
|
|
|
UAPI_HEADERS := $(addprefix $(TOPDIR)/include/uapi/linux/,bpf.h bpf_common.h \
|
|
|
|
|
btf.h)
|
2018-10-11 14:58:49 -07:00
|
|
|
|
2019-03-29 14:33:20 -07:00
|
|
|
PC_FILE := $(OBJDIR)/libbpf.pc
|
2019-03-28 19:07:41 +00:00
|
|
|
|
2018-10-11 14:58:49 -07:00
|
|
|
INSTALL = install
|
|
|
|
|
|
|
|
|
|
DESTDIR ?=
|
|
|
|
|
|
|
|
|
|
ifeq ($(shell uname -m),x86_64)
|
|
|
|
|
LIBSUBDIR := lib64
|
|
|
|
|
else
|
|
|
|
|
LIBSUBDIR := lib
|
2018-10-09 21:45:49 -07:00
|
|
|
endif
|
|
|
|
|
|
2018-10-11 14:58:49 -07:00
|
|
|
PREFIX ?= /usr
|
|
|
|
|
LIBDIR ?= $(PREFIX)/$(LIBSUBDIR)
|
|
|
|
|
INCLUDEDIR ?= $(PREFIX)/include
|
|
|
|
|
UAPIDIR ?= $(PREFIX)/include
|
|
|
|
|
|
2019-03-28 19:07:41 +00:00
|
|
|
all: $(LIBS) $(PC_FILE)
|
2018-10-11 14:58:49 -07:00
|
|
|
|
|
|
|
|
$(OBJDIR)/libbpf.a: $(OBJS)
|
|
|
|
|
$(AR) rcs $@ $^
|
|
|
|
|
|
2019-04-02 18:07:41 -07:00
|
|
|
$(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)
|
2019-04-02 16:33:00 -07:00
|
|
|
$(CC) -shared $(ALL_LDFLAGS) -Wl,--version-script=$(VERSION_SCRIPT) \
|
2019-04-02 18:41:41 -07:00
|
|
|
-Wl,-soname,libbpf.so.$(VERSION) \
|
2019-04-02 16:33:00 -07:00
|
|
|
$^ -o $@
|
2018-10-11 14:58:49 -07:00
|
|
|
|
2019-03-28 19:07:41 +00:00
|
|
|
$(OBJDIR)/libbpf.pc:
|
|
|
|
|
sed -e "s|@PREFIX@|$(PREFIX)|" \
|
|
|
|
|
-e "s|@LIBDIR@|$(LIBDIR)|" \
|
|
|
|
|
-e "s|@VERSION@|$(LIBBPF_VERSION)|" \
|
|
|
|
|
< libbpf.pc.template > $@
|
|
|
|
|
|
2018-10-11 14:58:49 -07:00
|
|
|
$(OBJDIR)/%.o: %.c
|
2019-03-28 19:33:17 +00:00
|
|
|
$(CC) $(ALL_CFLAGS) $(CPPFLAGS) -c $< -o $@
|
2018-10-11 14:58:49 -07:00
|
|
|
|
|
|
|
|
define do_install
|
|
|
|
|
if [ ! -d '$(DESTDIR)$2' ]; then \
|
|
|
|
|
$(INSTALL) -d -m 755 '$(DESTDIR)$2'; \
|
|
|
|
|
fi; \
|
|
|
|
|
$(INSTALL) $1 $(if $3,-m $3,) '$(DESTDIR)$2'
|
|
|
|
|
endef
|
2018-10-09 21:45:49 -07:00
|
|
|
|
2019-04-02 18:07:41 -07:00
|
|
|
# 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
|
|
|
|
|
|
2019-03-28 19:07:41 +00:00
|
|
|
install: all install_headers install_pkgconfig
|
2019-04-02 18:07:41 -07:00
|
|
|
$(call do_s_install,$(LIBS),$(LIBDIR))
|
2018-10-09 21:45:49 -07:00
|
|
|
|
2018-10-11 14:58:49 -07:00
|
|
|
install_headers:
|
|
|
|
|
$(call do_install,$(HEADERS),$(INCLUDEDIR)/bpf,644)
|
2018-10-09 21:45:49 -07:00
|
|
|
|
2018-10-11 14:58:49 -07:00
|
|
|
# UAPI headers can be installed by a different package so they're not installed
|
|
|
|
|
# in by install rule.
|
|
|
|
|
install_uapi_headers:
|
|
|
|
|
$(call do_install,$(UAPI_HEADERS),$(UAPIDIR)/linux,644)
|
2018-10-09 21:45:49 -07:00
|
|
|
|
2019-03-28 19:07:41 +00:00
|
|
|
install_pkgconfig: $(PC_FILE)
|
|
|
|
|
$(call do_install,$(PC_FILE),$(LIBDIR)/pkgconfig,644)
|
|
|
|
|
|
2018-10-09 21:45:49 -07:00
|
|
|
clean:
|
2019-04-02 18:07:41 -07:00
|
|
|
rm -f *.o *.a *.so *.so.* *.pc
|