ARCH         := $(shell uname -m)
BIN          := helper_$(notdir $(patsubst %/,%,$(CURDIR)))
BPFTOOL      := /tmp/bpftool
BPFTOOLTGZ   := ../../tools/$(ARCH)/bpftool.tar.gz
LIBBPFA      := ../../libbpf/libbpf.a
PRIVATE_KEY  := ../../../../certs/security_pkey/keys/security.key
PUBLIC_KEY   := ../../../../certs/security_pkey/keys/security_pkey.pem
PHONY        := default
CTFORGE_SIGN := ../../ctforged/ctforge-signer

default: build

$(BPFTOOL): $(BPFTOOLTGZ)
	@tar -xf $< -C /tmp/
	@chmod +x $@


$(LIBBPFA):
	@cd ../../libbpf && make
	@echo "-> $@ build success"

$(CTFORGE_SIGN):
	@cd ../../ctforged && make
	@echo "-> $@ build success"


PHONY += epbf_kern
epbf_kern: $(BPFTOOL)
	clang -O2 -Wall \
	-DPROV_FILTER_FILE_PERMISSION_OFF \
	-DPROV_FILTER_SOCKET_SENDMSG_OFF \
	-D__KERNEL__ \
	-D__ASM_SYSREG_H \
	-D__$(ARCH)__ \
	-Wno-unused-value -Wno-pointer-sign \
	-Wno-compare-distinct-pointer-types \
	-Wno-gnu-variable-sized-type-not-at-end \
	-Wno-address-of-packed-member -Wno-tautological-compare \
	-Wno-unknown-warning-option \
	-I../../include \
	-target bpf -g -c kern.c -o kern.o
	../../ctforged/ctforge-signer -z -s -k $(PRIVATE_KEY) -i kern.o
	$(BPFTOOL) gen skeleton --bpffs kern.o > skel.h
	@echo "-> $@ build success"


PHONY += usr
usr:
	clang -g -o $(BIN) usr.c $(LIBBPFA) -lelf -lz -lpthread -I../../include -I.


PHONY += build
build: $(LIBBPFA) epbf_kern usr
	@echo "Success! All ok!"


PHONY += clean
clean:
	rm -f *.so *.o skel.h helper_*

.PHONY: $(PHONY)


