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 26c256429fSJakub KicinskiBPFTOOL_VERSION := $(shell make --no-print-directory -sC ../../.. kernelversion) 274bfe3bd3SRoman Gushchin 2871bb428fSJakub Kicinski$(LIBBPF): FORCE 29dc989d2cSJakub Kicinski $(Q)$(MAKE) -C $(BPF_DIR) OUTPUT=$(OUTPUT) $(OUTPUT)libbpf.a 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 4172ab55e9SJiri BencCFLAGS += -W -Wall -Wextra -Wno-unused-parameter -Wshadow -Wno-missing-field-initializers 42f412eed9SJakub KicinskiCFLAGS += -DPACKAGE='"bpftool"' -D__EXPORTED_HEADERS__ \ 43f412eed9SJakub Kicinski -I$(srctree)/kernel/bpf/ \ 44f412eed9SJakub Kicinski -I$(srctree)/tools/include \ 45f412eed9SJakub Kicinski -I$(srctree)/tools/include/uapi \ 46f412eed9SJakub Kicinski -I$(srctree)/tools/lib/bpf \ 47f412eed9SJakub Kicinski -I$(srctree)/tools/perf 484bfe3bd3SRoman GushchinCFLAGS += -DBPFTOOL_VERSION='"$(BPFTOOL_VERSION)"' 490ef6bf39SJiri Olsaifneq ($(EXTRA_CFLAGS),) 500ef6bf39SJiri OlsaCFLAGS += $(EXTRA_CFLAGS) 510ef6bf39SJiri Olsaendif 52c8506165SJiri Olsaifneq ($(EXTRA_LDFLAGS),) 53c8506165SJiri OlsaLDFLAGS += $(EXTRA_LDFLAGS) 54c8506165SJiri Olsaendif 550ef6bf39SJiri Olsa 5629a9c10eSStanislav FomichevLIBS = -lelf $(LIBBPF) 5771bb428fSJakub Kicinski 58658e85aaSQuentin MonnetINSTALL ?= install 59658e85aaSQuentin MonnetRM ?= rm -f 60658e85aaSQuentin Monnet 61fb982666SRoman GushchinFEATURE_USER = .bpftool 62531b014eSJakub KicinskiFEATURE_TESTS = libbfd disassembler-four-args reallocarray 63fb982666SRoman GushchinFEATURE_DISPLAY = libbfd disassembler-four-args 64fb982666SRoman Gushchin 65fb982666SRoman Gushchincheck_feat := 1 66fb982666SRoman GushchinNON_CHECK_FEAT_TARGETS := clean uninstall doc doc-clean doc-install doc-uninstall 67fb982666SRoman Gushchinifdef MAKECMDGOALS 68fb982666SRoman Gushchinifeq ($(filter-out $(NON_CHECK_FEAT_TARGETS),$(MAKECMDGOALS)),) 69fb982666SRoman Gushchin check_feat := 0 70fb982666SRoman Gushchinendif 71fb982666SRoman Gushchinendif 72fb982666SRoman Gushchin 73fb982666SRoman Gushchinifeq ($(check_feat),1) 74fb982666SRoman Gushchinifeq ($(FEATURES_DUMP),) 75fb982666SRoman Gushchininclude $(srctree)/tools/build/Makefile.feature 76fb982666SRoman Gushchinelse 77fb982666SRoman Gushchininclude $(FEATURES_DUMP) 78fb982666SRoman Gushchinendif 79fb982666SRoman Gushchinendif 80fb982666SRoman Gushchin 81fb982666SRoman Gushchinifeq ($(feature-disassembler-four-args), 1) 82fb982666SRoman GushchinCFLAGS += -DDISASM_FOUR_ARGS_SIGNATURE 83fb982666SRoman Gushchinendif 84fb982666SRoman Gushchin 85531b014eSJakub Kicinskiifeq ($(feature-reallocarray), 0) 86531b014eSJakub KicinskiCFLAGS += -DCOMPAT_NEED_REALLOCARRAY 87531b014eSJakub Kicinskiendif 88531b014eSJakub Kicinski 8990126e3aSJakub Kicinskiinclude $(wildcard $(OUTPUT)*.d) 9071bb428fSJakub Kicinski 9171bb428fSJakub Kicinskiall: $(OUTPUT)bpftool 9271bb428fSJakub Kicinski 9329a9c10eSStanislav FomichevBFD_SRCS = jit_disasm.c 9429a9c10eSStanislav Fomichev 9529a9c10eSStanislav FomichevSRCS = $(filter-out $(BFD_SRCS),$(wildcard *.c)) 9629a9c10eSStanislav Fomichev 9729a9c10eSStanislav Fomichevifeq ($(feature-libbfd),1) 9829a9c10eSStanislav FomichevCFLAGS += -DHAVE_LIBBFD_SUPPORT 9929a9c10eSStanislav FomichevSRCS += $(BFD_SRCS) 10029a9c10eSStanislav FomichevLIBS += -lbfd -lopcodes 10129a9c10eSStanislav Fomichevendif 10229a9c10eSStanislav Fomichev 103c9c35995SJakub KicinskiOBJS = $(patsubst %.c,$(OUTPUT)%.o,$(SRCS)) $(OUTPUT)disasm.o 104c9c35995SJakub Kicinski 105c9c35995SJakub Kicinski$(OUTPUT)disasm.o: $(srctree)/kernel/bpf/disasm.c 106c9c35995SJakub Kicinski $(QUIET_CC)$(COMPILE.c) -MMD -o $@ $< 10771bb428fSJakub Kicinski 10871bb428fSJakub Kicinski$(OUTPUT)bpftool: $(OBJS) $(LIBBPF) 109c8506165SJiri Olsa $(QUIET_LINK)$(CC) $(CFLAGS) $(LDFLAGS) -o $@ $^ $(LIBS) 11071bb428fSJakub Kicinski 11171bb428fSJakub Kicinski$(OUTPUT)%.o: %.c 11271bb428fSJakub Kicinski $(QUIET_CC)$(COMPILE.c) -MMD -o $@ $< 11371bb428fSJakub Kicinski 11471bb428fSJakub Kicinskiclean: $(LIBBPF)-clean 11571bb428fSJakub Kicinski $(call QUIET_CLEAN, bpftool) 116658e85aaSQuentin Monnet $(Q)$(RM) $(OUTPUT)bpftool $(OUTPUT)*.o $(OUTPUT)*.d 117cc5b3403SJakub Kicinski $(call QUIET_CLEAN, core-gen) 118cc5b3403SJakub Kicinski $(Q)$(RM) $(OUTPUT)FEATURE-DUMP.bpftool 11971bb428fSJakub Kicinski 120658e85aaSQuentin Monnetinstall: $(OUTPUT)bpftool 121658e85aaSQuentin Monnet $(call QUIET_INSTALL, bpftool) 122658e85aaSQuentin Monnet $(Q)$(INSTALL) -m 0755 -d $(DESTDIR)$(prefix)/sbin 123658e85aaSQuentin Monnet $(Q)$(INSTALL) $(OUTPUT)bpftool $(DESTDIR)$(prefix)/sbin/bpftool 124658e85aaSQuentin Monnet $(Q)$(INSTALL) -m 0755 -d $(DESTDIR)$(bash_compdir) 125658e85aaSQuentin Monnet $(Q)$(INSTALL) -m 0644 bash-completion/bpftool $(DESTDIR)$(bash_compdir) 12671bb428fSJakub Kicinski 127d3244248SQuentin Monnetuninstall: 128d3244248SQuentin Monnet $(call QUIET_UNINST, bpftool) 129d3244248SQuentin Monnet $(Q)$(RM) $(DESTDIR)$(prefix)/sbin/bpftool 130d3244248SQuentin Monnet $(Q)$(RM) $(DESTDIR)$(bash_compdir)/bpftool 131d3244248SQuentin Monnet 132ff69c21aSJakub Kicinskidoc: 133658e85aaSQuentin Monnet $(call descend,Documentation) 134658e85aaSQuentin Monnet 135658e85aaSQuentin Monnetdoc-clean: 136658e85aaSQuentin Monnet $(call descend,Documentation,clean) 137ff69c21aSJakub Kicinski 138ff69c21aSJakub Kicinskidoc-install: 139658e85aaSQuentin Monnet $(call descend,Documentation,install) 140ff69c21aSJakub Kicinski 141d3244248SQuentin Monnetdoc-uninstall: 142d3244248SQuentin Monnet $(call descend,Documentation,uninstall) 143d3244248SQuentin Monnet 14471bb428fSJakub KicinskiFORCE: 14571bb428fSJakub Kicinski 146d3244248SQuentin Monnet.PHONY: all FORCE clean install uninstall 147d3244248SQuentin Monnet.PHONY: doc doc-clean doc-install doc-uninstall 14871bb428fSJakub Kicinski.DEFAULT_GOAL := all 149