131 lines
2.8 KiB
Bash
131 lines
2.8 KiB
Bash
#!/bin/sh
|
|
# Compile GNU Chill programs.
|
|
: || exec /bin/sh -f $0 $argv:q
|
|
|
|
# The compiler name might be different when doing cross-compilation
|
|
# (this should be configured)
|
|
gcc_name=gcc
|
|
whatgcc=gcc
|
|
speclang=-xnone
|
|
startfile=chillrt0
|
|
gnuchill_script_flags=
|
|
gnuchill_version=unknown
|
|
extraflags=
|
|
|
|
# replace the command name by the name of the new command
|
|
progname=`basename $0`
|
|
case "$0" in
|
|
*/*)
|
|
gcc=`echo $0 | sed -e "s;/[^/]*$;;"`/$gcc_name
|
|
;;
|
|
*)
|
|
gcc=$gcc_name
|
|
;;
|
|
esac
|
|
|
|
# $first is yes for first arg, no afterwards.
|
|
first=yes
|
|
# If next arg is the argument of an option, $quote is non-empty.
|
|
# More precisely, it is the option that wants an argument.
|
|
quote=
|
|
# $library is made empty to disable use of libchill.
|
|
library="-lchill"
|
|
libpath=chillrt
|
|
numargs=$#
|
|
|
|
for arg
|
|
do
|
|
if [ $first = yes ]
|
|
then
|
|
# Need some 1st arg to `set' which does not begin with `-'.
|
|
# We get rid of it after the loop ends.
|
|
set gcc
|
|
first=no
|
|
fi
|
|
# If you have to ask what this does, you should not edit this file. :-)
|
|
# The ``S'' at the start is so that echo -nostdinc does not eat the
|
|
# -nostdinc.
|
|
arg=`echo "S$arg" | sed "s/^S//; s/'/'\\\\\\\\''/g"`
|
|
if [ x$quote != x ]
|
|
then
|
|
quote=
|
|
else
|
|
quote=
|
|
case $arg in
|
|
-nostdlib)
|
|
# Inhibit linking with -lchill.
|
|
library=
|
|
libpath=
|
|
startfile=
|
|
;;
|
|
-B*)
|
|
gcc=`echo $arg | sed -e "s/^-B//"`$gcc_name
|
|
;;
|
|
-[bBVDUoeTuIYmLiA] | -Tdata | -Xlinker)
|
|
# these switches take following word as argument,
|
|
# so don't treat it as a file name.
|
|
quote=$arg
|
|
;;
|
|
-[cSEM] | -MM)
|
|
# Don't specify libraries if we won't link,
|
|
# since that would cause a warning.
|
|
library=
|
|
libpath=
|
|
startfile=
|
|
;;
|
|
-x*)
|
|
speclang=$arg
|
|
;;
|
|
-v)
|
|
# catch `chill -v'
|
|
if [ $numargs = 1 ] ; then
|
|
library=
|
|
libpath=
|
|
startfile=
|
|
fi
|
|
echo "GNUCHILL version $gnuchill_version"
|
|
;;
|
|
-fgrant-only | -fchill-grant-only)
|
|
#inhibit production of an object file
|
|
extraflags="-S -o /dev/null"
|
|
library=
|
|
libpath=
|
|
startfile=
|
|
;;
|
|
-*)
|
|
# Pass other options through; they don't need -x and aren't inputs.
|
|
;;
|
|
*)
|
|
# If file ends in .i, put options around it.
|
|
# But not if a specified -x option is currently active.
|
|
case "$speclang $arg" in -xnone\ *.[i])
|
|
set "$@" -xchill "'$arg'" -xnone
|
|
continue
|
|
esac
|
|
;;
|
|
esac
|
|
fi
|
|
set "$@" "'$arg'"
|
|
done
|
|
|
|
# Get rid of that initial 1st arg
|
|
if [ $first = no ]; then
|
|
shift
|
|
else
|
|
echo "$0: No input files specified."
|
|
exit 1
|
|
fi
|
|
|
|
if [ x$quote != x ]
|
|
then
|
|
echo "$0: argument to \`$quote' missing"
|
|
exit 1
|
|
fi
|
|
|
|
# The '-ansi' flag prevents cpp from changing this:
|
|
# NEWMODE x = SET (sun, mon, thu, wed, thu, fri, sat);
|
|
#to this:
|
|
# NEWMODE x = SET (1, mon, thu, wed, thu, fri, sat);
|
|
#which is a CHILL syntax error.
|
|
eval $whatgcc -ansi $gnuchill_script_flags $startfile "$@" $libpath $library $extraflags
|