xref: /linux/tools/bpf/Makefile (revision 9f5270d758d955506dcb114cb863a86b30a4c783)
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
14a92bb546SJakub Kicinski
1555d554f5SShuah Khan# This will work when bpf is built in tools env. where srctree
1655d554f5SShuah Khan# isn't set and when invoked from selftests build, where srctree
1755d554f5SShuah Khan# is set to ".". building_out_of_srctree is undefined for in srctree
1855d554f5SShuah Khan# builds
19a89b2cbfSQuentin Monnetifeq ($(srctree),)
20a89b2cbfSQuentin Monnetupdate_srctree := 1
21a89b2cbfSQuentin Monnetendif
2255d554f5SShuah Khanifndef building_out_of_srctree
23a89b2cbfSQuentin Monnetupdate_srctree := 1
24a89b2cbfSQuentin Monnetendif
25a89b2cbfSQuentin Monnetifeq ($(update_srctree),1)
26fb982666SRoman Gushchinsrctree := $(patsubst %/,%,$(dir $(CURDIR)))
27fb982666SRoman Gushchinsrctree := $(patsubst %/,%,$(dir $(srctree)))
28fb982666SRoman Gushchinendif
29fb982666SRoman Gushchin
30fb982666SRoman GushchinFEATURE_USER = .bpf
3196ed0660SAndres FreundFEATURE_TESTS = libbfd disassembler-four-args disassembler-init-styled
32*bab211f6SAndres FreundFEATURE_DISPLAY = libbfd
33fb982666SRoman Gushchin
34fb982666SRoman Gushchincheck_feat := 1
351eb832acSToke Høiland-JørgensenNON_CHECK_FEAT_TARGETS := clean bpftool_clean runqslower_clean resolve_btfids_clean
36fb982666SRoman Gushchinifdef MAKECMDGOALS
37fb982666SRoman Gushchinifeq ($(filter-out $(NON_CHECK_FEAT_TARGETS),$(MAKECMDGOALS)),)
38fb982666SRoman Gushchin  check_feat := 0
39fb982666SRoman Gushchinendif
40fb982666SRoman Gushchinendif
41fb982666SRoman Gushchin
42fb982666SRoman Gushchinifeq ($(check_feat),1)
43fb982666SRoman Gushchinifeq ($(FEATURES_DUMP),)
44fb982666SRoman Gushchininclude $(srctree)/tools/build/Makefile.feature
45fb982666SRoman Gushchinelse
46fb982666SRoman Gushchininclude $(FEATURES_DUMP)
47fb982666SRoman Gushchinendif
48fb982666SRoman Gushchinendif
49fb982666SRoman Gushchin
50fb982666SRoman Gushchinifeq ($(feature-disassembler-four-args), 1)
51fb982666SRoman GushchinCFLAGS += -DDISASM_FOUR_ARGS_SIGNATURE
52fb982666SRoman Gushchinendif
5396ed0660SAndres Freundifeq ($(feature-disassembler-init-styled), 1)
5496ed0660SAndres FreundCFLAGS += -DDISASM_INIT_STYLED
5596ed0660SAndres Freundendif
56fb982666SRoman Gushchin
575a8997f2SJiri Benc$(OUTPUT)%.yacc.c: $(srctree)/tools/bpf/%.y
58a50b7f8cSJiri Benc	$(QUIET_BISON)$(YACC) -o $@ -d $<
59a92bb546SJakub Kicinski
605a8997f2SJiri Benc$(OUTPUT)%.lex.c: $(srctree)/tools/bpf/%.l
61a50b7f8cSJiri Benc	$(QUIET_FLEX)$(LEX) -o $@ $<
62a92bb546SJakub Kicinski
635a8997f2SJiri Benc$(OUTPUT)%.o: $(srctree)/tools/bpf/%.c
64d70a6be1SIlya Leoshkevich	$(QUIET_CC)$(CC) $(CFLAGS) -c -o $@ $<
65a50b7f8cSJiri Benc
66a50b7f8cSJiri Benc$(OUTPUT)%.yacc.o: $(OUTPUT)%.yacc.c
67d70a6be1SIlya Leoshkevich	$(QUIET_CC)$(CC) $(CFLAGS) -c -o $@ $<
68a50b7f8cSJiri Benc$(OUTPUT)%.lex.o: $(OUTPUT)%.lex.c
69d70a6be1SIlya Leoshkevich	$(QUIET_CC)$(CC) $(CFLAGS) -c -o $@ $<
70a92bb546SJakub Kicinski
716c071008SJiri BencPROGS = $(OUTPUT)bpf_jit_disasm $(OUTPUT)bpf_dbg $(OUTPUT)bpf_asm
726c071008SJiri Benc
739c01546dSAndrii Nakryikoall: $(PROGS) bpftool runqslower
74a92bb546SJakub Kicinski
755a8997f2SJiri Benc$(OUTPUT)bpf_jit_disasm: CFLAGS += -DPACKAGE='bpf_jit_disasm'
765a8997f2SJiri Benc$(OUTPUT)bpf_jit_disasm: $(OUTPUT)bpf_jit_disasm.o
77a50b7f8cSJiri Benc	$(QUIET_LINK)$(CC) $(CFLAGS) -o $@ $^ -lopcodes -lbfd -ldl
78a92bb546SJakub Kicinski
795a8997f2SJiri Benc$(OUTPUT)bpf_dbg: $(OUTPUT)bpf_dbg.o
80a50b7f8cSJiri Benc	$(QUIET_LINK)$(CC) $(CFLAGS) -o $@ $^ -lreadline
815a8997f2SJiri Benc
825a8997f2SJiri Benc$(OUTPUT)bpf_asm: $(OUTPUT)bpf_asm.o $(OUTPUT)bpf_exp.yacc.o $(OUTPUT)bpf_exp.lex.o
83a50b7f8cSJiri Benc	$(QUIET_LINK)$(CC) $(CFLAGS) -o $@ $^
84a50b7f8cSJiri Benc
85ef8ba83bSJiri Benc$(OUTPUT)bpf_exp.lex.c: $(OUTPUT)bpf_exp.yacc.c
869c299a32SJohn Fastabend$(OUTPUT)bpf_exp.yacc.o: $(OUTPUT)bpf_exp.yacc.c
879c299a32SJohn Fastabend$(OUTPUT)bpf_exp.lex.o: $(OUTPUT)bpf_exp.lex.c
88a92bb546SJakub Kicinski
891eb832acSToke Høiland-Jørgensenclean: bpftool_clean runqslower_clean resolve_btfids_clean
90a50b7f8cSJiri Benc	$(call QUIET_CLEAN, bpf-progs)
91fbdb620bSQuentin Monnet	$(Q)$(RM) -r -- $(OUTPUT)*.o $(OUTPUT)bpf_jit_disasm $(OUTPUT)bpf_dbg \
925a8997f2SJiri Benc	       $(OUTPUT)bpf_asm $(OUTPUT)bpf_exp.yacc.* $(OUTPUT)bpf_exp.lex.*
93cc5b3403SJakub Kicinski	$(call QUIET_CLEAN, core-gen)
94fbdb620bSQuentin Monnet	$(Q)$(RM) -- $(OUTPUT)FEATURE-DUMP.bpf
95fbdb620bSQuentin Monnet	$(Q)$(RM) -r -- $(OUTPUT)feature
96a92bb546SJakub Kicinski
971d719254SWei Liinstall: $(PROGS) bpftool_install
98a50b7f8cSJiri Benc	$(call QUIET_INSTALL, bpf_jit_disasm)
99a50b7f8cSJiri Benc	$(Q)$(INSTALL) -m 0755 -d $(DESTDIR)$(prefix)/bin
100a50b7f8cSJiri Benc	$(Q)$(INSTALL) $(OUTPUT)bpf_jit_disasm $(DESTDIR)$(prefix)/bin/bpf_jit_disasm
101a50b7f8cSJiri Benc	$(call QUIET_INSTALL, bpf_dbg)
102a50b7f8cSJiri Benc	$(Q)$(INSTALL) $(OUTPUT)bpf_dbg $(DESTDIR)$(prefix)/bin/bpf_dbg
103a50b7f8cSJiri Benc	$(call QUIET_INSTALL, bpf_asm)
104a50b7f8cSJiri Benc	$(Q)$(INSTALL) $(OUTPUT)bpf_asm $(DESTDIR)$(prefix)/bin/bpf_asm
10571bb428fSJakub Kicinski
10671bb428fSJakub Kicinskibpftool:
10758416c37SJiri Benc	$(call descend,bpftool)
10871bb428fSJakub Kicinski
10971bb428fSJakub Kicinskibpftool_install:
11058416c37SJiri Benc	$(call descend,bpftool,install)
11171bb428fSJakub Kicinski
11271bb428fSJakub Kicinskibpftool_clean:
11358416c37SJiri Benc	$(call descend,bpftool,clean)
11471bb428fSJakub Kicinski
1159c01546dSAndrii Nakryikorunqslower:
1169c01546dSAndrii Nakryiko	$(call descend,runqslower)
1179c01546dSAndrii Nakryiko
1189c01546dSAndrii Nakryikorunqslower_clean:
1199c01546dSAndrii Nakryiko	$(call descend,runqslower,clean)
1209c01546dSAndrii Nakryiko
12133a57ce0SJiri Olsaresolve_btfids:
12233a57ce0SJiri Olsa	$(call descend,resolve_btfids)
12333a57ce0SJiri Olsa
12433a57ce0SJiri Olsaresolve_btfids_clean:
12533a57ce0SJiri Olsa	$(call descend,resolve_btfids,clean)
12633a57ce0SJiri Olsa
1279c01546dSAndrii Nakryiko.PHONY: all install clean bpftool bpftool_install bpftool_clean \
1281d719254SWei Li	runqslower runqslower_clean \
12933a57ce0SJiri Olsa	resolve_btfids resolve_btfids_clean
130