TODO_N ?= 50 # Number of spcimens ifeq ($(QUICK),Y) N = 1 TODO_N = 3 SEGMATCH_FLAGS?= else # Should be at least the -m value N ?= 20 SEGMATCH_FLAGS?=-m 15 -M 45 endif # Iteration number (each containing N specimens) # Driven by int_loop.sh ITER ?= 1 MAKETODO_FLAGS ?=--pip-type pips_int --seg-type int SPECIMENS_DEPS ?= BUILD_DIR ?= ${FUZDIR}/build RUN_OK ?= run.ok # See int_loop_check.py # rempips took 35 iters once, so set 50 as a good start point CHECK_ARGS ?= --zero-entries --timeout-iters 50 SPECIMENS := $(addprefix $(BUILD_DIR)/$(ITER)/specimen_,$(shell seq -f '%03.0f' $(N))) SPECIMENS_OK := $(addsuffix /OK,$(SPECIMENS)) # Individual fuzzer directory, such as ~/prjxray/fuzzers/010-lutinit export FUZDIR=$(shell pwd) export ITER all: database SELF_DIR := $(dir $(lastword $(MAKEFILE_LIST))) include $(SELF_DIR)/pip_list.mk $(SPECIMENS_OK): $(BUILD_DIR)/todo.txt $(SPECIMENS_DEPS) mkdir -p $(BUILD_DIR)/$(ITER) +if [ -f ${FUZDIR}/generate.sh ] ; then \ bash ${FUZDIR}/generate.sh $(subst /OK,,$@) ; \ else \ bash ${XRAY_DIR}/utils/top_generate.sh $(subst /OK,,$@) ; \ fi touch $@ # Used 1) to see if we are done 2) pips to try in generate.tcl $(BUILD_DIR)/todo.txt: piplist $(XRAY_DIR)/fuzzers/int_maketodo.py $(BUILD_DIR)/database/seeded XRAY_DATABASE_DIR=$(BUILD_DIR)/database \ python3 $(XRAY_DIR)/fuzzers/int_maketodo.py \ $(MAKETODO_FLAGS) |sort >$(BUILD_DIR)/todo_all.txt cat $(BUILD_DIR)/todo_all.txt | sort -R | head -n$(TODO_N) > $(BUILD_DIR)/todo.txt.tmp mv $(BUILD_DIR)/todo.txt.tmp $(BUILD_DIR)/todo.txt # Per iter files mkdir -p $(BUILD_DIR)/$(ITER) cp $(BUILD_DIR)/todo_all.txt $(BUILD_DIR)/todo.txt $(BUILD_DIR)/$(ITER)/ # All in one dir for easier trending mkdir -p $(BUILD_DIR)/todo cp $(BUILD_DIR)/todo_all.txt $(BUILD_DIR)/todo/$(ITER)_all.txt # Initial copy for first todo.txt # Subsequent are based on updated db $(BUILD_DIR)/database/seeded: mkdir -p $(BUILD_DIR)/database/${XRAY_DATABASE} cp ${XRAY_DATABASE_DIR}/${XRAY_DATABASE}/segbits*.db $(BUILD_DIR)/database/${XRAY_DATABASE} touch $(BUILD_DIR)/database/seeded # FIXME: consider moving to script run: $(MAKE) clean +env BUILD_DIR=$(BUILD_DIR) $(XRAY_DIR)/fuzzers/int_loop.sh --check-args "$(CHECK_ARGS)" touch $(RUN_OK) clean: rm -rf $(BUILD_DIR) $(RUN_OK) todo # Remove iteration specific files, but keep piplist.tcl output cleaniter: rm -rf $(BUILD_DIR)/$(ITER) $(BUILD_DIR)/todo.txt .PHONY: all database pushdb run clean cleaniter