# vsock-guest: kernel module + minimal eBPF + loader
# Build from bpf/ with: make -C vsock-guest all
# Or from vsock-guest with: make -f Makefile all (need vmlinux.h in parent)

# Kernel module
obj-m += bpf_evt_relay.o
KDIR ?= /lib/modules/$(shell uname -r)/build
KBUILD_CFLAGS += -g -O2

# Paths: parent dir (bpf/) when building with "make -C vsock-guest"
BPF_DIR := ..
VMLINUX_H := $(BPF_DIR)/vmlinux.h
CLANG ?= clang
BPFTOOL ?= /sbin/bpftool

.PHONY: all clean module

all: module poc_execve.bpf.o loader

$(VMLINUX_H):
	$(BPFTOOL) btf dump file /sys/kernel/btf/vmlinux format c > $@

module: bpf_evt_relay.ko
	@readelf -S bpf_evt_relay.ko 2>/dev/null | grep -q '\.BTF[^.]' || \
	 (echo "WARNING: bpf_evt_relay.ko has no .BTF section. If insmod fails with Invalid parameters or BPF load fails with 'calling kernel function bpf_evt_submit is not allowed', ensure the kernel was built with CONFIG_DEBUG_INFO_BTF_MODULES=y."; true)

bpf_evt_relay.ko: bpf_evt_relay.c
	$(MAKE) -C $(KDIR) M=$(CURDIR) modules

# eBPF object: depends on vmlinux.h in parent (generated by $(VMLINUX_H) target)
poc_execve.bpf.o: poc_execve.bpf.c poc_events.h $(VMLINUX_H)
	$(CLANG) -O2 -g -target bpf -D__TARGET_ARCH_x86 \
		-I $(BPF_DIR) -I $(CURDIR) \
		-c poc_execve.bpf.c -o poc_execve.bpf.o

loader: loader.c
	$(CLANG) -o loader loader.c -lbpf

clean:
	$(MAKE) -C $(KDIR) M=$(CURDIR) clean 2>/dev/null || true
	rm -f poc_execve.bpf.o loader
