| #!/bin/bash |
| |
| # This script invokes Microsoft Visual Studio C compiler from CygWin shell. |
| # The script command line parameters format is similar to GCC command line. |
| # Command line options: |
| # -c compile only |
| # -g generate debug info |
| # -O enable optimizations |
| # -o<file> output file name |
| # -D<name> macro definition |
| # -I<dir> include directory |
| # -p<file> PDB file name |
| # -x<lang> c or c++ |
| # -m<machine> i386 or x86_64 |
| |
| . `dirname $0`/mcc-env |
| |
| declare -a cmd |
| cmdpos=0 |
| |
| cflag=0 |
| gflag=0 |
| Oflag=0 |
| language= |
| machine= |
| oval= |
| |
| while getopts co:D:I:gO:p:x:m: name |
| do |
| case $name in |
| c) |
| cmd[cmdpos]="/c" |
| cmdpos=`expr $cmdpos + 1` |
| cflag=1 |
| ;; |
| g) |
| gflag=1 |
| ;; |
| O) |
| Oflag="$OPTARG" |
| ;; |
| o) |
| oval="$OPTARG" |
| ;; |
| D) |
| cmd[cmdpos]="/D$OPTARG" |
| cmdpos=`expr $cmdpos + 1` |
| ;; |
| I) |
| cmd[cmdpos]="/I`cygpath -m "$OPTARG"`" |
| cmdpos=`expr $cmdpos + 1` |
| ;; |
| p) |
| cmd[cmdpos]="/Fd`cygpath -m "$OPTARG"`" |
| cmdpos=`expr $cmdpos + 1` |
| ;; |
| x) |
| language="$OPTARG" |
| ;; |
| m) |
| machine="$OPTARG" |
| ;; |
| *) |
| echo Invalid option $name |
| exit 2 |
| ;; |
| esac |
| done |
| |
| shift `expr $OPTIND - 1` |
| |
| if [ $cflag != 0 ] ; then |
| if [ "$language" = "" -o "$language" = "c" ] ; then |
| cmd[cmdpos]="/TC" |
| cmdpos=`expr $cmdpos + 1` |
| elif [ "$language" = "c++" ] ; then |
| cmd[cmdpos]="/TP" |
| cmdpos=`expr $cmdpos + 1` |
| else |
| echo "Invalid value of -x" |
| exit 1 |
| fi |
| fi |
| |
| if [ ! -z "$oval" ] ; then |
| if [ $cflag = 0 ] ; then |
| cmd[cmdpos]="/Fe$oval" |
| else |
| cmd[cmdpos]="/Fo$oval" |
| fi |
| cmdpos=`expr $cmdpos + 1` |
| fi |
| |
| if [ $gflag = 1 ] ; then |
| CFLAGS1="/Zi /MTd" |
| else |
| CFLAGS1="/GF /Gy /FD /MT" |
| fi |
| if [ $Oflag = 0 ] ; then |
| CFLAGS2="/Od" |
| else |
| CFLAGS2="/O2 /Ob1" |
| fi |
| CFLAGS3="/Oy- /W4 /DWIN32 /D_CONSOLE" |
| |
| if [ "$machine" == "x86_64" ] ; then |
| export LIB=$(cygpath -aw "$VSHOME/VC/lib/amd64")\;$(cygpath -aw "$WINSDK/Lib/x64") |
| export PATH="$VSHOME/VC/bin/x86_amd64:$PATH" |
| if [ "$PROCESSOR_ARCHITECTURE" == "AMD64" -o "$PROCESSOR_ARCHITEW6432" == "AMD64" ] ; then |
| export PATH="$VSHOME/VC/bin/amd64:$PATH" |
| fi |
| fi |
| |
| cl.exe /nologo $CFLAGS1 $CFLAGS2 $CFLAGS3 "${cmd[@]}" "$@" || exit 1 |