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= \ 50*9080b976SLeo Yan ARCH= CROSS_COMPILE= CC="$(HOSTCC)" LD="$(HOSTLD)" AR="$(HOSTAR)" \ 51*9080b976SLeo Yan CFLAGS="$(LIBBPF_BOOTSTRAP_CFLAGS)" EXTRA_CFLAGS= $@ install_headers 52e41ac202SQuentin Monnet 53e41ac202SQuentin Monnet$(LIBBPF_BOOTSTRAP_INTERNAL_HDRS): $(LIBBPF_BOOTSTRAP_HDRS_DIR)/%.h: $(BPF_DIR)/%.h | $(LIBBPF_BOOTSTRAP_HDRS_DIR) 54e41ac202SQuentin Monnet $(call QUIET_INSTALL, $@) 55e41ac202SQuentin Monnet $(Q)install -m 644 -t $(LIBBPF_BOOTSTRAP_HDRS_DIR) $< 568859b0daSJean-Philippe Brucker 57c3653879SJean-Philippe Brucker$(LIBBPF)-clean: FORCE | $(LIBBPF_OUTPUT) 5871bb428fSJakub Kicinski $(call QUIET_CLEAN, libbpf) 5945c5589dSQuentin Monnet $(Q)$(MAKE) -C $(BPF_DIR) OUTPUT=$(LIBBPF_OUTPUT) clean >/dev/null 6071bb428fSJakub Kicinski 61c3653879SJean-Philippe Brucker$(LIBBPF_BOOTSTRAP)-clean: FORCE | $(LIBBPF_BOOTSTRAP_OUTPUT) 628859b0daSJean-Philippe Brucker $(call QUIET_CLEAN, libbpf-bootstrap) 638859b0daSJean-Philippe Brucker $(Q)$(MAKE) -C $(BPF_DIR) OUTPUT=$(LIBBPF_BOOTSTRAP_OUTPUT) clean >/dev/null 648859b0daSJean-Philippe Brucker 65658e85aaSQuentin Monnetprefix ?= /usr/local 66507e590dSQuentin Monnetbash_compdir ?= /usr/share/bash-completion/completions 6771bb428fSJakub Kicinski 6871bb428fSJakub KicinskiCFLAGS += -O2 698d86767bSJiayuan ChenCFLAGS += -W 708d86767bSJiayuan ChenCFLAGS += -Wall 718d86767bSJiayuan ChenCFLAGS += -Wextra 728d86767bSJiayuan ChenCFLAGS += -Wformat-signedness 738d86767bSJiayuan ChenCFLAGS += -Wno-unused-parameter 748d86767bSJiayuan ChenCFLAGS += -Wno-missing-field-initializers 7517bbf925SAndrii NakryikoCFLAGS += $(filter-out -Wswitch-enum -Wnested-externs,$(EXTRA_WARNINGS)) 76f412eed9SJakub KicinskiCFLAGS += -DPACKAGE='"bpftool"' -D__EXPORTED_HEADERS__ \ 775c816641SMasahiro Yamada -I$(or $(OUTPUT),.) \ 78f012ade1SQuentin Monnet -I$(LIBBPF_INCLUDE) \ 79f412eed9SJakub Kicinski -I$(srctree)/kernel/bpf/ \ 80f412eed9SJakub Kicinski -I$(srctree)/tools/include \ 81efc36d6cSQuentin Monnet -I$(srctree)/tools/include/uapi 829910a74dSQuentin Monnetifneq ($(BPFTOOL_VERSION),) 834bfe3bd3SRoman GushchinCFLAGS += -DBPFTOOL_VERSION='"$(BPFTOOL_VERSION)"' 849910a74dSQuentin Monnetendif 850ef6bf39SJiri Olsaifneq ($(EXTRA_CFLAGS),) 860ef6bf39SJiri OlsaCFLAGS += $(EXTRA_CFLAGS) 870ef6bf39SJiri Olsaendif 88c8506165SJiri Olsaifneq ($(EXTRA_LDFLAGS),) 89c8506165SJiri OlsaLDFLAGS += $(EXTRA_LDFLAGS) 90c8506165SJiri Olsaendif 910ef6bf39SJiri Olsa 92cc9b22dfSQuentin MonnetHOST_CFLAGS := $(subst -I$(LIBBPF_INCLUDE),-I$(LIBBPF_BOOTSTRAP_INCLUDE),\ 93cc9b22dfSQuentin Monnet $(subst $(CLANG_CROSS_FLAGS),,$(CFLAGS))) 94cc9b22dfSQuentin MonnetHOST_LDFLAGS := $(LDFLAGS) 95cc9b22dfSQuentin Monnet 96*9080b976SLeo Yan# Remove warnings for libbpf bootstrap build 97*9080b976SLeo YanLIBBPF_BOOTSTRAP_CFLAGS := $(filter-out -W -Wall -Wextra -Wformat -Wformat-signedness,$(HOST_CFLAGS)) 98*9080b976SLeo Yan 99658e85aaSQuentin MonnetINSTALL ?= install 100658e85aaSQuentin MonnetRM ?= rm -f 101658e85aaSQuentin Monnet 102fb982666SRoman GushchinFEATURE_USER = .bpftool 103108326d6SQuentin Monnet 104c73a2443SMykyta Yatsenko# Skip optional dependencies: LLVM (JIT disasm), libbfd (fallback 105c73a2443SMykyta Yatsenko# disasm), libcrypto (program signing). 106c73a2443SMykyta YatsenkoSKIP_LLVM ?= 107c73a2443SMykyta YatsenkoSKIP_LIBBFD ?= 108c73a2443SMykyta YatsenkoSKIP_CRYPTO ?= 109c73a2443SMykyta Yatsenkoifneq ($(SKIP_CRYPTO),1) 110c73a2443SMykyta Yatsenko CRYPTO_LIBS := -lcrypto 111c73a2443SMykyta Yatsenkoendif 112c73a2443SMykyta Yatsenko 113231fc9bcSIan Rogersifeq ($(MAKECMDGOALS),bootstrap) 114231fc9bcSIan RogersFEATURE_TESTS := libelf-zstd 115231fc9bcSIan RogersFEATURE_DISPLAY := 116231fc9bcSIan Rogerselse 117108326d6SQuentin MonnetFEATURE_TESTS := clang-bpf-co-re 118eb9d1acfSQuentin MonnetFEATURE_TESTS += llvm 119108326d6SQuentin MonnetFEATURE_TESTS += libcap 120108326d6SQuentin MonnetFEATURE_TESTS += libbfd 121108326d6SQuentin MonnetFEATURE_TESTS += libbfd-liberty 122108326d6SQuentin MonnetFEATURE_TESTS += libbfd-liberty-z 123108326d6SQuentin MonnetFEATURE_TESTS += disassembler-four-args 124108326d6SQuentin MonnetFEATURE_TESTS += disassembler-init-styled 125fee9c03bSLeo YanFEATURE_TESTS += libelf-zstd 126108326d6SQuentin Monnet 127108326d6SQuentin MonnetFEATURE_DISPLAY := clang-bpf-co-re 128eb9d1acfSQuentin MonnetFEATURE_DISPLAY += llvm 129108326d6SQuentin MonnetFEATURE_DISPLAY += libcap 130108326d6SQuentin MonnetFEATURE_DISPLAY += libbfd 131108326d6SQuentin MonnetFEATURE_DISPLAY += libbfd-liberty 132108326d6SQuentin MonnetFEATURE_DISPLAY += libbfd-liberty-z 133231fc9bcSIan Rogersendif 134fb982666SRoman Gushchin 135fb982666SRoman Gushchincheck_feat := 1 136fb982666SRoman GushchinNON_CHECK_FEAT_TARGETS := clean uninstall doc doc-clean doc-install doc-uninstall 137fb982666SRoman Gushchinifdef MAKECMDGOALS 138fb982666SRoman Gushchinifeq ($(filter-out $(NON_CHECK_FEAT_TARGETS),$(MAKECMDGOALS)),) 139fb982666SRoman Gushchin check_feat := 0 140fb982666SRoman Gushchinendif 141fb982666SRoman Gushchinendif 142fb982666SRoman Gushchin 143fb982666SRoman Gushchinifeq ($(check_feat),1) 144fb982666SRoman Gushchinifeq ($(FEATURES_DUMP),) 145fb982666SRoman Gushchininclude $(srctree)/tools/build/Makefile.feature 146fb982666SRoman Gushchinelse 147fb982666SRoman Gushchininclude $(FEATURES_DUMP) 148fb982666SRoman Gushchinendif 149fb982666SRoman Gushchinendif 150fb982666SRoman Gushchin 151c73a2443SMykyta YatsenkoLIBS = $(LIBBPF) -lelf $(CRYPTO_LIBS) -lz 152c73a2443SMykyta YatsenkoLIBS_BOOTSTRAP = $(LIBBPF_BOOTSTRAP) -lelf $(CRYPTO_LIBS) -lz 153fee9c03bSLeo Yan 154fee9c03bSLeo Yanifeq ($(feature-libelf-zstd),1) 155fee9c03bSLeo YanLIBS += -lzstd 156fee9c03bSLeo YanLIBS_BOOTSTRAP += -lzstd 157fee9c03bSLeo Yanendif 158fee9c03bSLeo Yan 1590b3b9ca3SQuentin Monnetifeq ($(feature-libcap), 1) 1600b3b9ca3SQuentin MonnetCFLAGS += -DUSE_LIBCAP 1610b3b9ca3SQuentin MonnetLIBS += -lcap 1620b3b9ca3SQuentin Monnetendif 1630b3b9ca3SQuentin Monnet 16490126e3aSJakub Kicinskiinclude $(wildcard $(OUTPUT)*.d) 16571bb428fSJakub Kicinski 16671bb428fSJakub Kicinskiall: $(OUTPUT)bpftool 16771bb428fSJakub Kicinski 1682ea4d86aSQuentin MonnetSRCS := $(wildcard *.c) 16929a9c10eSStanislav Fomichev 170eb9d1acfSQuentin Monnetifeq ($(feature-llvm),1) 171c73a2443SMykyta Yatsenkoifneq ($(SKIP_LLVM),1) 172c73a2443SMykyta YatsenkoHAS_LLVM := 1 173c73a2443SMykyta Yatsenkoendif 174c73a2443SMykyta Yatsenkoendif 175c73a2443SMykyta Yatsenko 176c73a2443SMykyta Yatsenkoifeq ($(HAS_LLVM),1) 177eb9d1acfSQuentin Monnet CFLAGS += -DHAVE_LLVM_SUPPORT 178eb9d1acfSQuentin Monnet LLVM_CONFIG_LIB_COMPONENTS := mcdisassembler all-targets 1790513eeeeSViktor Malik # llvm-config always adds -D_GNU_SOURCE, however, it may already be in CFLAGS 1800513eeeeSViktor Malik # (e.g. when bpftool build is called from selftests build as selftests 1810513eeeeSViktor Malik # Makefile includes lib.mk which sets -D_GNU_SOURCE) which would cause 1820513eeeeSViktor Malik # compilation error due to redefinition. Let's filter it out here. 1830513eeeeSViktor Malik CFLAGS += $(filter-out -D_GNU_SOURCE,$(shell $(LLVM_CONFIG) --cflags)) 184eb9d1acfSQuentin Monnet LIBS += $(shell $(LLVM_CONFIG) --libs $(LLVM_CONFIG_LIB_COMPONENTS)) 18555171f29SAnton Protopopov ifeq ($(shell $(LLVM_CONFIG) --shared-mode),static) 18655171f29SAnton Protopopov LIBS += $(shell $(LLVM_CONFIG) --system-libs $(LLVM_CONFIG_LIB_COMPONENTS)) 18755171f29SAnton Protopopov LIBS += -lstdc++ 18855171f29SAnton Protopopov endif 189eb9d1acfSQuentin Monnet LDFLAGS += $(shell $(LLVM_CONFIG) --ldflags) 190eb9d1acfSQuentin Monnetelse 191c73a2443SMykyta Yatsenko ifneq ($(SKIP_LIBBFD),1) 192eb9d1acfSQuentin Monnet # Fall back on libbfd 19329a9c10eSStanislav Fomichev ifeq ($(feature-libbfd),1) 1946e8ccb4fSStanislav Fomichev LIBS += -lbfd -ldl -lopcodes 1956e8ccb4fSStanislav Fomichev else ifeq ($(feature-libbfd-liberty),1) 1966e8ccb4fSStanislav Fomichev LIBS += -lbfd -ldl -lopcodes -liberty 1976e8ccb4fSStanislav Fomichev else ifeq ($(feature-libbfd-liberty-z),1) 1986e8ccb4fSStanislav Fomichev LIBS += -lbfd -ldl -lopcodes -liberty -lz 1996e8ccb4fSStanislav Fomichev endif 2006e8ccb4fSStanislav Fomichev 2012ea4d86aSQuentin Monnet # If one of the above feature combinations is set, we support libbfd 2026e8ccb4fSStanislav Fomichev ifneq ($(filter -lbfd,$(LIBS)),) 20329a9c10eSStanislav Fomichev CFLAGS += -DHAVE_LIBBFD_SUPPORT 2042ea4d86aSQuentin Monnet 2052ea4d86aSQuentin Monnet # Libbfd interface changed over time, figure out what we need 2062ea4d86aSQuentin Monnet ifeq ($(feature-disassembler-four-args), 1) 2072ea4d86aSQuentin Monnet CFLAGS += -DDISASM_FOUR_ARGS_SIGNATURE 2082ea4d86aSQuentin Monnet endif 2092ea4d86aSQuentin Monnet ifeq ($(feature-disassembler-init-styled), 1) 2102ea4d86aSQuentin Monnet CFLAGS += -DDISASM_INIT_STYLED 2112ea4d86aSQuentin Monnet endif 2122ea4d86aSQuentin Monnet endif 213c73a2443SMykyta Yatsenko endif # SKIP_LIBBFD 214eb9d1acfSQuentin Monnetendif 215eb9d1acfSQuentin Monnetifeq ($(filter -DHAVE_LLVM_SUPPORT -DHAVE_LIBBFD_SUPPORT,$(CFLAGS)),) 2162ea4d86aSQuentin Monnet # No support for JIT disassembly 2172ea4d86aSQuentin Monnet SRCS := $(filter-out jit_disasm.c,$(SRCS)) 21829a9c10eSStanislav Fomichevendif 21929a9c10eSStanislav Fomichev 220c73a2443SMykyta Yatsenkoifeq ($(SKIP_CRYPTO),1) 221c73a2443SMykyta Yatsenko CFLAGS += -DBPFTOOL_WITHOUT_CRYPTO 222c73a2443SMykyta Yatsenko HOST_CFLAGS += -DBPFTOOL_WITHOUT_CRYPTO 223c73a2443SMykyta Yatsenko SRCS := $(filter-out sign.c,$(SRCS)) 224c73a2443SMykyta Yatsenkoendif 225c73a2443SMykyta Yatsenko 2268859b0daSJean-Philippe BruckerBPFTOOL_BOOTSTRAP := $(BOOTSTRAP_OUTPUT)bpftool 22716e9b187SAndrii Nakryiko 228c73a2443SMykyta YatsenkoBOOTSTRAP_OBJS = $(addprefix $(BOOTSTRAP_OUTPUT),main.o common.o json_writer.o gen.o btf.o $(if $(CRYPTO_LIBS),sign.o)) 2290b46b755SQuentin Monnet$(BOOTSTRAP_OBJS): $(LIBBPF_BOOTSTRAP) 2300b46b755SQuentin Monnet 231c9c35995SJakub KicinskiOBJS = $(patsubst %.c,$(OUTPUT)%.o,$(SRCS)) $(OUTPUT)disasm.o 23234e3ab14SQuentin Monnet$(OBJS): $(LIBBPF) $(LIBBPF_INTERNAL_HDRS) 23347c09d6aSSong Liu 234ec23eb70SAndrii NakryikoVMLINUX_BTF_PATHS ?= $(if $(O),$(O)/vmlinux) \ 23505aca6daSAndrii Nakryiko $(if $(KBUILD_OUTPUT),$(KBUILD_OUTPUT)/vmlinux) \ 23605aca6daSAndrii Nakryiko ../../../vmlinux \ 23705aca6daSAndrii Nakryiko /sys/kernel/btf/vmlinux \ 23805aca6daSAndrii Nakryiko /boot/vmlinux-$(shell uname -r) 239ec23eb70SAndrii NakryikoVMLINUX_BTF ?= $(abspath $(firstword $(wildcard $(VMLINUX_BTF_PATHS)))) 24014e5728fSSong Liu 241d2032d45SSong Liubootstrap: $(BPFTOOL_BOOTSTRAP) 242d2032d45SSong Liu 243ec23eb70SAndrii Nakryikoifneq ($(VMLINUX_BTF)$(VMLINUX_H),) 24405aca6daSAndrii Nakryikoifeq ($(feature-clang-bpf-co-re),1) 24505aca6daSAndrii Nakryiko 24605aca6daSAndrii NakryikoBUILD_BPF_SKELS := 1 24705aca6daSAndrii Nakryiko 248ec23eb70SAndrii Nakryikoifeq ($(VMLINUX_H),) 249e7b64f9dSArtem Savkov$(OUTPUT)vmlinux.h: $(VMLINUX_BTF) $(BPFTOOL_BOOTSTRAP) 25005aca6daSAndrii Nakryiko $(QUIET_GEN)$(BPFTOOL_BOOTSTRAP) btf dump file $< format c > $@ 251ec23eb70SAndrii Nakryikoelse 252e7b64f9dSArtem Savkov$(OUTPUT)vmlinux.h: $(VMLINUX_H) 253ec23eb70SAndrii Nakryiko $(Q)cp "$(VMLINUX_H)" $@ 254ec23eb70SAndrii Nakryikoendif 25505aca6daSAndrii Nakryiko 256e41ac202SQuentin Monnet$(OUTPUT)%.bpf.o: skeleton/%.bpf.c $(OUTPUT)vmlinux.h $(LIBBPF_BOOTSTRAP) 257fe4eb069STobias Klauser $(QUIET_CLANG)$(CLANG) \ 258639f58a0SQuentin Monnet -Wno-microsoft-anon-tag \ 259639f58a0SQuentin Monnet -fms-extensions \ 2605c816641SMasahiro Yamada -I$(or $(OUTPUT),.) \ 261fe4eb069STobias Klauser -I$(srctree)/tools/include/uapi/ \ 262e41ac202SQuentin Monnet -I$(LIBBPF_BOOTSTRAP_INCLUDE) \ 263878625e1SHolger Hoffstätte -g -O2 -Wall -fno-stack-protector \ 264bbaf1ff0SFangrui Song --target=bpf -c $< -o $@ 2656501182cSAndrii Nakryiko $(Q)$(LLVM_STRIP) -g $@ 26647c09d6aSSong Liu 26705aca6daSAndrii Nakryiko$(OUTPUT)%.skel.h: $(OUTPUT)%.bpf.o $(BPFTOOL_BOOTSTRAP) 26805aca6daSAndrii Nakryiko $(QUIET_GEN)$(BPFTOOL_BOOTSTRAP) gen skeleton $< > $@ 26947c09d6aSSong Liu 27005aca6daSAndrii Nakryiko$(OUTPUT)prog.o: $(OUTPUT)profiler.skel.h 27105aca6daSAndrii Nakryiko 272d53dee3fSAndrii Nakryiko$(OUTPUT)pids.o: $(OUTPUT)pid_iter.skel.h 273d53dee3fSAndrii Nakryiko 27405aca6daSAndrii Nakryikoendif 27505aca6daSAndrii Nakryikoendif 27605aca6daSAndrii Nakryiko 2779d9d8cc2STobias KlauserCFLAGS += $(if $(BUILD_BPF_SKELS),,-DBPFTOOL_WITHOUT_SKELETONS) 278c9c35995SJakub Kicinski 279c9c35995SJakub Kicinski$(OUTPUT)disasm.o: $(srctree)/kernel/bpf/disasm.c 2806501182cSAndrii Nakryiko $(QUIET_CC)$(CC) $(CFLAGS) -c -MMD $< -o $@ 28171bb428fSJakub Kicinski 2828859b0daSJean-Philippe Brucker$(BPFTOOL_BOOTSTRAP): $(BOOTSTRAP_OBJS) $(LIBBPF_BOOTSTRAP) 283cc9b22dfSQuentin Monnet $(QUIET_LINK)$(HOSTCC) $(HOST_CFLAGS) $(HOST_LDFLAGS) $(BOOTSTRAP_OBJS) $(LIBS_BOOTSTRAP) -o $@ 28416e9b187SAndrii Nakryiko 28516e9b187SAndrii Nakryiko$(OUTPUT)bpftool: $(OBJS) $(LIBBPF) 2866501182cSAndrii Nakryiko $(QUIET_LINK)$(CC) $(CFLAGS) $(LDFLAGS) $(OBJS) $(LIBS) -o $@ 28771bb428fSJakub Kicinski 288e41ac202SQuentin Monnet$(BOOTSTRAP_OUTPUT)%.o: %.c $(LIBBPF_BOOTSTRAP_INTERNAL_HDRS) | $(BOOTSTRAP_OUTPUT) 289bdadbb44SJean-Philippe Brucker $(QUIET_CC)$(HOSTCC) $(HOST_CFLAGS) -c -MMD $< -o $@ 2908859b0daSJean-Philippe Brucker 29171bb428fSJakub Kicinski$(OUTPUT)%.o: %.c 2926501182cSAndrii Nakryiko $(QUIET_CC)$(CC) $(CFLAGS) -c -MMD $< -o $@ 29371bb428fSJakub Kicinski 294661b37cdSJesper Dangaard Brouerfeature-detect-clean: 295661b37cdSJesper Dangaard Brouer $(call QUIET_CLEAN, feature-detect) 296661b37cdSJesper Dangaard Brouer $(Q)$(MAKE) -C $(srctree)/tools/build/feature/ clean >/dev/null 297661b37cdSJesper Dangaard Brouer 2988859b0daSJean-Philippe Bruckerclean: $(LIBBPF)-clean $(LIBBPF_BOOTSTRAP)-clean feature-detect-clean 29971bb428fSJakub Kicinski $(call QUIET_CLEAN, bpftool) 300fbdb620bSQuentin Monnet $(Q)$(RM) -- $(OUTPUT)bpftool $(OUTPUT)*.o $(OUTPUT)*.d 3018859b0daSJean-Philippe Brucker $(Q)$(RM) -- $(OUTPUT)*.skel.h $(OUTPUT)vmlinux.h 3028859b0daSJean-Philippe Brucker $(Q)$(RM) -r -- $(LIBBPF_OUTPUT) $(BOOTSTRAP_OUTPUT) 303cc5b3403SJakub Kicinski $(call QUIET_CLEAN, core-gen) 304fbdb620bSQuentin Monnet $(Q)$(RM) -- $(OUTPUT)FEATURE-DUMP.bpftool 305fbdb620bSQuentin Monnet $(Q)$(RM) -r -- $(OUTPUT)feature/ 30671bb428fSJakub Kicinski 307d7db0a4eSQuentin Monnetinstall-bin: $(OUTPUT)bpftool 308658e85aaSQuentin Monnet $(call QUIET_INSTALL, bpftool) 309658e85aaSQuentin Monnet $(Q)$(INSTALL) -m 0755 -d $(DESTDIR)$(prefix)/sbin 310658e85aaSQuentin Monnet $(Q)$(INSTALL) $(OUTPUT)bpftool $(DESTDIR)$(prefix)/sbin/bpftool 311d7db0a4eSQuentin Monnet 312d7db0a4eSQuentin Monnetinstall: install-bin 313658e85aaSQuentin Monnet $(Q)$(INSTALL) -m 0755 -d $(DESTDIR)$(bash_compdir) 314658e85aaSQuentin Monnet $(Q)$(INSTALL) -m 0644 bash-completion/bpftool $(DESTDIR)$(bash_compdir) 31571bb428fSJakub Kicinski 316d3244248SQuentin Monnetuninstall: 317d3244248SQuentin Monnet $(call QUIET_UNINST, bpftool) 318fbdb620bSQuentin Monnet $(Q)$(RM) -- $(DESTDIR)$(prefix)/sbin/bpftool 319fbdb620bSQuentin Monnet $(Q)$(RM) -- $(DESTDIR)$(bash_compdir)/bpftool 320d3244248SQuentin Monnet 321ff69c21aSJakub Kicinskidoc: 322658e85aaSQuentin Monnet $(call descend,Documentation) 323658e85aaSQuentin Monnet 324658e85aaSQuentin Monnetdoc-clean: 325658e85aaSQuentin Monnet $(call descend,Documentation,clean) 326ff69c21aSJakub Kicinski 327ff69c21aSJakub Kicinskidoc-install: 328658e85aaSQuentin Monnet $(call descend,Documentation,install) 329ff69c21aSJakub Kicinski 330d3244248SQuentin Monnetdoc-uninstall: 331d3244248SQuentin Monnet $(call descend,Documentation,uninstall) 332d3244248SQuentin Monnet 33371bb428fSJakub KicinskiFORCE: 33471bb428fSJakub Kicinski 33505aca6daSAndrii Nakryiko.SECONDARY: 336e41ac202SQuentin Monnet.PHONY: all FORCE bootstrap clean install-bin install uninstall 337d3244248SQuentin Monnet.PHONY: doc doc-clean doc-install doc-uninstall 33871bb428fSJakub Kicinski.DEFAULT_GOAL := all 339e7f0d5cdSChangbin Du 340e7f0d5cdSChangbin Du# Delete partially updated (corrupted) files on error 341e7f0d5cdSChangbin Du.DELETE_ON_ERROR: 342