xref: /OK3568_Linux_fs/kernel/tools/bpf/runqslower/Makefile (revision 4882a59341e53eb6f0b4789bf948001014eff981)
1*4882a593Smuzhiyun# SPDX-License-Identifier: (LGPL-2.1 OR BSD-2-Clause)
2*4882a593SmuzhiyunOUTPUT := .output
3*4882a593SmuzhiyunCLANG ?= clang
4*4882a593SmuzhiyunLLC ?= llc
5*4882a593SmuzhiyunLLVM_STRIP ?= llvm-strip
6*4882a593SmuzhiyunDEFAULT_BPFTOOL := $(OUTPUT)/sbin/bpftool
7*4882a593SmuzhiyunBPFTOOL ?= $(DEFAULT_BPFTOOL)
8*4882a593SmuzhiyunLIBBPF_SRC := $(abspath ../../lib/bpf)
9*4882a593SmuzhiyunBPFOBJ := $(OUTPUT)/libbpf.a
10*4882a593SmuzhiyunBPF_INCLUDE := $(OUTPUT)
11*4882a593SmuzhiyunINCLUDES := -I$(OUTPUT) -I$(BPF_INCLUDE) -I$(abspath ../../lib)        \
12*4882a593Smuzhiyun       -I$(abspath ../../include/uapi)
13*4882a593SmuzhiyunCFLAGS := -g -Wall
14*4882a593Smuzhiyun
15*4882a593Smuzhiyun# Try to detect best kernel BTF source
16*4882a593SmuzhiyunKERNEL_REL := $(shell uname -r)
17*4882a593SmuzhiyunVMLINUX_BTF_PATHS := /sys/kernel/btf/vmlinux /boot/vmlinux-$(KERNEL_REL)
18*4882a593SmuzhiyunVMLINUX_BTF_PATH := $(or $(VMLINUX_BTF),$(firstword			       \
19*4882a593Smuzhiyun					  $(wildcard $(VMLINUX_BTF_PATHS))))
20*4882a593Smuzhiyun
21*4882a593Smuzhiyunabs_out := $(abspath $(OUTPUT))
22*4882a593Smuzhiyunifeq ($(V),1)
23*4882a593SmuzhiyunQ =
24*4882a593Smuzhiyunmsg =
25*4882a593Smuzhiyunelse
26*4882a593SmuzhiyunQ = @
27*4882a593Smuzhiyunmsg = @printf '  %-8s %s%s\n' "$(1)" "$(notdir $(2))" "$(if $(3), $(3))";
28*4882a593SmuzhiyunMAKEFLAGS += --no-print-directory
29*4882a593Smuzhiyunsubmake_extras := feature_display=0
30*4882a593Smuzhiyunendif
31*4882a593Smuzhiyun
32*4882a593Smuzhiyun.DELETE_ON_ERROR:
33*4882a593Smuzhiyun
34*4882a593Smuzhiyun.PHONY: all clean runqslower
35*4882a593Smuzhiyunall: runqslower
36*4882a593Smuzhiyun
37*4882a593Smuzhiyunrunqslower: $(OUTPUT)/runqslower
38*4882a593Smuzhiyun
39*4882a593Smuzhiyunclean:
40*4882a593Smuzhiyun	$(call msg,CLEAN)
41*4882a593Smuzhiyun	$(Q)rm -rf $(OUTPUT) runqslower
42*4882a593Smuzhiyun
43*4882a593Smuzhiyun$(OUTPUT)/runqslower: $(OUTPUT)/runqslower.o $(BPFOBJ)
44*4882a593Smuzhiyun	$(call msg,BINARY,$@)
45*4882a593Smuzhiyun	$(Q)$(CC) $(CFLAGS) $^ -lelf -lz -o $@
46*4882a593Smuzhiyun
47*4882a593Smuzhiyun$(OUTPUT)/runqslower.o: runqslower.h $(OUTPUT)/runqslower.skel.h	      \
48*4882a593Smuzhiyun			$(OUTPUT)/runqslower.bpf.o
49*4882a593Smuzhiyun
50*4882a593Smuzhiyun$(OUTPUT)/runqslower.bpf.o: $(OUTPUT)/vmlinux.h runqslower.h
51*4882a593Smuzhiyun
52*4882a593Smuzhiyun$(OUTPUT)/%.skel.h: $(OUTPUT)/%.bpf.o | $(BPFTOOL)
53*4882a593Smuzhiyun	$(call msg,GEN-SKEL,$@)
54*4882a593Smuzhiyun	$(Q)$(BPFTOOL) gen skeleton $< > $@
55*4882a593Smuzhiyun
56*4882a593Smuzhiyun$(OUTPUT)/%.bpf.o: %.bpf.c $(BPFOBJ) | $(OUTPUT)
57*4882a593Smuzhiyun	$(call msg,BPF,$@)
58*4882a593Smuzhiyun	$(Q)$(CLANG) -g -O2 -target bpf $(INCLUDES)			      \
59*4882a593Smuzhiyun		 -c $(filter %.c,$^) -o $@ &&				      \
60*4882a593Smuzhiyun	$(LLVM_STRIP) -g $@
61*4882a593Smuzhiyun
62*4882a593Smuzhiyun$(OUTPUT)/%.o: %.c | $(OUTPUT)
63*4882a593Smuzhiyun	$(call msg,CC,$@)
64*4882a593Smuzhiyun	$(Q)$(CC) $(CFLAGS) $(INCLUDES) -c $(filter %.c,$^) -o $@
65*4882a593Smuzhiyun
66*4882a593Smuzhiyun$(OUTPUT):
67*4882a593Smuzhiyun	$(call msg,MKDIR,$@)
68*4882a593Smuzhiyun	$(Q)mkdir -p $(OUTPUT)
69*4882a593Smuzhiyun
70*4882a593Smuzhiyun$(OUTPUT)/vmlinux.h: $(VMLINUX_BTF_PATH) | $(OUTPUT) $(BPFTOOL)
71*4882a593Smuzhiyun	$(call msg,GEN,$@)
72*4882a593Smuzhiyun	$(Q)if [ ! -e "$(VMLINUX_BTF_PATH)" ] ; then \
73*4882a593Smuzhiyun		echo "Couldn't find kernel BTF; set VMLINUX_BTF to"	       \
74*4882a593Smuzhiyun			"specify its location." >&2;			       \
75*4882a593Smuzhiyun		exit 1;\
76*4882a593Smuzhiyun	fi
77*4882a593Smuzhiyun	$(Q)$(BPFTOOL) btf dump file $(VMLINUX_BTF_PATH) format c > $@
78*4882a593Smuzhiyun
79*4882a593Smuzhiyun$(BPFOBJ): $(wildcard $(LIBBPF_SRC)/*.[ch] $(LIBBPF_SRC)/Makefile) | $(OUTPUT)
80*4882a593Smuzhiyun	$(Q)$(MAKE) $(submake_extras) -C $(LIBBPF_SRC)			       \
81*4882a593Smuzhiyun		    OUTPUT=$(abspath $(dir $@))/ $(abspath $@)
82*4882a593Smuzhiyun
83*4882a593Smuzhiyun$(DEFAULT_BPFTOOL):
84*4882a593Smuzhiyun	$(Q)$(MAKE) $(submake_extras) -C ../bpftool			      \
85*4882a593Smuzhiyun		    prefix= OUTPUT=$(abs_out)/ DESTDIR=$(abs_out) install
86