PROJECT_DIR=$(shell dirname $(realpath $(firstword $(MAKEFILE_LIST))))
UNAME :="$(shell uname)"
LIB_DIR :="$(PROJECT_DIR)/target/release/libafl_atheris.a"
DEEXIT_PATH = "$(PROJECT_DIR)/../../target/release/libdeexit.dylib"

ifeq ("$(wildcard $(DEEXIT_PATH))", "")
	DEEXIT_PATH = "$(PROJECT_DIR)/../../target/release/libdeexit.so"
endif

PHONY: all

all: fuzzer deexit

deexit: $(DEEXIT_PATH)

$(DEEXIT_PATH):
	cd ../.. && cargo build --release -p deexit

atheris:
	git clone https://github.com/google/atheris.git

target/release/libafl_atheris.a: src/*
	# Build the libpng libfuzzer library
	cargo build --release

fuzzer: target/release/libafl_atheris.a atheris env
	(\
	. env/bin/activate; \
	pip install wheel; \
	cd atheris; \
	LIBFUZZER_LIB=$(LIB_DIR) pip install .; \
	)

clean:
	rm env

env:
	python3 -m venv env

short_test: all
	(\
	rm -rf libafl_unix_shmem_server || true; \
	. env/bin/activate; \
	LD_PRELOAD=$(DEEXIT_PATH) DYLD_FORCE_FLAT_NAMESPACE=1 DYLD_INSERT_LIBRARIES=$(DEEXIT_PATH) RUST_BACKTRACE=1 timeout 10s python3 ./atheris/example_fuzzers/fuzzing_example.py --cores 0 -i in -o out || true; \
	rm -rf out; \
	)

test:
	(\
	rm -rf libafl_unix_shmem_server || true; \
	. env/bin/activate; \
	LD_PRELOAD=$(DEEXIT_PATH) DYLD_FORCE_FLAT_NAMESPACE=1 DYLD_INSERT_LIBRARIES=$(DEEXIT_PATH) RUST_BACKTRACE=1 timeout 60s python3 ./atheris/example_fuzzers/fuzzing_example.py --cores 0 -i in -o out || true; \
	rm -rf out; \
	)
