0001
0002 include ../scripts/Makefile.include
0003
0004 prefix ?= /usr/local
0005
0006 LEX = flex
0007 YACC = bison
0008 MAKE = make
0009 INSTALL ?= install
0010
0011 CFLAGS += -Wall -O2
0012 CFLAGS += -D__EXPORTED_HEADERS__ -I$(srctree)/tools/include/uapi \
0013 -I$(srctree)/tools/include
0014
0015
0016
0017
0018
0019 ifeq ($(srctree),)
0020 update_srctree := 1
0021 endif
0022 ifndef building_out_of_srctree
0023 update_srctree := 1
0024 endif
0025 ifeq ($(update_srctree),1)
0026 srctree := $(patsubst %/,%,$(dir $(CURDIR)))
0027 srctree := $(patsubst %/,%,$(dir $(srctree)))
0028 endif
0029
0030 ifeq ($(V),1)
0031 Q =
0032 else
0033 Q = @
0034 endif
0035
0036 FEATURE_USER = .bpf
0037 FEATURE_TESTS = libbfd disassembler-four-args disassembler-init-styled
0038 FEATURE_DISPLAY = libbfd
0039
0040 check_feat := 1
0041 NON_CHECK_FEAT_TARGETS := clean bpftool_clean runqslower_clean resolve_btfids_clean
0042 ifdef MAKECMDGOALS
0043 ifeq ($(filter-out $(NON_CHECK_FEAT_TARGETS),$(MAKECMDGOALS)),)
0044 check_feat := 0
0045 endif
0046 endif
0047
0048 ifeq ($(check_feat),1)
0049 ifeq ($(FEATURES_DUMP),)
0050 include $(srctree)/tools/build/Makefile.feature
0051 else
0052 include $(FEATURES_DUMP)
0053 endif
0054 endif
0055
0056 ifeq ($(feature-disassembler-four-args), 1)
0057 CFLAGS += -DDISASM_FOUR_ARGS_SIGNATURE
0058 endif
0059 ifeq ($(feature-disassembler-init-styled), 1)
0060 CFLAGS += -DDISASM_INIT_STYLED
0061 endif
0062
0063 $(OUTPUT)%.yacc.c: $(srctree)/tools/bpf/%.y
0064 $(QUIET_BISON)$(YACC) -o $@ -d $<
0065
0066 $(OUTPUT)%.lex.c: $(srctree)/tools/bpf/%.l
0067 $(QUIET_FLEX)$(LEX) -o $@ $<
0068
0069 $(OUTPUT)%.o: $(srctree)/tools/bpf/%.c
0070 $(QUIET_CC)$(CC) $(CFLAGS) -c -o $@ $<
0071
0072 $(OUTPUT)%.yacc.o: $(OUTPUT)%.yacc.c
0073 $(QUIET_CC)$(CC) $(CFLAGS) -c -o $@ $<
0074 $(OUTPUT)%.lex.o: $(OUTPUT)%.lex.c
0075 $(QUIET_CC)$(CC) $(CFLAGS) -c -o $@ $<
0076
0077 PROGS = $(OUTPUT)bpf_jit_disasm $(OUTPUT)bpf_dbg $(OUTPUT)bpf_asm
0078
0079 all: $(PROGS) bpftool runqslower
0080
0081 $(OUTPUT)bpf_jit_disasm: CFLAGS += -DPACKAGE='bpf_jit_disasm'
0082 $(OUTPUT)bpf_jit_disasm: $(OUTPUT)bpf_jit_disasm.o
0083 $(QUIET_LINK)$(CC) $(CFLAGS) -o $@ $^ -lopcodes -lbfd -ldl
0084
0085 $(OUTPUT)bpf_dbg: $(OUTPUT)bpf_dbg.o
0086 $(QUIET_LINK)$(CC) $(CFLAGS) -o $@ $^ -lreadline
0087
0088 $(OUTPUT)bpf_asm: $(OUTPUT)bpf_asm.o $(OUTPUT)bpf_exp.yacc.o $(OUTPUT)bpf_exp.lex.o
0089 $(QUIET_LINK)$(CC) $(CFLAGS) -o $@ $^
0090
0091 $(OUTPUT)bpf_exp.lex.c: $(OUTPUT)bpf_exp.yacc.c
0092 $(OUTPUT)bpf_exp.yacc.o: $(OUTPUT)bpf_exp.yacc.c
0093 $(OUTPUT)bpf_exp.lex.o: $(OUTPUT)bpf_exp.lex.c
0094
0095 clean: bpftool_clean runqslower_clean resolve_btfids_clean
0096 $(call QUIET_CLEAN, bpf-progs)
0097 $(Q)$(RM) -r -- $(OUTPUT)*.o $(OUTPUT)bpf_jit_disasm $(OUTPUT)bpf_dbg \
0098 $(OUTPUT)bpf_asm $(OUTPUT)bpf_exp.yacc.* $(OUTPUT)bpf_exp.lex.*
0099 $(call QUIET_CLEAN, core-gen)
0100 $(Q)$(RM) -- $(OUTPUT)FEATURE-DUMP.bpf
0101 $(Q)$(RM) -r -- $(OUTPUT)feature
0102
0103 install: $(PROGS) bpftool_install
0104 $(call QUIET_INSTALL, bpf_jit_disasm)
0105 $(Q)$(INSTALL) -m 0755 -d $(DESTDIR)$(prefix)/bin
0106 $(Q)$(INSTALL) $(OUTPUT)bpf_jit_disasm $(DESTDIR)$(prefix)/bin/bpf_jit_disasm
0107 $(call QUIET_INSTALL, bpf_dbg)
0108 $(Q)$(INSTALL) $(OUTPUT)bpf_dbg $(DESTDIR)$(prefix)/bin/bpf_dbg
0109 $(call QUIET_INSTALL, bpf_asm)
0110 $(Q)$(INSTALL) $(OUTPUT)bpf_asm $(DESTDIR)$(prefix)/bin/bpf_asm
0111
0112 bpftool:
0113 $(call descend,bpftool)
0114
0115 bpftool_install:
0116 $(call descend,bpftool,install)
0117
0118 bpftool_clean:
0119 $(call descend,bpftool,clean)
0120
0121 runqslower:
0122 $(call descend,runqslower)
0123
0124 runqslower_clean:
0125 $(call descend,runqslower,clean)
0126
0127 resolve_btfids:
0128 $(call descend,resolve_btfids)
0129
0130 resolve_btfids_clean:
0131 $(call descend,resolve_btfids,clean)
0132
0133 .PHONY: all install clean bpftool bpftool_install bpftool_clean \
0134 runqslower runqslower_clean \
0135 resolve_btfids resolve_btfids_clean