92 lines
1.7 KiB
Bash
Executable File
92 lines
1.7 KiB
Bash
Executable File
#!/bin/sh
|
|
|
|
# Add or remove cores here. Each entry should be a full FuseSoC VLNV.
|
|
CORES="
|
|
joppeb:wb:wb_mem32
|
|
joppeb:wb:wb_gpio
|
|
joppeb:wb:wb_gpio_banks
|
|
joppeb:wb:jtag_wb_bridge
|
|
joppeb:wb:wb_timer
|
|
"
|
|
|
|
# Add or remove formal tasks here.
|
|
TASKS="
|
|
bmc
|
|
cover
|
|
prove
|
|
"
|
|
|
|
total=0
|
|
passed=0
|
|
failed=0
|
|
passed_runs=""
|
|
failed_runs=""
|
|
|
|
run_task() {
|
|
core="$1"
|
|
task="$2"
|
|
label="$core [$task]"
|
|
log_file=""
|
|
total=$((total + 1))
|
|
|
|
printf '\n[%d] Running formal %s for %s\n' "$total" "$task" "$core"
|
|
|
|
log_file=$(mktemp /tmp/check_formal.XXXXXX) || exit 2
|
|
|
|
if \
|
|
FUSESOC_CORE="$core" \
|
|
FUSESOC_TASK="$task" \
|
|
script -qefc 'fusesoc run --target formal "$FUSESOC_CORE" --taskname "$FUSESOC_TASK"' "$log_file" \
|
|
>/dev/null 2>&1
|
|
then
|
|
passed=$((passed + 1))
|
|
passed_runs="$passed_runs
|
|
$label"
|
|
printf 'Result: PASS (%s)\n' "$label"
|
|
rm -f "$log_file"
|
|
return 0
|
|
else
|
|
failed=$((failed + 1))
|
|
failed_runs="$failed_runs
|
|
$label"
|
|
printf 'Result: FAIL (%s)\n' "$label"
|
|
printf 'Captured log for %s:\n' "$label"
|
|
cat "$log_file" | grep summary
|
|
rm -f "$log_file"
|
|
return 1
|
|
fi
|
|
}
|
|
|
|
for core in $CORES; do
|
|
for task in $TASKS; do
|
|
run_task "$core" "$task"
|
|
done
|
|
done
|
|
|
|
printf '\nFormal run summary\n'
|
|
printf ' Total: %d\n' "$total"
|
|
printf ' Passed: %d\n' "$passed"
|
|
printf ' Failed: %d\n' "$failed"
|
|
|
|
if [ -n "$passed_runs" ]; then
|
|
printf '\nPassed runs:\n'
|
|
printf '%s\n' "$passed_runs" | while IFS= read -r run; do
|
|
if [ -n "$run" ]; then
|
|
printf ' - %s\n' "$run"
|
|
fi
|
|
done
|
|
fi
|
|
|
|
if [ -n "$failed_runs" ]; then
|
|
printf '\nFailed runs:\n'
|
|
printf '%s\n' "$failed_runs" | while IFS= read -r run; do
|
|
if [ -n "$run" ]; then
|
|
printf ' - %s\n' "$run"
|
|
fi
|
|
done
|
|
fi
|
|
|
|
if [ "$failed" -ne 0 ]; then
|
|
exit 1
|
|
fi
|