1*f0fdfefbSAlexei Starovoitov# SPDX-License-Identifier: GPL-2.0
2*f0fdfefbSAlexei StarovoitovOUTPUT := .output
3*f0fdfefbSAlexei StarovoitovCLANG ?= clang
4*f0fdfefbSAlexei StarovoitovLLC ?= llc
5*f0fdfefbSAlexei StarovoitovLLVM_STRIP ?= llvm-strip
6*f0fdfefbSAlexei StarovoitovDEFAULT_BPFTOOL := $(OUTPUT)/sbin/bpftool
7*f0fdfefbSAlexei StarovoitovBPFTOOL ?= $(DEFAULT_BPFTOOL)
8*f0fdfefbSAlexei StarovoitovLIBBPF_SRC := $(abspath ../../../../tools/lib/bpf)
9*f0fdfefbSAlexei StarovoitovBPFOBJ := $(OUTPUT)/libbpf.a
10*f0fdfefbSAlexei StarovoitovBPF_INCLUDE := $(OUTPUT)
11*f0fdfefbSAlexei StarovoitovINCLUDES := -I$(OUTPUT) -I$(BPF_INCLUDE) -I$(abspath ../../../../tools/lib)        \
12*f0fdfefbSAlexei Starovoitov       -I$(abspath ../../../../tools/include/uapi)
13*f0fdfefbSAlexei StarovoitovCFLAGS := -g -Wall
14*f0fdfefbSAlexei Starovoitov
15*f0fdfefbSAlexei Starovoitovabs_out := $(abspath $(OUTPUT))
16*f0fdfefbSAlexei Starovoitovifeq ($(V),1)
17*f0fdfefbSAlexei StarovoitovQ =
18*f0fdfefbSAlexei Starovoitovmsg =
19*f0fdfefbSAlexei Starovoitovelse
20*f0fdfefbSAlexei StarovoitovQ = @
21*f0fdfefbSAlexei Starovoitovmsg = @printf '  %-8s %s%s\n' "$(1)" "$(notdir $(2))" "$(if $(3), $(3))";
22*f0fdfefbSAlexei StarovoitovMAKEFLAGS += --no-print-directory
23*f0fdfefbSAlexei Starovoitovsubmake_extras := feature_display=0
24*f0fdfefbSAlexei Starovoitovendif
25*f0fdfefbSAlexei Starovoitov
26*f0fdfefbSAlexei Starovoitov.DELETE_ON_ERROR:
27*f0fdfefbSAlexei Starovoitov
28*f0fdfefbSAlexei Starovoitov.PHONY: all clean
29*f0fdfefbSAlexei Starovoitov
30*f0fdfefbSAlexei Starovoitovall: iterators.skel.h
31*f0fdfefbSAlexei Starovoitov
32*f0fdfefbSAlexei Starovoitovclean:
33*f0fdfefbSAlexei Starovoitov	$(call msg,CLEAN)
34*f0fdfefbSAlexei Starovoitov	$(Q)rm -rf $(OUTPUT) iterators
35*f0fdfefbSAlexei Starovoitov
36*f0fdfefbSAlexei Starovoitoviterators.skel.h: $(OUTPUT)/iterators.bpf.o | $(BPFTOOL)
37*f0fdfefbSAlexei Starovoitov	$(call msg,GEN-SKEL,$@)
38*f0fdfefbSAlexei Starovoitov	$(Q)$(BPFTOOL) gen skeleton $< > $@
39*f0fdfefbSAlexei Starovoitov
40*f0fdfefbSAlexei Starovoitov
41*f0fdfefbSAlexei Starovoitov$(OUTPUT)/iterators.bpf.o: iterators.bpf.c $(BPFOBJ) | $(OUTPUT)
42*f0fdfefbSAlexei Starovoitov	$(call msg,BPF,$@)
43*f0fdfefbSAlexei Starovoitov	$(Q)$(CLANG) -g -O2 -target bpf $(INCLUDES)			      \
44*f0fdfefbSAlexei Starovoitov		 -c $(filter %.c,$^) -o $@ &&				      \
45*f0fdfefbSAlexei Starovoitov	$(LLVM_STRIP) -g $@
46*f0fdfefbSAlexei Starovoitov
47*f0fdfefbSAlexei Starovoitov$(OUTPUT):
48*f0fdfefbSAlexei Starovoitov	$(call msg,MKDIR,$@)
49*f0fdfefbSAlexei Starovoitov	$(Q)mkdir -p $(OUTPUT)
50*f0fdfefbSAlexei Starovoitov
51*f0fdfefbSAlexei Starovoitov$(BPFOBJ): $(wildcard $(LIBBPF_SRC)/*.[ch] $(LIBBPF_SRC)/Makefile) | $(OUTPUT)
52*f0fdfefbSAlexei Starovoitov	$(Q)$(MAKE) $(submake_extras) -C $(LIBBPF_SRC)			       \
53*f0fdfefbSAlexei Starovoitov		    OUTPUT=$(abspath $(dir $@))/ $(abspath $@)
54*f0fdfefbSAlexei Starovoitov
55*f0fdfefbSAlexei Starovoitov$(DEFAULT_BPFTOOL):
56*f0fdfefbSAlexei Starovoitov	$(Q)$(MAKE) $(submake_extras) -C ../../../../tools/bpf/bpftool			      \
57*f0fdfefbSAlexei Starovoitov		    prefix= OUTPUT=$(abs_out)/ DESTDIR=$(abs_out) install
58