@@ -4,9 +4,11 @@ CC=clang
44LLVM_PROFDATA =llvm-profdata
55LLVM_COV =llvm-cov
66
7- NPROC? =30
7+ NPROC? =16
88
99SOURCES_DIR = ref
10+ COVERAGE_DIR =coverage
11+ CORPUS_DIR =corpus
1012
1113SOURCES = \
1214 ../../../c/$(SOURCES_DIR ) /params.c \
@@ -73,6 +75,8 @@ ifeq ($(OS),MacOS)
7375 COVERAGE_FLAGS+=-Wl,-U,_LLVMFuzzerCustomMutator -Wl,-U,_LLVMFuzzerInitialize
7476endif
7577
78+ EXTERNAL_HEADERS =../../../deps/ckb-c-stdlib-20210801/ckb_exec.h
79+
7680all : build/fuzzer build/cover
7781
7882build/fuzzer : sphincs_plus_fuzzer.c $(SOURCES ) $(HEADERS )
@@ -83,8 +87,23 @@ build/cover: sphincs_plus_cover.c sphincs_plus_fuzzer.c $(SOURCES) $(HEADERS)
8387 $(CC ) $(COVERAGE_FLAGS ) -o $@ $(SOURCES ) $< sphincs_plus_fuzzer.c
8488
8589start-fuzzer : build/fuzzer
86- mkdir -p build/corpus
87- cd build && ./fuzzer -max_len=8000000 -jobs=$(NPROC ) corpus
90+ cd build && mkdir -p $(CORPUS_DIR )
91+ cd build && ./fuzzer -max_len=8000000 -jobs=$(NPROC ) $(CORPUS_DIR )
92+
93+ show : build/$(COVERAGE_DIR ) /fuzzer.profdata
94+ cd build && mkdir -p $(COVERAGE_DIR )
95+ cd build && $(LLVM_COV ) show --instr-profile=$(COVERAGE_DIR ) /fuzzer.profdata cover
96+
97+ report : build/$(COVERAGE_DIR ) /fuzzer.profdata build/cover $(EXTERNAL_HEADERS )
98+ $(LLVM_COV ) report --show-functions --instr-profile=$(COVERAGE_DIR ) /fuzzer.profdata build/cover $(EXTERNAL_HEADERS )
99+
100+ % .profraw : build/cover
101+ LLVM_PROFILE_FILE=$@ build/cover build/$(CORPUS_DIR ) /*
102+
103+ % .profdata : % .profraw
104+ $(LLVM_PROFDATA ) merge --sparse $< -o $@
105+
106+ .PRECIOUS : build/$(COVERAGE_DIR ) /fuzzer.profraw build/$(COVERAGE_DIR ) /fuzzer.profdata
88107
89108clean :
90109 rm -rf build/*
0 commit comments