added status function
[libfirm] / ir / be / tools / eccp
1 #!/bin/sh
2 #
3 # Wrapper script for edg to simulate most common gcc flags
4 #
5 # This is not perfectly exact but should be good enough for most cases in
6 # practice :)
7 # @author: Matthias Braun
8 #
9
10 EDGFLAGS="-b vrfy=assert -b ra-chordal-vrfy=assert --gnu=30305 --c -I/usr/lib/gcc-lib/i586-suse-linux/3.3.5/include"
11
12 ASSEMBLEFLAGS=""
13 AS=as-intel-2.17
14 OPT0="-fno-opt"
15 OPT1=""
16 OPT2="-fno-strength-red"
17 OPT3="-fif-conv -finline -fno-strength-red"
18 #OPT3="-finline -fno-strength-red"
19
20 mode=LINK
21 declare -a LFLAGS
22 declare -a CPPFLAGS
23 declare -a CFLAGS
24 declare -a CFILES
25 declare -a SFILES
26 declare -a OFILES
27 OPTFLAGS=""
28 OUTFILE=""
29 DEBUG=""
30 CFLAGS=()
31 LFLAGS=()
32 # parse commandline
33 while [ -n "$1" ]
34 do
35         case "$1" in
36                 -S )    mode=COMPILE;;
37                 -c )    mode=ASSEMBLE;;
38                 -E )    mode=PREPROCESS;;
39                 -b )    shift ; CFLAGS=("${CFLAGS[@]}" -b "$1");;
40                 -b* )   CFLAGS=("${CFLAGS[@]}" "$1");;
41                 -o )    shift ; OUTFILE="$1";;
42                 -o* )   OUTFILE="`echo "$1" | sed -e "s/^-o//"`";;
43                 -v )    DEBUG="1";;
44                 --version )     echo "eccp version 0.1"; exit 0;;
45                 -Wl,* ) ;; # TODO
46                 -Wa,* ) ;;
47                 -Wp,* ) ;;
48                 -l )    LFLAGS=("${LFLAGS[@]}" "-l $1");;
49                 -L )    LFLAGS=("${LFLAGS[@]}" "-L $1");;
50                 -l* | -L* )     LFLAGS=("${LFLAGS[@]}" "$1");;
51                 -W* )   ;; #TODO
52                 -f )    shift;;
53                 -f* )   ;; #TODO
54                 -march=* )      ;;# TODO
55                 -g* )   ;; # TODO
56                 -pipe ) ;;
57                 -MF ) shift;; # TODO
58                 -MT ) shift;; # TODO
59                 -MD | -MP | -MM | -MG ) ;;
60                 -I ) shift; CPPFLAGS=("${CPPFLAGS[@]}" "-I $1");;
61                 -D ) shift; CPPFLAGS=("${CPPFLAGS[@]}" "-D $1");;
62                 -D* | -I* )     CPPFLAGS=("${CPPFLAGS[@]}" "$1");;
63                 -O0 )   OPTFLAGS="$OPT0";;
64                 -O | -O1 )      OPTFLAGS="$OPT1";;
65                 -O2 )   OPTFLAGS="$OPT2";;
66
67                 -O* )   OPTFLAGS="$OPT3";;
68
69                 -*      )   echo "WARNING: Unknown option $1" >& 2; exit 1;;
70
71                 *.c )   CFILES=("${CFILES[@]}" "$1");;
72                 *.s )   SFILES=("${SFILES[@]}" "$1");;
73                 *.o )   OFILES=("${OFILES[@]}" "$1");;
74                 * )     echo "WARNING: file format $1 not recognized" >&2;
75                         exit 1;;
76         esac
77         shift
78 done
79 CFLAGS=("${CFLAGS[@]}" $OPTFLAGS)
80
81 if [ "$DEBUG" == "1" ]; then
82         echo "OPTFLAGS ${OPTFLAGS}"
83         echo "CFLAGS ${CFLAGS[*]}"
84         echo "CPPFLAGS ${CPPFLAGS[*]}"
85         echo "LFLAGS ${LFLAGS[*]}"
86         echo "CFILES ${CFILES[*]}"
87         echo "SFILES ${SFILES[*]}"
88         echo "OFILES ${OFILE[*]}"
89         echo "OUTFILE $OUTFILE"
90 fi
91
92 if [ "$mode" = "LINK" -a "$OUTFILE" = "" ] ; then
93         OUTFILE="a.out"
94 fi
95
96 if [ "$mode" = "PREPROCESS" ] ; then
97         for cfile in "${CFILES[@]}"; do
98                 OUTFLAGS=""
99                 if [ -n "$OUTFILE" ] ; then
100                         OUTFLAGS="-o$OUTFILE"
101                 fi
102
103                 if [ "$DEBUG" = "1" ]; then
104                         echo gcc -E "${CPPFLAGS[@]}" "$cfile" "$OUTFLAGS"
105                 fi
106                 gcc -E "${CPPFLAGS[@]}" "$cfile" "$OUTFLAGS" || exit $?
107         done
108         exit 0
109 fi
110
111 if [ "$mode" = "COMPILE" -o "$mode" = "ASSEMBLE" -o $mode = "LINK" ] ; then
112         for cfile in "${CFILES[@]}"; do
113                 if [ -n "$OUTFILE" -a "$mode" = "COMPILE" ] ; then
114                         sfile="$OUTFILE"
115                 else
116                         sfile="`dirname "$cfile"`/`basename "$cfile" .c`.s"
117                 fi
118
119                 if [ "$DEBUG" = "1" ]; then
120                         echo edg $EDGFLAGS "${CPPFLAGS[@]}" "${CFLAGS[@]}" "$cfile" -o "$sfile"
121                 fi
122                 edg $EDGFLAGS "${CPPFLAGS[@]}" "${CFLAGS[@]}" "$cfile" || exit $?
123
124                 SFILES=("${SFILES[@]}" "$sfile")
125         done
126 fi
127
128 if [ "$mode" = "ASSEMBLE" -o "$mode" = "LINK" ] ; then
129         for sfile in "${SFILES[@]}"; do
130                 if [ -n "$OUTFILE" -a $mode = "ASSEMBLE" ] ; then
131                         ofile="$OUTFILE"
132                 else
133                         ofile="`dirname "$sfile"`/`basename "$sfile" .s`.o"
134                 fi
135                 if [ "$DEBUG" = "1" ]; then
136                         echo "$AS" $ASSEMBLEFLAGS "$sfile" -o "$ofile"
137                 fi
138                 "$AS" $ASSEMBLEFLAGS "$sfile" -o "$ofile" || exit $?
139                 OFILES=("${OFILES[@]}" "$ofile")
140         done
141 fi
142
143 if [ $mode = "LINK" ] ; then
144         if [ "$DEBUG" = "1" ]; then
145                 echo gcc ${LFLAGS[@]} ${OFILES[@]} -o "$OUTFILE"
146         fi
147         gcc ${LFLAGS[@]} ${OFILES[@]} -o "$OUTFILE"
148 fi