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) 9*b6580cd8SToke Høiland-JørgensenBPFOBJ := $(OUTPUT)/libbpf.a 10*b6580cd8SToke Høiland-JørgensenBPF_INCLUDE := $(OUTPUT) 11*b6580cd8SToke Høiland-JørgensenINCLUDES := -I$(BPF_INCLUDE) -I$(OUTPUT) -I$(abspath ../../lib) 129c01546dSAndrii NakryikoCFLAGS := -g -Wall 139c01546dSAndrii Nakryiko 149c01546dSAndrii Nakryiko# Try to detect best kernel BTF source 159c01546dSAndrii NakryikoKERNEL_REL := $(shell uname -r) 16a835d38dSToke Høiland-JørgensenVMLINUX_BTF_PATHS := /sys/kernel/btf/vmlinux /boot/vmlinux-$(KERNEL_REL) 17a835d38dSToke Høiland-JørgensenVMLINUX_BTF_PATH := $(or $(VMLINUX_BTF),$(firstword \ 18a835d38dSToke Høiland-Jørgensen $(wildcard $(VMLINUX_BTF_PATHS)))) 199c01546dSAndrii Nakryiko 209c01546dSAndrii Nakryikoabs_out := $(abspath $(OUTPUT)) 219c01546dSAndrii Nakryikoifeq ($(V),1) 229c01546dSAndrii NakryikoQ = 239c01546dSAndrii Nakryikomsg = 249c01546dSAndrii Nakryikoelse 259c01546dSAndrii NakryikoQ = @ 269c01546dSAndrii Nakryikomsg = @printf ' %-8s %s%s\n' "$(1)" "$(notdir $(2))" "$(if $(3), $(3))"; 279c01546dSAndrii NakryikoMAKEFLAGS += --no-print-directory 289c01546dSAndrii Nakryikosubmake_extras := feature_display=0 299c01546dSAndrii Nakryikoendif 309c01546dSAndrii Nakryiko 319c01546dSAndrii Nakryiko.DELETE_ON_ERROR: 329c01546dSAndrii Nakryiko 339c01546dSAndrii Nakryiko.PHONY: all clean runqslower 349c01546dSAndrii Nakryikoall: runqslower 359c01546dSAndrii Nakryiko 369c01546dSAndrii Nakryikorunqslower: $(OUTPUT)/runqslower 379c01546dSAndrii Nakryiko 389c01546dSAndrii Nakryikoclean: 399c01546dSAndrii Nakryiko $(call msg,CLEAN) 409c01546dSAndrii Nakryiko $(Q)rm -rf $(OUTPUT) runqslower 419c01546dSAndrii Nakryiko 42*b6580cd8SToke Høiland-Jørgensen$(OUTPUT)/runqslower: $(OUTPUT)/runqslower.o $(BPFOBJ) 439c01546dSAndrii Nakryiko $(call msg,BINARY,$@) 449c01546dSAndrii Nakryiko $(Q)$(CC) $(CFLAGS) -lelf -lz $^ -o $@ 459c01546dSAndrii Nakryiko 469c01546dSAndrii Nakryiko$(OUTPUT)/runqslower.o: runqslower.h $(OUTPUT)/runqslower.skel.h \ 479c01546dSAndrii Nakryiko $(OUTPUT)/runqslower.bpf.o 489c01546dSAndrii Nakryiko 499c01546dSAndrii Nakryiko$(OUTPUT)/runqslower.bpf.o: $(OUTPUT)/vmlinux.h runqslower.h 509c01546dSAndrii Nakryiko 519c01546dSAndrii Nakryiko$(OUTPUT)/%.skel.h: $(OUTPUT)/%.bpf.o | $(BPFTOOL) 529c01546dSAndrii Nakryiko $(call msg,GEN-SKEL,$@) 539c01546dSAndrii Nakryiko $(Q)$(BPFTOOL) gen skeleton $< > $@ 549c01546dSAndrii Nakryiko 55*b6580cd8SToke Høiland-Jørgensen$(OUTPUT)/%.bpf.o: %.bpf.c $(BPFOBJ) | $(OUTPUT) 569c01546dSAndrii Nakryiko $(call msg,BPF,$@) 575b554ce5SToke Høiland-Jørgensen $(Q)$(CLANG) -g -O2 -target bpf $(INCLUDES) \ 589c01546dSAndrii Nakryiko -c $(filter %.c,$^) -o $@ && \ 599c01546dSAndrii Nakryiko $(LLVM_STRIP) -g $@ 609c01546dSAndrii Nakryiko 619c01546dSAndrii Nakryiko$(OUTPUT)/%.o: %.c | $(OUTPUT) 629c01546dSAndrii Nakryiko $(call msg,CC,$@) 635b554ce5SToke Høiland-Jørgensen $(Q)$(CC) $(CFLAGS) $(INCLUDES) -c $(filter %.c,$^) -o $@ 649c01546dSAndrii Nakryiko 659c01546dSAndrii Nakryiko$(OUTPUT): 669c01546dSAndrii Nakryiko $(call msg,MKDIR,$@) 679c01546dSAndrii Nakryiko $(Q)mkdir -p $(OUTPUT) 689c01546dSAndrii Nakryiko 69a835d38dSToke Høiland-Jørgensen$(OUTPUT)/vmlinux.h: $(VMLINUX_BTF_PATH) | $(OUTPUT) $(BPFTOOL) 709c01546dSAndrii Nakryiko $(call msg,GEN,$@) 71a835d38dSToke Høiland-Jørgensen $(Q)if [ ! -e "$(VMLINUX_BTF_PATH)" ] ; then \ 72a835d38dSToke Høiland-Jørgensen echo "Couldn't find kernel BTF; set VMLINUX_BTF to" \ 73a835d38dSToke Høiland-Jørgensen "specify its location." >&2; \ 74a835d38dSToke Høiland-Jørgensen exit 1;\ 75a835d38dSToke Høiland-Jørgensen fi 76a835d38dSToke Høiland-Jørgensen $(Q)$(BPFTOOL) btf dump file $(VMLINUX_BTF_PATH) format c > $@ 779c01546dSAndrii Nakryiko 78*b6580cd8SToke Høiland-Jørgensen$(BPFOBJ): | $(OUTPUT) 799c01546dSAndrii Nakryiko $(Q)$(MAKE) $(submake_extras) -C $(LIBBPF_SRC) \ 80*b6580cd8SToke Høiland-Jørgensen OUTPUT=$(abspath $(dir $@))/ $(abspath $@) 819c01546dSAndrii Nakryiko 829c01546dSAndrii Nakryiko$(DEFAULT_BPFTOOL): 839c01546dSAndrii Nakryiko $(Q)$(MAKE) $(submake_extras) -C ../bpftool \ 849c01546dSAndrii Nakryiko prefix= OUTPUT=$(abs_out)/ DESTDIR=$(abs_out) install 85