|  | 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 |