xref: /linux/tools/bpf/Makefile (revision b2128290c29902315e632ea59e0504d6bc9e9b42)
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
14*b40ba139SLeo YanCFLAGS += $(EXTRA_CFLAGS)
15a92bb546SJakub Kicinski
1655d554f5SShuah Khan# This will work when bpf is built in tools env. where srctree
1755d554f5SShuah Khan# isn't set and when invoked from selftests build, where srctree
1855d554f5SShuah Khan# is set to ".". building_out_of_srctree is undefined for in srctree
1955d554f5SShuah Khan# builds
20a89b2cbfSQuentin Monnetifeq ($(srctree),)
21a89b2cbfSQuentin Monnetupdate_srctree := 1
22a89b2cbfSQuentin Monnetendif
2355d554f5SShuah Khanifndef building_out_of_srctree
24a89b2cbfSQuentin Monnetupdate_srctree := 1
25a89b2cbfSQuentin Monnetendif
26a89b2cbfSQuentin Monnetifeq ($(update_srctree),1)
27fb982666SRoman Gushchinsrctree := $(patsubst %/,%,$(dir $(CURDIR)))
28fb982666SRoman Gushchinsrctree := $(patsubst %/,%,$(dir $(srctree)))
29fb982666SRoman Gushchinendif
30fb982666SRoman Gushchin
31fb982666SRoman GushchinFEATURE_USER = .bpf
3296ed0660SAndres FreundFEATURE_TESTS = libbfd disassembler-four-args disassembler-init-styled
33bab211f6SAndres FreundFEATURE_DISPLAY = libbfd
34fb982666SRoman Gushchin
35fb982666SRoman Gushchincheck_feat := 1
36bd5bdd20SHoyeon LeeNON_CHECK_FEAT_TARGETS := clean bpftool_clean resolve_btfids_clean
37fb982666SRoman Gushchinifdef MAKECMDGOALS
38fb982666SRoman Gushchinifeq ($(filter-out $(NON_CHECK_FEAT_TARGETS),$(MAKECMDGOALS)),)
39fb982666SRoman Gushchin  check_feat := 0
40fb982666SRoman Gushchinendif
41fb982666SRoman Gushchinendif
42fb982666SRoman Gushchin
43fb982666SRoman Gushchinifeq ($(check_feat),1)
44fb982666SRoman Gushchinifeq ($(FEATURES_DUMP),)
45fb982666SRoman Gushchininclude $(srctree)/tools/build/Makefile.feature
46fb982666SRoman Gushchinelse
47fb982666SRoman Gushchininclude $(FEATURES_DUMP)
48fb982666SRoman Gushchinendif
49fb982666SRoman Gushchinendif
50fb982666SRoman Gushchin
51fb982666SRoman Gushchinifeq ($(feature-disassembler-four-args), 1)
52fb982666SRoman GushchinCFLAGS += -DDISASM_FOUR_ARGS_SIGNATURE
53fb982666SRoman Gushchinendif
5496ed0660SAndres Freundifeq ($(feature-disassembler-init-styled), 1)
5596ed0660SAndres FreundCFLAGS += -DDISASM_INIT_STYLED
5696ed0660SAndres Freundendif
57fb982666SRoman Gushchin
585a8997f2SJiri Benc$(OUTPUT)%.yacc.c: $(srctree)/tools/bpf/%.y
59a50b7f8cSJiri Benc	$(QUIET_BISON)$(YACC) -o $@ -d $<
60a92bb546SJakub Kicinski
615a8997f2SJiri Benc$(OUTPUT)%.lex.c: $(srctree)/tools/bpf/%.l
62a50b7f8cSJiri Benc	$(QUIET_FLEX)$(LEX) -o $@ $<
63a92bb546SJakub Kicinski
645a8997f2SJiri Benc$(OUTPUT)%.o: $(srctree)/tools/bpf/%.c
65d70a6be1SIlya Leoshkevich	$(QUIET_CC)$(CC) $(CFLAGS) -c -o $@ $<
66a50b7f8cSJiri Benc
67a50b7f8cSJiri Benc$(OUTPUT)%.yacc.o: $(OUTPUT)%.yacc.c
68d70a6be1SIlya Leoshkevich	$(QUIET_CC)$(CC) $(CFLAGS) -c -o $@ $<
69a50b7f8cSJiri Benc$(OUTPUT)%.lex.o: $(OUTPUT)%.lex.c
70d70a6be1SIlya Leoshkevich	$(QUIET_CC)$(CC) $(CFLAGS) -c -o $@ $<
71a92bb546SJakub Kicinski
726c071008SJiri BencPROGS = $(OUTPUT)bpf_jit_disasm $(OUTPUT)bpf_dbg $(OUTPUT)bpf_asm
736c071008SJiri Benc
74bd5bdd20SHoyeon Leeall: $(PROGS) bpftool
75a92bb546SJakub Kicinski
765a8997f2SJiri Benc$(OUTPUT)bpf_jit_disasm: CFLAGS += -DPACKAGE='bpf_jit_disasm'
775a8997f2SJiri Benc$(OUTPUT)bpf_jit_disasm: $(OUTPUT)bpf_jit_disasm.o
78a50b7f8cSJiri Benc	$(QUIET_LINK)$(CC) $(CFLAGS) -o $@ $^ -lopcodes -lbfd -ldl
79a92bb546SJakub Kicinski
805a8997f2SJiri Benc$(OUTPUT)bpf_dbg: $(OUTPUT)bpf_dbg.o
81a50b7f8cSJiri Benc	$(QUIET_LINK)$(CC) $(CFLAGS) -o $@ $^ -lreadline
825a8997f2SJiri Benc
835a8997f2SJiri Benc$(OUTPUT)bpf_asm: $(OUTPUT)bpf_asm.o $(OUTPUT)bpf_exp.yacc.o $(OUTPUT)bpf_exp.lex.o
84a50b7f8cSJiri Benc	$(QUIET_LINK)$(CC) $(CFLAGS) -o $@ $^
85a50b7f8cSJiri Benc
86ef8ba83bSJiri Benc$(OUTPUT)bpf_exp.lex.c: $(OUTPUT)bpf_exp.yacc.c
879c299a32SJohn Fastabend$(OUTPUT)bpf_exp.yacc.o: $(OUTPUT)bpf_exp.yacc.c
889c299a32SJohn Fastabend$(OUTPUT)bpf_exp.lex.o: $(OUTPUT)bpf_exp.lex.c
89a92bb546SJakub Kicinski
90bd5bdd20SHoyeon Leeclean: bpftool_clean resolve_btfids_clean
91a50b7f8cSJiri Benc	$(call QUIET_CLEAN, bpf-progs)
92fbdb620bSQuentin Monnet	$(Q)$(RM) -r -- $(OUTPUT)*.o $(OUTPUT)bpf_jit_disasm $(OUTPUT)bpf_dbg \
935a8997f2SJiri Benc	       $(OUTPUT)bpf_asm $(OUTPUT)bpf_exp.yacc.* $(OUTPUT)bpf_exp.lex.*
94cc5b3403SJakub Kicinski	$(call QUIET_CLEAN, core-gen)
95fbdb620bSQuentin Monnet	$(Q)$(RM) -- $(OUTPUT)FEATURE-DUMP.bpf
96fbdb620bSQuentin Monnet	$(Q)$(RM) -r -- $(OUTPUT)feature
97a92bb546SJakub Kicinski
981d719254SWei Liinstall: $(PROGS) bpftool_install
99a50b7f8cSJiri Benc	$(call QUIET_INSTALL, bpf_jit_disasm)
100a50b7f8cSJiri Benc	$(Q)$(INSTALL) -m 0755 -d $(DESTDIR)$(prefix)/bin
101a50b7f8cSJiri Benc	$(Q)$(INSTALL) $(OUTPUT)bpf_jit_disasm $(DESTDIR)$(prefix)/bin/bpf_jit_disasm
102a50b7f8cSJiri Benc	$(call QUIET_INSTALL, bpf_dbg)
103a50b7f8cSJiri Benc	$(Q)$(INSTALL) $(OUTPUT)bpf_dbg $(DESTDIR)$(prefix)/bin/bpf_dbg
104a50b7f8cSJiri Benc	$(call QUIET_INSTALL, bpf_asm)
105a50b7f8cSJiri Benc	$(Q)$(INSTALL) $(OUTPUT)bpf_asm $(DESTDIR)$(prefix)/bin/bpf_asm
10671bb428fSJakub Kicinski
10771bb428fSJakub Kicinskibpftool:
10858416c37SJiri Benc	$(call descend,bpftool)
10971bb428fSJakub Kicinski
11071bb428fSJakub Kicinskibpftool_install:
11158416c37SJiri Benc	$(call descend,bpftool,install)
11271bb428fSJakub Kicinski
11371bb428fSJakub Kicinskibpftool_clean:
11458416c37SJiri Benc	$(call descend,bpftool,clean)
11571bb428fSJakub Kicinski
11633a57ce0SJiri Olsaresolve_btfids:
11733a57ce0SJiri Olsa	$(call descend,resolve_btfids)
11833a57ce0SJiri Olsa
11933a57ce0SJiri Olsaresolve_btfids_clean:
12033a57ce0SJiri Olsa	$(call descend,resolve_btfids,clean)
12133a57ce0SJiri Olsa
1229c01546dSAndrii Nakryiko.PHONY: all install clean bpftool bpftool_install bpftool_clean \
12333a57ce0SJiri Olsa	resolve_btfids resolve_btfids_clean
124