| # SPDX-License-Identifier: GPL-2.0 | |
| include ../scripts/Makefile.include | |
| prefix ?= /usr/local | |
| CC = gcc | |
| LEX = flex | |
| YACC = bison | |
| MAKE = make | |
| INSTALL ?= install | |
| CFLAGS += -Wall -O2 | |
| CFLAGS += -D__EXPORTED_HEADERS__ -I$(srctree)/include/uapi -I$(srctree)/include | |
| # This will work when bpf is built in tools env. where srctree | |
| # isn't set and when invoked from selftests build, where srctree | |
| # is set to ".". building_out_of_srctree is undefined for in srctree | |
| # builds | |
| ifeq ($(srctree),) | |
| update_srctree := 1 | |
| endif | |
| ifndef building_out_of_srctree | |
| update_srctree := 1 | |
| endif | |
| ifeq ($(update_srctree),1) | |
| srctree := $(patsubst %/,%,$(dir $(CURDIR))) | |
| srctree := $(patsubst %/,%,$(dir $(srctree))) | |
| endif | |
| ifeq ($(V),1) | |
| Q = | |
| else | |
| Q = @ | |
| endif | |
| FEATURE_USER = .bpf | |
| FEATURE_TESTS = libbfd disassembler-four-args | |
| FEATURE_DISPLAY = libbfd disassembler-four-args | |
| check_feat := 1 | |
| NON_CHECK_FEAT_TARGETS := clean bpftool_clean runqslower_clean | |
| ifdef MAKECMDGOALS | |
| ifeq ($(filter-out $(NON_CHECK_FEAT_TARGETS),$(MAKECMDGOALS)),) | |
| check_feat := 0 | |
| endif | |
| endif | |
| ifeq ($(check_feat),1) | |
| ifeq ($(FEATURES_DUMP),) | |
| include $(srctree)/tools/build/Makefile.feature | |
| else | |
| include $(FEATURES_DUMP) | |
| endif | |
| endif | |
| ifeq ($(feature-disassembler-four-args), 1) | |
| CFLAGS += -DDISASM_FOUR_ARGS_SIGNATURE | |
| endif | |
| $(OUTPUT)%.yacc.c: $(srctree)/tools/bpf/%.y | |
| $(QUIET_BISON)$(YACC) -o $@ -d $< | |
| $(OUTPUT)%.lex.c: $(srctree)/tools/bpf/%.l | |
| $(QUIET_FLEX)$(LEX) -o $@ $< | |
| $(OUTPUT)%.o: $(srctree)/tools/bpf/%.c | |
| $(QUIET_CC)$(COMPILE.c) -o $@ $< | |
| $(OUTPUT)%.yacc.o: $(OUTPUT)%.yacc.c | |
| $(QUIET_CC)$(COMPILE.c) -o $@ $< | |
| $(OUTPUT)%.lex.o: $(OUTPUT)%.lex.c | |
| $(QUIET_CC)$(COMPILE.c) -o $@ $< | |
| PROGS = $(OUTPUT)bpf_jit_disasm $(OUTPUT)bpf_dbg $(OUTPUT)bpf_asm | |
| all: $(PROGS) bpftool runqslower | |
| $(OUTPUT)bpf_jit_disasm: CFLAGS += -DPACKAGE='bpf_jit_disasm' | |
| $(OUTPUT)bpf_jit_disasm: $(OUTPUT)bpf_jit_disasm.o | |
| $(QUIET_LINK)$(CC) $(CFLAGS) -o $@ $^ -lopcodes -lbfd -ldl | |
| $(OUTPUT)bpf_dbg: $(OUTPUT)bpf_dbg.o | |
| $(QUIET_LINK)$(CC) $(CFLAGS) -o $@ $^ -lreadline | |
| $(OUTPUT)bpf_asm: $(OUTPUT)bpf_asm.o $(OUTPUT)bpf_exp.yacc.o $(OUTPUT)bpf_exp.lex.o | |
| $(QUIET_LINK)$(CC) $(CFLAGS) -o $@ $^ | |
| $(OUTPUT)bpf_exp.lex.c: $(OUTPUT)bpf_exp.yacc.c | |
| $(OUTPUT)bpf_exp.yacc.o: $(OUTPUT)bpf_exp.yacc.c | |
| $(OUTPUT)bpf_exp.lex.o: $(OUTPUT)bpf_exp.lex.c | |
| clean: bpftool_clean runqslower_clean | |
| $(call QUIET_CLEAN, bpf-progs) | |
| $(Q)$(RM) -r -- $(OUTPUT)*.o $(OUTPUT)bpf_jit_disasm $(OUTPUT)bpf_dbg \ | |
| $(OUTPUT)bpf_asm $(OUTPUT)bpf_exp.yacc.* $(OUTPUT)bpf_exp.lex.* | |
| $(call QUIET_CLEAN, core-gen) | |
| $(Q)$(RM) -- $(OUTPUT)FEATURE-DUMP.bpf | |
| $(Q)$(RM) -r -- $(OUTPUT)feature | |
| install: $(PROGS) bpftool_install runqslower_install | |
| $(call QUIET_INSTALL, bpf_jit_disasm) | |
| $(Q)$(INSTALL) -m 0755 -d $(DESTDIR)$(prefix)/bin | |
| $(Q)$(INSTALL) $(OUTPUT)bpf_jit_disasm $(DESTDIR)$(prefix)/bin/bpf_jit_disasm | |
| $(call QUIET_INSTALL, bpf_dbg) | |
| $(Q)$(INSTALL) $(OUTPUT)bpf_dbg $(DESTDIR)$(prefix)/bin/bpf_dbg | |
| $(call QUIET_INSTALL, bpf_asm) | |
| $(Q)$(INSTALL) $(OUTPUT)bpf_asm $(DESTDIR)$(prefix)/bin/bpf_asm | |
| bpftool: | |
| $(call descend,bpftool) | |
| bpftool_install: | |
| $(call descend,bpftool,install) | |
| bpftool_clean: | |
| $(call descend,bpftool,clean) | |
| runqslower: | |
| $(call descend,runqslower) | |
| runqslower_install: | |
| $(call descend,runqslower,install) | |
| runqslower_clean: | |
| $(call descend,runqslower,clean) | |
| .PHONY: all install clean bpftool bpftool_install bpftool_clean \ | |
| runqslower runqslower_install runqslower_clean |