^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1) # SPDX-License-Identifier: GPL-2.0
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2) include ../scripts/Makefile.include
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4) prefix ?= /usr/local
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 6) LEX = flex
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 7) YACC = bison
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 8) MAKE = make
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 9) INSTALL ?= install
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 10)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 11) CFLAGS += -Wall -O2
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 12) CFLAGS += -D__EXPORTED_HEADERS__ -I$(srctree)/tools/include/uapi \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 13) -I$(srctree)/tools/include
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 14)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 15) # This will work when bpf is built in tools env. where srctree
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 16) # isn't set and when invoked from selftests build, where srctree
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 17) # is set to ".". building_out_of_srctree is undefined for in srctree
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 18) # builds
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 19) ifeq ($(srctree),)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 20) update_srctree := 1
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 21) endif
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 22) ifndef building_out_of_srctree
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 23) update_srctree := 1
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 24) endif
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 25) ifeq ($(update_srctree),1)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 26) srctree := $(patsubst %/,%,$(dir $(CURDIR)))
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 27) srctree := $(patsubst %/,%,$(dir $(srctree)))
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 28) endif
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 29)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 30) ifeq ($(V),1)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 31) Q =
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 32) else
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 33) Q = @
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 34) endif
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 35)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 36) FEATURE_USER = .bpf
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 37) FEATURE_TESTS = libbfd disassembler-four-args
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 38) FEATURE_DISPLAY = libbfd disassembler-four-args
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 39)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 40) check_feat := 1
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 41) NON_CHECK_FEAT_TARGETS := clean bpftool_clean runqslower_clean resolve_btfids_clean
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 42) ifdef MAKECMDGOALS
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 43) ifeq ($(filter-out $(NON_CHECK_FEAT_TARGETS),$(MAKECMDGOALS)),)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 44) check_feat := 0
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 45) endif
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 46) endif
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 47)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 48) ifeq ($(check_feat),1)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 49) ifeq ($(FEATURES_DUMP),)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 50) include $(srctree)/tools/build/Makefile.feature
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 51) else
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 52) include $(FEATURES_DUMP)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 53) endif
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 54) endif
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 55)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 56) ifeq ($(feature-disassembler-four-args), 1)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 57) CFLAGS += -DDISASM_FOUR_ARGS_SIGNATURE
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 58) endif
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 59)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 60) $(OUTPUT)%.yacc.c: $(srctree)/tools/bpf/%.y
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 61) $(QUIET_BISON)$(YACC) -o $@ -d $<
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 62)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 63) $(OUTPUT)%.lex.c: $(srctree)/tools/bpf/%.l
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 64) $(QUIET_FLEX)$(LEX) -o $@ $<
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 65)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 66) $(OUTPUT)%.o: $(srctree)/tools/bpf/%.c
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 67) $(QUIET_CC)$(CC) $(CFLAGS) -c -o $@ $<
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 68)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 69) $(OUTPUT)%.yacc.o: $(OUTPUT)%.yacc.c
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 70) $(QUIET_CC)$(CC) $(CFLAGS) -c -o $@ $<
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 71) $(OUTPUT)%.lex.o: $(OUTPUT)%.lex.c
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 72) $(QUIET_CC)$(CC) $(CFLAGS) -c -o $@ $<
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 73)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 74) PROGS = $(OUTPUT)bpf_jit_disasm $(OUTPUT)bpf_dbg $(OUTPUT)bpf_asm
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 75)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 76) all: $(PROGS) bpftool runqslower
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 77)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 78) $(OUTPUT)bpf_jit_disasm: CFLAGS += -DPACKAGE='bpf_jit_disasm'
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 79) $(OUTPUT)bpf_jit_disasm: $(OUTPUT)bpf_jit_disasm.o
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 80) $(QUIET_LINK)$(CC) $(CFLAGS) -o $@ $^ -lopcodes -lbfd -ldl
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 81)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 82) $(OUTPUT)bpf_dbg: $(OUTPUT)bpf_dbg.o
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 83) $(QUIET_LINK)$(CC) $(CFLAGS) -o $@ $^ -lreadline
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 84)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 85) $(OUTPUT)bpf_asm: $(OUTPUT)bpf_asm.o $(OUTPUT)bpf_exp.yacc.o $(OUTPUT)bpf_exp.lex.o
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 86) $(QUIET_LINK)$(CC) $(CFLAGS) -o $@ $^
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 87)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 88) $(OUTPUT)bpf_exp.lex.c: $(OUTPUT)bpf_exp.yacc.c
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 89) $(OUTPUT)bpf_exp.yacc.o: $(OUTPUT)bpf_exp.yacc.c
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 90) $(OUTPUT)bpf_exp.lex.o: $(OUTPUT)bpf_exp.lex.c
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 91)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 92) clean: bpftool_clean runqslower_clean resolve_btfids_clean
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 93) $(call QUIET_CLEAN, bpf-progs)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 94) $(Q)$(RM) -r -- $(OUTPUT)*.o $(OUTPUT)bpf_jit_disasm $(OUTPUT)bpf_dbg \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 95) $(OUTPUT)bpf_asm $(OUTPUT)bpf_exp.yacc.* $(OUTPUT)bpf_exp.lex.*
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 96) $(call QUIET_CLEAN, core-gen)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 97) $(Q)$(RM) -- $(OUTPUT)FEATURE-DUMP.bpf
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 98) $(Q)$(RM) -r -- $(OUTPUT)feature
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 99)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 100) install: $(PROGS) bpftool_install
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 101) $(call QUIET_INSTALL, bpf_jit_disasm)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 102) $(Q)$(INSTALL) -m 0755 -d $(DESTDIR)$(prefix)/bin
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 103) $(Q)$(INSTALL) $(OUTPUT)bpf_jit_disasm $(DESTDIR)$(prefix)/bin/bpf_jit_disasm
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 104) $(call QUIET_INSTALL, bpf_dbg)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 105) $(Q)$(INSTALL) $(OUTPUT)bpf_dbg $(DESTDIR)$(prefix)/bin/bpf_dbg
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 106) $(call QUIET_INSTALL, bpf_asm)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 107) $(Q)$(INSTALL) $(OUTPUT)bpf_asm $(DESTDIR)$(prefix)/bin/bpf_asm
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 108)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 109) bpftool:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 110) $(call descend,bpftool)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 111)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 112) bpftool_install:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 113) $(call descend,bpftool,install)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 114)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 115) bpftool_clean:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 116) $(call descend,bpftool,clean)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 117)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 118) runqslower:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 119) $(call descend,runqslower)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 120)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 121) runqslower_clean:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 122) $(call descend,runqslower,clean)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 123)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 124) resolve_btfids:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 125) $(call descend,resolve_btfids)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 126)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 127) resolve_btfids_clean:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 128) $(call descend,resolve_btfids,clean)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 129)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 130) .PHONY: all install clean bpftool bpftool_install bpftool_clean \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 131) runqslower runqslower_clean \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 132) resolve_btfids resolve_btfids_clean