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= \ 509080b976SLeo Yan ARCH= CROSS_COMPILE= CC="$(HOSTCC)" LD="$(HOSTLD)" AR="$(HOSTAR)" \ 519080b976SLeo 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 85956841cbSLeo Yan 86956841cbSLeo Yan# This must be done before appending EXTRA_CFLAGS to CFLAGS to avoid 87956841cbSLeo Yan# including flags that are not applicable to the host compiler. 88956841cbSLeo YanHOST_CFLAGS := $(subst -I$(LIBBPF_INCLUDE),-I$(LIBBPF_BOOTSTRAP_INCLUDE),\ 89956841cbSLeo Yan $(subst $(CLANG_CROSS_FLAGS),,$(CFLAGS))) 90*3f2fec5bSLeo YanHOST_CFLAGS += $(HOST_EXTRACFLAGS) 91956841cbSLeo Yan 920ef6bf39SJiri Olsaifneq ($(EXTRA_CFLAGS),) 930ef6bf39SJiri OlsaCFLAGS += $(EXTRA_CFLAGS) 940ef6bf39SJiri Olsaendif 95c8506165SJiri Olsaifneq ($(EXTRA_LDFLAGS),) 96c8506165SJiri OlsaLDFLAGS += $(EXTRA_LDFLAGS) 97c8506165SJiri Olsaendif 980ef6bf39SJiri Olsa 99cc9b22dfSQuentin MonnetHOST_LDFLAGS := $(LDFLAGS) 100cc9b22dfSQuentin Monnet 1019080b976SLeo Yan# Remove warnings for libbpf bootstrap build 1029080b976SLeo YanLIBBPF_BOOTSTRAP_CFLAGS := $(filter-out -W -Wall -Wextra -Wformat -Wformat-signedness,$(HOST_CFLAGS)) 1039080b976SLeo Yan 104658e85aaSQuentin MonnetINSTALL ?= install 105658e85aaSQuentin MonnetRM ?= rm -f 106658e85aaSQuentin Monnet 107fb982666SRoman GushchinFEATURE_USER = .bpftool 108108326d6SQuentin Monnet 109c73a2443SMykyta Yatsenko# Skip optional dependencies: LLVM (JIT disasm), libbfd (fallback 110c73a2443SMykyta Yatsenko# disasm), libcrypto (program signing). 111c73a2443SMykyta YatsenkoSKIP_LLVM ?= 112c73a2443SMykyta YatsenkoSKIP_LIBBFD ?= 113c73a2443SMykyta YatsenkoSKIP_CRYPTO ?= 114c73a2443SMykyta Yatsenkoifneq ($(SKIP_CRYPTO),1) 115c73a2443SMykyta Yatsenko CRYPTO_LIBS := -lcrypto 116c73a2443SMykyta Yatsenkoendif 117c73a2443SMykyta Yatsenko 118231fc9bcSIan Rogersifeq ($(MAKECMDGOALS),bootstrap) 119231fc9bcSIan RogersFEATURE_TESTS := libelf-zstd 120231fc9bcSIan RogersFEATURE_DISPLAY := 121231fc9bcSIan Rogerselse 122108326d6SQuentin MonnetFEATURE_TESTS := clang-bpf-co-re 123eb9d1acfSQuentin MonnetFEATURE_TESTS += llvm 124108326d6SQuentin MonnetFEATURE_TESTS += libcap 125108326d6SQuentin MonnetFEATURE_TESTS += libbfd 126108326d6SQuentin MonnetFEATURE_TESTS += libbfd-liberty 127108326d6SQuentin MonnetFEATURE_TESTS += libbfd-liberty-z 128108326d6SQuentin MonnetFEATURE_TESTS += disassembler-four-args 129108326d6SQuentin MonnetFEATURE_TESTS += disassembler-init-styled 130fee9c03bSLeo YanFEATURE_TESTS += libelf-zstd 131108326d6SQuentin Monnet 132108326d6SQuentin MonnetFEATURE_DISPLAY := clang-bpf-co-re 133eb9d1acfSQuentin MonnetFEATURE_DISPLAY += llvm 134108326d6SQuentin MonnetFEATURE_DISPLAY += libcap 135108326d6SQuentin MonnetFEATURE_DISPLAY += libbfd 136108326d6SQuentin MonnetFEATURE_DISPLAY += libbfd-liberty 137108326d6SQuentin MonnetFEATURE_DISPLAY += libbfd-liberty-z 138231fc9bcSIan Rogersendif 139fb982666SRoman Gushchin 140fb982666SRoman Gushchincheck_feat := 1 141fb982666SRoman GushchinNON_CHECK_FEAT_TARGETS := clean uninstall doc doc-clean doc-install doc-uninstall 142fb982666SRoman Gushchinifdef MAKECMDGOALS 143fb982666SRoman Gushchinifeq ($(filter-out $(NON_CHECK_FEAT_TARGETS),$(MAKECMDGOALS)),) 144fb982666SRoman Gushchin check_feat := 0 145fb982666SRoman Gushchinendif 146fb982666SRoman Gushchinendif 147fb982666SRoman Gushchin 148fb982666SRoman Gushchinifeq ($(check_feat),1) 149fb982666SRoman Gushchinifeq ($(FEATURES_DUMP),) 150fb982666SRoman Gushchininclude $(srctree)/tools/build/Makefile.feature 151fb982666SRoman Gushchinelse 152fb982666SRoman Gushchininclude $(FEATURES_DUMP) 153fb982666SRoman Gushchinendif 154fb982666SRoman Gushchinendif 155fb982666SRoman Gushchin 156c73a2443SMykyta YatsenkoLIBS = $(LIBBPF) -lelf $(CRYPTO_LIBS) -lz 157c73a2443SMykyta YatsenkoLIBS_BOOTSTRAP = $(LIBBPF_BOOTSTRAP) -lelf $(CRYPTO_LIBS) -lz 158fee9c03bSLeo Yan 159fee9c03bSLeo Yanifeq ($(feature-libelf-zstd),1) 160fee9c03bSLeo YanLIBS += -lzstd 161fee9c03bSLeo YanLIBS_BOOTSTRAP += -lzstd 162fee9c03bSLeo Yanendif 163fee9c03bSLeo Yan 1640b3b9ca3SQuentin Monnetifeq ($(feature-libcap), 1) 1650b3b9ca3SQuentin MonnetCFLAGS += -DUSE_LIBCAP 1660b3b9ca3SQuentin MonnetLIBS += -lcap 1670b3b9ca3SQuentin Monnetendif 1680b3b9ca3SQuentin Monnet 16990126e3aSJakub Kicinskiinclude $(wildcard $(OUTPUT)*.d) 17071bb428fSJakub Kicinski 17171bb428fSJakub Kicinskiall: $(OUTPUT)bpftool 17271bb428fSJakub Kicinski 1732ea4d86aSQuentin MonnetSRCS := $(wildcard *.c) 17429a9c10eSStanislav Fomichev 175eb9d1acfSQuentin Monnetifeq ($(feature-llvm),1) 176c73a2443SMykyta Yatsenkoifneq ($(SKIP_LLVM),1) 177c73a2443SMykyta YatsenkoHAS_LLVM := 1 178c73a2443SMykyta Yatsenkoendif 179c73a2443SMykyta Yatsenkoendif 180c73a2443SMykyta Yatsenko 181c73a2443SMykyta Yatsenkoifeq ($(HAS_LLVM),1) 182eb9d1acfSQuentin Monnet CFLAGS += -DHAVE_LLVM_SUPPORT 183eb9d1acfSQuentin Monnet LLVM_CONFIG_LIB_COMPONENTS := mcdisassembler all-targets 1840513eeeeSViktor Malik # llvm-config always adds -D_GNU_SOURCE, however, it may already be in CFLAGS 1850513eeeeSViktor Malik # (e.g. when bpftool build is called from selftests build as selftests 1860513eeeeSViktor Malik # Makefile includes lib.mk which sets -D_GNU_SOURCE) which would cause 1870513eeeeSViktor Malik # compilation error due to redefinition. Let's filter it out here. 1880513eeeeSViktor Malik CFLAGS += $(filter-out -D_GNU_SOURCE,$(shell $(LLVM_CONFIG) --cflags)) 189eb9d1acfSQuentin Monnet LIBS += $(shell $(LLVM_CONFIG) --libs $(LLVM_CONFIG_LIB_COMPONENTS)) 19055171f29SAnton Protopopov ifeq ($(shell $(LLVM_CONFIG) --shared-mode),static) 19155171f29SAnton Protopopov LIBS += $(shell $(LLVM_CONFIG) --system-libs $(LLVM_CONFIG_LIB_COMPONENTS)) 19255171f29SAnton Protopopov LIBS += -lstdc++ 19355171f29SAnton Protopopov endif 194eb9d1acfSQuentin Monnet LDFLAGS += $(shell $(LLVM_CONFIG) --ldflags) 195eb9d1acfSQuentin Monnetelse 196c73a2443SMykyta Yatsenko ifneq ($(SKIP_LIBBFD),1) 197eb9d1acfSQuentin Monnet # Fall back on libbfd 19829a9c10eSStanislav Fomichev ifeq ($(feature-libbfd),1) 1996e8ccb4fSStanislav Fomichev LIBS += -lbfd -ldl -lopcodes 2006e8ccb4fSStanislav Fomichev else ifeq ($(feature-libbfd-liberty),1) 2016e8ccb4fSStanislav Fomichev LIBS += -lbfd -ldl -lopcodes -liberty 2026e8ccb4fSStanislav Fomichev else ifeq ($(feature-libbfd-liberty-z),1) 2036e8ccb4fSStanislav Fomichev LIBS += -lbfd -ldl -lopcodes -liberty -lz 2046e8ccb4fSStanislav Fomichev endif 2056e8ccb4fSStanislav Fomichev 2062ea4d86aSQuentin Monnet # If one of the above feature combinations is set, we support libbfd 2076e8ccb4fSStanislav Fomichev ifneq ($(filter -lbfd,$(LIBS)),) 20829a9c10eSStanislav Fomichev CFLAGS += -DHAVE_LIBBFD_SUPPORT 2092ea4d86aSQuentin Monnet 2102ea4d86aSQuentin Monnet # Libbfd interface changed over time, figure out what we need 2112ea4d86aSQuentin Monnet ifeq ($(feature-disassembler-four-args), 1) 2122ea4d86aSQuentin Monnet CFLAGS += -DDISASM_FOUR_ARGS_SIGNATURE 2132ea4d86aSQuentin Monnet endif 2142ea4d86aSQuentin Monnet ifeq ($(feature-disassembler-init-styled), 1) 2152ea4d86aSQuentin Monnet CFLAGS += -DDISASM_INIT_STYLED 2162ea4d86aSQuentin Monnet endif 2172ea4d86aSQuentin Monnet endif 218c73a2443SMykyta Yatsenko endif # SKIP_LIBBFD 219eb9d1acfSQuentin Monnetendif 220eb9d1acfSQuentin Monnetifeq ($(filter -DHAVE_LLVM_SUPPORT -DHAVE_LIBBFD_SUPPORT,$(CFLAGS)),) 2212ea4d86aSQuentin Monnet # No support for JIT disassembly 2222ea4d86aSQuentin Monnet SRCS := $(filter-out jit_disasm.c,$(SRCS)) 22329a9c10eSStanislav Fomichevendif 22429a9c10eSStanislav Fomichev 225c73a2443SMykyta Yatsenkoifeq ($(SKIP_CRYPTO),1) 226c73a2443SMykyta Yatsenko CFLAGS += -DBPFTOOL_WITHOUT_CRYPTO 227c73a2443SMykyta Yatsenko HOST_CFLAGS += -DBPFTOOL_WITHOUT_CRYPTO 228c73a2443SMykyta Yatsenko SRCS := $(filter-out sign.c,$(SRCS)) 229c73a2443SMykyta Yatsenkoendif 230c73a2443SMykyta Yatsenko 2318859b0daSJean-Philippe BruckerBPFTOOL_BOOTSTRAP := $(BOOTSTRAP_OUTPUT)bpftool 23216e9b187SAndrii Nakryiko 233c73a2443SMykyta YatsenkoBOOTSTRAP_OBJS = $(addprefix $(BOOTSTRAP_OUTPUT),main.o common.o json_writer.o gen.o btf.o $(if $(CRYPTO_LIBS),sign.o)) 2340b46b755SQuentin Monnet$(BOOTSTRAP_OBJS): $(LIBBPF_BOOTSTRAP) 2350b46b755SQuentin Monnet 236c9c35995SJakub KicinskiOBJS = $(patsubst %.c,$(OUTPUT)%.o,$(SRCS)) $(OUTPUT)disasm.o 23734e3ab14SQuentin Monnet$(OBJS): $(LIBBPF) $(LIBBPF_INTERNAL_HDRS) 23847c09d6aSSong Liu 239ec23eb70SAndrii NakryikoVMLINUX_BTF_PATHS ?= $(if $(O),$(O)/vmlinux) \ 24005aca6daSAndrii Nakryiko $(if $(KBUILD_OUTPUT),$(KBUILD_OUTPUT)/vmlinux) \ 24105aca6daSAndrii Nakryiko ../../../vmlinux \ 24205aca6daSAndrii Nakryiko /sys/kernel/btf/vmlinux \ 24305aca6daSAndrii Nakryiko /boot/vmlinux-$(shell uname -r) 244ec23eb70SAndrii NakryikoVMLINUX_BTF ?= $(abspath $(firstword $(wildcard $(VMLINUX_BTF_PATHS)))) 24514e5728fSSong Liu 246d2032d45SSong Liubootstrap: $(BPFTOOL_BOOTSTRAP) 247d2032d45SSong Liu 248ec23eb70SAndrii Nakryikoifneq ($(VMLINUX_BTF)$(VMLINUX_H),) 24905aca6daSAndrii Nakryikoifeq ($(feature-clang-bpf-co-re),1) 25005aca6daSAndrii Nakryiko 25105aca6daSAndrii NakryikoBUILD_BPF_SKELS := 1 25205aca6daSAndrii Nakryiko 253ec23eb70SAndrii Nakryikoifeq ($(VMLINUX_H),) 254e7b64f9dSArtem Savkov$(OUTPUT)vmlinux.h: $(VMLINUX_BTF) $(BPFTOOL_BOOTSTRAP) 25505aca6daSAndrii Nakryiko $(QUIET_GEN)$(BPFTOOL_BOOTSTRAP) btf dump file $< format c > $@ 256ec23eb70SAndrii Nakryikoelse 257e7b64f9dSArtem Savkov$(OUTPUT)vmlinux.h: $(VMLINUX_H) 258ec23eb70SAndrii Nakryiko $(Q)cp "$(VMLINUX_H)" $@ 259ec23eb70SAndrii Nakryikoendif 26005aca6daSAndrii Nakryiko 261e41ac202SQuentin Monnet$(OUTPUT)%.bpf.o: skeleton/%.bpf.c $(OUTPUT)vmlinux.h $(LIBBPF_BOOTSTRAP) 262fe4eb069STobias Klauser $(QUIET_CLANG)$(CLANG) \ 263639f58a0SQuentin Monnet -Wno-microsoft-anon-tag \ 264639f58a0SQuentin Monnet -fms-extensions \ 2655c816641SMasahiro Yamada -I$(or $(OUTPUT),.) \ 266fe4eb069STobias Klauser -I$(srctree)/tools/include/uapi/ \ 267e41ac202SQuentin Monnet -I$(LIBBPF_BOOTSTRAP_INCLUDE) \ 268878625e1SHolger Hoffstätte -g -O2 -Wall -fno-stack-protector \ 269bbaf1ff0SFangrui Song --target=bpf -c $< -o $@ 2706501182cSAndrii Nakryiko $(Q)$(LLVM_STRIP) -g $@ 27147c09d6aSSong Liu 27205aca6daSAndrii Nakryiko$(OUTPUT)%.skel.h: $(OUTPUT)%.bpf.o $(BPFTOOL_BOOTSTRAP) 27305aca6daSAndrii Nakryiko $(QUIET_GEN)$(BPFTOOL_BOOTSTRAP) gen skeleton $< > $@ 27447c09d6aSSong Liu 27505aca6daSAndrii Nakryiko$(OUTPUT)prog.o: $(OUTPUT)profiler.skel.h 27605aca6daSAndrii Nakryiko 277d53dee3fSAndrii Nakryiko$(OUTPUT)pids.o: $(OUTPUT)pid_iter.skel.h 278d53dee3fSAndrii Nakryiko 27905aca6daSAndrii Nakryikoendif 28005aca6daSAndrii Nakryikoendif 28105aca6daSAndrii Nakryiko 2829d9d8cc2STobias KlauserCFLAGS += $(if $(BUILD_BPF_SKELS),,-DBPFTOOL_WITHOUT_SKELETONS) 283c9c35995SJakub Kicinski 284c9c35995SJakub Kicinski$(OUTPUT)disasm.o: $(srctree)/kernel/bpf/disasm.c 2856501182cSAndrii Nakryiko $(QUIET_CC)$(CC) $(CFLAGS) -c -MMD $< -o $@ 28671bb428fSJakub Kicinski 2878859b0daSJean-Philippe Brucker$(BPFTOOL_BOOTSTRAP): $(BOOTSTRAP_OBJS) $(LIBBPF_BOOTSTRAP) 288cc9b22dfSQuentin Monnet $(QUIET_LINK)$(HOSTCC) $(HOST_CFLAGS) $(HOST_LDFLAGS) $(BOOTSTRAP_OBJS) $(LIBS_BOOTSTRAP) -o $@ 28916e9b187SAndrii Nakryiko 29016e9b187SAndrii Nakryiko$(OUTPUT)bpftool: $(OBJS) $(LIBBPF) 2916501182cSAndrii Nakryiko $(QUIET_LINK)$(CC) $(CFLAGS) $(LDFLAGS) $(OBJS) $(LIBS) -o $@ 29271bb428fSJakub Kicinski 293e41ac202SQuentin Monnet$(BOOTSTRAP_OUTPUT)%.o: %.c $(LIBBPF_BOOTSTRAP_INTERNAL_HDRS) | $(BOOTSTRAP_OUTPUT) 294bdadbb44SJean-Philippe Brucker $(QUIET_CC)$(HOSTCC) $(HOST_CFLAGS) -c -MMD $< -o $@ 2958859b0daSJean-Philippe Brucker 29671bb428fSJakub Kicinski$(OUTPUT)%.o: %.c 2976501182cSAndrii Nakryiko $(QUIET_CC)$(CC) $(CFLAGS) -c -MMD $< -o $@ 29871bb428fSJakub Kicinski 299661b37cdSJesper Dangaard Brouerfeature-detect-clean: 300661b37cdSJesper Dangaard Brouer $(call QUIET_CLEAN, feature-detect) 301661b37cdSJesper Dangaard Brouer $(Q)$(MAKE) -C $(srctree)/tools/build/feature/ clean >/dev/null 302661b37cdSJesper Dangaard Brouer 3038859b0daSJean-Philippe Bruckerclean: $(LIBBPF)-clean $(LIBBPF_BOOTSTRAP)-clean feature-detect-clean 30471bb428fSJakub Kicinski $(call QUIET_CLEAN, bpftool) 305fbdb620bSQuentin Monnet $(Q)$(RM) -- $(OUTPUT)bpftool $(OUTPUT)*.o $(OUTPUT)*.d 3068859b0daSJean-Philippe Brucker $(Q)$(RM) -- $(OUTPUT)*.skel.h $(OUTPUT)vmlinux.h 3078859b0daSJean-Philippe Brucker $(Q)$(RM) -r -- $(LIBBPF_OUTPUT) $(BOOTSTRAP_OUTPUT) 308cc5b3403SJakub Kicinski $(call QUIET_CLEAN, core-gen) 309fbdb620bSQuentin Monnet $(Q)$(RM) -- $(OUTPUT)FEATURE-DUMP.bpftool 310fbdb620bSQuentin Monnet $(Q)$(RM) -r -- $(OUTPUT)feature/ 31171bb428fSJakub Kicinski 312d7db0a4eSQuentin Monnetinstall-bin: $(OUTPUT)bpftool 313658e85aaSQuentin Monnet $(call QUIET_INSTALL, bpftool) 314658e85aaSQuentin Monnet $(Q)$(INSTALL) -m 0755 -d $(DESTDIR)$(prefix)/sbin 315658e85aaSQuentin Monnet $(Q)$(INSTALL) $(OUTPUT)bpftool $(DESTDIR)$(prefix)/sbin/bpftool 316d7db0a4eSQuentin Monnet 317d7db0a4eSQuentin Monnetinstall: install-bin 318658e85aaSQuentin Monnet $(Q)$(INSTALL) -m 0755 -d $(DESTDIR)$(bash_compdir) 319658e85aaSQuentin Monnet $(Q)$(INSTALL) -m 0644 bash-completion/bpftool $(DESTDIR)$(bash_compdir) 32071bb428fSJakub Kicinski 321d3244248SQuentin Monnetuninstall: 322d3244248SQuentin Monnet $(call QUIET_UNINST, bpftool) 323fbdb620bSQuentin Monnet $(Q)$(RM) -- $(DESTDIR)$(prefix)/sbin/bpftool 324fbdb620bSQuentin Monnet $(Q)$(RM) -- $(DESTDIR)$(bash_compdir)/bpftool 325d3244248SQuentin Monnet 326ff69c21aSJakub Kicinskidoc: 327658e85aaSQuentin Monnet $(call descend,Documentation) 328658e85aaSQuentin Monnet 329658e85aaSQuentin Monnetdoc-clean: 330658e85aaSQuentin Monnet $(call descend,Documentation,clean) 331ff69c21aSJakub Kicinski 332ff69c21aSJakub Kicinskidoc-install: 333658e85aaSQuentin Monnet $(call descend,Documentation,install) 334ff69c21aSJakub Kicinski 335d3244248SQuentin Monnetdoc-uninstall: 336d3244248SQuentin Monnet $(call descend,Documentation,uninstall) 337d3244248SQuentin Monnet 33871bb428fSJakub KicinskiFORCE: 33971bb428fSJakub Kicinski 34005aca6daSAndrii Nakryiko.SECONDARY: 341e41ac202SQuentin Monnet.PHONY: all FORCE bootstrap clean install-bin install uninstall 342d3244248SQuentin Monnet.PHONY: doc doc-clean doc-install doc-uninstall 34371bb428fSJakub Kicinski.DEFAULT_GOAL := all 344e7f0d5cdSChangbin Du 345e7f0d5cdSChangbin Du# Delete partially updated (corrupted) files on error 346e7f0d5cdSChangbin Du.DELETE_ON_ERROR: 347