Merge pull request #3310 from robinsonb5-PRs/master
[yosys.git] / tests / gen-tests-makefile.sh
1 set -eu
2
3 YOSYS_BASEDIR="$(cd "$(dirname "${BASH_SOURCE[0]}")"/../ >/dev/null 2>&1 && pwd)"
4
5 # $ generate_target target_name test_command
6 generate_target() {
7 target_name=$1
8 test_command=$2
9 echo "all: $target_name"
10 echo ".PHONY: $target_name"
11 echo "$target_name:"
12 printf "\t@%s\n" "$test_command"
13 printf "\t@echo 'Passed %s'\n" "$target_name"
14 }
15
16 # $ generate_ys_test ys_file [yosys_args]
17 generate_ys_test() {
18 ys_file=$1
19 yosys_args=${2:-}
20 generate_target "$ys_file" "$YOSYS_BASEDIR/yosys -ql ${ys_file%.*}.log $yosys_args $ys_file"
21 }
22
23 # $ generate_bash_test bash_file
24 generate_bash_test() {
25 bash_file=$1
26 generate_target "$bash_file" "bash -v $bash_file >${bash_file%.*}.log 2>&1"
27 }
28
29 # $ generate_tests [-y|--yosys-scripts] [-s|--prove-sv] [-b|--bash] [-a|--yosys-args yosys_args]
30 generate_tests() {
31 do_ys=false
32 do_sv=false
33 do_sh=false
34 yosys_args=""
35
36 while [[ $# -gt 0 ]]; do
37 arg="$1"
38 case "$arg" in
39 -y|--yosys-scripts)
40 do_ys=true
41 shift
42 ;;
43 -s|--prove-sv)
44 do_sv=true
45 shift
46 ;;
47 -b|--bash)
48 do_sh=true
49 shift
50 ;;
51 -a|--yosys-args)
52 yosys_args+="$2"
53 shift
54 shift
55 ;;
56 *)
57 echo >&2 "Unknown argument: $1"
58 exit 1
59 esac
60 done
61
62 if [[ ! ( $do_ys = true || $do_sv = true || $do_sh = true ) ]]; then
63 echo >&2 "Error: No file types selected"
64 exit 1
65 fi
66
67 echo ".PHONY: all"
68 echo "all:"
69
70 if [[ $do_ys = true ]]; then
71 for x in *.ys; do
72 generate_ys_test "$x" "$yosys_args"
73 done
74 fi;
75 if [[ $do_sv = true ]]; then
76 for x in *.sv; do
77 if [ ! -f "${x%.sv}.ys" ]; then
78 generate_ys_test "$x" "-p \"prep -top top; sat -verify -prove-asserts\" $yosys_args"
79 fi;
80 done
81 fi;
82 if [[ $do_sh == true ]]; then
83 for s in *.sh; do
84 if [ "$s" != "run-test.sh" ]; then
85 generate_bash_test "$s"
86 fi
87 done
88 fi
89 }
90
91 run_tests() {
92 generate_tests "$@" > run-test.mk
93 exec ${MAKE:-make} -f run-test.mk
94 }