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 12f143c11bSWill DeaconCFLAGS += -D__EXPORTED_HEADERS__ -I$(srctree)/tools/include/uapi \ 13f143c11bSWill Deacon -I$(srctree)/tools/include 14a92bb546SJakub Kicinski 1555d554f5SShuah Khan# This will work when bpf is built in tools env. where srctree 1655d554f5SShuah Khan# isn't set and when invoked from selftests build, where srctree 1755d554f5SShuah Khan# is set to ".". building_out_of_srctree is undefined for in srctree 1855d554f5SShuah Khan# builds 19a89b2cbfSQuentin Monnetifeq ($(srctree),) 20a89b2cbfSQuentin Monnetupdate_srctree := 1 21a89b2cbfSQuentin Monnetendif 2255d554f5SShuah Khanifndef building_out_of_srctree 23a89b2cbfSQuentin Monnetupdate_srctree := 1 24a89b2cbfSQuentin Monnetendif 25a89b2cbfSQuentin Monnetifeq ($(update_srctree),1) 26fb982666SRoman Gushchinsrctree := $(patsubst %/,%,$(dir $(CURDIR))) 27fb982666SRoman Gushchinsrctree := $(patsubst %/,%,$(dir $(srctree))) 28fb982666SRoman Gushchinendif 29fb982666SRoman Gushchin 30fb982666SRoman GushchinFEATURE_USER = .bpf 3196ed0660SAndres FreundFEATURE_TESTS = libbfd disassembler-four-args disassembler-init-styled 32*bab211f6SAndres FreundFEATURE_DISPLAY = libbfd 33fb982666SRoman Gushchin 34fb982666SRoman Gushchincheck_feat := 1 351eb832acSToke Høiland-JørgensenNON_CHECK_FEAT_TARGETS := clean bpftool_clean runqslower_clean resolve_btfids_clean 36fb982666SRoman Gushchinifdef MAKECMDGOALS 37fb982666SRoman Gushchinifeq ($(filter-out $(NON_CHECK_FEAT_TARGETS),$(MAKECMDGOALS)),) 38fb982666SRoman Gushchin check_feat := 0 39fb982666SRoman Gushchinendif 40fb982666SRoman Gushchinendif 41fb982666SRoman Gushchin 42fb982666SRoman Gushchinifeq ($(check_feat),1) 43fb982666SRoman Gushchinifeq ($(FEATURES_DUMP),) 44fb982666SRoman Gushchininclude $(srctree)/tools/build/Makefile.feature 45fb982666SRoman Gushchinelse 46fb982666SRoman Gushchininclude $(FEATURES_DUMP) 47fb982666SRoman Gushchinendif 48fb982666SRoman Gushchinendif 49fb982666SRoman Gushchin 50fb982666SRoman Gushchinifeq ($(feature-disassembler-four-args), 1) 51fb982666SRoman GushchinCFLAGS += -DDISASM_FOUR_ARGS_SIGNATURE 52fb982666SRoman Gushchinendif 5396ed0660SAndres Freundifeq ($(feature-disassembler-init-styled), 1) 5496ed0660SAndres FreundCFLAGS += -DDISASM_INIT_STYLED 5596ed0660SAndres Freundendif 56fb982666SRoman Gushchin 575a8997f2SJiri Benc$(OUTPUT)%.yacc.c: $(srctree)/tools/bpf/%.y 58a50b7f8cSJiri Benc $(QUIET_BISON)$(YACC) -o $@ -d $< 59a92bb546SJakub Kicinski 605a8997f2SJiri Benc$(OUTPUT)%.lex.c: $(srctree)/tools/bpf/%.l 61a50b7f8cSJiri Benc $(QUIET_FLEX)$(LEX) -o $@ $< 62a92bb546SJakub Kicinski 635a8997f2SJiri Benc$(OUTPUT)%.o: $(srctree)/tools/bpf/%.c 64d70a6be1SIlya Leoshkevich $(QUIET_CC)$(CC) $(CFLAGS) -c -o $@ $< 65a50b7f8cSJiri Benc 66a50b7f8cSJiri Benc$(OUTPUT)%.yacc.o: $(OUTPUT)%.yacc.c 67d70a6be1SIlya Leoshkevich $(QUIET_CC)$(CC) $(CFLAGS) -c -o $@ $< 68a50b7f8cSJiri Benc$(OUTPUT)%.lex.o: $(OUTPUT)%.lex.c 69d70a6be1SIlya Leoshkevich $(QUIET_CC)$(CC) $(CFLAGS) -c -o $@ $< 70a92bb546SJakub Kicinski 716c071008SJiri BencPROGS = $(OUTPUT)bpf_jit_disasm $(OUTPUT)bpf_dbg $(OUTPUT)bpf_asm 726c071008SJiri Benc 739c01546dSAndrii Nakryikoall: $(PROGS) bpftool runqslower 74a92bb546SJakub Kicinski 755a8997f2SJiri Benc$(OUTPUT)bpf_jit_disasm: CFLAGS += -DPACKAGE='bpf_jit_disasm' 765a8997f2SJiri Benc$(OUTPUT)bpf_jit_disasm: $(OUTPUT)bpf_jit_disasm.o 77a50b7f8cSJiri Benc $(QUIET_LINK)$(CC) $(CFLAGS) -o $@ $^ -lopcodes -lbfd -ldl 78a92bb546SJakub Kicinski 795a8997f2SJiri Benc$(OUTPUT)bpf_dbg: $(OUTPUT)bpf_dbg.o 80a50b7f8cSJiri Benc $(QUIET_LINK)$(CC) $(CFLAGS) -o $@ $^ -lreadline 815a8997f2SJiri Benc 825a8997f2SJiri Benc$(OUTPUT)bpf_asm: $(OUTPUT)bpf_asm.o $(OUTPUT)bpf_exp.yacc.o $(OUTPUT)bpf_exp.lex.o 83a50b7f8cSJiri Benc $(QUIET_LINK)$(CC) $(CFLAGS) -o $@ $^ 84a50b7f8cSJiri Benc 85ef8ba83bSJiri Benc$(OUTPUT)bpf_exp.lex.c: $(OUTPUT)bpf_exp.yacc.c 869c299a32SJohn Fastabend$(OUTPUT)bpf_exp.yacc.o: $(OUTPUT)bpf_exp.yacc.c 879c299a32SJohn Fastabend$(OUTPUT)bpf_exp.lex.o: $(OUTPUT)bpf_exp.lex.c 88a92bb546SJakub Kicinski 891eb832acSToke Høiland-Jørgensenclean: bpftool_clean runqslower_clean resolve_btfids_clean 90a50b7f8cSJiri Benc $(call QUIET_CLEAN, bpf-progs) 91fbdb620bSQuentin Monnet $(Q)$(RM) -r -- $(OUTPUT)*.o $(OUTPUT)bpf_jit_disasm $(OUTPUT)bpf_dbg \ 925a8997f2SJiri Benc $(OUTPUT)bpf_asm $(OUTPUT)bpf_exp.yacc.* $(OUTPUT)bpf_exp.lex.* 93cc5b3403SJakub Kicinski $(call QUIET_CLEAN, core-gen) 94fbdb620bSQuentin Monnet $(Q)$(RM) -- $(OUTPUT)FEATURE-DUMP.bpf 95fbdb620bSQuentin Monnet $(Q)$(RM) -r -- $(OUTPUT)feature 96a92bb546SJakub Kicinski 971d719254SWei Liinstall: $(PROGS) bpftool_install 98a50b7f8cSJiri Benc $(call QUIET_INSTALL, bpf_jit_disasm) 99a50b7f8cSJiri Benc $(Q)$(INSTALL) -m 0755 -d $(DESTDIR)$(prefix)/bin 100a50b7f8cSJiri Benc $(Q)$(INSTALL) $(OUTPUT)bpf_jit_disasm $(DESTDIR)$(prefix)/bin/bpf_jit_disasm 101a50b7f8cSJiri Benc $(call QUIET_INSTALL, bpf_dbg) 102a50b7f8cSJiri Benc $(Q)$(INSTALL) $(OUTPUT)bpf_dbg $(DESTDIR)$(prefix)/bin/bpf_dbg 103a50b7f8cSJiri Benc $(call QUIET_INSTALL, bpf_asm) 104a50b7f8cSJiri Benc $(Q)$(INSTALL) $(OUTPUT)bpf_asm $(DESTDIR)$(prefix)/bin/bpf_asm 10571bb428fSJakub Kicinski 10671bb428fSJakub Kicinskibpftool: 10758416c37SJiri Benc $(call descend,bpftool) 10871bb428fSJakub Kicinski 10971bb428fSJakub Kicinskibpftool_install: 11058416c37SJiri Benc $(call descend,bpftool,install) 11171bb428fSJakub Kicinski 11271bb428fSJakub Kicinskibpftool_clean: 11358416c37SJiri Benc $(call descend,bpftool,clean) 11471bb428fSJakub Kicinski 1159c01546dSAndrii Nakryikorunqslower: 1169c01546dSAndrii Nakryiko $(call descend,runqslower) 1179c01546dSAndrii Nakryiko 1189c01546dSAndrii Nakryikorunqslower_clean: 1199c01546dSAndrii Nakryiko $(call descend,runqslower,clean) 1209c01546dSAndrii Nakryiko 12133a57ce0SJiri Olsaresolve_btfids: 12233a57ce0SJiri Olsa $(call descend,resolve_btfids) 12333a57ce0SJiri Olsa 12433a57ce0SJiri Olsaresolve_btfids_clean: 12533a57ce0SJiri Olsa $(call descend,resolve_btfids,clean) 12633a57ce0SJiri Olsa 1279c01546dSAndrii Nakryiko.PHONY: all install clean bpftool bpftool_install bpftool_clean \ 1281d719254SWei Li runqslower runqslower_clean \ 12933a57ce0SJiri Olsa resolve_btfids resolve_btfids_clean 130