171bb428fSJakub Kicinskiinclude ../../scripts/Makefile.include 271bb428fSJakub Kicinskiinclude ../../scripts/utilities.mak 371bb428fSJakub Kicinski 471bb428fSJakub Kicinskiifeq ($(srctree),) 571bb428fSJakub Kicinskisrctree := $(patsubst %/,%,$(dir $(CURDIR))) 671bb428fSJakub Kicinskisrctree := $(patsubst %/,%,$(dir $(srctree))) 771bb428fSJakub Kicinskisrctree := $(patsubst %/,%,$(dir $(srctree))) 871bb428fSJakub Kicinskiendif 971bb428fSJakub Kicinski 1071bb428fSJakub Kicinskiifeq ($(V),1) 1171bb428fSJakub Kicinski Q = 1271bb428fSJakub Kicinskielse 1371bb428fSJakub Kicinski Q = @ 1471bb428fSJakub Kicinskiendif 1571bb428fSJakub Kicinski 1671bb428fSJakub KicinskiBPF_DIR = $(srctree)/tools/lib/bpf/ 1771bb428fSJakub Kicinski 1871bb428fSJakub Kicinskiifneq ($(OUTPUT),) 1971bb428fSJakub Kicinski BPF_PATH = $(OUTPUT) 2071bb428fSJakub Kicinskielse 2171bb428fSJakub Kicinski BPF_PATH = $(BPF_DIR) 2271bb428fSJakub Kicinskiendif 2371bb428fSJakub Kicinski 2471bb428fSJakub KicinskiLIBBPF = $(BPF_PATH)libbpf.a 2571bb428fSJakub Kicinski 264bfe3bd3SRoman GushchinBPFTOOL_VERSION=$(shell make --no-print-directory -sC ../../.. kernelversion) 274bfe3bd3SRoman Gushchin 2871bb428fSJakub Kicinski$(LIBBPF): FORCE 2971bb428fSJakub Kicinski $(Q)$(MAKE) -C $(BPF_DIR) OUTPUT=$(OUTPUT) $(OUTPUT)libbpf.a FEATURES_DUMP=$(FEATURE_DUMP_EXPORT) 3071bb428fSJakub Kicinski 3171bb428fSJakub Kicinski$(LIBBPF)-clean: 3271bb428fSJakub Kicinski $(call QUIET_CLEAN, libbpf) 3371bb428fSJakub Kicinski $(Q)$(MAKE) -C $(BPF_DIR) OUTPUT=$(OUTPUT) clean >/dev/null 3471bb428fSJakub Kicinski 35658e85aaSQuentin Monnetprefix ?= /usr/local 36507e590dSQuentin Monnetbash_compdir ?= /usr/share/bash-completion/completions 3771bb428fSJakub Kicinski 3871bb428fSJakub KicinskiCC = gcc 3971bb428fSJakub Kicinski 4071bb428fSJakub KicinskiCFLAGS += -O2 4171bb428fSJakub KicinskiCFLAGS += -W -Wall -Wextra -Wno-unused-parameter -Wshadow 42c9c35995SJakub KicinskiCFLAGS += -D__EXPORTED_HEADERS__ -I$(srctree)/tools/include/uapi -I$(srctree)/tools/include -I$(srctree)/tools/lib/bpf -I$(srctree)/kernel/bpf/ 434bfe3bd3SRoman GushchinCFLAGS += -DBPFTOOL_VERSION='"$(BPFTOOL_VERSION)"' 4471bb428fSJakub KicinskiLIBS = -lelf -lbfd -lopcodes $(LIBBPF) 4571bb428fSJakub Kicinski 46658e85aaSQuentin MonnetINSTALL ?= install 47658e85aaSQuentin MonnetRM ?= rm -f 48658e85aaSQuentin Monnet 49*fb982666SRoman GushchinFEATURE_USER = .bpftool 50*fb982666SRoman GushchinFEATURE_TESTS = libbfd disassembler-four-args 51*fb982666SRoman GushchinFEATURE_DISPLAY = libbfd disassembler-four-args 52*fb982666SRoman Gushchin 53*fb982666SRoman Gushchincheck_feat := 1 54*fb982666SRoman GushchinNON_CHECK_FEAT_TARGETS := clean uninstall doc doc-clean doc-install doc-uninstall 55*fb982666SRoman Gushchinifdef MAKECMDGOALS 56*fb982666SRoman Gushchinifeq ($(filter-out $(NON_CHECK_FEAT_TARGETS),$(MAKECMDGOALS)),) 57*fb982666SRoman Gushchin check_feat := 0 58*fb982666SRoman Gushchinendif 59*fb982666SRoman Gushchinendif 60*fb982666SRoman Gushchin 61*fb982666SRoman Gushchinifeq ($(check_feat),1) 62*fb982666SRoman Gushchinifeq ($(FEATURES_DUMP),) 63*fb982666SRoman Gushchininclude $(srctree)/tools/build/Makefile.feature 64*fb982666SRoman Gushchinelse 65*fb982666SRoman Gushchininclude $(FEATURES_DUMP) 66*fb982666SRoman Gushchinendif 67*fb982666SRoman Gushchinendif 68*fb982666SRoman Gushchin 69*fb982666SRoman Gushchinifeq ($(feature-disassembler-four-args), 1) 70*fb982666SRoman GushchinCFLAGS += -DDISASM_FOUR_ARGS_SIGNATURE 71*fb982666SRoman Gushchinendif 72*fb982666SRoman Gushchin 7371bb428fSJakub Kicinskiinclude $(wildcard *.d) 7471bb428fSJakub Kicinski 7571bb428fSJakub Kicinskiall: $(OUTPUT)bpftool 7671bb428fSJakub Kicinski 7771bb428fSJakub KicinskiSRCS = $(wildcard *.c) 78c9c35995SJakub KicinskiOBJS = $(patsubst %.c,$(OUTPUT)%.o,$(SRCS)) $(OUTPUT)disasm.o 79c9c35995SJakub Kicinski 80c9c35995SJakub Kicinski$(OUTPUT)disasm.o: $(srctree)/kernel/bpf/disasm.c 81c9c35995SJakub Kicinski $(QUIET_CC)$(COMPILE.c) -MMD -o $@ $< 8271bb428fSJakub Kicinski 8371bb428fSJakub Kicinski$(OUTPUT)bpftool: $(OBJS) $(LIBBPF) 8471bb428fSJakub Kicinski $(QUIET_LINK)$(CC) $(CFLAGS) -o $@ $^ $(LIBS) 8571bb428fSJakub Kicinski 8671bb428fSJakub Kicinski$(OUTPUT)%.o: %.c 8771bb428fSJakub Kicinski $(QUIET_CC)$(COMPILE.c) -MMD -o $@ $< 8871bb428fSJakub Kicinski 8971bb428fSJakub Kicinskiclean: $(LIBBPF)-clean 9071bb428fSJakub Kicinski $(call QUIET_CLEAN, bpftool) 91658e85aaSQuentin Monnet $(Q)$(RM) $(OUTPUT)bpftool $(OUTPUT)*.o $(OUTPUT)*.d 9271bb428fSJakub Kicinski 93658e85aaSQuentin Monnetinstall: $(OUTPUT)bpftool 94658e85aaSQuentin Monnet $(call QUIET_INSTALL, bpftool) 95658e85aaSQuentin Monnet $(Q)$(INSTALL) -m 0755 -d $(DESTDIR)$(prefix)/sbin 96658e85aaSQuentin Monnet $(Q)$(INSTALL) $(OUTPUT)bpftool $(DESTDIR)$(prefix)/sbin/bpftool 97658e85aaSQuentin Monnet $(Q)$(INSTALL) -m 0755 -d $(DESTDIR)$(bash_compdir) 98658e85aaSQuentin Monnet $(Q)$(INSTALL) -m 0644 bash-completion/bpftool $(DESTDIR)$(bash_compdir) 9971bb428fSJakub Kicinski 100d3244248SQuentin Monnetuninstall: 101d3244248SQuentin Monnet $(call QUIET_UNINST, bpftool) 102d3244248SQuentin Monnet $(Q)$(RM) $(DESTDIR)$(prefix)/sbin/bpftool 103d3244248SQuentin Monnet $(Q)$(RM) $(DESTDIR)$(bash_compdir)/bpftool 104d3244248SQuentin Monnet 105ff69c21aSJakub Kicinskidoc: 106658e85aaSQuentin Monnet $(call descend,Documentation) 107658e85aaSQuentin Monnet 108658e85aaSQuentin Monnetdoc-clean: 109658e85aaSQuentin Monnet $(call descend,Documentation,clean) 110ff69c21aSJakub Kicinski 111ff69c21aSJakub Kicinskidoc-install: 112658e85aaSQuentin Monnet $(call descend,Documentation,install) 113ff69c21aSJakub Kicinski 114d3244248SQuentin Monnetdoc-uninstall: 115d3244248SQuentin Monnet $(call descend,Documentation,uninstall) 116d3244248SQuentin Monnet 11771bb428fSJakub KicinskiFORCE: 11871bb428fSJakub Kicinski 119d3244248SQuentin Monnet.PHONY: all FORCE clean install uninstall 120d3244248SQuentin Monnet.PHONY: doc doc-clean doc-install doc-uninstall 12171bb428fSJakub Kicinski.DEFAULT_GOAL := all 122