CXX      ?= g++
CPPFLAGS ?= -Ikernel-research/libxdk/include
CXXFLAGS ?= -std=gnu++17 -static -O2
LDFLAGS  ?= -static -s -Lkernel-research/libxdk/lib
LDLIBS   ?= -lkernelXDK

TARGETS := exploit exploit_debug
SRC     := exploit.c

.PHONY: all prerequisites run clean

all: prerequisites exploit

prerequisites: target_db.kxdb kernel-research/libxdk/lib/libkernelXDK.a

target_db.kxdb:
	wget -O $@ https://storage.googleapis.com/kernelxdk/db/kernelctf.kxdb

kernel-research:
	git clone --depth 1 https://github.com/google/kernel-research.git $@

kernel-research/libxdk/lib/libkernelXDK.a: | kernel-research
	cd kernel-research/libxdk && ./build.sh

exploit: prerequisites $(SRC)
	$(CXX) $(CPPFLAGS) $(CXXFLAGS) $(SRC) -o $@ $(LDFLAGS) $(LDLIBS)

exploit_debug: CXXFLAGS += -g
exploit_debug: prerequisites $(SRC)
	$(CXX) $(CPPFLAGS) $(CXXFLAGS) $(SRC) -o $@ $(LDFLAGS) $(LDLIBS)

run: exploit
	./$<

clean:
	rm -rf $(TARGETS) target_db.kxdb kernel-research
