aboutsummaryrefslogtreecommitdiffstats
path: root/tests/gen-tests-makefile.sh
diff options
context:
space:
mode:
Diffstat (limited to 'tests/gen-tests-makefile.sh')
-rwxr-xr-xtests/gen-tests-makefile.sh94
1 files changed, 94 insertions, 0 deletions
diff --git a/tests/gen-tests-makefile.sh b/tests/gen-tests-makefile.sh
new file mode 100755
index 000000000..176890d70
--- /dev/null
+++ b/tests/gen-tests-makefile.sh
@@ -0,0 +1,94 @@
+set -eu
+
+YOSYS_BASEDIR="$(cd "$(dirname "${BASH_SOURCE[0]}")"/../ >/dev/null 2>&1 && pwd)"
+
+# $ generate_target target_name test_command
+generate_target() {
+ target_name=$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%.*}.log $yosys_args $ys_file"
+}
+
+# $ generate_bash_test bash_file
+generate_bash_test() {
+ bash_file=$1
+ generate_target "$bash_file" "bash -v $bash_file >${bash_file%.*}.log 2>&1"
+}
+
+# $ generate_tests [-y|--yosys-scripts] [-s|--prove-sv] [-b|--bash] [-a|--yosys-args yosys_args]
+generate_tests() {
+ do_ys=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
+ ;;
+ -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_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_sv = true ]]; then
+ for x in *.sv; do
+ if [ ! -f "${x%.sv}.ys" ]; then
+ generate_ys_test "$x" "-p \"prep -top top; sat -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
+}
+
+run_tests() {
+ generate_tests "$@" > run-test.mk
+ exec ${MAKE:-make} -f run-test.mk
+}