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