-
Notifications
You must be signed in to change notification settings - Fork 38
/
Copy pathcomp
executable file
·148 lines (133 loc) · 3.74 KB
/
comp
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
#!/bin/bash
# A script to test the compilation of a particular PHP script. In particular, this copies originals to the local directory, and generates readable C which can be used to debug the assembly. Pass -g as the second argument to run the debugger.
# parse command line parms
PHC_ARGS=""
DEBUG_PHC=0
OPTIMIZE=0
GDB="libtool --mode=execute gdb --args"
VALGRIND="libtool --mode=execute valgrind"
for var in $@
do
if [ "-$NEXT_IS_COMMAND" = "-1" ]
then
PHC_ARGS="$PHC_ARGS $var"
NEXT_IS_COMMAND=0
elif [ "-$var" = "--g" ] # debug
then
EXEC_NAME="$GDB "
DEBUG_PHC=1
elif [ "-$var" = "--V" ] # valgrind
then
EXEC_NAME="$VALGRIND "
elif [ "-$var" = "--M" ] # Massif
then
EXEC_NAME="$VALGRIND --tool=massif "
elif [ "-$var" = "--C" ]
then
NEXT_IS_COMMAND=1
elif [ "-$var" = "--B" ] # Benchmark
then
EXEC_NAME="$VALGRIND --tool=cachegrind --branch-sim=yes "
elif [ "-$var" = "--O" ] # Optimize
then
PHC_ARGS="$PHC_ARGS -O3"
OPTIMIZE=1
elif [ "-$var" = "--S" ] # Statistics
then
PHC_ARGS="$PHC_ARGS --rt-stats"
STATS=1
elif [ "-$var" = "--R" ] # raise-globals
then
PHC_ARGS="$PHC_ARGS --run plugins/tests/raise_globals.la"
elif [ "-$var" = "--F" ] # Generate FDO
then
GCC_ARGS="$GCC_ARGS -fprofile-generate"
elif [ "-$var" = "--f" ] # Use FDO
then
GCC_ARGS="$GCC_ARGS -fprofile-use"
elif [ "-$var" = "--r" ] # references
then
PHC_ARGS="$PHC_ARGS --run plugins/tools/debug_zval.la"
elif [ "-$var" = "--d" ] # demi-eval
then
PHC_ARGS="$PHC_ARGS --run plugins/tools/demi_eval.la --r-option=true"
elif [ "-$var" = "--D" ] # also demi-eval
then
PHC_ARGS="$PHC_ARGS --run plugins/tools/demi_eval.la --r-option=false"
elif [ "-$var" = "--v" ] # verbose
then
set -x
elif [ "-$var" = "--i" ] # include
then
PHC_ARGS="$PHC_ARGS --include"
else
PHP_NAME=$var
fi
done
NAME=`basename $PHP_NAME` # remove the filename suffix
NAME=${NAME%.php}
OUT_NAME=$NAME.out
EXEC_NAME="$EXEC_NAME./$OUT_NAME"
DIRNAME=`dirname $PHP_NAME`
PHC_ARGS="$PHC_ARGS -d include_path=.:test/subjects:$DIRNAME"
#PHC_ARGS="$PHC_ARGS "
cp $PHP_NAME $NAME.orig.php || exit 1;
# generate HIR
#src/phc $PHP_NAME $PHC_ARGS --dump=hir > $NAME.hir.php
#if [[ $? != 0 ]]; then
# if [[ $DEBUG_PHC != 0 ]]; then
# exec $GDB src/phc $PHP_NAME $PHC_ARGS --dump=hir
# fi
# exit 1
#fi
# generate MIR
#src/phc $PHP_NAME $PHC_ARGS --dump=generate-c > $NAME.mir.php
#if [[ $? != 0 ]]; then
# if [[ $DEBUG_PHC != 0 ]]; then
# exec $GDB src/phc $PHP_NAME $PHC_ARGS --dump=generate-c
# fi
# exit 1
#fi
# generate uppered HIR
#src/phc $PHP_NAME $PHC_ARGS --udump=AST-to-HIR > $NAME.uhir.php
#if [[ $? != 0 ]]; then
# if [[ $DEBUG_PHC != 0 ]]; then
# exec gdb --args src/phc $PHP_NAME $PHC_ARGS --udump=AST-to-HIR
# fi
# exit 1
#fi
# generate C
src/phc --generate-c $PHC_ARGS $PHP_NAME > $NAME.c
if [[ $? != 0 ]]; then
if [[ $DEBUG_PHC != 0 ]]; then
exec $GDB src/phc --generate-c $PHC_ARGS $PHP_NAME
fi
exit 1
fi
indent $NAME.c
# indent assumes 8-space tabs; make sure vim agrees
echo "// vi:set ts=8:" >> $NAME.c
# compile it, using phc's verbose output as the command. Pass an empty program so it doesnt compile twice, and if optimizing,
GCC_COMMAND=`echo '<?php ?>' | src/phc -v -c $PHC_ARGS -o $OUT_NAME | grep ^gcc | sed "s# - # $NAME.c #"` || exit 1
if [[ $OPTIMIZE != 0 ]]
then
if [[ -d '/usr/local/php-opt' ]]; then
GCC_COMMAND=`echo $GCC_COMMAND | sed 's#/usr/local/#/usr/local/php-opt/#g'` || exit 1
else
echo '-O relies on presence of /usr/local/php-opt/'
exit 1
fi
fi
GCC_COMMAND="$GCC_COMMAND $GCC_ARGS"
$GCC_COMMAND
if [[ $? != 0 ]]; then
if [[ $DEBUG_PHC != 0 ]]; then
exec $GDB src/phc --generate-c $PHC_ARGS $PHP_NAME
fi
exit 1
fi
#if [[ $STATS == 1 ]]; then
# exec $EXEC_NAME 2>$NAME.stats
# exec misc/counter_stats $NAME.stats
#fi
exec $EXEC_NAME