1ec8f24b7SThomas Gleixner# SPDX-License-Identifier: GPL-2.0-only 271bb428fSJakub Kicinskiinclude ../../scripts/Makefile.include 371bb428fSJakub Kicinskiinclude ../../scripts/utilities.mak 471bb428fSJakub Kicinski 571bb428fSJakub Kicinskiifeq ($(srctree),) 671bb428fSJakub Kicinskisrctree := $(patsubst %/,%,$(dir $(CURDIR))) 771bb428fSJakub Kicinskisrctree := $(patsubst %/,%,$(dir $(srctree))) 871bb428fSJakub Kicinskisrctree := $(patsubst %/,%,$(dir $(srctree))) 971bb428fSJakub Kicinskiendif 1071bb428fSJakub Kicinski 1171bb428fSJakub Kicinskiifeq ($(V),1) 1271bb428fSJakub Kicinski Q = 1371bb428fSJakub Kicinskielse 1471bb428fSJakub Kicinski Q = @ 1571bb428fSJakub Kicinskiendif 1671bb428fSJakub Kicinski 1771bb428fSJakub KicinskiBPF_DIR = $(srctree)/tools/lib/bpf/ 1871bb428fSJakub Kicinski 1971bb428fSJakub Kicinskiifneq ($(OUTPUT),) 2045c5589dSQuentin Monnet LIBBPF_OUTPUT = $(OUTPUT)/libbpf/ 2145c5589dSQuentin Monnet LIBBPF_PATH = $(LIBBPF_OUTPUT) 2271bb428fSJakub Kicinskielse 2345c5589dSQuentin Monnet LIBBPF_PATH = $(BPF_DIR) 2471bb428fSJakub Kicinskiendif 2571bb428fSJakub Kicinski 2645c5589dSQuentin MonnetLIBBPF = $(LIBBPF_PATH)libbpf.a 2771bb428fSJakub Kicinski 28e0a43aa3SQuentin MonnetBPFTOOL_VERSION := $(shell make -rR --no-print-directory -sC ../../.. kernelversion) 294bfe3bd3SRoman Gushchin 3071bb428fSJakub Kicinski$(LIBBPF): FORCE 3145c5589dSQuentin Monnet $(if $(LIBBPF_OUTPUT),@mkdir -p $(LIBBPF_OUTPUT)) 3245c5589dSQuentin Monnet $(Q)$(MAKE) -C $(BPF_DIR) OUTPUT=$(LIBBPF_OUTPUT) $(LIBBPF_OUTPUT)libbpf.a 3371bb428fSJakub Kicinski 3471bb428fSJakub Kicinski$(LIBBPF)-clean: 3571bb428fSJakub Kicinski $(call QUIET_CLEAN, libbpf) 3645c5589dSQuentin Monnet $(Q)$(MAKE) -C $(BPF_DIR) OUTPUT=$(LIBBPF_OUTPUT) clean >/dev/null 3771bb428fSJakub Kicinski 38658e85aaSQuentin Monnetprefix ?= /usr/local 39507e590dSQuentin Monnetbash_compdir ?= /usr/share/bash-completion/completions 4071bb428fSJakub Kicinski 4171bb428fSJakub KicinskiCFLAGS += -O2 42a9436dcaSQuentin MonnetCFLAGS += -W -Wall -Wextra -Wno-unused-parameter -Wno-missing-field-initializers 43a9436dcaSQuentin MonnetCFLAGS += $(filter-out -Wswitch-enum,$(EXTRA_WARNINGS)) 44f412eed9SJakub KicinskiCFLAGS += -DPACKAGE='"bpftool"' -D__EXPORTED_HEADERS__ \ 4505aca6daSAndrii Nakryiko -I$(if $(OUTPUT),$(OUTPUT),.) \ 46f412eed9SJakub Kicinski -I$(srctree)/kernel/bpf/ \ 47f412eed9SJakub Kicinski -I$(srctree)/tools/include \ 48f412eed9SJakub Kicinski -I$(srctree)/tools/include/uapi \ 49229c3b47SToke Høiland-Jørgensen -I$(srctree)/tools/lib \ 50f412eed9SJakub Kicinski -I$(srctree)/tools/perf 514bfe3bd3SRoman GushchinCFLAGS += -DBPFTOOL_VERSION='"$(BPFTOOL_VERSION)"' 520ef6bf39SJiri Olsaifneq ($(EXTRA_CFLAGS),) 530ef6bf39SJiri OlsaCFLAGS += $(EXTRA_CFLAGS) 540ef6bf39SJiri Olsaendif 55c8506165SJiri Olsaifneq ($(EXTRA_LDFLAGS),) 56c8506165SJiri OlsaLDFLAGS += $(EXTRA_LDFLAGS) 57c8506165SJiri Olsaendif 580ef6bf39SJiri Olsa 59658e85aaSQuentin MonnetINSTALL ?= install 60658e85aaSQuentin MonnetRM ?= rm -f 6147c09d6aSSong LiuCLANG ?= clang 62658e85aaSQuentin Monnet 63fb982666SRoman GushchinFEATURE_USER = .bpftool 640b3b9ca3SQuentin MonnetFEATURE_TESTS = libbfd disassembler-four-args reallocarray zlib libcap \ 6505aca6daSAndrii Nakryiko clang-bpf-co-re 660b3b9ca3SQuentin MonnetFEATURE_DISPLAY = libbfd disassembler-four-args zlib libcap \ 6705aca6daSAndrii Nakryiko clang-bpf-co-re 68fb982666SRoman Gushchin 69fb982666SRoman Gushchincheck_feat := 1 70fb982666SRoman GushchinNON_CHECK_FEAT_TARGETS := clean uninstall doc doc-clean doc-install doc-uninstall 71fb982666SRoman Gushchinifdef MAKECMDGOALS 72fb982666SRoman Gushchinifeq ($(filter-out $(NON_CHECK_FEAT_TARGETS),$(MAKECMDGOALS)),) 73fb982666SRoman Gushchin check_feat := 0 74fb982666SRoman Gushchinendif 75fb982666SRoman Gushchinendif 76fb982666SRoman Gushchin 77fb982666SRoman Gushchinifeq ($(check_feat),1) 78fb982666SRoman Gushchinifeq ($(FEATURES_DUMP),) 79fb982666SRoman Gushchininclude $(srctree)/tools/build/Makefile.feature 80fb982666SRoman Gushchinelse 81fb982666SRoman Gushchininclude $(FEATURES_DUMP) 82fb982666SRoman Gushchinendif 83fb982666SRoman Gushchinendif 84fb982666SRoman Gushchin 85fb982666SRoman Gushchinifeq ($(feature-disassembler-four-args), 1) 86fb982666SRoman GushchinCFLAGS += -DDISASM_FOUR_ARGS_SIGNATURE 87fb982666SRoman Gushchinendif 88fb982666SRoman Gushchin 89531b014eSJakub Kicinskiifeq ($(feature-reallocarray), 0) 90531b014eSJakub KicinskiCFLAGS += -DCOMPAT_NEED_REALLOCARRAY 91531b014eSJakub Kicinskiendif 92531b014eSJakub Kicinski 930b3b9ca3SQuentin MonnetLIBS = $(LIBBPF) -lelf -lz 940b3b9ca3SQuentin Monnetifeq ($(feature-libcap), 1) 950b3b9ca3SQuentin MonnetCFLAGS += -DUSE_LIBCAP 960b3b9ca3SQuentin MonnetLIBS += -lcap 970b3b9ca3SQuentin Monnetendif 980b3b9ca3SQuentin Monnet 9990126e3aSJakub Kicinskiinclude $(wildcard $(OUTPUT)*.d) 10071bb428fSJakub Kicinski 10171bb428fSJakub Kicinskiall: $(OUTPUT)bpftool 10271bb428fSJakub Kicinski 10329a9c10eSStanislav FomichevBFD_SRCS = jit_disasm.c 10429a9c10eSStanislav Fomichev 10529a9c10eSStanislav FomichevSRCS = $(filter-out $(BFD_SRCS),$(wildcard *.c)) 10629a9c10eSStanislav Fomichev 10729a9c10eSStanislav Fomichevifeq ($(feature-libbfd),1) 1086e8ccb4fSStanislav Fomichev LIBS += -lbfd -ldl -lopcodes 1096e8ccb4fSStanislav Fomichevelse ifeq ($(feature-libbfd-liberty),1) 1106e8ccb4fSStanislav Fomichev LIBS += -lbfd -ldl -lopcodes -liberty 1116e8ccb4fSStanislav Fomichevelse ifeq ($(feature-libbfd-liberty-z),1) 1126e8ccb4fSStanislav Fomichev LIBS += -lbfd -ldl -lopcodes -liberty -lz 1136e8ccb4fSStanislav Fomichevendif 1146e8ccb4fSStanislav Fomichev 1156e8ccb4fSStanislav Fomichevifneq ($(filter -lbfd,$(LIBS)),) 11629a9c10eSStanislav FomichevCFLAGS += -DHAVE_LIBBFD_SUPPORT 11729a9c10eSStanislav FomichevSRCS += $(BFD_SRCS) 11829a9c10eSStanislav Fomichevendif 11929a9c10eSStanislav Fomichev 12016e9b187SAndrii NakryikoBPFTOOL_BOOTSTRAP := $(if $(OUTPUT),$(OUTPUT)bpftool-bootstrap,./bpftool-bootstrap) 12116e9b187SAndrii Nakryiko 12216e9b187SAndrii NakryikoBOOTSTRAP_OBJS = $(addprefix $(OUTPUT),main.o common.o json_writer.o gen.o btf.o) 123c9c35995SJakub KicinskiOBJS = $(patsubst %.c,$(OUTPUT)%.o,$(SRCS)) $(OUTPUT)disasm.o 12447c09d6aSSong Liu 12505aca6daSAndrii NakryikoVMLINUX_BTF_PATHS := $(if $(O),$(O)/vmlinux) \ 12605aca6daSAndrii Nakryiko $(if $(KBUILD_OUTPUT),$(KBUILD_OUTPUT)/vmlinux) \ 12705aca6daSAndrii Nakryiko ../../../vmlinux \ 12805aca6daSAndrii Nakryiko /sys/kernel/btf/vmlinux \ 12905aca6daSAndrii Nakryiko /boot/vmlinux-$(shell uname -r) 13005aca6daSAndrii NakryikoVMLINUX_BTF := $(abspath $(firstword $(wildcard $(VMLINUX_BTF_PATHS)))) 13114e5728fSSong Liu 13205aca6daSAndrii Nakryikoifneq ($(VMLINUX_BTF),) 13305aca6daSAndrii Nakryikoifeq ($(feature-clang-bpf-co-re),1) 13405aca6daSAndrii Nakryiko 13505aca6daSAndrii NakryikoBUILD_BPF_SKELS := 1 13605aca6daSAndrii Nakryiko 13705aca6daSAndrii Nakryiko$(OUTPUT)vmlinux.h: $(VMLINUX_BTF) $(BPFTOOL_BOOTSTRAP) 13805aca6daSAndrii Nakryiko $(QUIET_GEN)$(BPFTOOL_BOOTSTRAP) btf dump file $< format c > $@ 13905aca6daSAndrii Nakryiko 14005aca6daSAndrii Nakryiko$(OUTPUT)%.bpf.o: skeleton/%.bpf.c $(OUTPUT)vmlinux.h $(LIBBPF) 141fe4eb069STobias Klauser $(QUIET_CLANG)$(CLANG) \ 14205aca6daSAndrii Nakryiko -I$(if $(OUTPUT),$(OUTPUT),.) \ 143fe4eb069STobias Klauser -I$(srctree)/tools/include/uapi/ \ 14405aca6daSAndrii Nakryiko -I$(LIBBPF_PATH) \ 14505aca6daSAndrii Nakryiko -I$(srctree)/tools/lib \ 14639be909cSSong Liu -g -O2 -target bpf -c $< -o $@ 14747c09d6aSSong Liu 14805aca6daSAndrii Nakryiko$(OUTPUT)%.skel.h: $(OUTPUT)%.bpf.o $(BPFTOOL_BOOTSTRAP) 14905aca6daSAndrii Nakryiko $(QUIET_GEN)$(BPFTOOL_BOOTSTRAP) gen skeleton $< > $@ 15047c09d6aSSong Liu 15105aca6daSAndrii Nakryiko$(OUTPUT)prog.o: $(OUTPUT)profiler.skel.h 15205aca6daSAndrii Nakryiko 153d53dee3fSAndrii Nakryiko$(OUTPUT)pids.o: $(OUTPUT)pid_iter.skel.h 154d53dee3fSAndrii Nakryiko 15505aca6daSAndrii Nakryikoendif 15605aca6daSAndrii Nakryikoendif 15705aca6daSAndrii Nakryiko 158*9d9d8cc2STobias KlauserCFLAGS += $(if $(BUILD_BPF_SKELS),,-DBPFTOOL_WITHOUT_SKELETONS) 159c9c35995SJakub Kicinski 160c9c35995SJakub Kicinski$(OUTPUT)disasm.o: $(srctree)/kernel/bpf/disasm.c 161d70a6be1SIlya Leoshkevich $(QUIET_CC)$(CC) $(CFLAGS) -c -MMD -o $@ $< 16271bb428fSJakub Kicinski 163d66fa3c7SPeter Wu$(OUTPUT)feature.o: | zdep 164d66fa3c7SPeter Wu 16516e9b187SAndrii Nakryiko$(BPFTOOL_BOOTSTRAP): $(BOOTSTRAP_OBJS) $(LIBBPF) 16616e9b187SAndrii Nakryiko $(QUIET_LINK)$(CC) $(CFLAGS) $(LDFLAGS) -o $@ $(BOOTSTRAP_OBJS) $(LIBS) 16716e9b187SAndrii Nakryiko 16816e9b187SAndrii Nakryiko$(OUTPUT)bpftool: $(OBJS) $(LIBBPF) 16916e9b187SAndrii Nakryiko $(QUIET_LINK)$(CC) $(CFLAGS) $(LDFLAGS) -o $@ $(OBJS) $(LIBS) 17071bb428fSJakub Kicinski 17171bb428fSJakub Kicinski$(OUTPUT)%.o: %.c 172d70a6be1SIlya Leoshkevich $(QUIET_CC)$(CC) $(CFLAGS) -c -MMD -o $@ $< 17371bb428fSJakub Kicinski 17471bb428fSJakub Kicinskiclean: $(LIBBPF)-clean 17571bb428fSJakub Kicinski $(call QUIET_CLEAN, bpftool) 176fbdb620bSQuentin Monnet $(Q)$(RM) -- $(OUTPUT)bpftool $(OUTPUT)*.o $(OUTPUT)*.d 17705aca6daSAndrii Nakryiko $(Q)$(RM) -- $(BPFTOOL_BOOTSTRAP) $(OUTPUT)*.skel.h $(OUTPUT)vmlinux.h 178fbdb620bSQuentin Monnet $(Q)$(RM) -r -- $(OUTPUT)libbpf/ 179cc5b3403SJakub Kicinski $(call QUIET_CLEAN, core-gen) 180fbdb620bSQuentin Monnet $(Q)$(RM) -- $(OUTPUT)FEATURE-DUMP.bpftool 181fbdb620bSQuentin Monnet $(Q)$(RM) -r -- $(OUTPUT)feature/ 18271bb428fSJakub Kicinski 183658e85aaSQuentin Monnetinstall: $(OUTPUT)bpftool 184658e85aaSQuentin Monnet $(call QUIET_INSTALL, bpftool) 185658e85aaSQuentin Monnet $(Q)$(INSTALL) -m 0755 -d $(DESTDIR)$(prefix)/sbin 186658e85aaSQuentin Monnet $(Q)$(INSTALL) $(OUTPUT)bpftool $(DESTDIR)$(prefix)/sbin/bpftool 187658e85aaSQuentin Monnet $(Q)$(INSTALL) -m 0755 -d $(DESTDIR)$(bash_compdir) 188658e85aaSQuentin Monnet $(Q)$(INSTALL) -m 0644 bash-completion/bpftool $(DESTDIR)$(bash_compdir) 18971bb428fSJakub Kicinski 190d3244248SQuentin Monnetuninstall: 191d3244248SQuentin Monnet $(call QUIET_UNINST, bpftool) 192fbdb620bSQuentin Monnet $(Q)$(RM) -- $(DESTDIR)$(prefix)/sbin/bpftool 193fbdb620bSQuentin Monnet $(Q)$(RM) -- $(DESTDIR)$(bash_compdir)/bpftool 194d3244248SQuentin Monnet 195ff69c21aSJakub Kicinskidoc: 196658e85aaSQuentin Monnet $(call descend,Documentation) 197658e85aaSQuentin Monnet 198658e85aaSQuentin Monnetdoc-clean: 199658e85aaSQuentin Monnet $(call descend,Documentation,clean) 200ff69c21aSJakub Kicinski 201ff69c21aSJakub Kicinskidoc-install: 202658e85aaSQuentin Monnet $(call descend,Documentation,install) 203ff69c21aSJakub Kicinski 204d3244248SQuentin Monnetdoc-uninstall: 205d3244248SQuentin Monnet $(call descend,Documentation,uninstall) 206d3244248SQuentin Monnet 20771bb428fSJakub KicinskiFORCE: 20871bb428fSJakub Kicinski 209d66fa3c7SPeter Wuzdep: 210d66fa3c7SPeter Wu @if [ "$(feature-zlib)" != "1" ]; then echo "No zlib found"; exit 1 ; fi 211d66fa3c7SPeter Wu 21205aca6daSAndrii Nakryiko.SECONDARY: 213d66fa3c7SPeter Wu.PHONY: all FORCE clean install uninstall zdep 214d3244248SQuentin Monnet.PHONY: doc doc-clean doc-install doc-uninstall 21571bb428fSJakub Kicinski.DEFAULT_GOAL := all 216