Use work-stealing for load-balancing in the GC
[ghc.git] / validate
1 #!/bin/sh
2
3 # Flags:
4 #   --no-clean:       don't make clean first, just carry on from
5 #                     a previous interrupted validation run
6 #   --testsuite-only: don't build the compiler, just run
7 #                     the test suite
8 #   --hpc:            build stage2 with -fhpc, and see how much of the
9 #                     compiler the test suite covers.
10 #                     2008-07-01: 63% slower than the default.
11 #                     HTML generated here: testsuite/hpc_output/hpc_index.html
12 #   --fast:           Default. Opposite to --slow.
13 #   --slow:           Build stage2 with -DDEBUG.
14 #                     2008-07-01: 14% slower than the default.
15
16 set -e
17
18 no_clean=0
19 testsuite_only=0
20 hpc=NO
21 slow=NO
22
23 while [ $# -gt 0 ]
24 do
25     case "$1" in
26     --no-clean)
27         no_clean=1
28         ;;
29     --testsuite-only)
30         testsuite_only=1
31         ;;
32     --hpc)
33         hpc=YES
34         ;;
35     --slow)
36         slow=YES
37         ;;
38     --fast)
39         slow=NO
40         ;;
41     *)
42         echo "Bad argument: $1" >&2
43         exit 1;;
44     esac
45     shift
46 done
47
48 if [ "$CPUS" = "" ]; then
49     threads=2
50 else
51     threads=$((($CPUS + 1) * 2)) # `expr $CPUS + 1`
52 fi
53
54 if [ $testsuite_only -eq 0 ]; then
55
56 if [ $no_clean -eq 0 ]; then
57     if [ -f mk/config.mk ]; then
58         make distclean
59     fi
60
61     case $OSTYPE in
62         cygwin|msys) config_args=--build=i386-unknown-mingw32
63             if [ -f c:/mingw/bin/gcc.exe ]
64             then
65                 config_args="$config_args --with-gcc=c:/mingw/bin/gcc"
66             fi
67             if [ -f c:/mingw/bin/ld.exe ]
68             then
69                 config_args="$config_args --with-ld=c:/mingw/bin/ld"
70             fi
71             ;;
72     esac
73
74     sh boot
75     ./configure "--prefix=`pwd`/inst" $config_args
76 fi
77
78 thisdir=`utils/pwd/pwd forwardslash`
79
80 echo "Validating=YES" > mk/are-validating.mk
81
82 make -j$threads ValidateHpc=$hpc ValidateSlow=$slow
83 fi # testsuite-only
84
85 if [ "$hpc" = YES ]
86 then
87     # XXX With threads we'd need to give a different tix file to each thread
88     #     and then sum them up at the end
89     threads=1
90     HPCTIXFILE=$thisdir/testsuite/hpc_output/ghc.tix
91     export HPCTIXFILE
92     rm -f $HPCTIXFILE
93 fi
94
95 make -C testsuite/tests/ghc-regress fast stage=2 CLEANUP=1 THREADS=$threads 2>&1 | tee testlog
96
97 if [ "$hpc" = YES ]
98 then
99     utils/hpc/hpc markup --hpcdir=. --srcdir=compiler --srcdir=testsuite/hpc_output --destdir=testsuite/hpc_output testsuite/hpc_output/ghc.tix
100 fi
101
102 echo "-------------------------------------------------------------------"
103 if
104     grep '\<0 caused framework failures' testlog >/dev/null 2>/dev/null &&
105     grep '\<0 unexpected passes' testlog >/dev/null 2>/dev/null &&
106     grep '\<0 unexpected failures' testlog >/dev/null 2>/dev/null ; then
107     if [ $testsuite_only -eq 0 ] && [ $no_clean -eq 0 ]
108     then
109         cat <<EOF
110 Congratulations!  This tree has passed minimal testing.
111
112 NOTE: If you have made changes that may cause failures not tested for by
113 the minimal testing procedure, please do further testing as necessary.
114
115 When you are satisfied that you haven't broken anything, go ahead and
116 push/send your patches.
117 EOF
118         if grep -q "^[^#]" mk/validate.mk
119         then
120             cat <<EOF
121
122 WARNING: You seem to have things set in mk/validate.mk. Please check
123 that it is OK before pushing.
124 EOF
125         fi
126     else
127         cat <<EOF
128 I didn't find any problems, but this wasn't a complete validate run,
129 so be careful!
130
131 NOTE: If you have made changes that may cause failures not tested for by
132 the minimal testing procedure, please do further testing as necessary.
133 EOF
134    fi
135 else
136     cat <<EOF
137 Oops!  Looks like you have some unexpected test results or framework failures.
138 Please fix them before pushing/sending patches.
139 EOF
140 fi
141 echo "-------------------------------------------------------------------"
142