#!/usr/bin/env bash set -eu -o pipefail AFL_HARDEN=1 CONFIGURE_FLAGS="--enable-tests=no --enable-fuzz-main" ZCUTIL=$(realpath "./zcutil") export AFL_LOG_DIR="$(pwd)" for d in src/fuzzing/*/ ; do fuzz_cases+="$(basename "$d"), " fuzz_cases_choices=("${fuzz_cases_choices[@]}" $(basename "$d")) done FUZZ_OPTIONS_STRING="Options are: ${fuzz_cases::-2}" required_options_count=0 DEFAULT_BUILD_CC="CC=$ZCUTIL/afl/zcash-wrapper-gcc" DEFAULT_BUILD_CXX="CXX=$ZCUTIL/afl/zcash-wrapper-g++" function help { cat <&2 help exit 1 ;; esac done if ((required_options_count < 2)); then help exit 1 fi if ! [[ "${fuzz_cases_choices[*]} " == *" $FUZZ_CASE "* ]]; then echo "fuzz case option is invalid. ($FUZZ_OPTIONS_STRING)" exit 1 fi cp "./src/fuzzing/$FUZZ_CASE/fuzz.cpp" src/fuzz.cpp CONFIGURE_FLAGS="$CONFIGURE_FLAGS" $ZCUTIL/build.sh $DEFAULT_BUILD_CC $DEFAULT_BUILD_CXX AFL_HARDEN=$AFL_HARDEN -j$(nproc) "$@" echo "Build finished. You can now run AFL as follows:" echo "./zcutil/afl/afl-run.sh -i $AFL_INSTALL_DIR -f $FUZZ_CASE"