aboutsummaryrefslogtreecommitdiffstats
path: root/package/network/utils/bpftools/Makefile
diff options
context:
space:
mode:
Diffstat (limited to 'package/network/utils/bpftools/Makefile')
-rw-r--r--package/network/utils/bpftools/Makefile162
1 files changed, 162 insertions, 0 deletions
diff --git a/package/network/utils/bpftools/Makefile b/package/network/utils/bpftools/Makefile
new file mode 100644
index 0000000000..156dc8a4fa
--- /dev/null
+++ b/package/network/utils/bpftools/Makefile
@@ -0,0 +1,162 @@
+#
+# Copyright (C) 2020 Tony Ambardar <itugrok@yahoo.com>
+#
+# This is free software, licensed under the GNU General Public License v2.
+# See /LICENSE for more information.
+#
+
+include $(TOPDIR)/rules.mk
+
+PKG_NAME:=bpftools
+PKG_VERSION:=5.8.3
+PKG_RELEASE:=1
+
+PKG_SOURCE:=linux-$(PKG_VERSION).tar.xz
+PKG_SOURCE_URL:=@KERNEL/linux/kernel/v5.x
+PKG_HASH:=8ea27e1ed38981f772cc6d5f16ab8dbb8052c3800ba0494bd798fbb95dcc1779
+
+PKG_MAINTAINER:=Tony Ambardar <itugrok@yahoo.com>
+
+PKG_USE_MIPS16:=0
+PKG_BUILD_PARALLEL:=1
+PKG_INSTALL:=1
+
+LINUX_VERSION:=$(PKG_VERSION)
+LINUX_TLD:=linux-$(LINUX_VERSION)
+
+BPF_FILES:= \
+ kernel/bpf scripts tools/Makefile tools/bpf tools/perf/perf-sys.h \
+ tools/arch tools/build tools/include tools/lib tools/scripts
+TAR_OPTIONS+= \
+ --transform="s;$(LINUX_TLD)/;$(PKG_NAME)-$(PKG_VERSION)/;" \
+ $(addprefix $(LINUX_TLD)/,$(BPF_FILES))
+
+include $(INCLUDE_DIR)/package.mk
+
+define Package/bpftool/Default
+ SECTION:=net
+ CATEGORY:=Network
+ TITLE:=bpftool - eBPF subsystem utility
+ LICENSE:=GPL-2.0-only OR BSD-2-Clause
+ URL:=http://www.kernel.org
+ DEPENDS:=+libelf
+endef
+
+define Package/bpftool-minimal
+ $(call Package/bpftool/Default)
+ TITLE+= (Minimal)
+ VARIANT:=minimal
+ DEFAULT_VARIANT:=1
+ PROVIDES:=bpftool
+ ALTERNATIVES:=200:/usr/sbin/bpftool:/usr/libexec/bpftool-minimal
+endef
+
+define Package/bpftool-full
+ $(call Package/bpftool/Default)
+ TITLE+= (Full)
+ VARIANT:=full
+ PROVIDES:=bpftool
+ ALTERNATIVES:=300:/usr/sbin/bpftool:/usr/libexec/bpftool-full
+ DEPENDS+= +libbfd +libopcodes
+endef
+
+define Package/bpftool-minimal/description
+ A tool for inspection and simple manipulation of eBPF programs and maps.
+endef
+
+define Package/bpftool-full/description
+ A tool for inspection and simple manipulation of eBPF programs and maps.
+ This full version uses libbfd and libopcodes to support disassembly of
+ eBPF programs and jited code.
+endef
+
+define Package/libbpf
+ SECTION:=libs
+ CATEGORY:=Libraries
+ TITLE:=libbpf - eBPF helper library
+ VARIANT:=lib
+ LICENSE:=LGPL-2.1 OR BSD-2-Clause
+ ABI_VERSION:=0
+ URL:=http://www.kernel.org
+ DEPENDS:=+libelf
+endef
+
+define Package/libbpf/description
+ libbpf is a library for loading eBPF programs and reading and manipulating eBPF objects from user-space.
+endef
+
+
+# LTO not compatible with DSO using PIC
+ifneq ($(BUILD_VARIANT),lib)
+ TARGET_CFLAGS += -ffunction-sections -fdata-sections -flto
+ TARGET_LDFLAGS += -Wl,--gc-sections
+endif
+
+MAKE_FLAGS += \
+ EXTRA_CFLAGS="$(TARGET_CFLAGS) $(TARGET_CPPFLAGS)" \
+ LDFLAGS="$(TARGET_LDFLAGS)" \
+ BPFTOOL_VERSION="$(LINUX_VERSION)" \
+ FEATURES_DUMP="$(PKG_BUILD_DIR)/FEATURE-DUMP.openwrt" \
+ OUTPUT="$(PKG_BUILD_DIR)/" \
+ prefix="/usr" \
+ $(if $(findstring c,$(OPENWRT_VERBOSE)),V=1,V='')
+
+ifeq ($(BUILD_VARIANT),full)
+ HAVE_LIBBFD:=1
+ HAVE_LIBCAP:=0
+ HAVE_CLANG:=0
+ MAKE_PATH:=tools/bpf/bpftool
+else ifeq ($(BUILD_VARIANT),minimal)
+ HAVE_LIBBFD:=0
+ HAVE_LIBCAP:=0
+ HAVE_CLANG:=0
+ MAKE_PATH:=tools/bpf/bpftool
+else ifeq ($(BUILD_VARIANT),lib)
+ HAVE_LIBBFD:=0
+ HAVE_LIBCAP:=0
+ HAVE_CLANG:=0
+ MAKE_PATH:=tools/lib/bpf
+endif
+
+# Perform a "throw-away" make to create a FEATURE-DUMP.* file to edit later.
+# The "//" in the make target is actually needed, very unPOSIXly.
+define Build/Configure
+ +$(MAKE_VARS) $(MAKE) $(PKG_JOBS) -C $(PKG_BUILD_DIR)/tools/bpf/bpftool \
+ $(MAKE_FLAGS) FEATURES_DUMP= $(PKG_BUILD_DIR)//libbpf/libbpf.a
+ (cd $(PKG_BUILD_DIR); cat FEATURE-DUMP.bpftool libbpf/FEATURE-DUMP.libbpf \
+ | sort | uniq > FEATURE-DUMP.openwrt)
+ $(SED) 's/feature-libbfd=[01]/feature-libbfd=$(HAVE_LIBBFD)/' \
+ -e 's/feature-libcap=[01]/feature-libcap=$(HAVE_LIBCAP)/' \
+ -e 's/feature-clang-bpf-global-var=[01]/feature-clang-bpf-global-var=$(HAVE_CLANG)/' \
+ $(PKG_BUILD_DIR)/FEATURE-DUMP.openwrt
+endef
+
+define Build/InstallDev/libbpf
+ $(INSTALL_DIR) $(1)/usr/include/bpf
+ $(CP) $(PKG_INSTALL_DIR)/usr/include/bpf/*.h $(1)/usr/include/bpf/
+ $(INSTALL_DIR) $(1)/usr/lib
+ $(CP) $(PKG_INSTALL_DIR)/usr/lib$(LIB_SUFFIX)/libbpf.{a,so*} \
+ $(1)/usr/lib/
+ $(INSTALL_DIR) $(1)/usr/lib/pkgconfig
+ $(CP) $(PKG_INSTALL_DIR)/usr/lib$(LIB_SUFFIX)/pkgconfig/libbpf.pc \
+ $(1)/usr/lib/pkgconfig/
+endef
+
+ifeq ($(BUILD_VARIANT),lib)
+ Build/InstallDev=$(Build/InstallDev/libbpf)
+endif
+
+define Package/bpftool-$(BUILD_VARIANT)/install
+ $(INSTALL_DIR) $(1)/usr/libexec
+ $(INSTALL_BIN) $(PKG_INSTALL_DIR)/usr/sbin/bpftool \
+ $(1)/usr/libexec/bpftool-$(BUILD_VARIANT)
+endef
+
+define Package/libbpf/install
+ $(INSTALL_DIR) $(1)/usr/lib
+ $(CP) $(PKG_INSTALL_DIR)/usr/lib$(LIB_SUFFIX)/libbpf.so.* $(1)/usr/lib/
+endef
+
+$(eval $(call BuildPackage,bpftool-full))
+$(eval $(call BuildPackage,bpftool-minimal))
+$(eval $(call BuildPackage,libbpf))