ARCH=$(shell uname -m | sed 's/x86_64/x86/' | sed 's/aarch64/arm64/')

# set this variable (e.g. to 1) if you have older libbpf version (<0.6.0)
SET_OLD_LIBBPF?=0

ifdef SET_OLD_LIBBPF
OLD_LIBBPF=-DOLD_LIBBPF
endif

main: main.c process_exit.skel.h
	gcc $(OLD_LIBBPF) -Wall -o main main.c -lbpf -lelf -lz

run: main
	sudo ./main

KERNEL ?= /lib/modules/$(shell uname -r)/build/
LINUXINCLUDE += -I$(KERNEL)/arch/$(ARCH)/include/generated/uapi
LINUXINCLUDE += -I$(KERNEL)/arch/$(ARCH)/include/generated
LINUXINCLUDE += -I$(KERNEL)/arch/$(ARCH)/include
LINUXINCLUDE += -I$(KERNEL)/arch/$(ARCH)/include/uapi
LINUXINCLUDE += -I$(KERNEL)/include
LINUXINCLUDE += -I$(KERNEL)/include/uapi
LINUXINCLUDE += -include $(KERNEL)/include/linux/kconfig.h
LINUXINCLUDE += -I$(KERNEL)/include/generated/uapi

process_exit.bpf.o: process_exit.bpf.c vmlinux.h
	clang $(LINUXINCLUDE) \
		-target bpf \
		-D __TARGET_ARCH_$(ARCH) \
		-I/usr/include/$(shell uname -m)-linux-gnu \
		-Wall -O2 -g -c process_exit.bpf.c -o process_exit.bpf.o

process_exit.skel.h: process_exit.bpf.o
	bpftool gen skeleton process_exit.bpf.o > process_exit.skel.h

vmlinux.h:
	bpftool btf dump file /sys/kernel/btf/vmlinux format c > vmlinux.h

clean:
	rm -f process_exit.bpf.o main vmlinux.h process_exit.skel.h

.PHONY: run clean
