12a171788SDavid S. Miller# SPDX-License-Identifier: GPL-2.0 25a8997f2SJiri Bencinclude ../scripts/Makefile.include 35a8997f2SJiri Benc 4fde68c5bSJiri Bencprefix ?= /usr/local 5a92bb546SJakub Kicinski 6a92bb546SJakub KicinskiCC = gcc 7a92bb546SJakub KicinskiLEX = flex 8a92bb546SJakub KicinskiYACC = bison 971bb428fSJakub KicinskiMAKE = make 10fde68c5bSJiri BencINSTALL ?= install 11a92bb546SJakub Kicinski 12a92bb546SJakub KicinskiCFLAGS += -Wall -O2 135a8997f2SJiri BencCFLAGS += -D__EXPORTED_HEADERS__ -I$(srctree)/include/uapi -I$(srctree)/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 30a50b7f8cSJiri Bencifeq ($(V),1) 31a50b7f8cSJiri Benc Q = 32a50b7f8cSJiri Bencelse 33a50b7f8cSJiri Benc Q = @ 34a50b7f8cSJiri Bencendif 35a50b7f8cSJiri Benc 36fb982666SRoman GushchinFEATURE_USER = .bpf 37fb982666SRoman GushchinFEATURE_TESTS = libbfd disassembler-four-args 38fb982666SRoman GushchinFEATURE_DISPLAY = libbfd disassembler-four-args 39fb982666SRoman Gushchin 40fb982666SRoman Gushchincheck_feat := 1 419c01546dSAndrii NakryikoNON_CHECK_FEAT_TARGETS := clean bpftool_clean runqslower_clean 42fb982666SRoman Gushchinifdef MAKECMDGOALS 43fb982666SRoman Gushchinifeq ($(filter-out $(NON_CHECK_FEAT_TARGETS),$(MAKECMDGOALS)),) 44fb982666SRoman Gushchin check_feat := 0 45fb982666SRoman Gushchinendif 46fb982666SRoman Gushchinendif 47fb982666SRoman Gushchin 48fb982666SRoman Gushchinifeq ($(check_feat),1) 49fb982666SRoman Gushchinifeq ($(FEATURES_DUMP),) 50fb982666SRoman Gushchininclude $(srctree)/tools/build/Makefile.feature 51fb982666SRoman Gushchinelse 52fb982666SRoman Gushchininclude $(FEATURES_DUMP) 53fb982666SRoman Gushchinendif 54fb982666SRoman Gushchinendif 55fb982666SRoman Gushchin 56fb982666SRoman Gushchinifeq ($(feature-disassembler-four-args), 1) 57fb982666SRoman GushchinCFLAGS += -DDISASM_FOUR_ARGS_SIGNATURE 58fb982666SRoman Gushchinendif 59fb982666SRoman Gushchin 605a8997f2SJiri Benc$(OUTPUT)%.yacc.c: $(srctree)/tools/bpf/%.y 61a50b7f8cSJiri Benc $(QUIET_BISON)$(YACC) -o $@ -d $< 62a92bb546SJakub Kicinski 635a8997f2SJiri Benc$(OUTPUT)%.lex.c: $(srctree)/tools/bpf/%.l 64a50b7f8cSJiri Benc $(QUIET_FLEX)$(LEX) -o $@ $< 65a92bb546SJakub Kicinski 665a8997f2SJiri Benc$(OUTPUT)%.o: $(srctree)/tools/bpf/%.c 67*d70a6be1SIlya Leoshkevich $(QUIET_CC)$(CC) $(CFLAGS) -c -o $@ $< 68a50b7f8cSJiri Benc 69a50b7f8cSJiri Benc$(OUTPUT)%.yacc.o: $(OUTPUT)%.yacc.c 70*d70a6be1SIlya Leoshkevich $(QUIET_CC)$(CC) $(CFLAGS) -c -o $@ $< 71a50b7f8cSJiri Benc$(OUTPUT)%.lex.o: $(OUTPUT)%.lex.c 72*d70a6be1SIlya Leoshkevich $(QUIET_CC)$(CC) $(CFLAGS) -c -o $@ $< 73a92bb546SJakub Kicinski 746c071008SJiri BencPROGS = $(OUTPUT)bpf_jit_disasm $(OUTPUT)bpf_dbg $(OUTPUT)bpf_asm 756c071008SJiri Benc 769c01546dSAndrii Nakryikoall: $(PROGS) bpftool runqslower 77a92bb546SJakub Kicinski 785a8997f2SJiri Benc$(OUTPUT)bpf_jit_disasm: CFLAGS += -DPACKAGE='bpf_jit_disasm' 795a8997f2SJiri Benc$(OUTPUT)bpf_jit_disasm: $(OUTPUT)bpf_jit_disasm.o 80a50b7f8cSJiri Benc $(QUIET_LINK)$(CC) $(CFLAGS) -o $@ $^ -lopcodes -lbfd -ldl 81a92bb546SJakub Kicinski 825a8997f2SJiri Benc$(OUTPUT)bpf_dbg: $(OUTPUT)bpf_dbg.o 83a50b7f8cSJiri Benc $(QUIET_LINK)$(CC) $(CFLAGS) -o $@ $^ -lreadline 845a8997f2SJiri Benc 855a8997f2SJiri Benc$(OUTPUT)bpf_asm: $(OUTPUT)bpf_asm.o $(OUTPUT)bpf_exp.yacc.o $(OUTPUT)bpf_exp.lex.o 86a50b7f8cSJiri Benc $(QUIET_LINK)$(CC) $(CFLAGS) -o $@ $^ 87a50b7f8cSJiri Benc 88ef8ba83bSJiri Benc$(OUTPUT)bpf_exp.lex.c: $(OUTPUT)bpf_exp.yacc.c 899c299a32SJohn Fastabend$(OUTPUT)bpf_exp.yacc.o: $(OUTPUT)bpf_exp.yacc.c 909c299a32SJohn Fastabend$(OUTPUT)bpf_exp.lex.o: $(OUTPUT)bpf_exp.lex.c 91a92bb546SJakub Kicinski 929c01546dSAndrii Nakryikoclean: bpftool_clean runqslower_clean 93a50b7f8cSJiri Benc $(call QUIET_CLEAN, bpf-progs) 94fbdb620bSQuentin Monnet $(Q)$(RM) -r -- $(OUTPUT)*.o $(OUTPUT)bpf_jit_disasm $(OUTPUT)bpf_dbg \ 955a8997f2SJiri Benc $(OUTPUT)bpf_asm $(OUTPUT)bpf_exp.yacc.* $(OUTPUT)bpf_exp.lex.* 96cc5b3403SJakub Kicinski $(call QUIET_CLEAN, core-gen) 97fbdb620bSQuentin Monnet $(Q)$(RM) -- $(OUTPUT)FEATURE-DUMP.bpf 98fbdb620bSQuentin Monnet $(Q)$(RM) -r -- $(OUTPUT)feature 99a92bb546SJakub Kicinski 1009c01546dSAndrii Nakryikoinstall: $(PROGS) bpftool_install runqslower_install 101a50b7f8cSJiri Benc $(call QUIET_INSTALL, bpf_jit_disasm) 102a50b7f8cSJiri Benc $(Q)$(INSTALL) -m 0755 -d $(DESTDIR)$(prefix)/bin 103a50b7f8cSJiri Benc $(Q)$(INSTALL) $(OUTPUT)bpf_jit_disasm $(DESTDIR)$(prefix)/bin/bpf_jit_disasm 104a50b7f8cSJiri Benc $(call QUIET_INSTALL, bpf_dbg) 105a50b7f8cSJiri Benc $(Q)$(INSTALL) $(OUTPUT)bpf_dbg $(DESTDIR)$(prefix)/bin/bpf_dbg 106a50b7f8cSJiri Benc $(call QUIET_INSTALL, bpf_asm) 107a50b7f8cSJiri Benc $(Q)$(INSTALL) $(OUTPUT)bpf_asm $(DESTDIR)$(prefix)/bin/bpf_asm 10871bb428fSJakub Kicinski 10971bb428fSJakub Kicinskibpftool: 11058416c37SJiri Benc $(call descend,bpftool) 11171bb428fSJakub Kicinski 11271bb428fSJakub Kicinskibpftool_install: 11358416c37SJiri Benc $(call descend,bpftool,install) 11471bb428fSJakub Kicinski 11571bb428fSJakub Kicinskibpftool_clean: 11658416c37SJiri Benc $(call descend,bpftool,clean) 11771bb428fSJakub Kicinski 1189c01546dSAndrii Nakryikorunqslower: 1199c01546dSAndrii Nakryiko $(call descend,runqslower) 1209c01546dSAndrii Nakryiko 1219c01546dSAndrii Nakryikorunqslower_install: 1229c01546dSAndrii Nakryiko $(call descend,runqslower,install) 1239c01546dSAndrii Nakryiko 1249c01546dSAndrii Nakryikorunqslower_clean: 1259c01546dSAndrii Nakryiko $(call descend,runqslower,clean) 1269c01546dSAndrii Nakryiko 1279c01546dSAndrii Nakryiko.PHONY: all install clean bpftool bpftool_install bpftool_clean \ 1289c01546dSAndrii Nakryiko runqslower runqslower_install runqslower_clean 129