/ maint / coverage_fuzz_corpora
coverage_fuzz_corpora
 1  #!/usr/bin/env bash
 2  
 3  set -euo pipefail
 4  
 5  if [ -z "${LLVM_PROFILE_FILE:-}" ]; then
 6      echo "This script is meant to be run inside with_coverage" >&2
 7      exit 1
 8  fi
 9  
10  coverage_dir=$(dirname "$LLVM_PROFILE_FILE")
11  
12  TOPDIR=$(realpath "$(dirname "$0")/..")
13  cd "$TOPDIR"
14  
15  # set an alternative target directory so it's possible to reuse cached artifacts between coverage 
16  # runs of coverage and fuzzing.
17  export CARGO_TARGET_DIR=${CARGO_TARGET_DIR:-target-coverage}
18  
19  for d in ./crates/*/fuzz; do
20      pushd "$(dirname "$d")"
21      crate=$(basename "$(dirname "$d")")
22      mkdir -p "$TOPDIR/target/debug/$crate"
23      mkdir -p "$coverage_dir/$crate"
24      for fuzzer in $(cargo fuzz list); do
25  	# disable sanitizer to work in stable. Also make curve25519-dalek compilation much faster
26          cargo fuzz coverage "$fuzzer" --sanitizer=none
27  
28          # we copy binary and coverage data where with_coverage expect it to be
29          cp "target-coverage/x86_64-unknown-linux-gnu/release/$fuzzer" "$TOPDIR/target/debug/$crate/$fuzzer"
30          mv "fuzz/coverage/$fuzzer/raw" "$coverage_dir/$crate/$fuzzer"
31      done
32      popd
33  done