12a171788SDavid S. Miller# SPDX-License-Identifier: GPL-2.0 25a8997f2SJiri Bencinclude ../scripts/Makefile.include 35a8997f2SJiri Benc 4fde68c5bSJiri Bencprefix ?= /usr/local 5a92bb546SJakub Kicinski 6a92bb546SJakub KicinskiLEX = flex 7a92bb546SJakub KicinskiYACC = bison 871bb428fSJakub KicinskiMAKE = make 9fde68c5bSJiri BencINSTALL ?= install 10a92bb546SJakub Kicinski 11a92bb546SJakub KicinskiCFLAGS += -Wall -O2 125a8997f2SJiri BencCFLAGS += -D__EXPORTED_HEADERS__ -I$(srctree)/include/uapi -I$(srctree)/include 13a92bb546SJakub Kicinski 1455d554f5SShuah Khan# This will work when bpf is built in tools env. where srctree 1555d554f5SShuah Khan# isn't set and when invoked from selftests build, where srctree 1655d554f5SShuah Khan# is set to ".". building_out_of_srctree is undefined for in srctree 1755d554f5SShuah Khan# builds 18a89b2cbfSQuentin Monnetifeq ($(srctree),) 19a89b2cbfSQuentin Monnetupdate_srctree := 1 20a89b2cbfSQuentin Monnetendif 2155d554f5SShuah Khanifndef building_out_of_srctree 22a89b2cbfSQuentin Monnetupdate_srctree := 1 23a89b2cbfSQuentin Monnetendif 24a89b2cbfSQuentin Monnetifeq ($(update_srctree),1) 25fb982666SRoman Gushchinsrctree := $(patsubst %/,%,$(dir $(CURDIR))) 26fb982666SRoman Gushchinsrctree := $(patsubst %/,%,$(dir $(srctree))) 27fb982666SRoman Gushchinendif 28fb982666SRoman Gushchin 29a50b7f8cSJiri Bencifeq ($(V),1) 30a50b7f8cSJiri Benc Q = 31a50b7f8cSJiri Bencelse 32a50b7f8cSJiri Benc Q = @ 33a50b7f8cSJiri Bencendif 34a50b7f8cSJiri Benc 35fb982666SRoman GushchinFEATURE_USER = .bpf 36fb982666SRoman GushchinFEATURE_TESTS = libbfd disassembler-four-args 37fb982666SRoman GushchinFEATURE_DISPLAY = libbfd disassembler-four-args 38fb982666SRoman Gushchin 39fb982666SRoman Gushchincheck_feat := 1 409c01546dSAndrii NakryikoNON_CHECK_FEAT_TARGETS := clean bpftool_clean runqslower_clean 41fb982666SRoman Gushchinifdef MAKECMDGOALS 42fb982666SRoman Gushchinifeq ($(filter-out $(NON_CHECK_FEAT_TARGETS),$(MAKECMDGOALS)),) 43fb982666SRoman Gushchin check_feat := 0 44fb982666SRoman Gushchinendif 45fb982666SRoman Gushchinendif 46fb982666SRoman Gushchin 47fb982666SRoman Gushchinifeq ($(check_feat),1) 48fb982666SRoman Gushchinifeq ($(FEATURES_DUMP),) 49fb982666SRoman Gushchininclude $(srctree)/tools/build/Makefile.feature 50fb982666SRoman Gushchinelse 51fb982666SRoman Gushchininclude $(FEATURES_DUMP) 52fb982666SRoman Gushchinendif 53fb982666SRoman Gushchinendif 54fb982666SRoman Gushchin 55fb982666SRoman Gushchinifeq ($(feature-disassembler-four-args), 1) 56fb982666SRoman GushchinCFLAGS += -DDISASM_FOUR_ARGS_SIGNATURE 57fb982666SRoman Gushchinendif 58fb982666SRoman Gushchin 595a8997f2SJiri Benc$(OUTPUT)%.yacc.c: $(srctree)/tools/bpf/%.y 60a50b7f8cSJiri Benc $(QUIET_BISON)$(YACC) -o $@ -d $< 61a92bb546SJakub Kicinski 625a8997f2SJiri Benc$(OUTPUT)%.lex.c: $(srctree)/tools/bpf/%.l 63a50b7f8cSJiri Benc $(QUIET_FLEX)$(LEX) -o $@ $< 64a92bb546SJakub Kicinski 655a8997f2SJiri Benc$(OUTPUT)%.o: $(srctree)/tools/bpf/%.c 66d70a6be1SIlya Leoshkevich $(QUIET_CC)$(CC) $(CFLAGS) -c -o $@ $< 67a50b7f8cSJiri Benc 68a50b7f8cSJiri Benc$(OUTPUT)%.yacc.o: $(OUTPUT)%.yacc.c 69d70a6be1SIlya Leoshkevich $(QUIET_CC)$(CC) $(CFLAGS) -c -o $@ $< 70a50b7f8cSJiri Benc$(OUTPUT)%.lex.o: $(OUTPUT)%.lex.c 71d70a6be1SIlya Leoshkevich $(QUIET_CC)$(CC) $(CFLAGS) -c -o $@ $< 72a92bb546SJakub Kicinski 736c071008SJiri BencPROGS = $(OUTPUT)bpf_jit_disasm $(OUTPUT)bpf_dbg $(OUTPUT)bpf_asm 746c071008SJiri Benc 759c01546dSAndrii Nakryikoall: $(PROGS) bpftool runqslower 76a92bb546SJakub Kicinski 775a8997f2SJiri Benc$(OUTPUT)bpf_jit_disasm: CFLAGS += -DPACKAGE='bpf_jit_disasm' 785a8997f2SJiri Benc$(OUTPUT)bpf_jit_disasm: $(OUTPUT)bpf_jit_disasm.o 79a50b7f8cSJiri Benc $(QUIET_LINK)$(CC) $(CFLAGS) -o $@ $^ -lopcodes -lbfd -ldl 80a92bb546SJakub Kicinski 815a8997f2SJiri Benc$(OUTPUT)bpf_dbg: $(OUTPUT)bpf_dbg.o 82a50b7f8cSJiri Benc $(QUIET_LINK)$(CC) $(CFLAGS) -o $@ $^ -lreadline 835a8997f2SJiri Benc 845a8997f2SJiri Benc$(OUTPUT)bpf_asm: $(OUTPUT)bpf_asm.o $(OUTPUT)bpf_exp.yacc.o $(OUTPUT)bpf_exp.lex.o 85a50b7f8cSJiri Benc $(QUIET_LINK)$(CC) $(CFLAGS) -o $@ $^ 86a50b7f8cSJiri Benc 87ef8ba83bSJiri Benc$(OUTPUT)bpf_exp.lex.c: $(OUTPUT)bpf_exp.yacc.c 889c299a32SJohn Fastabend$(OUTPUT)bpf_exp.yacc.o: $(OUTPUT)bpf_exp.yacc.c 899c299a32SJohn Fastabend$(OUTPUT)bpf_exp.lex.o: $(OUTPUT)bpf_exp.lex.c 90a92bb546SJakub Kicinski 919c01546dSAndrii Nakryikoclean: bpftool_clean runqslower_clean 92a50b7f8cSJiri Benc $(call QUIET_CLEAN, bpf-progs) 93fbdb620bSQuentin Monnet $(Q)$(RM) -r -- $(OUTPUT)*.o $(OUTPUT)bpf_jit_disasm $(OUTPUT)bpf_dbg \ 945a8997f2SJiri Benc $(OUTPUT)bpf_asm $(OUTPUT)bpf_exp.yacc.* $(OUTPUT)bpf_exp.lex.* 95cc5b3403SJakub Kicinski $(call QUIET_CLEAN, core-gen) 96fbdb620bSQuentin Monnet $(Q)$(RM) -- $(OUTPUT)FEATURE-DUMP.bpf 97fbdb620bSQuentin Monnet $(Q)$(RM) -r -- $(OUTPUT)feature 98a92bb546SJakub Kicinski 999c01546dSAndrii Nakryikoinstall: $(PROGS) bpftool_install runqslower_install 100a50b7f8cSJiri Benc $(call QUIET_INSTALL, bpf_jit_disasm) 101a50b7f8cSJiri Benc $(Q)$(INSTALL) -m 0755 -d $(DESTDIR)$(prefix)/bin 102a50b7f8cSJiri Benc $(Q)$(INSTALL) $(OUTPUT)bpf_jit_disasm $(DESTDIR)$(prefix)/bin/bpf_jit_disasm 103a50b7f8cSJiri Benc $(call QUIET_INSTALL, bpf_dbg) 104a50b7f8cSJiri Benc $(Q)$(INSTALL) $(OUTPUT)bpf_dbg $(DESTDIR)$(prefix)/bin/bpf_dbg 105a50b7f8cSJiri Benc $(call QUIET_INSTALL, bpf_asm) 106a50b7f8cSJiri Benc $(Q)$(INSTALL) $(OUTPUT)bpf_asm $(DESTDIR)$(prefix)/bin/bpf_asm 10771bb428fSJakub Kicinski 10871bb428fSJakub Kicinskibpftool: 10958416c37SJiri Benc $(call descend,bpftool) 11071bb428fSJakub Kicinski 11171bb428fSJakub Kicinskibpftool_install: 11258416c37SJiri Benc $(call descend,bpftool,install) 11371bb428fSJakub Kicinski 11471bb428fSJakub Kicinskibpftool_clean: 11558416c37SJiri Benc $(call descend,bpftool,clean) 11671bb428fSJakub Kicinski 1179c01546dSAndrii Nakryikorunqslower: 1189c01546dSAndrii Nakryiko $(call descend,runqslower) 1199c01546dSAndrii Nakryiko 1209c01546dSAndrii Nakryikorunqslower_install: 1219c01546dSAndrii Nakryiko $(call descend,runqslower,install) 1229c01546dSAndrii Nakryiko 1239c01546dSAndrii Nakryikorunqslower_clean: 1249c01546dSAndrii Nakryiko $(call descend,runqslower,clean) 1259c01546dSAndrii Nakryiko 126*33a57ce0SJiri Olsaresolve_btfids: 127*33a57ce0SJiri Olsa $(call descend,resolve_btfids) 128*33a57ce0SJiri Olsa 129*33a57ce0SJiri Olsaresolve_btfids_clean: 130*33a57ce0SJiri Olsa $(call descend,resolve_btfids,clean) 131*33a57ce0SJiri Olsa 1329c01546dSAndrii Nakryiko.PHONY: all install clean bpftool bpftool_install bpftool_clean \ 133*33a57ce0SJiri Olsa runqslower runqslower_install runqslower_clean \ 134*33a57ce0SJiri Olsa resolve_btfids resolve_btfids_clean 135