1ffeaf689SAlexander Kabaev#!/usr/bin/env bash
2ffeaf689SAlexander Kabaev
3ffeaf689SAlexander Kabaev# Script to do performance testing.
4ffeaf689SAlexander Kabaev
5ffeaf689SAlexander Kabaev# Invocation
6ffeaf689SAlexander Kabaev# check_performance SRC_DIR BUILD_DIR
7ffeaf689SAlexander Kabaev
8ffeaf689SAlexander Kabaev# 1: variables
9ffeaf689SAlexander Kabaev#
10ffeaf689SAlexander KabaevSRC_DIR=$1
11ffeaf689SAlexander KabaevBUILD_DIR=$2
12ffeaf689SAlexander Kabaev
13ffeaf689SAlexander Kabaev# Now that we've successfully translated the numerical option into
14ffeaf689SAlexander Kabaev# a symbolic one, we can safely ignore it.
15ffeaf689SAlexander Kabaevshift
16ffeaf689SAlexander Kabaev
17ffeaf689SAlexander Kabaev# This has been true all along.  Found out about it the hard way...
18ffeaf689SAlexander Kabaevcase $BASH_VERSION in
19ffeaf689SAlexander Kabaev    1*)
20ffeaf689SAlexander Kabaev	echo 'You need bash 2.x to run check_performance.  Exiting.';
21ffeaf689SAlexander Kabaev	exit 1 ;;
22ffeaf689SAlexander Kabaev    *)   ;;
23ffeaf689SAlexander Kabaevesac
24ffeaf689SAlexander Kabaev
25ffeaf689SAlexander Kabaevflags_script=$BUILD_DIR/scripts/testsuite_flags
26*f8a1b7d9SAlexander KabaevINCLUDES=`$flags_script --build-includes`
27*f8a1b7d9SAlexander KabaevPCH_FLAGS=`$flags_script --cxxpchflags`
28ffeaf689SAlexander KabaevFLAGS=`$flags_script --cxxflags`
29ffeaf689SAlexander KabaevTHREAD_FLAG='-pthread'
30ffeaf689SAlexander KabaevCOMPILER=`$flags_script --build-cxx`
31ffeaf689SAlexander KabaevSH_FLAG="-Wl,--rpath -Wl,$BUILD_DIR/../../gcc \
32ffeaf689SAlexander Kabaev         -Wl,--rpath -Wl,$BUILD_DIR/src/.libs"
33ffeaf689SAlexander KabaevST_FLAG="-static"
34ffeaf689SAlexander KabaevLINK=$SH_FLAG
35*f8a1b7d9SAlexander KabaevCXX="$COMPILER $INCLUDES $PCH_FLAGS $FLAGS $LINK"
36*f8a1b7d9SAlexander KabaevLIBS="./libtestc++.a"
37ffeaf689SAlexander KabaevTESTS_FILE="testsuite_files_performance"
38ffeaf689SAlexander Kabaev
39ffeaf689SAlexander Kabaevfor NAME in `cat $TESTS_FILE`
40ffeaf689SAlexander Kabaevdo
41ffeaf689SAlexander Kabaev  RUN=true
42*f8a1b7d9SAlexander Kabaev  TESTNAME=$SRC_DIR/testsuite/$NAME
43*f8a1b7d9SAlexander Kabaev  FILE_NAME="`basename $NAME`"
44*f8a1b7d9SAlexander Kabaev  FILE_NAME="`echo $FILE_NAME | sed 's/.cc//g'`"
45*f8a1b7d9SAlexander Kabaev
46*f8a1b7d9SAlexander Kabaev  # TEST_S == single thread
47*f8a1b7d9SAlexander Kabaev  # TEST_B == do both single and multi-thread
48*f8a1b7d9SAlexander Kabaev  # TEST_T == multi-thread
49*f8a1b7d9SAlexander Kabaev  for CYCLE in `sed -n 's,.*\(TEST_[SB][0-9]*\)$,\1,p' $TESTNAME`
50ffeaf689SAlexander Kabaev  do
51ffeaf689SAlexander Kabaev    RUN=false
52ffeaf689SAlexander Kabaev    echo $NAME $CYCLE
53*f8a1b7d9SAlexander Kabaev    EXE_NAME="`echo $FILE_NAME-$CYCLE.exe`"
54*f8a1b7d9SAlexander Kabaev    $CXX -DNOTHREAD -D$CYCLE $TESTNAME $LIBS -o $EXE_NAME
55*f8a1b7d9SAlexander Kabaev    if [ -f $EXE_NAME ]; then
56ffeaf689SAlexander Kabaev      ./$EXE_NAME
57*f8a1b7d9SAlexander Kabaev    else
58*f8a1b7d9SAlexander Kabaev      echo "compile error:"
59*f8a1b7d9SAlexander Kabaev      echo "$CXX -DNOTHREAD -D$CYCLE $TESTNAME $LIBS -o $EXE_NAME"
60*f8a1b7d9SAlexander Kabaev    fi
61ffeaf689SAlexander Kabaev  done
62*f8a1b7d9SAlexander Kabaev
63*f8a1b7d9SAlexander Kabaev  for CYCLE in `sed -n 's,.*\(TEST_[TB][0-9]*\)$,\1,p' $TESTNAME`
64ffeaf689SAlexander Kabaev  do
65ffeaf689SAlexander Kabaev    RUN=false
66*f8a1b7d9SAlexander Kabaev    echo $NAME $CYCLE thread
67*f8a1b7d9SAlexander Kabaev    EXE_NAME="`echo $FILE_NAME-$CYCLE.exe`"
68*f8a1b7d9SAlexander Kabaev    $CXX $THREAD_FLAG -D$CYCLE $TESTNAME $LIBS -o $EXE_NAME
69*f8a1b7d9SAlexander Kabaev    if [ -f $EXE_NAME ]; then
70ffeaf689SAlexander Kabaev      ./$EXE_NAME
71*f8a1b7d9SAlexander Kabaev    else
72*f8a1b7d9SAlexander Kabaev      echo "compile error:"
73*f8a1b7d9SAlexander Kabaev      echo "$CXX $THREAD_FLAG -D$CYCLE $TESTNAME $LIBS -o $EXE_NAME"
74*f8a1b7d9SAlexander Kabaev    fi
75ffeaf689SAlexander Kabaev  done
76*f8a1b7d9SAlexander Kabaev
77ffeaf689SAlexander Kabaev  if $RUN; then
78ffeaf689SAlexander Kabaev    echo $NAME
79*f8a1b7d9SAlexander Kabaev    EXE_NAME="`echo $FILE_NAME.exe`"
80*f8a1b7d9SAlexander Kabaev    $CXX $TESTNAME $LIBS -o $EXE_NAME
81*f8a1b7d9SAlexander Kabaev    if [ -f $EXE_NAME ]; then
82*f8a1b7d9SAlexander Kabaev	./$EXE_NAME >& tmp.$FILE_NAME
83*f8a1b7d9SAlexander Kabaev    else
84*f8a1b7d9SAlexander Kabaev      echo "compile error:"
85*f8a1b7d9SAlexander Kabaev      echo "$CXX $TESTNAME $LIBS -o $EXE_NAME"
86*f8a1b7d9SAlexander Kabaev    fi
87*f8a1b7d9SAlexander Kabaev    if [ -s tmp.$FILE_NAME ]; then
88*f8a1b7d9SAlexander Kabaev	mv tmp.$FILE_NAME $FILE_NAME.xml
89*f8a1b7d9SAlexander Kabaev    fi
90ffeaf689SAlexander Kabaev  fi
91ffeaf689SAlexander Kabaevdone
92ffeaf689SAlexander Kabaev
93ffeaf689SAlexander Kabaevexit 0
94