162306a36Sopenharmony_ci# SPDX-License-Identifier: (GPL-2.0-only OR BSD-2-Clause)
262306a36Sopenharmony_ciinclude ../../scripts/Makefile.include
362306a36Sopenharmony_ci
462306a36Sopenharmony_ciifeq ($(srctree),)
562306a36Sopenharmony_cisrctree := $(patsubst %/,%,$(dir $(CURDIR)))
662306a36Sopenharmony_cisrctree := $(patsubst %/,%,$(dir $(srctree)))
762306a36Sopenharmony_cisrctree := $(patsubst %/,%,$(dir $(srctree)))
862306a36Sopenharmony_ciendif
962306a36Sopenharmony_ci
1062306a36Sopenharmony_ciifeq ($(V),1)
1162306a36Sopenharmony_ci  Q =
1262306a36Sopenharmony_cielse
1362306a36Sopenharmony_ci  Q = @
1462306a36Sopenharmony_ciendif
1562306a36Sopenharmony_ci
1662306a36Sopenharmony_ciBPF_DIR = $(srctree)/tools/lib/bpf
1762306a36Sopenharmony_ci
1862306a36Sopenharmony_ciifneq ($(OUTPUT),)
1962306a36Sopenharmony_ci  _OUTPUT := $(OUTPUT)
2062306a36Sopenharmony_cielse
2162306a36Sopenharmony_ci  _OUTPUT := $(CURDIR)/
2262306a36Sopenharmony_ciendif
2362306a36Sopenharmony_ciBOOTSTRAP_OUTPUT := $(_OUTPUT)bootstrap/
2462306a36Sopenharmony_ci
2562306a36Sopenharmony_ciLIBBPF_OUTPUT := $(_OUTPUT)libbpf/
2662306a36Sopenharmony_ciLIBBPF_DESTDIR := $(LIBBPF_OUTPUT)
2762306a36Sopenharmony_ciLIBBPF_INCLUDE := $(LIBBPF_DESTDIR)include
2862306a36Sopenharmony_ciLIBBPF_HDRS_DIR := $(LIBBPF_INCLUDE)/bpf
2962306a36Sopenharmony_ciLIBBPF := $(LIBBPF_OUTPUT)libbpf.a
3062306a36Sopenharmony_ci
3162306a36Sopenharmony_ciLIBBPF_BOOTSTRAP_OUTPUT := $(BOOTSTRAP_OUTPUT)libbpf/
3262306a36Sopenharmony_ciLIBBPF_BOOTSTRAP_DESTDIR := $(LIBBPF_BOOTSTRAP_OUTPUT)
3362306a36Sopenharmony_ciLIBBPF_BOOTSTRAP_INCLUDE := $(LIBBPF_BOOTSTRAP_DESTDIR)include
3462306a36Sopenharmony_ciLIBBPF_BOOTSTRAP_HDRS_DIR := $(LIBBPF_BOOTSTRAP_INCLUDE)/bpf
3562306a36Sopenharmony_ciLIBBPF_BOOTSTRAP := $(LIBBPF_BOOTSTRAP_OUTPUT)libbpf.a
3662306a36Sopenharmony_ci
3762306a36Sopenharmony_ci# We need to copy hashmap.h, nlattr.h, relo_core.h and libbpf_internal.h
3862306a36Sopenharmony_ci# which are not otherwise exported by libbpf, but still required by bpftool.
3962306a36Sopenharmony_ciLIBBPF_INTERNAL_HDRS := $(addprefix $(LIBBPF_HDRS_DIR)/,hashmap.h nlattr.h relo_core.h libbpf_internal.h)
4062306a36Sopenharmony_ciLIBBPF_BOOTSTRAP_INTERNAL_HDRS := $(addprefix $(LIBBPF_BOOTSTRAP_HDRS_DIR)/,hashmap.h relo_core.h libbpf_internal.h)
4162306a36Sopenharmony_ci
4262306a36Sopenharmony_ci$(LIBBPF_OUTPUT) $(BOOTSTRAP_OUTPUT) $(LIBBPF_BOOTSTRAP_OUTPUT) $(LIBBPF_HDRS_DIR) $(LIBBPF_BOOTSTRAP_HDRS_DIR):
4362306a36Sopenharmony_ci	$(QUIET_MKDIR)mkdir -p $@
4462306a36Sopenharmony_ci
4562306a36Sopenharmony_ci$(LIBBPF): $(wildcard $(BPF_DIR)/*.[ch] $(BPF_DIR)/Makefile) | $(LIBBPF_OUTPUT)
4662306a36Sopenharmony_ci	$(Q)$(MAKE) -C $(BPF_DIR) OUTPUT=$(LIBBPF_OUTPUT) \
4762306a36Sopenharmony_ci		DESTDIR=$(LIBBPF_DESTDIR:/=) prefix= $(LIBBPF) install_headers
4862306a36Sopenharmony_ci
4962306a36Sopenharmony_ci$(LIBBPF_INTERNAL_HDRS): $(LIBBPF_HDRS_DIR)/%.h: $(BPF_DIR)/%.h | $(LIBBPF_HDRS_DIR)
5062306a36Sopenharmony_ci	$(call QUIET_INSTALL, $@)
5162306a36Sopenharmony_ci	$(Q)install -m 644 -t $(LIBBPF_HDRS_DIR) $<
5262306a36Sopenharmony_ci
5362306a36Sopenharmony_ci$(LIBBPF_BOOTSTRAP): $(wildcard $(BPF_DIR)/*.[ch] $(BPF_DIR)/Makefile) | $(LIBBPF_BOOTSTRAP_OUTPUT)
5462306a36Sopenharmony_ci	$(Q)$(MAKE) -C $(BPF_DIR) OUTPUT=$(LIBBPF_BOOTSTRAP_OUTPUT) \
5562306a36Sopenharmony_ci		DESTDIR=$(LIBBPF_BOOTSTRAP_DESTDIR:/=) prefix= \
5662306a36Sopenharmony_ci		ARCH= CROSS_COMPILE= CC="$(HOSTCC)" LD="$(HOSTLD)" AR="$(HOSTAR)" $@ install_headers
5762306a36Sopenharmony_ci
5862306a36Sopenharmony_ci$(LIBBPF_BOOTSTRAP_INTERNAL_HDRS): $(LIBBPF_BOOTSTRAP_HDRS_DIR)/%.h: $(BPF_DIR)/%.h | $(LIBBPF_BOOTSTRAP_HDRS_DIR)
5962306a36Sopenharmony_ci	$(call QUIET_INSTALL, $@)
6062306a36Sopenharmony_ci	$(Q)install -m 644 -t $(LIBBPF_BOOTSTRAP_HDRS_DIR) $<
6162306a36Sopenharmony_ci
6262306a36Sopenharmony_ci$(LIBBPF)-clean: FORCE | $(LIBBPF_OUTPUT)
6362306a36Sopenharmony_ci	$(call QUIET_CLEAN, libbpf)
6462306a36Sopenharmony_ci	$(Q)$(MAKE) -C $(BPF_DIR) OUTPUT=$(LIBBPF_OUTPUT) clean >/dev/null
6562306a36Sopenharmony_ci
6662306a36Sopenharmony_ci$(LIBBPF_BOOTSTRAP)-clean: FORCE | $(LIBBPF_BOOTSTRAP_OUTPUT)
6762306a36Sopenharmony_ci	$(call QUIET_CLEAN, libbpf-bootstrap)
6862306a36Sopenharmony_ci	$(Q)$(MAKE) -C $(BPF_DIR) OUTPUT=$(LIBBPF_BOOTSTRAP_OUTPUT) clean >/dev/null
6962306a36Sopenharmony_ci
7062306a36Sopenharmony_ciprefix ?= /usr/local
7162306a36Sopenharmony_cibash_compdir ?= /usr/share/bash-completion/completions
7262306a36Sopenharmony_ci
7362306a36Sopenharmony_ciCFLAGS += -O2
7462306a36Sopenharmony_ciCFLAGS += -W -Wall -Wextra -Wno-unused-parameter -Wno-missing-field-initializers
7562306a36Sopenharmony_ciCFLAGS += $(filter-out -Wswitch-enum -Wnested-externs,$(EXTRA_WARNINGS))
7662306a36Sopenharmony_ciCFLAGS += -DPACKAGE='"bpftool"' -D__EXPORTED_HEADERS__ \
7762306a36Sopenharmony_ci	-I$(or $(OUTPUT),.) \
7862306a36Sopenharmony_ci	-I$(LIBBPF_INCLUDE) \
7962306a36Sopenharmony_ci	-I$(srctree)/kernel/bpf/ \
8062306a36Sopenharmony_ci	-I$(srctree)/tools/include \
8162306a36Sopenharmony_ci	-I$(srctree)/tools/include/uapi
8262306a36Sopenharmony_ciifneq ($(BPFTOOL_VERSION),)
8362306a36Sopenharmony_ciCFLAGS += -DBPFTOOL_VERSION='"$(BPFTOOL_VERSION)"'
8462306a36Sopenharmony_ciendif
8562306a36Sopenharmony_ciifneq ($(EXTRA_CFLAGS),)
8662306a36Sopenharmony_ciCFLAGS += $(EXTRA_CFLAGS)
8762306a36Sopenharmony_ciendif
8862306a36Sopenharmony_ciifneq ($(EXTRA_LDFLAGS),)
8962306a36Sopenharmony_ciLDFLAGS += $(EXTRA_LDFLAGS)
9062306a36Sopenharmony_ciendif
9162306a36Sopenharmony_ci
9262306a36Sopenharmony_ciINSTALL ?= install
9362306a36Sopenharmony_ciRM ?= rm -f
9462306a36Sopenharmony_ci
9562306a36Sopenharmony_ciFEATURE_USER = .bpftool
9662306a36Sopenharmony_ci
9762306a36Sopenharmony_ciFEATURE_TESTS := clang-bpf-co-re
9862306a36Sopenharmony_ciFEATURE_TESTS += llvm
9962306a36Sopenharmony_ciFEATURE_TESTS += libcap
10062306a36Sopenharmony_ciFEATURE_TESTS += libbfd
10162306a36Sopenharmony_ciFEATURE_TESTS += libbfd-liberty
10262306a36Sopenharmony_ciFEATURE_TESTS += libbfd-liberty-z
10362306a36Sopenharmony_ciFEATURE_TESTS += disassembler-four-args
10462306a36Sopenharmony_ciFEATURE_TESTS += disassembler-init-styled
10562306a36Sopenharmony_ci
10662306a36Sopenharmony_ciFEATURE_DISPLAY := clang-bpf-co-re
10762306a36Sopenharmony_ciFEATURE_DISPLAY += llvm
10862306a36Sopenharmony_ciFEATURE_DISPLAY += libcap
10962306a36Sopenharmony_ciFEATURE_DISPLAY += libbfd
11062306a36Sopenharmony_ciFEATURE_DISPLAY += libbfd-liberty
11162306a36Sopenharmony_ciFEATURE_DISPLAY += libbfd-liberty-z
11262306a36Sopenharmony_ci
11362306a36Sopenharmony_cicheck_feat := 1
11462306a36Sopenharmony_ciNON_CHECK_FEAT_TARGETS := clean uninstall doc doc-clean doc-install doc-uninstall
11562306a36Sopenharmony_ciifdef MAKECMDGOALS
11662306a36Sopenharmony_ciifeq ($(filter-out $(NON_CHECK_FEAT_TARGETS),$(MAKECMDGOALS)),)
11762306a36Sopenharmony_ci  check_feat := 0
11862306a36Sopenharmony_ciendif
11962306a36Sopenharmony_ciendif
12062306a36Sopenharmony_ci
12162306a36Sopenharmony_ciifeq ($(check_feat),1)
12262306a36Sopenharmony_ciifeq ($(FEATURES_DUMP),)
12362306a36Sopenharmony_ciinclude $(srctree)/tools/build/Makefile.feature
12462306a36Sopenharmony_cielse
12562306a36Sopenharmony_ciinclude $(FEATURES_DUMP)
12662306a36Sopenharmony_ciendif
12762306a36Sopenharmony_ciendif
12862306a36Sopenharmony_ci
12962306a36Sopenharmony_ciLIBS = $(LIBBPF) -lelf -lz
13062306a36Sopenharmony_ciLIBS_BOOTSTRAP = $(LIBBPF_BOOTSTRAP) -lelf -lz
13162306a36Sopenharmony_ciifeq ($(feature-libcap), 1)
13262306a36Sopenharmony_ciCFLAGS += -DUSE_LIBCAP
13362306a36Sopenharmony_ciLIBS += -lcap
13462306a36Sopenharmony_ciendif
13562306a36Sopenharmony_ci
13662306a36Sopenharmony_ciinclude $(wildcard $(OUTPUT)*.d)
13762306a36Sopenharmony_ci
13862306a36Sopenharmony_ciall: $(OUTPUT)bpftool
13962306a36Sopenharmony_ci
14062306a36Sopenharmony_ciSRCS := $(wildcard *.c)
14162306a36Sopenharmony_ci
14262306a36Sopenharmony_ciifeq ($(feature-llvm),1)
14362306a36Sopenharmony_ci  # If LLVM is available, use it for JIT disassembly
14462306a36Sopenharmony_ci  CFLAGS  += -DHAVE_LLVM_SUPPORT
14562306a36Sopenharmony_ci  LLVM_CONFIG_LIB_COMPONENTS := mcdisassembler all-targets
14662306a36Sopenharmony_ci  CFLAGS  += $(shell $(LLVM_CONFIG) --cflags --libs $(LLVM_CONFIG_LIB_COMPONENTS))
14762306a36Sopenharmony_ci  LIBS    += $(shell $(LLVM_CONFIG) --libs $(LLVM_CONFIG_LIB_COMPONENTS))
14862306a36Sopenharmony_ci  ifeq ($(shell $(LLVM_CONFIG) --shared-mode),static)
14962306a36Sopenharmony_ci    LIBS += $(shell $(LLVM_CONFIG) --system-libs $(LLVM_CONFIG_LIB_COMPONENTS))
15062306a36Sopenharmony_ci    LIBS += -lstdc++
15162306a36Sopenharmony_ci  endif
15262306a36Sopenharmony_ci  LDFLAGS += $(shell $(LLVM_CONFIG) --ldflags)
15362306a36Sopenharmony_cielse
15462306a36Sopenharmony_ci  # Fall back on libbfd
15562306a36Sopenharmony_ci  ifeq ($(feature-libbfd),1)
15662306a36Sopenharmony_ci    LIBS += -lbfd -ldl -lopcodes
15762306a36Sopenharmony_ci  else ifeq ($(feature-libbfd-liberty),1)
15862306a36Sopenharmony_ci    LIBS += -lbfd -ldl -lopcodes -liberty
15962306a36Sopenharmony_ci  else ifeq ($(feature-libbfd-liberty-z),1)
16062306a36Sopenharmony_ci    LIBS += -lbfd -ldl -lopcodes -liberty -lz
16162306a36Sopenharmony_ci  endif
16262306a36Sopenharmony_ci
16362306a36Sopenharmony_ci  # If one of the above feature combinations is set, we support libbfd
16462306a36Sopenharmony_ci  ifneq ($(filter -lbfd,$(LIBS)),)
16562306a36Sopenharmony_ci    CFLAGS += -DHAVE_LIBBFD_SUPPORT
16662306a36Sopenharmony_ci
16762306a36Sopenharmony_ci    # Libbfd interface changed over time, figure out what we need
16862306a36Sopenharmony_ci    ifeq ($(feature-disassembler-four-args), 1)
16962306a36Sopenharmony_ci      CFLAGS += -DDISASM_FOUR_ARGS_SIGNATURE
17062306a36Sopenharmony_ci    endif
17162306a36Sopenharmony_ci    ifeq ($(feature-disassembler-init-styled), 1)
17262306a36Sopenharmony_ci      CFLAGS += -DDISASM_INIT_STYLED
17362306a36Sopenharmony_ci    endif
17462306a36Sopenharmony_ci  endif
17562306a36Sopenharmony_ciendif
17662306a36Sopenharmony_ciifeq ($(filter -DHAVE_LLVM_SUPPORT -DHAVE_LIBBFD_SUPPORT,$(CFLAGS)),)
17762306a36Sopenharmony_ci  # No support for JIT disassembly
17862306a36Sopenharmony_ci  SRCS := $(filter-out jit_disasm.c,$(SRCS))
17962306a36Sopenharmony_ciendif
18062306a36Sopenharmony_ci
18162306a36Sopenharmony_ciHOST_CFLAGS = $(subst -I$(LIBBPF_INCLUDE),-I$(LIBBPF_BOOTSTRAP_INCLUDE),\
18262306a36Sopenharmony_ci		$(subst $(CLANG_CROSS_FLAGS),,$(CFLAGS)))
18362306a36Sopenharmony_ci
18462306a36Sopenharmony_ciBPFTOOL_BOOTSTRAP := $(BOOTSTRAP_OUTPUT)bpftool
18562306a36Sopenharmony_ci
18662306a36Sopenharmony_ciBOOTSTRAP_OBJS = $(addprefix $(BOOTSTRAP_OUTPUT),main.o common.o json_writer.o gen.o btf.o xlated_dumper.o btf_dumper.o disasm.o)
18762306a36Sopenharmony_ci$(BOOTSTRAP_OBJS): $(LIBBPF_BOOTSTRAP)
18862306a36Sopenharmony_ci
18962306a36Sopenharmony_ciOBJS = $(patsubst %.c,$(OUTPUT)%.o,$(SRCS)) $(OUTPUT)disasm.o
19062306a36Sopenharmony_ci$(OBJS): $(LIBBPF) $(LIBBPF_INTERNAL_HDRS)
19162306a36Sopenharmony_ci
19262306a36Sopenharmony_ciVMLINUX_BTF_PATHS ?= $(if $(O),$(O)/vmlinux)				\
19362306a36Sopenharmony_ci		     $(if $(KBUILD_OUTPUT),$(KBUILD_OUTPUT)/vmlinux)	\
19462306a36Sopenharmony_ci		     ../../../vmlinux					\
19562306a36Sopenharmony_ci		     /sys/kernel/btf/vmlinux				\
19662306a36Sopenharmony_ci		     /boot/vmlinux-$(shell uname -r)
19762306a36Sopenharmony_ciVMLINUX_BTF ?= $(abspath $(firstword $(wildcard $(VMLINUX_BTF_PATHS))))
19862306a36Sopenharmony_ci
19962306a36Sopenharmony_cibootstrap: $(BPFTOOL_BOOTSTRAP)
20062306a36Sopenharmony_ci
20162306a36Sopenharmony_ciifneq ($(VMLINUX_BTF)$(VMLINUX_H),)
20262306a36Sopenharmony_ciifeq ($(feature-clang-bpf-co-re),1)
20362306a36Sopenharmony_ci
20462306a36Sopenharmony_ciBUILD_BPF_SKELS := 1
20562306a36Sopenharmony_ci
20662306a36Sopenharmony_ci$(OUTPUT)vmlinux.h: $(VMLINUX_BTF) $(BPFTOOL_BOOTSTRAP)
20762306a36Sopenharmony_ciifeq ($(VMLINUX_H),)
20862306a36Sopenharmony_ci	$(QUIET_GEN)$(BPFTOOL_BOOTSTRAP) btf dump file $< format c > $@
20962306a36Sopenharmony_cielse
21062306a36Sopenharmony_ci	$(Q)cp "$(VMLINUX_H)" $@
21162306a36Sopenharmony_ciendif
21262306a36Sopenharmony_ci
21362306a36Sopenharmony_ci$(OUTPUT)%.bpf.o: skeleton/%.bpf.c $(OUTPUT)vmlinux.h $(LIBBPF_BOOTSTRAP)
21462306a36Sopenharmony_ci	$(QUIET_CLANG)$(CLANG) \
21562306a36Sopenharmony_ci		-I$(or $(OUTPUT),.) \
21662306a36Sopenharmony_ci		-I$(srctree)/tools/include/uapi/ \
21762306a36Sopenharmony_ci		-I$(LIBBPF_BOOTSTRAP_INCLUDE) \
21862306a36Sopenharmony_ci		-g -O2 -Wall -fno-stack-protector \
21962306a36Sopenharmony_ci		--target=bpf -c $< -o $@
22062306a36Sopenharmony_ci	$(Q)$(LLVM_STRIP) -g $@
22162306a36Sopenharmony_ci
22262306a36Sopenharmony_ci$(OUTPUT)%.skel.h: $(OUTPUT)%.bpf.o $(BPFTOOL_BOOTSTRAP)
22362306a36Sopenharmony_ci	$(QUIET_GEN)$(BPFTOOL_BOOTSTRAP) gen skeleton $< > $@
22462306a36Sopenharmony_ci
22562306a36Sopenharmony_ci$(OUTPUT)prog.o: $(OUTPUT)profiler.skel.h
22662306a36Sopenharmony_ci
22762306a36Sopenharmony_ci$(OUTPUT)pids.o: $(OUTPUT)pid_iter.skel.h
22862306a36Sopenharmony_ci
22962306a36Sopenharmony_ciendif
23062306a36Sopenharmony_ciendif
23162306a36Sopenharmony_ci
23262306a36Sopenharmony_ciCFLAGS += $(if $(BUILD_BPF_SKELS),,-DBPFTOOL_WITHOUT_SKELETONS)
23362306a36Sopenharmony_ci
23462306a36Sopenharmony_ci$(BOOTSTRAP_OUTPUT)disasm.o: $(srctree)/kernel/bpf/disasm.c
23562306a36Sopenharmony_ci	$(QUIET_CC)$(HOSTCC) $(HOST_CFLAGS) -c -MMD $< -o $@
23662306a36Sopenharmony_ci
23762306a36Sopenharmony_ci$(OUTPUT)disasm.o: $(srctree)/kernel/bpf/disasm.c
23862306a36Sopenharmony_ci	$(QUIET_CC)$(CC) $(CFLAGS) -c -MMD $< -o $@
23962306a36Sopenharmony_ci
24062306a36Sopenharmony_ci$(BPFTOOL_BOOTSTRAP): $(BOOTSTRAP_OBJS) $(LIBBPF_BOOTSTRAP)
24162306a36Sopenharmony_ci	$(QUIET_LINK)$(HOSTCC) $(HOST_CFLAGS) $(LDFLAGS) $(BOOTSTRAP_OBJS) $(LIBS_BOOTSTRAP) -o $@
24262306a36Sopenharmony_ci
24362306a36Sopenharmony_ci$(OUTPUT)bpftool: $(OBJS) $(LIBBPF)
24462306a36Sopenharmony_ci	$(QUIET_LINK)$(CC) $(CFLAGS) $(LDFLAGS) $(OBJS) $(LIBS) -o $@
24562306a36Sopenharmony_ci
24662306a36Sopenharmony_ci$(BOOTSTRAP_OUTPUT)%.o: %.c $(LIBBPF_BOOTSTRAP_INTERNAL_HDRS) | $(BOOTSTRAP_OUTPUT)
24762306a36Sopenharmony_ci	$(QUIET_CC)$(HOSTCC) $(HOST_CFLAGS) -c -MMD $< -o $@
24862306a36Sopenharmony_ci
24962306a36Sopenharmony_ci$(OUTPUT)%.o: %.c
25062306a36Sopenharmony_ci	$(QUIET_CC)$(CC) $(CFLAGS) -c -MMD $< -o $@
25162306a36Sopenharmony_ci
25262306a36Sopenharmony_cifeature-detect-clean:
25362306a36Sopenharmony_ci	$(call QUIET_CLEAN, feature-detect)
25462306a36Sopenharmony_ci	$(Q)$(MAKE) -C $(srctree)/tools/build/feature/ clean >/dev/null
25562306a36Sopenharmony_ci
25662306a36Sopenharmony_ciclean: $(LIBBPF)-clean $(LIBBPF_BOOTSTRAP)-clean feature-detect-clean
25762306a36Sopenharmony_ci	$(call QUIET_CLEAN, bpftool)
25862306a36Sopenharmony_ci	$(Q)$(RM) -- $(OUTPUT)bpftool $(OUTPUT)*.o $(OUTPUT)*.d
25962306a36Sopenharmony_ci	$(Q)$(RM) -- $(OUTPUT)*.skel.h $(OUTPUT)vmlinux.h
26062306a36Sopenharmony_ci	$(Q)$(RM) -r -- $(LIBBPF_OUTPUT) $(BOOTSTRAP_OUTPUT)
26162306a36Sopenharmony_ci	$(call QUIET_CLEAN, core-gen)
26262306a36Sopenharmony_ci	$(Q)$(RM) -- $(OUTPUT)FEATURE-DUMP.bpftool
26362306a36Sopenharmony_ci	$(Q)$(RM) -r -- $(OUTPUT)feature/
26462306a36Sopenharmony_ci
26562306a36Sopenharmony_ciinstall-bin: $(OUTPUT)bpftool
26662306a36Sopenharmony_ci	$(call QUIET_INSTALL, bpftool)
26762306a36Sopenharmony_ci	$(Q)$(INSTALL) -m 0755 -d $(DESTDIR)$(prefix)/sbin
26862306a36Sopenharmony_ci	$(Q)$(INSTALL) $(OUTPUT)bpftool $(DESTDIR)$(prefix)/sbin/bpftool
26962306a36Sopenharmony_ci
27062306a36Sopenharmony_ciinstall: install-bin
27162306a36Sopenharmony_ci	$(Q)$(INSTALL) -m 0755 -d $(DESTDIR)$(bash_compdir)
27262306a36Sopenharmony_ci	$(Q)$(INSTALL) -m 0644 bash-completion/bpftool $(DESTDIR)$(bash_compdir)
27362306a36Sopenharmony_ci
27462306a36Sopenharmony_ciuninstall:
27562306a36Sopenharmony_ci	$(call QUIET_UNINST, bpftool)
27662306a36Sopenharmony_ci	$(Q)$(RM) -- $(DESTDIR)$(prefix)/sbin/bpftool
27762306a36Sopenharmony_ci	$(Q)$(RM) -- $(DESTDIR)$(bash_compdir)/bpftool
27862306a36Sopenharmony_ci
27962306a36Sopenharmony_cidoc:
28062306a36Sopenharmony_ci	$(call descend,Documentation)
28162306a36Sopenharmony_ci
28262306a36Sopenharmony_cidoc-clean:
28362306a36Sopenharmony_ci	$(call descend,Documentation,clean)
28462306a36Sopenharmony_ci
28562306a36Sopenharmony_cidoc-install:
28662306a36Sopenharmony_ci	$(call descend,Documentation,install)
28762306a36Sopenharmony_ci
28862306a36Sopenharmony_cidoc-uninstall:
28962306a36Sopenharmony_ci	$(call descend,Documentation,uninstall)
29062306a36Sopenharmony_ci
29162306a36Sopenharmony_ciFORCE:
29262306a36Sopenharmony_ci
29362306a36Sopenharmony_ci.SECONDARY:
29462306a36Sopenharmony_ci.PHONY: all FORCE bootstrap clean install-bin install uninstall
29562306a36Sopenharmony_ci.PHONY: doc doc-clean doc-install doc-uninstall
29662306a36Sopenharmony_ci.DEFAULT_GOAL := all
29762306a36Sopenharmony_ci
29862306a36Sopenharmony_ci# Delete partially updated (corrupted) files on error
29962306a36Sopenharmony_ci.DELETE_ON_ERROR:
300