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