
* scripts/clippy.sh: remove cargo clean step Clippy used to only report warnings in code that was not part of the incremental cache. This has changed since and I believe we can safely drop the `cargo clean` step. * Revert "ci: install z3 to avoid building from source" This reverts commit 6ff1c4088811040dcfdbd12273f0baf507a4308b. This doesn't do anything as we're using `static-link-z3` explicitly. * refactor test_all_fuzzers nyx tests were not included in `time_record` before this * nyx fuzzer: move modprobe logic out of setup_libxml2.sh
92 lines
3.3 KiB
Bash
Executable File
92 lines
3.3 KiB
Bash
Executable File
#!/bin/bash
|
|
|
|
SCRIPT_DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" &> /dev/null && pwd )"
|
|
cd "$SCRIPT_DIR/.." || exit 1
|
|
|
|
# TODO: This should be rewritten in rust, a Makefile, or some platform-independent language
|
|
|
|
fuzzers=$(find ./fuzzers -mindepth 1 -maxdepth 1 -type d)
|
|
backtrace_fuzzers=$(find ./fuzzers/backtrace_baby_fuzzers -mindepth 1 -maxdepth 1 -type d)
|
|
|
|
libafl=$(pwd)
|
|
|
|
# build with a shared target dir for all fuzzers. this should speed up
|
|
# compilation a bit, and allows for easier artifact management (caching and
|
|
# cargo clean).
|
|
export CARGO_TARGET_DIR="$libafl/target"
|
|
mkdir -p "$CARGO_TARGET_DIR"
|
|
|
|
git submodule init && git submodule update
|
|
|
|
# override default profile settings for speed
|
|
# export RUSTFLAGS="-C prefer-dynamic"
|
|
for profile in DEV RELEASE; # loop for all profiles
|
|
do
|
|
export CARGO_PROFILE_"$profile"_OPT_LEVEL=z # optimize for size
|
|
# runs into shared target dir bug:
|
|
# [pid 351769] openat(AT_FDCWD, "LibAFL/target/release/deps/libc-dbff77a14da5d893.libc.5deb7d4a-cgu.0.rcgu.dwo", O_RDONLY|O_CLOEXEC) = -1 ENOENT (No such file or directory)
|
|
# error: failed to build archive: No such file or directory
|
|
# export CARGO_PROFILE_"$profile"_SPLIT_DEBUGINFO=unpacked # minimize debug info
|
|
# export CARGO_PROFILE_"$profile"_PANIC=abort
|
|
export CARGO_PROFILE_"$profile"_INCREMENTAL=true
|
|
done
|
|
|
|
# record time of each fuzzer
|
|
declare -A time_record || (echo "declare -A not avaliable, please update your bash version to 4";exit 1)
|
|
|
|
# shellcheck disable=SC2116
|
|
for fuzzer in $(echo "$fuzzers" "$backtrace_fuzzers");
|
|
do
|
|
# skip nyx test on non-linux platforms
|
|
if [[ $fuzzer == *"nyx_"* ]] && [[ $(uname -s) != "Linux" ]]; then
|
|
continue
|
|
fi
|
|
|
|
cd "$fuzzer" || exit 1
|
|
start=$(date +%s)
|
|
# Clippy checks
|
|
if [ "$1" != "--no-fmt" ]; then
|
|
|
|
echo "[*] Checking fmt for $fuzzer"
|
|
cargo fmt --all -- --check || exit 1
|
|
echo "[*] Running clippy for $fuzzer"
|
|
cargo clippy || exit 1
|
|
else
|
|
echo "[+] Skipping fmt and clippy for $fuzzer (--no-fmt specified)"
|
|
fi
|
|
|
|
if [ -e ./Makefile.toml ] && grep -qF "skip_core_tasks = true" Makefile.toml; then
|
|
echo "[*] Building $fuzzer (running tests is not supported in this context)"
|
|
cargo make build || exit 1
|
|
echo "[+] Done building $fuzzer"
|
|
elif [ -e ./Makefile.toml ]; then
|
|
echo "[*] Testing $fuzzer"
|
|
cargo make test || exit 1
|
|
echo "[+] Done testing $fuzzer"
|
|
else
|
|
echo "[*] Building $fuzzer"
|
|
cargo build || exit 1
|
|
echo "[+] Done building $fuzzer"
|
|
fi
|
|
end=$(date +%s)
|
|
time_record[$fuzzer]=$((end-start))
|
|
du -sh "$CARGO_TARGET_DIR"
|
|
# Save disk space
|
|
cargo clean -p "$(basename "$fuzzer")"
|
|
cargo clean --release -p "$(basename "$fuzzer")" 2> /dev/null
|
|
# Leaving these in the cache results in lots of duplicate build artifacts
|
|
# (many different feature flag combinations, ...), so let's prune them.
|
|
for clean_pkgid in libafl libafl_targets libafl_sugar; do
|
|
cargo clean -p "$clean_pkgid" 2> /dev/null
|
|
cargo clean --release -p "$clean_pkgid" 2> /dev/null
|
|
done
|
|
du -sh "$CARGO_TARGET_DIR"
|
|
cd "$libafl" || exit 1
|
|
echo ""
|
|
done
|
|
|
|
# print time for each fuzzer
|
|
for key in "${!time_record[@]}"; do
|
|
echo "dir: $key, time: ${time_record[$key]}";
|
|
done
|