2023-01-25 17:35:53 +00:00
|
|
|
#!/usr/bin/env bash
|
2022-02-22 19:41:54 +00:00
|
|
|
|
2022-05-25 12:10:55 +01:00
|
|
|
set -euo pipefail
|
2022-02-22 19:41:54 +00:00
|
|
|
|
2022-05-25 12:10:55 +01:00
|
|
|
if [ -z "${LLVM_PROFILE_FILE:-}" ]; then
|
2022-02-22 19:41:54 +00:00
|
|
|
echo "This script is meant to be run inside with_coverage" >&2
|
|
|
|
exit 1
|
|
|
|
fi
|
|
|
|
|
|
|
|
coverage_dir=$(dirname "$LLVM_PROFILE_FILE")
|
|
|
|
|
|
|
|
TOPDIR=$(realpath "$(dirname "$0")/..")
|
|
|
|
cd "$TOPDIR"
|
|
|
|
|
2022-05-25 21:29:04 +01:00
|
|
|
# set an alternative target directory so it's possible to reuse cached artifacts between coverage
|
|
|
|
# runs of coverage and fuzzing.
|
2022-02-23 16:49:28 +00:00
|
|
|
export CARGO_TARGET_DIR=${CARGO_TARGET_DIR:-target-coverage}
|
2022-02-22 19:41:54 +00:00
|
|
|
|
|
|
|
for d in ./crates/*/fuzz; do
|
2022-05-25 21:29:04 +01:00
|
|
|
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 "$fuzzer" --sanitizer=none
|
|
|
|
|
|
|
|
# we copy binary and coverage data where with_coverage expect it to be
|
|
|
|
cp "target-coverage/x86_64-unknown-linux-gnu/release/$fuzzer" "$TOPDIR/target/debug/$crate/$fuzzer"
|
|
|
|
mv "fuzz/coverage/$fuzzer/raw" "$coverage_dir/$crate/$fuzzer"
|
|
|
|
done
|
|
|
|
popd
|
2022-02-22 19:41:54 +00:00
|
|
|
done
|