xref: /linux/tools/bpf/Makefile (revision d70a6be1e2ab98f13688e4a529b326e8e11230d0)
12a171788SDavid S. Miller# SPDX-License-Identifier: GPL-2.0
25a8997f2SJiri Bencinclude ../scripts/Makefile.include
35a8997f2SJiri Benc
4fde68c5bSJiri Bencprefix ?= /usr/local
5a92bb546SJakub Kicinski
6a92bb546SJakub KicinskiCC = gcc
7a92bb546SJakub KicinskiLEX = flex
8a92bb546SJakub KicinskiYACC = bison
971bb428fSJakub KicinskiMAKE = make
10fde68c5bSJiri BencINSTALL ?= install
11a92bb546SJakub Kicinski
12a92bb546SJakub KicinskiCFLAGS += -Wall -O2
135a8997f2SJiri BencCFLAGS += -D__EXPORTED_HEADERS__ -I$(srctree)/include/uapi -I$(srctree)/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
30a50b7f8cSJiri Bencifeq ($(V),1)
31a50b7f8cSJiri Benc  Q =
32a50b7f8cSJiri Bencelse
33a50b7f8cSJiri Benc  Q = @
34a50b7f8cSJiri Bencendif
35a50b7f8cSJiri Benc
36fb982666SRoman GushchinFEATURE_USER = .bpf
37fb982666SRoman GushchinFEATURE_TESTS = libbfd disassembler-four-args
38fb982666SRoman GushchinFEATURE_DISPLAY = libbfd disassembler-four-args
39fb982666SRoman Gushchin
40fb982666SRoman Gushchincheck_feat := 1
419c01546dSAndrii NakryikoNON_CHECK_FEAT_TARGETS := clean bpftool_clean runqslower_clean
42fb982666SRoman Gushchinifdef MAKECMDGOALS
43fb982666SRoman Gushchinifeq ($(filter-out $(NON_CHECK_FEAT_TARGETS),$(MAKECMDGOALS)),)
44fb982666SRoman Gushchin  check_feat := 0
45fb982666SRoman Gushchinendif
46fb982666SRoman Gushchinendif
47fb982666SRoman Gushchin
48fb982666SRoman Gushchinifeq ($(check_feat),1)
49fb982666SRoman Gushchinifeq ($(FEATURES_DUMP),)
50fb982666SRoman Gushchininclude $(srctree)/tools/build/Makefile.feature
51fb982666SRoman Gushchinelse
52fb982666SRoman Gushchininclude $(FEATURES_DUMP)
53fb982666SRoman Gushchinendif
54fb982666SRoman Gushchinendif
55fb982666SRoman Gushchin
56fb982666SRoman Gushchinifeq ($(feature-disassembler-four-args), 1)
57fb982666SRoman GushchinCFLAGS += -DDISASM_FOUR_ARGS_SIGNATURE
58fb982666SRoman Gushchinendif
59fb982666SRoman Gushchin
605a8997f2SJiri Benc$(OUTPUT)%.yacc.c: $(srctree)/tools/bpf/%.y
61a50b7f8cSJiri Benc	$(QUIET_BISON)$(YACC) -o $@ -d $<
62a92bb546SJakub Kicinski
635a8997f2SJiri Benc$(OUTPUT)%.lex.c: $(srctree)/tools/bpf/%.l
64a50b7f8cSJiri Benc	$(QUIET_FLEX)$(LEX) -o $@ $<
65a92bb546SJakub Kicinski
665a8997f2SJiri Benc$(OUTPUT)%.o: $(srctree)/tools/bpf/%.c
67*d70a6be1SIlya Leoshkevich	$(QUIET_CC)$(CC) $(CFLAGS) -c -o $@ $<
68a50b7f8cSJiri Benc
69a50b7f8cSJiri Benc$(OUTPUT)%.yacc.o: $(OUTPUT)%.yacc.c
70*d70a6be1SIlya Leoshkevich	$(QUIET_CC)$(CC) $(CFLAGS) -c -o $@ $<
71a50b7f8cSJiri Benc$(OUTPUT)%.lex.o: $(OUTPUT)%.lex.c
72*d70a6be1SIlya Leoshkevich	$(QUIET_CC)$(CC) $(CFLAGS) -c -o $@ $<
73a92bb546SJakub Kicinski
746c071008SJiri BencPROGS = $(OUTPUT)bpf_jit_disasm $(OUTPUT)bpf_dbg $(OUTPUT)bpf_asm
756c071008SJiri Benc
769c01546dSAndrii Nakryikoall: $(PROGS) bpftool runqslower
77a92bb546SJakub Kicinski
785a8997f2SJiri Benc$(OUTPUT)bpf_jit_disasm: CFLAGS += -DPACKAGE='bpf_jit_disasm'
795a8997f2SJiri Benc$(OUTPUT)bpf_jit_disasm: $(OUTPUT)bpf_jit_disasm.o
80a50b7f8cSJiri Benc	$(QUIET_LINK)$(CC) $(CFLAGS) -o $@ $^ -lopcodes -lbfd -ldl
81a92bb546SJakub Kicinski
825a8997f2SJiri Benc$(OUTPUT)bpf_dbg: $(OUTPUT)bpf_dbg.o
83a50b7f8cSJiri Benc	$(QUIET_LINK)$(CC) $(CFLAGS) -o $@ $^ -lreadline
845a8997f2SJiri Benc
855a8997f2SJiri Benc$(OUTPUT)bpf_asm: $(OUTPUT)bpf_asm.o $(OUTPUT)bpf_exp.yacc.o $(OUTPUT)bpf_exp.lex.o
86a50b7f8cSJiri Benc	$(QUIET_LINK)$(CC) $(CFLAGS) -o $@ $^
87a50b7f8cSJiri Benc
88ef8ba83bSJiri Benc$(OUTPUT)bpf_exp.lex.c: $(OUTPUT)bpf_exp.yacc.c
899c299a32SJohn Fastabend$(OUTPUT)bpf_exp.yacc.o: $(OUTPUT)bpf_exp.yacc.c
909c299a32SJohn Fastabend$(OUTPUT)bpf_exp.lex.o: $(OUTPUT)bpf_exp.lex.c
91a92bb546SJakub Kicinski
929c01546dSAndrii Nakryikoclean: bpftool_clean runqslower_clean
93a50b7f8cSJiri Benc	$(call QUIET_CLEAN, bpf-progs)
94fbdb620bSQuentin Monnet	$(Q)$(RM) -r -- $(OUTPUT)*.o $(OUTPUT)bpf_jit_disasm $(OUTPUT)bpf_dbg \
955a8997f2SJiri Benc	       $(OUTPUT)bpf_asm $(OUTPUT)bpf_exp.yacc.* $(OUTPUT)bpf_exp.lex.*
96cc5b3403SJakub Kicinski	$(call QUIET_CLEAN, core-gen)
97fbdb620bSQuentin Monnet	$(Q)$(RM) -- $(OUTPUT)FEATURE-DUMP.bpf
98fbdb620bSQuentin Monnet	$(Q)$(RM) -r -- $(OUTPUT)feature
99a92bb546SJakub Kicinski
1009c01546dSAndrii Nakryikoinstall: $(PROGS) bpftool_install runqslower_install
101a50b7f8cSJiri Benc	$(call QUIET_INSTALL, bpf_jit_disasm)
102a50b7f8cSJiri Benc	$(Q)$(INSTALL) -m 0755 -d $(DESTDIR)$(prefix)/bin
103a50b7f8cSJiri Benc	$(Q)$(INSTALL) $(OUTPUT)bpf_jit_disasm $(DESTDIR)$(prefix)/bin/bpf_jit_disasm
104a50b7f8cSJiri Benc	$(call QUIET_INSTALL, bpf_dbg)
105a50b7f8cSJiri Benc	$(Q)$(INSTALL) $(OUTPUT)bpf_dbg $(DESTDIR)$(prefix)/bin/bpf_dbg
106a50b7f8cSJiri Benc	$(call QUIET_INSTALL, bpf_asm)
107a50b7f8cSJiri Benc	$(Q)$(INSTALL) $(OUTPUT)bpf_asm $(DESTDIR)$(prefix)/bin/bpf_asm
10871bb428fSJakub Kicinski
10971bb428fSJakub Kicinskibpftool:
11058416c37SJiri Benc	$(call descend,bpftool)
11171bb428fSJakub Kicinski
11271bb428fSJakub Kicinskibpftool_install:
11358416c37SJiri Benc	$(call descend,bpftool,install)
11471bb428fSJakub Kicinski
11571bb428fSJakub Kicinskibpftool_clean:
11658416c37SJiri Benc	$(call descend,bpftool,clean)
11771bb428fSJakub Kicinski
1189c01546dSAndrii Nakryikorunqslower:
1199c01546dSAndrii Nakryiko	$(call descend,runqslower)
1209c01546dSAndrii Nakryiko
1219c01546dSAndrii Nakryikorunqslower_install:
1229c01546dSAndrii Nakryiko	$(call descend,runqslower,install)
1239c01546dSAndrii Nakryiko
1249c01546dSAndrii Nakryikorunqslower_clean:
1259c01546dSAndrii Nakryiko	$(call descend,runqslower,clean)
1269c01546dSAndrii Nakryiko
1279c01546dSAndrii Nakryiko.PHONY: all install clean bpftool bpftool_install bpftool_clean \
1289c01546dSAndrii Nakryiko	runqslower runqslower_install runqslower_clean
129