162306a36Sopenharmony_ci# SPDX-License-Identifier: GPL-2.0
262306a36Sopenharmony_ciinclude ../scripts/Makefile.include
362306a36Sopenharmony_ci
462306a36Sopenharmony_ciprefix ?= /usr/local
562306a36Sopenharmony_ci
662306a36Sopenharmony_ciLEX = flex
762306a36Sopenharmony_ciYACC = bison
862306a36Sopenharmony_ciMAKE = make
962306a36Sopenharmony_ciINSTALL ?= install
1062306a36Sopenharmony_ci
1162306a36Sopenharmony_ciCFLAGS += -Wall -O2
1262306a36Sopenharmony_ciCFLAGS += -D__EXPORTED_HEADERS__ -I$(srctree)/tools/include/uapi \
1362306a36Sopenharmony_ci	  -I$(srctree)/tools/include
1462306a36Sopenharmony_ci
1562306a36Sopenharmony_ci# This will work when bpf is built in tools env. where srctree
1662306a36Sopenharmony_ci# isn't set and when invoked from selftests build, where srctree
1762306a36Sopenharmony_ci# is set to ".". building_out_of_srctree is undefined for in srctree
1862306a36Sopenharmony_ci# builds
1962306a36Sopenharmony_ciifeq ($(srctree),)
2062306a36Sopenharmony_ciupdate_srctree := 1
2162306a36Sopenharmony_ciendif
2262306a36Sopenharmony_ciifndef building_out_of_srctree
2362306a36Sopenharmony_ciupdate_srctree := 1
2462306a36Sopenharmony_ciendif
2562306a36Sopenharmony_ciifeq ($(update_srctree),1)
2662306a36Sopenharmony_cisrctree := $(patsubst %/,%,$(dir $(CURDIR)))
2762306a36Sopenharmony_cisrctree := $(patsubst %/,%,$(dir $(srctree)))
2862306a36Sopenharmony_ciendif
2962306a36Sopenharmony_ci
3062306a36Sopenharmony_ciifeq ($(V),1)
3162306a36Sopenharmony_ci  Q =
3262306a36Sopenharmony_cielse
3362306a36Sopenharmony_ci  Q = @
3462306a36Sopenharmony_ciendif
3562306a36Sopenharmony_ci
3662306a36Sopenharmony_ciFEATURE_USER = .bpf
3762306a36Sopenharmony_ciFEATURE_TESTS = libbfd disassembler-four-args disassembler-init-styled
3862306a36Sopenharmony_ciFEATURE_DISPLAY = libbfd
3962306a36Sopenharmony_ci
4062306a36Sopenharmony_cicheck_feat := 1
4162306a36Sopenharmony_ciNON_CHECK_FEAT_TARGETS := clean bpftool_clean runqslower_clean resolve_btfids_clean
4262306a36Sopenharmony_ciifdef MAKECMDGOALS
4362306a36Sopenharmony_ciifeq ($(filter-out $(NON_CHECK_FEAT_TARGETS),$(MAKECMDGOALS)),)
4462306a36Sopenharmony_ci  check_feat := 0
4562306a36Sopenharmony_ciendif
4662306a36Sopenharmony_ciendif
4762306a36Sopenharmony_ci
4862306a36Sopenharmony_ciifeq ($(check_feat),1)
4962306a36Sopenharmony_ciifeq ($(FEATURES_DUMP),)
5062306a36Sopenharmony_ciinclude $(srctree)/tools/build/Makefile.feature
5162306a36Sopenharmony_cielse
5262306a36Sopenharmony_ciinclude $(FEATURES_DUMP)
5362306a36Sopenharmony_ciendif
5462306a36Sopenharmony_ciendif
5562306a36Sopenharmony_ci
5662306a36Sopenharmony_ciifeq ($(feature-disassembler-four-args), 1)
5762306a36Sopenharmony_ciCFLAGS += -DDISASM_FOUR_ARGS_SIGNATURE
5862306a36Sopenharmony_ciendif
5962306a36Sopenharmony_ciifeq ($(feature-disassembler-init-styled), 1)
6062306a36Sopenharmony_ciCFLAGS += -DDISASM_INIT_STYLED
6162306a36Sopenharmony_ciendif
6262306a36Sopenharmony_ci
6362306a36Sopenharmony_ci$(OUTPUT)%.yacc.c: $(srctree)/tools/bpf/%.y
6462306a36Sopenharmony_ci	$(QUIET_BISON)$(YACC) -o $@ -d $<
6562306a36Sopenharmony_ci
6662306a36Sopenharmony_ci$(OUTPUT)%.lex.c: $(srctree)/tools/bpf/%.l
6762306a36Sopenharmony_ci	$(QUIET_FLEX)$(LEX) -o $@ $<
6862306a36Sopenharmony_ci
6962306a36Sopenharmony_ci$(OUTPUT)%.o: $(srctree)/tools/bpf/%.c
7062306a36Sopenharmony_ci	$(QUIET_CC)$(CC) $(CFLAGS) -c -o $@ $<
7162306a36Sopenharmony_ci
7262306a36Sopenharmony_ci$(OUTPUT)%.yacc.o: $(OUTPUT)%.yacc.c
7362306a36Sopenharmony_ci	$(QUIET_CC)$(CC) $(CFLAGS) -c -o $@ $<
7462306a36Sopenharmony_ci$(OUTPUT)%.lex.o: $(OUTPUT)%.lex.c
7562306a36Sopenharmony_ci	$(QUIET_CC)$(CC) $(CFLAGS) -c -o $@ $<
7662306a36Sopenharmony_ci
7762306a36Sopenharmony_ciPROGS = $(OUTPUT)bpf_jit_disasm $(OUTPUT)bpf_dbg $(OUTPUT)bpf_asm
7862306a36Sopenharmony_ci
7962306a36Sopenharmony_ciall: $(PROGS) bpftool runqslower
8062306a36Sopenharmony_ci
8162306a36Sopenharmony_ci$(OUTPUT)bpf_jit_disasm: CFLAGS += -DPACKAGE='bpf_jit_disasm'
8262306a36Sopenharmony_ci$(OUTPUT)bpf_jit_disasm: $(OUTPUT)bpf_jit_disasm.o
8362306a36Sopenharmony_ci	$(QUIET_LINK)$(CC) $(CFLAGS) -o $@ $^ -lopcodes -lbfd -ldl
8462306a36Sopenharmony_ci
8562306a36Sopenharmony_ci$(OUTPUT)bpf_dbg: $(OUTPUT)bpf_dbg.o
8662306a36Sopenharmony_ci	$(QUIET_LINK)$(CC) $(CFLAGS) -o $@ $^ -lreadline
8762306a36Sopenharmony_ci
8862306a36Sopenharmony_ci$(OUTPUT)bpf_asm: $(OUTPUT)bpf_asm.o $(OUTPUT)bpf_exp.yacc.o $(OUTPUT)bpf_exp.lex.o
8962306a36Sopenharmony_ci	$(QUIET_LINK)$(CC) $(CFLAGS) -o $@ $^
9062306a36Sopenharmony_ci
9162306a36Sopenharmony_ci$(OUTPUT)bpf_exp.lex.c: $(OUTPUT)bpf_exp.yacc.c
9262306a36Sopenharmony_ci$(OUTPUT)bpf_exp.yacc.o: $(OUTPUT)bpf_exp.yacc.c
9362306a36Sopenharmony_ci$(OUTPUT)bpf_exp.lex.o: $(OUTPUT)bpf_exp.lex.c
9462306a36Sopenharmony_ci
9562306a36Sopenharmony_ciclean: bpftool_clean runqslower_clean resolve_btfids_clean
9662306a36Sopenharmony_ci	$(call QUIET_CLEAN, bpf-progs)
9762306a36Sopenharmony_ci	$(Q)$(RM) -r -- $(OUTPUT)*.o $(OUTPUT)bpf_jit_disasm $(OUTPUT)bpf_dbg \
9862306a36Sopenharmony_ci	       $(OUTPUT)bpf_asm $(OUTPUT)bpf_exp.yacc.* $(OUTPUT)bpf_exp.lex.*
9962306a36Sopenharmony_ci	$(call QUIET_CLEAN, core-gen)
10062306a36Sopenharmony_ci	$(Q)$(RM) -- $(OUTPUT)FEATURE-DUMP.bpf
10162306a36Sopenharmony_ci	$(Q)$(RM) -r -- $(OUTPUT)feature
10262306a36Sopenharmony_ci
10362306a36Sopenharmony_ciinstall: $(PROGS) bpftool_install
10462306a36Sopenharmony_ci	$(call QUIET_INSTALL, bpf_jit_disasm)
10562306a36Sopenharmony_ci	$(Q)$(INSTALL) -m 0755 -d $(DESTDIR)$(prefix)/bin
10662306a36Sopenharmony_ci	$(Q)$(INSTALL) $(OUTPUT)bpf_jit_disasm $(DESTDIR)$(prefix)/bin/bpf_jit_disasm
10762306a36Sopenharmony_ci	$(call QUIET_INSTALL, bpf_dbg)
10862306a36Sopenharmony_ci	$(Q)$(INSTALL) $(OUTPUT)bpf_dbg $(DESTDIR)$(prefix)/bin/bpf_dbg
10962306a36Sopenharmony_ci	$(call QUIET_INSTALL, bpf_asm)
11062306a36Sopenharmony_ci	$(Q)$(INSTALL) $(OUTPUT)bpf_asm $(DESTDIR)$(prefix)/bin/bpf_asm
11162306a36Sopenharmony_ci
11262306a36Sopenharmony_cibpftool:
11362306a36Sopenharmony_ci	$(call descend,bpftool)
11462306a36Sopenharmony_ci
11562306a36Sopenharmony_cibpftool_install:
11662306a36Sopenharmony_ci	$(call descend,bpftool,install)
11762306a36Sopenharmony_ci
11862306a36Sopenharmony_cibpftool_clean:
11962306a36Sopenharmony_ci	$(call descend,bpftool,clean)
12062306a36Sopenharmony_ci
12162306a36Sopenharmony_cirunqslower:
12262306a36Sopenharmony_ci	$(call descend,runqslower)
12362306a36Sopenharmony_ci
12462306a36Sopenharmony_cirunqslower_clean:
12562306a36Sopenharmony_ci	$(call descend,runqslower,clean)
12662306a36Sopenharmony_ci
12762306a36Sopenharmony_ciresolve_btfids:
12862306a36Sopenharmony_ci	$(call descend,resolve_btfids)
12962306a36Sopenharmony_ci
13062306a36Sopenharmony_ciresolve_btfids_clean:
13162306a36Sopenharmony_ci	$(call descend,resolve_btfids,clean)
13262306a36Sopenharmony_ci
13362306a36Sopenharmony_ci.PHONY: all install clean bpftool bpftool_install bpftool_clean \
13462306a36Sopenharmony_ci	runqslower runqslower_clean \
13562306a36Sopenharmony_ci	resolve_btfids resolve_btfids_clean
136