mirror of
https://github.com/YosysHQ/yosys
synced 2025-04-05 09:04:08 +00:00
Keep file extensions so that e.g. tribuf.ys and tribuf.sh don't try to output to the same log file.
111 lines
2.3 KiB
Bash
Executable file
111 lines
2.3 KiB
Bash
Executable file
set -eu
|
|
|
|
YOSYS_BASEDIR="$(cd "$(dirname "${BASH_SOURCE[0]}")"/../ >/dev/null 2>&1 && pwd)"
|
|
|
|
# $ generate_target target_name test_command
|
|
generate_target() {
|
|
target_name=$(basename $PWD)-$1
|
|
test_command=$2
|
|
echo "all: $target_name"
|
|
echo ".PHONY: $target_name"
|
|
echo "$target_name:"
|
|
printf "\t@%s\n" "$test_command"
|
|
printf "\t@echo 'Passed %s'\n" "$target_name"
|
|
}
|
|
|
|
# $ generate_ys_test ys_file [yosys_args]
|
|
generate_ys_test() {
|
|
ys_file=$1
|
|
yosys_args_=${2:-}
|
|
generate_target "$ys_file" "\"$YOSYS_BASEDIR/yosys\" -ql ${ys_file}.err $yosys_args_ $ys_file && mv ${ys_file}.err ${ys_file}.log"
|
|
}
|
|
|
|
# $ generate_tcl_test tcl_file [yosys_args]
|
|
generate_tcl_test() {
|
|
tcl_file=$1
|
|
yosys_args_=${2:-}
|
|
generate_target "$tcl_file" "\"$YOSYS_BASEDIR/yosys\" -ql ${tcl_file}.err $yosys_args_ $tcl_file && mv ${tcl_file}.err ${tcl_file}.log"
|
|
}
|
|
|
|
# $ generate_bash_test bash_file
|
|
generate_bash_test() {
|
|
bash_file=$1
|
|
generate_target "$bash_file" "bash -v $bash_file >${bash_file}.err 2>&1 && mv ${bash_file}.err ${bash_file}.log"
|
|
}
|
|
|
|
# $ generate_tests [-y|--yosys-scripts] [-s|--prove-sv] [-b|--bash] [-a|--yosys-args yosys_args]
|
|
generate_tests() {
|
|
do_ys=false
|
|
do_tcl=false
|
|
do_sv=false
|
|
do_sh=false
|
|
yosys_args=""
|
|
|
|
while [[ $# -gt 0 ]]; do
|
|
arg="$1"
|
|
case "$arg" in
|
|
-y|--yosys-scripts)
|
|
do_ys=true
|
|
shift
|
|
;;
|
|
-t|--tcl-scripts)
|
|
do_tcl=true
|
|
shift
|
|
;;
|
|
-s|--prove-sv)
|
|
do_sv=true
|
|
shift
|
|
;;
|
|
-b|--bash)
|
|
do_sh=true
|
|
shift
|
|
;;
|
|
-a|--yosys-args)
|
|
yosys_args+="$2"
|
|
shift
|
|
shift
|
|
;;
|
|
*)
|
|
echo >&2 "Unknown argument: $1"
|
|
exit 1
|
|
esac
|
|
done
|
|
|
|
if [[ ! ( $do_ys = true || $do_tcl = true || $do_sv = true || $do_sh = true ) ]]; then
|
|
echo >&2 "Error: No file types selected"
|
|
exit 1
|
|
fi
|
|
|
|
echo ".PHONY: all"
|
|
echo "all:"
|
|
|
|
if [[ $do_ys = true ]]; then
|
|
for x in *.ys; do
|
|
generate_ys_test "$x" "$yosys_args"
|
|
done
|
|
fi;
|
|
if [[ $do_tcl = true ]]; then
|
|
for x in *.tcl; do
|
|
generate_tcl_test "$x" "$yosys_args"
|
|
done
|
|
fi;
|
|
if [[ $do_sv = true ]]; then
|
|
for x in *.sv; do
|
|
if [ ! -f "${x%.sv}.ys" ]; then
|
|
generate_ys_test "$x" "-p \"prep -top top; async2sync; sat -enable_undef -verify -prove-asserts\" $yosys_args"
|
|
fi;
|
|
done
|
|
fi;
|
|
if [[ $do_sh == true ]]; then
|
|
for s in *.sh; do
|
|
if [ "$s" != "run-test.sh" ]; then
|
|
generate_bash_test "$s"
|
|
fi
|
|
done
|
|
fi
|
|
}
|
|
|
|
generate_mk() {
|
|
generate_tests "$@" > run-test.mk
|
|
}
|