11a8b597dSQuentin Monnet# SPDX-License-Identifier: (GPL-2.0-only OR BSD-2-Clause) 271bb428fSJakub Kicinskiinclude ../../scripts/Makefile.include 371bb428fSJakub Kicinski 471bb428fSJakub Kicinskiifeq ($(srctree),) 571bb428fSJakub Kicinskisrctree := $(patsubst %/,%,$(dir $(CURDIR))) 671bb428fSJakub Kicinskisrctree := $(patsubst %/,%,$(dir $(srctree))) 771bb428fSJakub Kicinskisrctree := $(patsubst %/,%,$(dir $(srctree))) 871bb428fSJakub Kicinskiendif 971bb428fSJakub Kicinski 1034e3ab14SQuentin MonnetBPF_DIR = $(srctree)/tools/lib/bpf 1171bb428fSJakub Kicinski 1271bb428fSJakub Kicinskiifneq ($(OUTPUT),) 13f012ade1SQuentin Monnet _OUTPUT := $(OUTPUT) 1471bb428fSJakub Kicinskielse 15c62dd8a5SYuntao Wang _OUTPUT := $(CURDIR)/ 1671bb428fSJakub Kicinskiendif 17c62dd8a5SYuntao WangBOOTSTRAP_OUTPUT := $(_OUTPUT)bootstrap/ 18e41ac202SQuentin Monnet 19c62dd8a5SYuntao WangLIBBPF_OUTPUT := $(_OUTPUT)libbpf/ 20f012ade1SQuentin MonnetLIBBPF_DESTDIR := $(LIBBPF_OUTPUT) 21c62dd8a5SYuntao WangLIBBPF_INCLUDE := $(LIBBPF_DESTDIR)include 2234e3ab14SQuentin MonnetLIBBPF_HDRS_DIR := $(LIBBPF_INCLUDE)/bpf 23e41ac202SQuentin MonnetLIBBPF := $(LIBBPF_OUTPUT)libbpf.a 2471bb428fSJakub Kicinski 25e41ac202SQuentin MonnetLIBBPF_BOOTSTRAP_OUTPUT := $(BOOTSTRAP_OUTPUT)libbpf/ 26e41ac202SQuentin MonnetLIBBPF_BOOTSTRAP_DESTDIR := $(LIBBPF_BOOTSTRAP_OUTPUT) 27c62dd8a5SYuntao WangLIBBPF_BOOTSTRAP_INCLUDE := $(LIBBPF_BOOTSTRAP_DESTDIR)include 28e41ac202SQuentin MonnetLIBBPF_BOOTSTRAP_HDRS_DIR := $(LIBBPF_BOOTSTRAP_INCLUDE)/bpf 29e41ac202SQuentin MonnetLIBBPF_BOOTSTRAP := $(LIBBPF_BOOTSTRAP_OUTPUT)libbpf.a 3071bb428fSJakub Kicinski 31a9caaba3SMauricio Vásquez# We need to copy hashmap.h, nlattr.h, relo_core.h and libbpf_internal.h 32a9caaba3SMauricio Vásquez# which are not otherwise exported by libbpf, but still required by bpftool. 33a9caaba3SMauricio VásquezLIBBPF_INTERNAL_HDRS := $(addprefix $(LIBBPF_HDRS_DIR)/,hashmap.h nlattr.h relo_core.h libbpf_internal.h) 34a9caaba3SMauricio VásquezLIBBPF_BOOTSTRAP_INTERNAL_HDRS := $(addprefix $(LIBBPF_BOOTSTRAP_HDRS_DIR)/,hashmap.h relo_core.h libbpf_internal.h) 35f012ade1SQuentin Monnet 36e41ac202SQuentin Monnet$(LIBBPF_OUTPUT) $(BOOTSTRAP_OUTPUT) $(LIBBPF_BOOTSTRAP_OUTPUT) $(LIBBPF_HDRS_DIR) $(LIBBPF_BOOTSTRAP_HDRS_DIR): 379e8929fdSJean-Philippe Brucker $(QUIET_MKDIR)mkdir -p $@ 389e8929fdSJean-Philippe Brucker 39ced846c6SQuentin Monnet$(LIBBPF): $(wildcard $(BPF_DIR)/*.[ch] $(BPF_DIR)/Makefile) | $(LIBBPF_OUTPUT) 40f012ade1SQuentin Monnet $(Q)$(MAKE) -C $(BPF_DIR) OUTPUT=$(LIBBPF_OUTPUT) \ 41c62dd8a5SYuntao Wang DESTDIR=$(LIBBPF_DESTDIR:/=) prefix= $(LIBBPF) install_headers 42f012ade1SQuentin Monnet 438b6c4624SQuentin Monnet$(LIBBPF_INTERNAL_HDRS): $(LIBBPF_HDRS_DIR)/%.h: $(BPF_DIR)/%.h | $(LIBBPF_HDRS_DIR) 4434e3ab14SQuentin Monnet $(call QUIET_INSTALL, $@) 4534e3ab14SQuentin Monnet $(Q)install -m 644 -t $(LIBBPF_HDRS_DIR) $< 4671bb428fSJakub Kicinski 47ced846c6SQuentin Monnet$(LIBBPF_BOOTSTRAP): $(wildcard $(BPF_DIR)/*.[ch] $(BPF_DIR)/Makefile) | $(LIBBPF_BOOTSTRAP_OUTPUT) 488859b0daSJean-Philippe Brucker $(Q)$(MAKE) -C $(BPF_DIR) OUTPUT=$(LIBBPF_BOOTSTRAP_OUTPUT) \ 49c62dd8a5SYuntao Wang DESTDIR=$(LIBBPF_BOOTSTRAP_DESTDIR:/=) prefix= \ 50af0e26beSJames Hilliard ARCH= CROSS_COMPILE= CC="$(HOSTCC)" LD="$(HOSTLD)" AR="$(HOSTAR)" $@ install_headers 51e41ac202SQuentin Monnet 52e41ac202SQuentin Monnet$(LIBBPF_BOOTSTRAP_INTERNAL_HDRS): $(LIBBPF_BOOTSTRAP_HDRS_DIR)/%.h: $(BPF_DIR)/%.h | $(LIBBPF_BOOTSTRAP_HDRS_DIR) 53e41ac202SQuentin Monnet $(call QUIET_INSTALL, $@) 54e41ac202SQuentin Monnet $(Q)install -m 644 -t $(LIBBPF_BOOTSTRAP_HDRS_DIR) $< 558859b0daSJean-Philippe Brucker 56c3653879SJean-Philippe Brucker$(LIBBPF)-clean: FORCE | $(LIBBPF_OUTPUT) 5771bb428fSJakub Kicinski $(call QUIET_CLEAN, libbpf) 5845c5589dSQuentin Monnet $(Q)$(MAKE) -C $(BPF_DIR) OUTPUT=$(LIBBPF_OUTPUT) clean >/dev/null 5971bb428fSJakub Kicinski 60c3653879SJean-Philippe Brucker$(LIBBPF_BOOTSTRAP)-clean: FORCE | $(LIBBPF_BOOTSTRAP_OUTPUT) 618859b0daSJean-Philippe Brucker $(call QUIET_CLEAN, libbpf-bootstrap) 628859b0daSJean-Philippe Brucker $(Q)$(MAKE) -C $(BPF_DIR) OUTPUT=$(LIBBPF_BOOTSTRAP_OUTPUT) clean >/dev/null 638859b0daSJean-Philippe Brucker 64658e85aaSQuentin Monnetprefix ?= /usr/local 65507e590dSQuentin Monnetbash_compdir ?= /usr/share/bash-completion/completions 6671bb428fSJakub Kicinski 6771bb428fSJakub KicinskiCFLAGS += -O2 68a9436dcaSQuentin MonnetCFLAGS += -W 6917bbf925SAndrii NakryikoCFLAGS += -Wall 70f412eed9SJakub KicinskiCFLAGS += -Wextra 715c816641SMasahiro YamadaCFLAGS += -Wformat-signedness 72f012ade1SQuentin MonnetCFLAGS += -Wno-unused-parameter 73f412eed9SJakub KicinskiCFLAGS += -Wno-missing-field-initializers 74f412eed9SJakub KicinskiCFLAGS += $(filter-out -Wswitch-enum -Wnested-externs,$(EXTRA_WARNINGS)) 75efc36d6cSQuentin MonnetCFLAGS += -DPACKAGE='"bpftool"' -D__EXPORTED_HEADERS__ \ 769910a74dSQuentin Monnet -I$(or $(OUTPUT),.) \ 774bfe3bd3SRoman Gushchin -I$(LIBBPF_INCLUDE) \ 789910a74dSQuentin Monnet -I$(srctree)/kernel/bpf/ \ 790ef6bf39SJiri Olsa -I$(srctree)/tools/include \ 800ef6bf39SJiri Olsa -I$(srctree)/tools/include/uapi 810ef6bf39SJiri Olsaifneq ($(BPFTOOL_VERSION),) 82c8506165SJiri OlsaCFLAGS += -DBPFTOOL_VERSION='"$(BPFTOOL_VERSION)"' 83c8506165SJiri Olsaendif 84c8506165SJiri Olsaifneq ($(EXTRA_CFLAGS),) 850ef6bf39SJiri OlsaCFLAGS += $(EXTRA_CFLAGS) 86cc9b22dfSQuentin Monnetendif 87cc9b22dfSQuentin Monnetifneq ($(EXTRA_LDFLAGS),) 88cc9b22dfSQuentin MonnetLDFLAGS += $(EXTRA_LDFLAGS) 89cc9b22dfSQuentin Monnetendif 90658e85aaSQuentin Monnet 91658e85aaSQuentin MonnetHOST_CFLAGS := $(subst -I$(LIBBPF_INCLUDE),-I$(LIBBPF_BOOTSTRAP_INCLUDE),\ 92658e85aaSQuentin Monnet $(subst $(CLANG_CROSS_FLAGS),,$(CFLAGS))) 93fb982666SRoman GushchinHOST_LDFLAGS := $(LDFLAGS) 94108326d6SQuentin Monnet 95108326d6SQuentin MonnetINSTALL ?= install 96eb9d1acfSQuentin MonnetRM ?= rm -f 97108326d6SQuentin Monnet 98108326d6SQuentin MonnetFEATURE_USER = .bpftool 99108326d6SQuentin Monnet 100108326d6SQuentin MonnetFEATURE_TESTS := clang-bpf-co-re 101108326d6SQuentin MonnetFEATURE_TESTS += llvm 102108326d6SQuentin MonnetFEATURE_TESTS += libcap 103*fee9c03bSLeo YanFEATURE_TESTS += libbfd 104108326d6SQuentin MonnetFEATURE_TESTS += libbfd-liberty 105108326d6SQuentin MonnetFEATURE_TESTS += libbfd-liberty-z 106eb9d1acfSQuentin MonnetFEATURE_TESTS += disassembler-four-args 107108326d6SQuentin MonnetFEATURE_TESTS += disassembler-init-styled 108108326d6SQuentin MonnetFEATURE_TESTS += libelf-zstd 109108326d6SQuentin Monnet 110108326d6SQuentin MonnetFEATURE_DISPLAY := clang-bpf-co-re 111fb982666SRoman GushchinFEATURE_DISPLAY += llvm 112fb982666SRoman GushchinFEATURE_DISPLAY += libcap 113fb982666SRoman GushchinFEATURE_DISPLAY += libbfd 114fb982666SRoman GushchinFEATURE_DISPLAY += libbfd-liberty 115fb982666SRoman GushchinFEATURE_DISPLAY += libbfd-liberty-z 116fb982666SRoman Gushchin 117fb982666SRoman Gushchincheck_feat := 1 118fb982666SRoman GushchinNON_CHECK_FEAT_TARGETS := clean uninstall doc doc-clean doc-install doc-uninstall 119fb982666SRoman Gushchinifdef MAKECMDGOALS 120fb982666SRoman Gushchinifeq ($(filter-out $(NON_CHECK_FEAT_TARGETS),$(MAKECMDGOALS)),) 121fb982666SRoman Gushchin check_feat := 0 122fb982666SRoman Gushchinendif 123fb982666SRoman Gushchinendif 124fb982666SRoman Gushchin 125fb982666SRoman Gushchinifeq ($(check_feat),1) 126fb982666SRoman Gushchinifeq ($(FEATURES_DUMP),) 127fb982666SRoman Gushchininclude $(srctree)/tools/build/Makefile.feature 1280b3b9ca3SQuentin Monnetelse 1298859b0daSJean-Philippe Bruckerinclude $(FEATURES_DUMP) 130*fee9c03bSLeo Yanendif 131*fee9c03bSLeo Yanendif 132*fee9c03bSLeo Yan 133*fee9c03bSLeo YanLIBS = $(LIBBPF) -lelf -lz 134*fee9c03bSLeo YanLIBS_BOOTSTRAP = $(LIBBPF_BOOTSTRAP) -lelf -lz 135*fee9c03bSLeo Yan 1360b3b9ca3SQuentin Monnetifeq ($(feature-libelf-zstd),1) 1370b3b9ca3SQuentin MonnetLIBS += -lzstd 1380b3b9ca3SQuentin MonnetLIBS_BOOTSTRAP += -lzstd 1390b3b9ca3SQuentin Monnetendif 1400b3b9ca3SQuentin Monnet 14190126e3aSJakub Kicinskiifeq ($(feature-libcap), 1) 14271bb428fSJakub KicinskiCFLAGS += -DUSE_LIBCAP 14371bb428fSJakub KicinskiLIBS += -lcap 14471bb428fSJakub Kicinskiendif 1452ea4d86aSQuentin Monnet 14629a9c10eSStanislav Fomichevinclude $(wildcard $(OUTPUT)*.d) 147eb9d1acfSQuentin Monnet 148eb9d1acfSQuentin Monnetall: $(OUTPUT)bpftool 149eb9d1acfSQuentin Monnet 150eb9d1acfSQuentin MonnetSRCS := $(wildcard *.c) 1510513eeeeSViktor Malik 1520513eeeeSViktor Malikifeq ($(feature-llvm),1) 1530513eeeeSViktor Malik # If LLVM is available, use it for JIT disassembly 1540513eeeeSViktor Malik CFLAGS += -DHAVE_LLVM_SUPPORT 1550513eeeeSViktor Malik LLVM_CONFIG_LIB_COMPONENTS := mcdisassembler all-targets 156eb9d1acfSQuentin Monnet # llvm-config always adds -D_GNU_SOURCE, however, it may already be in CFLAGS 15755171f29SAnton Protopopov # (e.g. when bpftool build is called from selftests build as selftests 15855171f29SAnton Protopopov # Makefile includes lib.mk which sets -D_GNU_SOURCE) which would cause 15955171f29SAnton Protopopov # compilation error due to redefinition. Let's filter it out here. 16055171f29SAnton Protopopov CFLAGS += $(filter-out -D_GNU_SOURCE,$(shell $(LLVM_CONFIG) --cflags)) 161eb9d1acfSQuentin Monnet LIBS += $(shell $(LLVM_CONFIG) --libs $(LLVM_CONFIG_LIB_COMPONENTS)) 162eb9d1acfSQuentin Monnet ifeq ($(shell $(LLVM_CONFIG) --shared-mode),static) 163eb9d1acfSQuentin Monnet LIBS += $(shell $(LLVM_CONFIG) --system-libs $(LLVM_CONFIG_LIB_COMPONENTS)) 16429a9c10eSStanislav Fomichev LIBS += -lstdc++ 1656e8ccb4fSStanislav Fomichev endif 1666e8ccb4fSStanislav Fomichev LDFLAGS += $(shell $(LLVM_CONFIG) --ldflags) 1676e8ccb4fSStanislav Fomichevelse 1686e8ccb4fSStanislav Fomichev # Fall back on libbfd 1696e8ccb4fSStanislav Fomichev ifeq ($(feature-libbfd),1) 1706e8ccb4fSStanislav Fomichev LIBS += -lbfd -ldl -lopcodes 1716e8ccb4fSStanislav Fomichev else ifeq ($(feature-libbfd-liberty),1) 1722ea4d86aSQuentin Monnet LIBS += -lbfd -ldl -lopcodes -liberty 1736e8ccb4fSStanislav Fomichev else ifeq ($(feature-libbfd-liberty-z),1) 17429a9c10eSStanislav Fomichev LIBS += -lbfd -ldl -lopcodes -liberty -lz 1752ea4d86aSQuentin Monnet endif 1762ea4d86aSQuentin Monnet 1772ea4d86aSQuentin Monnet # If one of the above feature combinations is set, we support libbfd 1782ea4d86aSQuentin Monnet ifneq ($(filter -lbfd,$(LIBS)),) 1792ea4d86aSQuentin Monnet CFLAGS += -DHAVE_LIBBFD_SUPPORT 1802ea4d86aSQuentin Monnet 1812ea4d86aSQuentin Monnet # Libbfd interface changed over time, figure out what we need 1822ea4d86aSQuentin Monnet ifeq ($(feature-disassembler-four-args), 1) 1832ea4d86aSQuentin Monnet CFLAGS += -DDISASM_FOUR_ARGS_SIGNATURE 184eb9d1acfSQuentin Monnet endif 185eb9d1acfSQuentin Monnet ifeq ($(feature-disassembler-init-styled), 1) 1862ea4d86aSQuentin Monnet CFLAGS += -DDISASM_INIT_STYLED 1872ea4d86aSQuentin Monnet endif 18829a9c10eSStanislav Fomichev endif 18929a9c10eSStanislav Fomichevendif 1908859b0daSJean-Philippe Bruckerifeq ($(filter -DHAVE_LLVM_SUPPORT -DHAVE_LIBBFD_SUPPORT,$(CFLAGS)),) 19116e9b187SAndrii Nakryiko # No support for JIT disassembly 192e9a826ddSQuentin Monnet SRCS := $(filter-out jit_disasm.c,$(SRCS)) 1930b46b755SQuentin Monnetendif 1940b46b755SQuentin Monnet 195c9c35995SJakub KicinskiBPFTOOL_BOOTSTRAP := $(BOOTSTRAP_OUTPUT)bpftool 19634e3ab14SQuentin Monnet 19747c09d6aSSong LiuBOOTSTRAP_OBJS = $(addprefix $(BOOTSTRAP_OUTPUT),main.o common.o json_writer.o gen.o btf.o) 198ec23eb70SAndrii Nakryiko$(BOOTSTRAP_OBJS): $(LIBBPF_BOOTSTRAP) 19905aca6daSAndrii Nakryiko 20005aca6daSAndrii NakryikoOBJS = $(patsubst %.c,$(OUTPUT)%.o,$(SRCS)) $(OUTPUT)disasm.o 20105aca6daSAndrii Nakryiko$(OBJS): $(LIBBPF) $(LIBBPF_INTERNAL_HDRS) 20205aca6daSAndrii Nakryiko 203ec23eb70SAndrii NakryikoVMLINUX_BTF_PATHS ?= $(if $(O),$(O)/vmlinux) \ 20414e5728fSSong Liu $(if $(KBUILD_OUTPUT),$(KBUILD_OUTPUT)/vmlinux) \ 205d2032d45SSong Liu ../../../vmlinux \ 206d2032d45SSong Liu /sys/kernel/btf/vmlinux \ 207ec23eb70SAndrii Nakryiko /boot/vmlinux-$(shell uname -r) 20805aca6daSAndrii NakryikoVMLINUX_BTF ?= $(abspath $(firstword $(wildcard $(VMLINUX_BTF_PATHS)))) 20905aca6daSAndrii Nakryiko 21005aca6daSAndrii Nakryikobootstrap: $(BPFTOOL_BOOTSTRAP) 21105aca6daSAndrii Nakryiko 212ec23eb70SAndrii Nakryikoifneq ($(VMLINUX_BTF)$(VMLINUX_H),) 213e7b64f9dSArtem Savkovifeq ($(feature-clang-bpf-co-re),1) 21405aca6daSAndrii Nakryiko 215ec23eb70SAndrii NakryikoBUILD_BPF_SKELS := 1 216e7b64f9dSArtem Savkov 217ec23eb70SAndrii Nakryikoifeq ($(VMLINUX_H),) 218ec23eb70SAndrii Nakryiko$(OUTPUT)vmlinux.h: $(VMLINUX_BTF) $(BPFTOOL_BOOTSTRAP) 21905aca6daSAndrii Nakryiko $(QUIET_GEN)$(BPFTOOL_BOOTSTRAP) btf dump file $< format c > $@ 220e41ac202SQuentin Monnetelse 221fe4eb069STobias Klauser$(OUTPUT)vmlinux.h: $(VMLINUX_H) 2225c816641SMasahiro Yamada $(Q)cp "$(VMLINUX_H)" $@ 223fe4eb069STobias Klauserendif 224e41ac202SQuentin Monnet 225878625e1SHolger Hoffstätte$(OUTPUT)%.bpf.o: skeleton/%.bpf.c $(OUTPUT)vmlinux.h $(LIBBPF_BOOTSTRAP) 226bbaf1ff0SFangrui Song $(QUIET_CLANG)$(CLANG) \ 2276501182cSAndrii Nakryiko -I$(or $(OUTPUT),.) \ 22847c09d6aSSong Liu -I$(srctree)/tools/include/uapi/ \ 22905aca6daSAndrii Nakryiko -I$(LIBBPF_BOOTSTRAP_INCLUDE) \ 23005aca6daSAndrii Nakryiko -g -O2 -Wall -fno-stack-protector \ 23147c09d6aSSong Liu --target=bpf -c $< -o $@ 23205aca6daSAndrii Nakryiko $(Q)$(LLVM_STRIP) -g $@ 23305aca6daSAndrii Nakryiko 234d53dee3fSAndrii Nakryiko$(OUTPUT)%.skel.h: $(OUTPUT)%.bpf.o $(BPFTOOL_BOOTSTRAP) 235d53dee3fSAndrii Nakryiko $(QUIET_GEN)$(BPFTOOL_BOOTSTRAP) gen skeleton $< > $@ 23605aca6daSAndrii Nakryiko 23705aca6daSAndrii Nakryiko$(OUTPUT)prog.o: $(OUTPUT)profiler.skel.h 23805aca6daSAndrii Nakryiko 2399d9d8cc2STobias Klauser$(OUTPUT)pids.o: $(OUTPUT)pid_iter.skel.h 240c9c35995SJakub Kicinski 241c9c35995SJakub Kicinskiendif 2426501182cSAndrii Nakryikoendif 24371bb428fSJakub Kicinski 2448859b0daSJean-Philippe BruckerCFLAGS += $(if $(BUILD_BPF_SKELS),,-DBPFTOOL_WITHOUT_SKELETONS) 245cc9b22dfSQuentin Monnet 24616e9b187SAndrii Nakryiko$(OUTPUT)disasm.o: $(srctree)/kernel/bpf/disasm.c 24716e9b187SAndrii Nakryiko $(QUIET_CC)$(CC) $(CFLAGS) -c -MMD $< -o $@ 2486501182cSAndrii Nakryiko 24971bb428fSJakub Kicinski$(BPFTOOL_BOOTSTRAP): $(BOOTSTRAP_OBJS) $(LIBBPF_BOOTSTRAP) 250e41ac202SQuentin Monnet $(QUIET_LINK)$(HOSTCC) $(HOST_CFLAGS) $(HOST_LDFLAGS) $(BOOTSTRAP_OBJS) $(LIBS_BOOTSTRAP) -o $@ 251bdadbb44SJean-Philippe Brucker 2528859b0daSJean-Philippe Brucker$(OUTPUT)bpftool: $(OBJS) $(LIBBPF) 25371bb428fSJakub Kicinski $(QUIET_LINK)$(CC) $(CFLAGS) $(LDFLAGS) $(OBJS) $(LIBS) -o $@ 2546501182cSAndrii Nakryiko 25571bb428fSJakub Kicinski$(BOOTSTRAP_OUTPUT)%.o: %.c $(LIBBPF_BOOTSTRAP_INTERNAL_HDRS) | $(BOOTSTRAP_OUTPUT) 256661b37cdSJesper Dangaard Brouer $(QUIET_CC)$(HOSTCC) $(HOST_CFLAGS) -c -MMD $< -o $@ 257661b37cdSJesper Dangaard Brouer 258661b37cdSJesper Dangaard Brouer$(OUTPUT)%.o: %.c 259661b37cdSJesper Dangaard Brouer $(QUIET_CC)$(CC) $(CFLAGS) -c -MMD $< -o $@ 2608859b0daSJean-Philippe Brucker 26171bb428fSJakub Kicinskifeature-detect-clean: 262fbdb620bSQuentin Monnet $(call QUIET_CLEAN, feature-detect) 2638859b0daSJean-Philippe Brucker $(Q)$(MAKE) -C $(srctree)/tools/build/feature/ clean >/dev/null 2648859b0daSJean-Philippe Brucker 265cc5b3403SJakub Kicinskiclean: $(LIBBPF)-clean $(LIBBPF_BOOTSTRAP)-clean feature-detect-clean 266fbdb620bSQuentin Monnet $(call QUIET_CLEAN, bpftool) 267fbdb620bSQuentin Monnet $(Q)$(RM) -- $(OUTPUT)bpftool $(OUTPUT)*.o $(OUTPUT)*.d 26871bb428fSJakub Kicinski $(Q)$(RM) -- $(OUTPUT)*.skel.h $(OUTPUT)vmlinux.h 269d7db0a4eSQuentin Monnet $(Q)$(RM) -r -- $(LIBBPF_OUTPUT) $(BOOTSTRAP_OUTPUT) 270658e85aaSQuentin Monnet $(call QUIET_CLEAN, core-gen) 271658e85aaSQuentin Monnet $(Q)$(RM) -- $(OUTPUT)FEATURE-DUMP.bpftool 272658e85aaSQuentin Monnet $(Q)$(RM) -r -- $(OUTPUT)feature/ 273d7db0a4eSQuentin Monnet 274d7db0a4eSQuentin Monnetinstall-bin: $(OUTPUT)bpftool 275658e85aaSQuentin Monnet $(call QUIET_INSTALL, bpftool) 276658e85aaSQuentin Monnet $(Q)$(INSTALL) -m 0755 -d $(DESTDIR)$(prefix)/sbin 27771bb428fSJakub Kicinski $(Q)$(INSTALL) $(OUTPUT)bpftool $(DESTDIR)$(prefix)/sbin/bpftool 278d3244248SQuentin Monnet 279d3244248SQuentin Monnetinstall: install-bin 280fbdb620bSQuentin Monnet $(Q)$(INSTALL) -m 0755 -d $(DESTDIR)$(bash_compdir) 281fbdb620bSQuentin Monnet $(Q)$(INSTALL) -m 0644 bash-completion/bpftool $(DESTDIR)$(bash_compdir) 282d3244248SQuentin Monnet 283ff69c21aSJakub Kicinskiuninstall: 284658e85aaSQuentin Monnet $(call QUIET_UNINST, bpftool) 285658e85aaSQuentin Monnet $(Q)$(RM) -- $(DESTDIR)$(prefix)/sbin/bpftool 286658e85aaSQuentin Monnet $(Q)$(RM) -- $(DESTDIR)$(bash_compdir)/bpftool 287658e85aaSQuentin Monnet 288ff69c21aSJakub Kicinskidoc: 289ff69c21aSJakub Kicinski $(call descend,Documentation) 290658e85aaSQuentin Monnet 291ff69c21aSJakub Kicinskidoc-clean: 292d3244248SQuentin Monnet $(call descend,Documentation,clean) 293d3244248SQuentin Monnet 294d3244248SQuentin Monnetdoc-install: 29571bb428fSJakub Kicinski $(call descend,Documentation,install) 29671bb428fSJakub Kicinski 29705aca6daSAndrii Nakryikodoc-uninstall: 298e41ac202SQuentin Monnet $(call descend,Documentation,uninstall) 299d3244248SQuentin Monnet 30071bb428fSJakub KicinskiFORCE: 301e7f0d5cdSChangbin Du 302e7f0d5cdSChangbin Du.SECONDARY: 303e7f0d5cdSChangbin Du.PHONY: all FORCE bootstrap clean install-bin install uninstall 304.PHONY: doc doc-clean doc-install doc-uninstall 305.DEFAULT_GOAL := all 306 307# Delete partially updated (corrupted) files on error 308.DELETE_ON_ERROR: 309