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 14*b40ba139SLeo YanCFLAGS += $(EXTRA_CFLAGS) 15a92bb546SJakub Kicinski 1655d554f5SShuah Khan# This will work when bpf is built in tools env. where srctree 1755d554f5SShuah Khan# isn't set and when invoked from selftests build, where srctree 1855d554f5SShuah Khan# is set to ".". building_out_of_srctree is undefined for in srctree 1955d554f5SShuah Khan# builds 20a89b2cbfSQuentin Monnetifeq ($(srctree),) 21a89b2cbfSQuentin Monnetupdate_srctree := 1 22a89b2cbfSQuentin Monnetendif 2355d554f5SShuah Khanifndef building_out_of_srctree 24a89b2cbfSQuentin Monnetupdate_srctree := 1 25a89b2cbfSQuentin Monnetendif 26a89b2cbfSQuentin Monnetifeq ($(update_srctree),1) 27fb982666SRoman Gushchinsrctree := $(patsubst %/,%,$(dir $(CURDIR))) 28fb982666SRoman Gushchinsrctree := $(patsubst %/,%,$(dir $(srctree))) 29fb982666SRoman Gushchinendif 30fb982666SRoman Gushchin 31fb982666SRoman GushchinFEATURE_USER = .bpf 3296ed0660SAndres FreundFEATURE_TESTS = libbfd disassembler-four-args disassembler-init-styled 33bab211f6SAndres FreundFEATURE_DISPLAY = libbfd 34fb982666SRoman Gushchin 35fb982666SRoman Gushchincheck_feat := 1 36bd5bdd20SHoyeon LeeNON_CHECK_FEAT_TARGETS := clean bpftool_clean resolve_btfids_clean 37fb982666SRoman Gushchinifdef MAKECMDGOALS 38fb982666SRoman Gushchinifeq ($(filter-out $(NON_CHECK_FEAT_TARGETS),$(MAKECMDGOALS)),) 39fb982666SRoman Gushchin check_feat := 0 40fb982666SRoman Gushchinendif 41fb982666SRoman Gushchinendif 42fb982666SRoman Gushchin 43fb982666SRoman Gushchinifeq ($(check_feat),1) 44fb982666SRoman Gushchinifeq ($(FEATURES_DUMP),) 45fb982666SRoman Gushchininclude $(srctree)/tools/build/Makefile.feature 46fb982666SRoman Gushchinelse 47fb982666SRoman Gushchininclude $(FEATURES_DUMP) 48fb982666SRoman Gushchinendif 49fb982666SRoman Gushchinendif 50fb982666SRoman Gushchin 51fb982666SRoman Gushchinifeq ($(feature-disassembler-four-args), 1) 52fb982666SRoman GushchinCFLAGS += -DDISASM_FOUR_ARGS_SIGNATURE 53fb982666SRoman Gushchinendif 5496ed0660SAndres Freundifeq ($(feature-disassembler-init-styled), 1) 5596ed0660SAndres FreundCFLAGS += -DDISASM_INIT_STYLED 5696ed0660SAndres Freundendif 57fb982666SRoman Gushchin 585a8997f2SJiri Benc$(OUTPUT)%.yacc.c: $(srctree)/tools/bpf/%.y 59a50b7f8cSJiri Benc $(QUIET_BISON)$(YACC) -o $@ -d $< 60a92bb546SJakub Kicinski 615a8997f2SJiri Benc$(OUTPUT)%.lex.c: $(srctree)/tools/bpf/%.l 62a50b7f8cSJiri Benc $(QUIET_FLEX)$(LEX) -o $@ $< 63a92bb546SJakub Kicinski 645a8997f2SJiri Benc$(OUTPUT)%.o: $(srctree)/tools/bpf/%.c 65d70a6be1SIlya Leoshkevich $(QUIET_CC)$(CC) $(CFLAGS) -c -o $@ $< 66a50b7f8cSJiri Benc 67a50b7f8cSJiri Benc$(OUTPUT)%.yacc.o: $(OUTPUT)%.yacc.c 68d70a6be1SIlya Leoshkevich $(QUIET_CC)$(CC) $(CFLAGS) -c -o $@ $< 69a50b7f8cSJiri Benc$(OUTPUT)%.lex.o: $(OUTPUT)%.lex.c 70d70a6be1SIlya Leoshkevich $(QUIET_CC)$(CC) $(CFLAGS) -c -o $@ $< 71a92bb546SJakub Kicinski 726c071008SJiri BencPROGS = $(OUTPUT)bpf_jit_disasm $(OUTPUT)bpf_dbg $(OUTPUT)bpf_asm 736c071008SJiri Benc 74bd5bdd20SHoyeon Leeall: $(PROGS) bpftool 75a92bb546SJakub Kicinski 765a8997f2SJiri Benc$(OUTPUT)bpf_jit_disasm: CFLAGS += -DPACKAGE='bpf_jit_disasm' 775a8997f2SJiri Benc$(OUTPUT)bpf_jit_disasm: $(OUTPUT)bpf_jit_disasm.o 78a50b7f8cSJiri Benc $(QUIET_LINK)$(CC) $(CFLAGS) -o $@ $^ -lopcodes -lbfd -ldl 79a92bb546SJakub Kicinski 805a8997f2SJiri Benc$(OUTPUT)bpf_dbg: $(OUTPUT)bpf_dbg.o 81a50b7f8cSJiri Benc $(QUIET_LINK)$(CC) $(CFLAGS) -o $@ $^ -lreadline 825a8997f2SJiri Benc 835a8997f2SJiri Benc$(OUTPUT)bpf_asm: $(OUTPUT)bpf_asm.o $(OUTPUT)bpf_exp.yacc.o $(OUTPUT)bpf_exp.lex.o 84a50b7f8cSJiri Benc $(QUIET_LINK)$(CC) $(CFLAGS) -o $@ $^ 85a50b7f8cSJiri Benc 86ef8ba83bSJiri Benc$(OUTPUT)bpf_exp.lex.c: $(OUTPUT)bpf_exp.yacc.c 879c299a32SJohn Fastabend$(OUTPUT)bpf_exp.yacc.o: $(OUTPUT)bpf_exp.yacc.c 889c299a32SJohn Fastabend$(OUTPUT)bpf_exp.lex.o: $(OUTPUT)bpf_exp.lex.c 89a92bb546SJakub Kicinski 90bd5bdd20SHoyeon Leeclean: bpftool_clean resolve_btfids_clean 91a50b7f8cSJiri Benc $(call QUIET_CLEAN, bpf-progs) 92fbdb620bSQuentin Monnet $(Q)$(RM) -r -- $(OUTPUT)*.o $(OUTPUT)bpf_jit_disasm $(OUTPUT)bpf_dbg \ 935a8997f2SJiri Benc $(OUTPUT)bpf_asm $(OUTPUT)bpf_exp.yacc.* $(OUTPUT)bpf_exp.lex.* 94cc5b3403SJakub Kicinski $(call QUIET_CLEAN, core-gen) 95fbdb620bSQuentin Monnet $(Q)$(RM) -- $(OUTPUT)FEATURE-DUMP.bpf 96fbdb620bSQuentin Monnet $(Q)$(RM) -r -- $(OUTPUT)feature 97a92bb546SJakub Kicinski 981d719254SWei Liinstall: $(PROGS) bpftool_install 99a50b7f8cSJiri Benc $(call QUIET_INSTALL, bpf_jit_disasm) 100a50b7f8cSJiri Benc $(Q)$(INSTALL) -m 0755 -d $(DESTDIR)$(prefix)/bin 101a50b7f8cSJiri Benc $(Q)$(INSTALL) $(OUTPUT)bpf_jit_disasm $(DESTDIR)$(prefix)/bin/bpf_jit_disasm 102a50b7f8cSJiri Benc $(call QUIET_INSTALL, bpf_dbg) 103a50b7f8cSJiri Benc $(Q)$(INSTALL) $(OUTPUT)bpf_dbg $(DESTDIR)$(prefix)/bin/bpf_dbg 104a50b7f8cSJiri Benc $(call QUIET_INSTALL, bpf_asm) 105a50b7f8cSJiri Benc $(Q)$(INSTALL) $(OUTPUT)bpf_asm $(DESTDIR)$(prefix)/bin/bpf_asm 10671bb428fSJakub Kicinski 10771bb428fSJakub Kicinskibpftool: 10858416c37SJiri Benc $(call descend,bpftool) 10971bb428fSJakub Kicinski 11071bb428fSJakub Kicinskibpftool_install: 11158416c37SJiri Benc $(call descend,bpftool,install) 11271bb428fSJakub Kicinski 11371bb428fSJakub Kicinskibpftool_clean: 11458416c37SJiri Benc $(call descend,bpftool,clean) 11571bb428fSJakub Kicinski 11633a57ce0SJiri Olsaresolve_btfids: 11733a57ce0SJiri Olsa $(call descend,resolve_btfids) 11833a57ce0SJiri Olsa 11933a57ce0SJiri Olsaresolve_btfids_clean: 12033a57ce0SJiri Olsa $(call descend,resolve_btfids,clean) 12133a57ce0SJiri Olsa 1229c01546dSAndrii Nakryiko.PHONY: all install clean bpftool bpftool_install bpftool_clean \ 12333a57ce0SJiri Olsa resolve_btfids resolve_btfids_clean 124