19c01546dSAndrii Nakryiko# SPDX-License-Identifier: (LGPL-2.1 OR BSD-2-Clause) 29c01546dSAndrii NakryikoOUTPUT := .output 39c01546dSAndrii NakryikoCLANG := clang 49c01546dSAndrii NakryikoLLC := llc 59c01546dSAndrii NakryikoLLVM_STRIP := llvm-strip 69c01546dSAndrii NakryikoDEFAULT_BPFTOOL := $(OUTPUT)/sbin/bpftool 79c01546dSAndrii NakryikoBPFTOOL ?= $(DEFAULT_BPFTOOL) 89c01546dSAndrii NakryikoLIBBPF_SRC := $(abspath ../../lib/bpf) 99c01546dSAndrii NakryikoCFLAGS := -g -Wall 109c01546dSAndrii Nakryiko 119c01546dSAndrii Nakryiko# Try to detect best kernel BTF source 129c01546dSAndrii NakryikoKERNEL_REL := $(shell uname -r) 13*a835d38dSToke Høiland-JørgensenVMLINUX_BTF_PATHS := /sys/kernel/btf/vmlinux /boot/vmlinux-$(KERNEL_REL) 14*a835d38dSToke Høiland-JørgensenVMLINUX_BTF_PATH := $(or $(VMLINUX_BTF),$(firstword \ 15*a835d38dSToke Høiland-Jørgensen $(wildcard $(VMLINUX_BTF_PATHS)))) 169c01546dSAndrii Nakryiko 179c01546dSAndrii Nakryikoabs_out := $(abspath $(OUTPUT)) 189c01546dSAndrii Nakryikoifeq ($(V),1) 199c01546dSAndrii NakryikoQ = 209c01546dSAndrii Nakryikomsg = 219c01546dSAndrii Nakryikoelse 229c01546dSAndrii NakryikoQ = @ 239c01546dSAndrii Nakryikomsg = @printf ' %-8s %s%s\n' "$(1)" "$(notdir $(2))" "$(if $(3), $(3))"; 249c01546dSAndrii NakryikoMAKEFLAGS += --no-print-directory 259c01546dSAndrii Nakryikosubmake_extras := feature_display=0 269c01546dSAndrii Nakryikoendif 279c01546dSAndrii Nakryiko 289c01546dSAndrii Nakryiko.DELETE_ON_ERROR: 299c01546dSAndrii Nakryiko 309c01546dSAndrii Nakryiko.PHONY: all clean runqslower 319c01546dSAndrii Nakryikoall: runqslower 329c01546dSAndrii Nakryiko 339c01546dSAndrii Nakryikorunqslower: $(OUTPUT)/runqslower 349c01546dSAndrii Nakryiko 359c01546dSAndrii Nakryikoclean: 369c01546dSAndrii Nakryiko $(call msg,CLEAN) 379c01546dSAndrii Nakryiko $(Q)rm -rf $(OUTPUT) runqslower 389c01546dSAndrii Nakryiko 399c01546dSAndrii Nakryiko$(OUTPUT)/runqslower: $(OUTPUT)/runqslower.o $(OUTPUT)/libbpf.a 409c01546dSAndrii Nakryiko $(call msg,BINARY,$@) 419c01546dSAndrii Nakryiko $(Q)$(CC) $(CFLAGS) -lelf -lz $^ -o $@ 429c01546dSAndrii Nakryiko 439c01546dSAndrii Nakryiko$(OUTPUT)/runqslower.o: runqslower.h $(OUTPUT)/runqslower.skel.h \ 449c01546dSAndrii Nakryiko $(OUTPUT)/runqslower.bpf.o 459c01546dSAndrii Nakryiko 469c01546dSAndrii Nakryiko$(OUTPUT)/runqslower.bpf.o: $(OUTPUT)/vmlinux.h runqslower.h 479c01546dSAndrii Nakryiko 489c01546dSAndrii Nakryiko$(OUTPUT)/%.skel.h: $(OUTPUT)/%.bpf.o | $(BPFTOOL) 499c01546dSAndrii Nakryiko $(call msg,GEN-SKEL,$@) 509c01546dSAndrii Nakryiko $(Q)$(BPFTOOL) gen skeleton $< > $@ 519c01546dSAndrii Nakryiko 529c01546dSAndrii Nakryiko$(OUTPUT)/%.bpf.o: %.bpf.c $(OUTPUT)/libbpf.a | $(OUTPUT) 539c01546dSAndrii Nakryiko $(call msg,BPF,$@) 549c01546dSAndrii Nakryiko $(Q)$(CLANG) -g -O2 -target bpf -I$(OUTPUT) -I$(LIBBPF_SRC) \ 559c01546dSAndrii Nakryiko -c $(filter %.c,$^) -o $@ && \ 569c01546dSAndrii Nakryiko $(LLVM_STRIP) -g $@ 579c01546dSAndrii Nakryiko 589c01546dSAndrii Nakryiko$(OUTPUT)/%.o: %.c | $(OUTPUT) 599c01546dSAndrii Nakryiko $(call msg,CC,$@) 609c01546dSAndrii Nakryiko $(Q)$(CC) $(CFLAGS) -I$(LIBBPF_SRC) -I$(OUTPUT) -c $(filter %.c,$^) -o $@ 619c01546dSAndrii Nakryiko 629c01546dSAndrii Nakryiko$(OUTPUT): 639c01546dSAndrii Nakryiko $(call msg,MKDIR,$@) 649c01546dSAndrii Nakryiko $(Q)mkdir -p $(OUTPUT) 659c01546dSAndrii Nakryiko 66*a835d38dSToke Høiland-Jørgensen$(OUTPUT)/vmlinux.h: $(VMLINUX_BTF_PATH) | $(OUTPUT) $(BPFTOOL) 679c01546dSAndrii Nakryiko $(call msg,GEN,$@) 68*a835d38dSToke Høiland-Jørgensen $(Q)if [ ! -e "$(VMLINUX_BTF_PATH)" ] ; then \ 69*a835d38dSToke Høiland-Jørgensen echo "Couldn't find kernel BTF; set VMLINUX_BTF to" \ 70*a835d38dSToke Høiland-Jørgensen "specify its location." >&2; \ 71*a835d38dSToke Høiland-Jørgensen exit 1;\ 72*a835d38dSToke Høiland-Jørgensen fi 73*a835d38dSToke Høiland-Jørgensen $(Q)$(BPFTOOL) btf dump file $(VMLINUX_BTF_PATH) format c > $@ 749c01546dSAndrii Nakryiko 759c01546dSAndrii Nakryiko$(OUTPUT)/libbpf.a: | $(OUTPUT) 769c01546dSAndrii Nakryiko $(Q)$(MAKE) $(submake_extras) -C $(LIBBPF_SRC) \ 779c01546dSAndrii Nakryiko OUTPUT=$(abs_out)/ $(abs_out)/libbpf.a 789c01546dSAndrii Nakryiko 799c01546dSAndrii Nakryiko$(DEFAULT_BPFTOOL): 809c01546dSAndrii Nakryiko $(Q)$(MAKE) $(submake_extras) -C ../bpftool \ 819c01546dSAndrii Nakryiko prefix= OUTPUT=$(abs_out)/ DESTDIR=$(abs_out) install 82