1*1fd5a2e1SPrashanth Swaminathan#!/bin/sh 2*1fd5a2e1SPrashanth Swaminathan 3*1fd5a2e1SPrashanth Swaminathan# ***** BEGIN LICENSE BLOCK ***** 4*1fd5a2e1SPrashanth Swaminathan# Version: MPL 1.1/GPL 2.0/LGPL 2.1 5*1fd5a2e1SPrashanth Swaminathan# 6*1fd5a2e1SPrashanth Swaminathan# The contents of this file are subject to the Mozilla Public License Version 7*1fd5a2e1SPrashanth Swaminathan# 1.1 (the "License"); you may not use this file except in compliance with 8*1fd5a2e1SPrashanth Swaminathan# the License. You may obtain a copy of the License at 9*1fd5a2e1SPrashanth Swaminathan# http://www.mozilla.org/MPL/ 10*1fd5a2e1SPrashanth Swaminathan# 11*1fd5a2e1SPrashanth Swaminathan# Software distributed under the License is distributed on an "AS IS" basis, 12*1fd5a2e1SPrashanth Swaminathan# WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License 13*1fd5a2e1SPrashanth Swaminathan# for the specific language governing rights and limitations under the 14*1fd5a2e1SPrashanth Swaminathan# License. 15*1fd5a2e1SPrashanth Swaminathan# 16*1fd5a2e1SPrashanth Swaminathan# The Original Code is the MSVC wrappificator. 17*1fd5a2e1SPrashanth Swaminathan# 18*1fd5a2e1SPrashanth Swaminathan# The Initial Developer of the Original Code is 19*1fd5a2e1SPrashanth Swaminathan# Timothy Wall <[email protected]>. 20*1fd5a2e1SPrashanth Swaminathan# Portions created by the Initial Developer are Copyright (C) 2009 21*1fd5a2e1SPrashanth Swaminathan# the Initial Developer. All Rights Reserved. 22*1fd5a2e1SPrashanth Swaminathan# 23*1fd5a2e1SPrashanth Swaminathan# Contributor(s): 24*1fd5a2e1SPrashanth Swaminathan# Daniel Witte <[email protected]> 25*1fd5a2e1SPrashanth Swaminathan# 26*1fd5a2e1SPrashanth Swaminathan# Alternatively, the contents of this file may be used under the terms of 27*1fd5a2e1SPrashanth Swaminathan# either the GNU General Public License Version 2 or later (the "GPL"), or 28*1fd5a2e1SPrashanth Swaminathan# the GNU Lesser General Public License Version 2.1 or later (the "LGPL"), 29*1fd5a2e1SPrashanth Swaminathan# in which case the provisions of the GPL or the LGPL are applicable instead 30*1fd5a2e1SPrashanth Swaminathan# of those above. If you wish to allow use of your version of this file only 31*1fd5a2e1SPrashanth Swaminathan# under the terms of either the GPL or the LGPL, and not to allow others to 32*1fd5a2e1SPrashanth Swaminathan# use your version of this file under the terms of the MPL, indicate your 33*1fd5a2e1SPrashanth Swaminathan# decision by deleting the provisions above and replace them with the notice 34*1fd5a2e1SPrashanth Swaminathan# and other provisions required by the GPL or the LGPL. If you do not delete 35*1fd5a2e1SPrashanth Swaminathan# the provisions above, a recipient may use your version of this file under 36*1fd5a2e1SPrashanth Swaminathan# the terms of any one of the MPL, the GPL or the LGPL. 37*1fd5a2e1SPrashanth Swaminathan# 38*1fd5a2e1SPrashanth Swaminathan# ***** END LICENSE BLOCK ***** 39*1fd5a2e1SPrashanth Swaminathan 40*1fd5a2e1SPrashanth Swaminathan# 41*1fd5a2e1SPrashanth Swaminathan# GCC-compatible wrapper for cl.exe and ml.exe. Arguments are given in GCC 42*1fd5a2e1SPrashanth Swaminathan# format and translated into something sensible for cl or ml. 43*1fd5a2e1SPrashanth Swaminathan# 44*1fd5a2e1SPrashanth Swaminathan 45*1fd5a2e1SPrashanth Swaminathanargs_orig=$@ 46*1fd5a2e1SPrashanth Swaminathanargs="-nologo -W3" 47*1fd5a2e1SPrashanth Swaminathanlinkargs= 48*1fd5a2e1SPrashanth Swaminathanstatic_crt= 49*1fd5a2e1SPrashanth Swaminathandebug_crt= 50*1fd5a2e1SPrashanth Swaminathancl="cl" 51*1fd5a2e1SPrashanth Swaminathanml="ml" 52*1fd5a2e1SPrashanth Swaminathansafeseh="-safeseh" 53*1fd5a2e1SPrashanth Swaminathanoutput= 54*1fd5a2e1SPrashanth Swaminathanlibpaths= 55*1fd5a2e1SPrashanth Swaminathanlibversion=7 56*1fd5a2e1SPrashanth Swaminathanverbose= 57*1fd5a2e1SPrashanth Swaminathan 58*1fd5a2e1SPrashanth Swaminathanwhile [ $# -gt 0 ] 59*1fd5a2e1SPrashanth Swaminathando 60*1fd5a2e1SPrashanth Swaminathan case $1 61*1fd5a2e1SPrashanth Swaminathan in 62*1fd5a2e1SPrashanth Swaminathan --verbose) 63*1fd5a2e1SPrashanth Swaminathan verbose=1 64*1fd5a2e1SPrashanth Swaminathan shift 1 65*1fd5a2e1SPrashanth Swaminathan ;; 66*1fd5a2e1SPrashanth Swaminathan --version) 67*1fd5a2e1SPrashanth Swaminathan args="-help" 68*1fd5a2e1SPrashanth Swaminathan shift 1 69*1fd5a2e1SPrashanth Swaminathan ;; 70*1fd5a2e1SPrashanth Swaminathan -fexceptions) 71*1fd5a2e1SPrashanth Swaminathan # Don't enable exceptions for now. 72*1fd5a2e1SPrashanth Swaminathan #args="$args -EHac" 73*1fd5a2e1SPrashanth Swaminathan shift 1 74*1fd5a2e1SPrashanth Swaminathan ;; 75*1fd5a2e1SPrashanth Swaminathan -m32) 76*1fd5a2e1SPrashanth Swaminathan shift 1 77*1fd5a2e1SPrashanth Swaminathan ;; 78*1fd5a2e1SPrashanth Swaminathan -m64) 79*1fd5a2e1SPrashanth Swaminathan ml="ml64" # "$MSVC/x86_amd64/ml64" 80*1fd5a2e1SPrashanth Swaminathan safeseh= 81*1fd5a2e1SPrashanth Swaminathan shift 1 82*1fd5a2e1SPrashanth Swaminathan ;; 83*1fd5a2e1SPrashanth Swaminathan -marm) 84*1fd5a2e1SPrashanth Swaminathan ml='armasm' 85*1fd5a2e1SPrashanth Swaminathan safeseh= 86*1fd5a2e1SPrashanth Swaminathan shift 1 87*1fd5a2e1SPrashanth Swaminathan ;; 88*1fd5a2e1SPrashanth Swaminathan -marm64) 89*1fd5a2e1SPrashanth Swaminathan ml='armasm64' 90*1fd5a2e1SPrashanth Swaminathan safeseh= 91*1fd5a2e1SPrashanth Swaminathan shift 1 92*1fd5a2e1SPrashanth Swaminathan ;; 93*1fd5a2e1SPrashanth Swaminathan -clang-cl) 94*1fd5a2e1SPrashanth Swaminathan cl="clang-cl" 95*1fd5a2e1SPrashanth Swaminathan shift 1 96*1fd5a2e1SPrashanth Swaminathan ;; 97*1fd5a2e1SPrashanth Swaminathan -O0) 98*1fd5a2e1SPrashanth Swaminathan args="$args -Od" 99*1fd5a2e1SPrashanth Swaminathan shift 1 100*1fd5a2e1SPrashanth Swaminathan ;; 101*1fd5a2e1SPrashanth Swaminathan -O*) 102*1fd5a2e1SPrashanth Swaminathan # Runtime error checks (enabled by setting -RTC1 in the -DFFI_DEBUG 103*1fd5a2e1SPrashanth Swaminathan # case below) are not compatible with optimization flags and will 104*1fd5a2e1SPrashanth Swaminathan # cause the build to fail. Therefore, drop the optimization flag if 105*1fd5a2e1SPrashanth Swaminathan # -DFFI_DEBUG is also set. 106*1fd5a2e1SPrashanth Swaminathan case $args_orig in 107*1fd5a2e1SPrashanth Swaminathan *-DFFI_DEBUG*) 108*1fd5a2e1SPrashanth Swaminathan args="$args" 109*1fd5a2e1SPrashanth Swaminathan ;; 110*1fd5a2e1SPrashanth Swaminathan *) 111*1fd5a2e1SPrashanth Swaminathan # The ax_cc_maxopt.m4 macro from the upstream autoconf-archive 112*1fd5a2e1SPrashanth Swaminathan # project doesn't support MSVC and therefore ends up trying to 113*1fd5a2e1SPrashanth Swaminathan # use -O3. Use the equivalent "max optimization" flag for MSVC 114*1fd5a2e1SPrashanth Swaminathan # instead of erroring out. 115*1fd5a2e1SPrashanth Swaminathan case $1 in 116*1fd5a2e1SPrashanth Swaminathan -O3) 117*1fd5a2e1SPrashanth Swaminathan args="$args -O2" 118*1fd5a2e1SPrashanth Swaminathan ;; 119*1fd5a2e1SPrashanth Swaminathan *) 120*1fd5a2e1SPrashanth Swaminathan args="$args $1" 121*1fd5a2e1SPrashanth Swaminathan ;; 122*1fd5a2e1SPrashanth Swaminathan esac 123*1fd5a2e1SPrashanth Swaminathan opt="true" 124*1fd5a2e1SPrashanth Swaminathan ;; 125*1fd5a2e1SPrashanth Swaminathan esac 126*1fd5a2e1SPrashanth Swaminathan shift 1 127*1fd5a2e1SPrashanth Swaminathan ;; 128*1fd5a2e1SPrashanth Swaminathan -g) 129*1fd5a2e1SPrashanth Swaminathan # Enable debug symbol generation. 130*1fd5a2e1SPrashanth Swaminathan args="$args -Zi" 131*1fd5a2e1SPrashanth Swaminathan shift 1 132*1fd5a2e1SPrashanth Swaminathan ;; 133*1fd5a2e1SPrashanth Swaminathan -DFFI_DEBUG) 134*1fd5a2e1SPrashanth Swaminathan # Enable runtime error checks. 135*1fd5a2e1SPrashanth Swaminathan args="$args -RTC1" 136*1fd5a2e1SPrashanth Swaminathan defines="$defines $1" 137*1fd5a2e1SPrashanth Swaminathan shift 1 138*1fd5a2e1SPrashanth Swaminathan ;; 139*1fd5a2e1SPrashanth Swaminathan -DUSE_STATIC_RTL) 140*1fd5a2e1SPrashanth Swaminathan # Link against static CRT. 141*1fd5a2e1SPrashanth Swaminathan static_crt=1 142*1fd5a2e1SPrashanth Swaminathan shift 1 143*1fd5a2e1SPrashanth Swaminathan ;; 144*1fd5a2e1SPrashanth Swaminathan -DUSE_DEBUG_RTL) 145*1fd5a2e1SPrashanth Swaminathan # Link against debug CRT. 146*1fd5a2e1SPrashanth Swaminathan debug_crt=1 147*1fd5a2e1SPrashanth Swaminathan shift 1 148*1fd5a2e1SPrashanth Swaminathan ;; 149*1fd5a2e1SPrashanth Swaminathan -c) 150*1fd5a2e1SPrashanth Swaminathan args="$args -c" 151*1fd5a2e1SPrashanth Swaminathan args="$(echo $args | sed 's%/Fe%/Fo%g')" 152*1fd5a2e1SPrashanth Swaminathan single="-c" 153*1fd5a2e1SPrashanth Swaminathan shift 1 154*1fd5a2e1SPrashanth Swaminathan ;; 155*1fd5a2e1SPrashanth Swaminathan -D*=*) 156*1fd5a2e1SPrashanth Swaminathan name="$(echo $1|sed 's/-D\([^=][^=]*\)=.*/\1/g')" 157*1fd5a2e1SPrashanth Swaminathan value="$(echo $1|sed 's/-D[^=][^=]*=//g')" 158*1fd5a2e1SPrashanth Swaminathan args="$args -D${name}='$value'" 159*1fd5a2e1SPrashanth Swaminathan defines="$defines -D${name}='$value'" 160*1fd5a2e1SPrashanth Swaminathan shift 1 161*1fd5a2e1SPrashanth Swaminathan ;; 162*1fd5a2e1SPrashanth Swaminathan -D*) 163*1fd5a2e1SPrashanth Swaminathan args="$args $1" 164*1fd5a2e1SPrashanth Swaminathan defines="$defines $1" 165*1fd5a2e1SPrashanth Swaminathan shift 1 166*1fd5a2e1SPrashanth Swaminathan ;; 167*1fd5a2e1SPrashanth Swaminathan -I) 168*1fd5a2e1SPrashanth Swaminathan p=$(cygpath -m $2) 169*1fd5a2e1SPrashanth Swaminathan args="$args -I$p" 170*1fd5a2e1SPrashanth Swaminathan includes="$includes -I$p" 171*1fd5a2e1SPrashanth Swaminathan shift 2 172*1fd5a2e1SPrashanth Swaminathan ;; 173*1fd5a2e1SPrashanth Swaminathan -I*) 174*1fd5a2e1SPrashanth Swaminathan p=$(cygpath -m ${1#-I}) 175*1fd5a2e1SPrashanth Swaminathan args="$args -I$p" 176*1fd5a2e1SPrashanth Swaminathan includes="$includes -I$p" 177*1fd5a2e1SPrashanth Swaminathan shift 1 178*1fd5a2e1SPrashanth Swaminathan ;; 179*1fd5a2e1SPrashanth Swaminathan -L) 180*1fd5a2e1SPrashanth Swaminathan p=$(cygpath -m $2) 181*1fd5a2e1SPrashanth Swaminathan linkargs="$linkargs -LIBPATH:$p" 182*1fd5a2e1SPrashanth Swaminathan shift 2 183*1fd5a2e1SPrashanth Swaminathan ;; 184*1fd5a2e1SPrashanth Swaminathan -L*) 185*1fd5a2e1SPrashanth Swaminathan p=$(cygpath -m ${1#-L}) 186*1fd5a2e1SPrashanth Swaminathan linkargs="$linkargs -LIBPATH:$p" 187*1fd5a2e1SPrashanth Swaminathan shift 1 188*1fd5a2e1SPrashanth Swaminathan ;; 189*1fd5a2e1SPrashanth Swaminathan -link) 190*1fd5a2e1SPrashanth Swaminathan # add next argument verbatim to linker args 191*1fd5a2e1SPrashanth Swaminathan linkargs="$linkargs $2" 192*1fd5a2e1SPrashanth Swaminathan shift 2 193*1fd5a2e1SPrashanth Swaminathan ;; 194*1fd5a2e1SPrashanth Swaminathan -l*) 195*1fd5a2e1SPrashanth Swaminathan case $1 196*1fd5a2e1SPrashanth Swaminathan in 197*1fd5a2e1SPrashanth Swaminathan -lffi) 198*1fd5a2e1SPrashanth Swaminathan linkargs="$linkargs lib${1#-l}-${libversion}.lib" 199*1fd5a2e1SPrashanth Swaminathan ;; 200*1fd5a2e1SPrashanth Swaminathan *) 201*1fd5a2e1SPrashanth Swaminathan # ignore other libraries like -lm, hope they are 202*1fd5a2e1SPrashanth Swaminathan # covered by MSVCRT 203*1fd5a2e1SPrashanth Swaminathan # linkargs="$linkargs ${1#-l}.lib" 204*1fd5a2e1SPrashanth Swaminathan ;; 205*1fd5a2e1SPrashanth Swaminathan esac 206*1fd5a2e1SPrashanth Swaminathan shift 1 207*1fd5a2e1SPrashanth Swaminathan ;; 208*1fd5a2e1SPrashanth Swaminathan -W|-Wextra) 209*1fd5a2e1SPrashanth Swaminathan # TODO map extra warnings 210*1fd5a2e1SPrashanth Swaminathan shift 1 211*1fd5a2e1SPrashanth Swaminathan ;; 212*1fd5a2e1SPrashanth Swaminathan -Wall) 213*1fd5a2e1SPrashanth Swaminathan # -Wall on MSVC is overzealous, and we already build with -W3. Nothing 214*1fd5a2e1SPrashanth Swaminathan # to do here. 215*1fd5a2e1SPrashanth Swaminathan shift 1 216*1fd5a2e1SPrashanth Swaminathan ;; 217*1fd5a2e1SPrashanth Swaminathan -pedantic) 218*1fd5a2e1SPrashanth Swaminathan # libffi tests -pedantic with -Wall, so drop it also. 219*1fd5a2e1SPrashanth Swaminathan shift 1 220*1fd5a2e1SPrashanth Swaminathan ;; 221*1fd5a2e1SPrashanth Swaminathan -warn) 222*1fd5a2e1SPrashanth Swaminathan # ignore -warn all from libtool as well. 223*1fd5a2e1SPrashanth Swaminathan if test "$2" = "all"; then 224*1fd5a2e1SPrashanth Swaminathan shift 2 225*1fd5a2e1SPrashanth Swaminathan else 226*1fd5a2e1SPrashanth Swaminathan args="$args -warn" 227*1fd5a2e1SPrashanth Swaminathan shift 1 228*1fd5a2e1SPrashanth Swaminathan fi 229*1fd5a2e1SPrashanth Swaminathan ;; 230*1fd5a2e1SPrashanth Swaminathan -Werror) 231*1fd5a2e1SPrashanth Swaminathan args="$args -WX" 232*1fd5a2e1SPrashanth Swaminathan shift 1 233*1fd5a2e1SPrashanth Swaminathan ;; 234*1fd5a2e1SPrashanth Swaminathan -W*) 235*1fd5a2e1SPrashanth Swaminathan # TODO map specific warnings 236*1fd5a2e1SPrashanth Swaminathan shift 1 237*1fd5a2e1SPrashanth Swaminathan ;; 238*1fd5a2e1SPrashanth Swaminathan -S) 239*1fd5a2e1SPrashanth Swaminathan args="$args -FAs" 240*1fd5a2e1SPrashanth Swaminathan shift 1 241*1fd5a2e1SPrashanth Swaminathan ;; 242*1fd5a2e1SPrashanth Swaminathan -o) 243*1fd5a2e1SPrashanth Swaminathan outdir="$(dirname $2)" 244*1fd5a2e1SPrashanth Swaminathan base="$(basename $2|sed 's/\.[^.]*//g')" 245*1fd5a2e1SPrashanth Swaminathan if [ -n "$single" ]; then 246*1fd5a2e1SPrashanth Swaminathan output="-Fo$2" 247*1fd5a2e1SPrashanth Swaminathan else 248*1fd5a2e1SPrashanth Swaminathan output="-Fe$2" 249*1fd5a2e1SPrashanth Swaminathan fi 250*1fd5a2e1SPrashanth Swaminathan armasm_output="-o $2" 251*1fd5a2e1SPrashanth Swaminathan if [ -n "$assembly" ]; then 252*1fd5a2e1SPrashanth Swaminathan args="$args $output" 253*1fd5a2e1SPrashanth Swaminathan else 254*1fd5a2e1SPrashanth Swaminathan args="$args $output -Fd$outdir/$base -Fp$outdir/$base -Fa$outdir/$base" 255*1fd5a2e1SPrashanth Swaminathan fi 256*1fd5a2e1SPrashanth Swaminathan shift 2 257*1fd5a2e1SPrashanth Swaminathan ;; 258*1fd5a2e1SPrashanth Swaminathan *.S) 259*1fd5a2e1SPrashanth Swaminathan src=$1 260*1fd5a2e1SPrashanth Swaminathan assembly="true" 261*1fd5a2e1SPrashanth Swaminathan shift 1 262*1fd5a2e1SPrashanth Swaminathan ;; 263*1fd5a2e1SPrashanth Swaminathan *.c) 264*1fd5a2e1SPrashanth Swaminathan args="$args $1" 265*1fd5a2e1SPrashanth Swaminathan shift 1 266*1fd5a2e1SPrashanth Swaminathan ;; 267*1fd5a2e1SPrashanth Swaminathan *) 268*1fd5a2e1SPrashanth Swaminathan # Assume it's an MSVC argument, and pass it through. 269*1fd5a2e1SPrashanth Swaminathan args="$args $1" 270*1fd5a2e1SPrashanth Swaminathan shift 1 271*1fd5a2e1SPrashanth Swaminathan ;; 272*1fd5a2e1SPrashanth Swaminathan esac 273*1fd5a2e1SPrashanth Swaminathandone 274*1fd5a2e1SPrashanth Swaminathan 275*1fd5a2e1SPrashanth Swaminathanif [ -n "$linkargs" ]; then 276*1fd5a2e1SPrashanth Swaminathan 277*1fd5a2e1SPrashanth Swaminathan # If -Zi is specified, certain optimizations are implicitly disabled 278*1fd5a2e1SPrashanth Swaminathan # by MSVC. Add back those optimizations if this is an optimized build. 279*1fd5a2e1SPrashanth Swaminathan # NOTE: These arguments must come after all others. 280*1fd5a2e1SPrashanth Swaminathan if [ -n "$opt" ]; then 281*1fd5a2e1SPrashanth Swaminathan linkargs="$linkargs -OPT:REF -OPT:ICF -INCREMENTAL:NO" 282*1fd5a2e1SPrashanth Swaminathan fi 283*1fd5a2e1SPrashanth Swaminathan 284*1fd5a2e1SPrashanth Swaminathan args="$args -link $linkargs" 285*1fd5a2e1SPrashanth Swaminathanfi 286*1fd5a2e1SPrashanth Swaminathan 287*1fd5a2e1SPrashanth Swaminathanif [ -n "$static_crt" ]; then 288*1fd5a2e1SPrashanth Swaminathan md=-MT 289*1fd5a2e1SPrashanth Swaminathanelse 290*1fd5a2e1SPrashanth Swaminathan md=-MD 291*1fd5a2e1SPrashanth Swaminathanfi 292*1fd5a2e1SPrashanth Swaminathan 293*1fd5a2e1SPrashanth Swaminathanif [ -n "$debug_crt" ]; then 294*1fd5a2e1SPrashanth Swaminathan md="${md}d" 295*1fd5a2e1SPrashanth Swaminathanfi 296*1fd5a2e1SPrashanth Swaminathan 297*1fd5a2e1SPrashanth Swaminathanif [ -n "$assembly" ]; then 298*1fd5a2e1SPrashanth Swaminathan if [ -z "$outdir" ]; then 299*1fd5a2e1SPrashanth Swaminathan outdir="." 300*1fd5a2e1SPrashanth Swaminathan fi 301*1fd5a2e1SPrashanth Swaminathan ppsrc="$outdir/$(basename $src|sed 's/.S$/.asm/g')" 302*1fd5a2e1SPrashanth Swaminathan 303*1fd5a2e1SPrashanth Swaminathan if [ $ml = "armasm" ]; then 304*1fd5a2e1SPrashanth Swaminathan defines="$defines -D_M_ARM" 305*1fd5a2e1SPrashanth Swaminathan fi 306*1fd5a2e1SPrashanth Swaminathan 307*1fd5a2e1SPrashanth Swaminathan if [ $ml = "armasm64" ]; then 308*1fd5a2e1SPrashanth Swaminathan defines="$defines -D_M_ARM64" 309*1fd5a2e1SPrashanth Swaminathan fi 310*1fd5a2e1SPrashanth Swaminathan 311*1fd5a2e1SPrashanth Swaminathan if test -n "$verbose"; then 312*1fd5a2e1SPrashanth Swaminathan echo "$cl -nologo -EP $includes $defines $src > $ppsrc" 313*1fd5a2e1SPrashanth Swaminathan fi 314*1fd5a2e1SPrashanth Swaminathan 315*1fd5a2e1SPrashanth Swaminathan "$cl" -nologo -EP $includes $defines $src > $ppsrc || exit $? 316*1fd5a2e1SPrashanth Swaminathan output="$(echo $output | sed 's%/F[dpa][^ ]*%%g')" 317*1fd5a2e1SPrashanth Swaminathan if [ $ml = "armasm" ]; then 318*1fd5a2e1SPrashanth Swaminathan args="-nologo -g -oldit $armasm_output $ppsrc -errorReport:prompt" 319*1fd5a2e1SPrashanth Swaminathan elif [ $ml = "armasm64" ]; then 320*1fd5a2e1SPrashanth Swaminathan args="-nologo -g $armasm_output $ppsrc -errorReport:prompt" 321*1fd5a2e1SPrashanth Swaminathan else 322*1fd5a2e1SPrashanth Swaminathan args="-nologo $safeseh $single $output $ppsrc" 323*1fd5a2e1SPrashanth Swaminathan fi 324*1fd5a2e1SPrashanth Swaminathan 325*1fd5a2e1SPrashanth Swaminathan if test -n "$verbose"; then 326*1fd5a2e1SPrashanth Swaminathan echo "$ml $args" 327*1fd5a2e1SPrashanth Swaminathan fi 328*1fd5a2e1SPrashanth Swaminathan 329*1fd5a2e1SPrashanth Swaminathan eval "\"$ml\" $args" 330*1fd5a2e1SPrashanth Swaminathan result=$? 331*1fd5a2e1SPrashanth Swaminathan 332*1fd5a2e1SPrashanth Swaminathan # required to fix ml64 broken output? 333*1fd5a2e1SPrashanth Swaminathan #mv *.obj $outdir 334*1fd5a2e1SPrashanth Swaminathanelse 335*1fd5a2e1SPrashanth Swaminathan args="$md $args" 336*1fd5a2e1SPrashanth Swaminathan 337*1fd5a2e1SPrashanth Swaminathan if test -n "$verbose"; then 338*1fd5a2e1SPrashanth Swaminathan echo "$cl $args" 339*1fd5a2e1SPrashanth Swaminathan fi 340*1fd5a2e1SPrashanth Swaminathan # Return an error code of 1 if an invalid command line parameter is passed 341*1fd5a2e1SPrashanth Swaminathan # instead of just ignoring it. Any output that is not a warning or an 342*1fd5a2e1SPrashanth Swaminathan # error is filtered so this command behaves more like gcc. cl.exe prints 343*1fd5a2e1SPrashanth Swaminathan # the name of the compiled file otherwise, which breaks the dejagnu checks 344*1fd5a2e1SPrashanth Swaminathan # for excess warnings and errors. 345*1fd5a2e1SPrashanth Swaminathan eval "(\"$cl\" $args 2>&1 1>&3 | \ 346*1fd5a2e1SPrashanth Swaminathan awk '{print \$0} /D9002/ {error=1} END{exit error}' >&2) 3>&1 | \ 347*1fd5a2e1SPrashanth Swaminathan awk '/warning|error/'" 348*1fd5a2e1SPrashanth Swaminathan result=$? 349*1fd5a2e1SPrashanth Swaminathanfi 350*1fd5a2e1SPrashanth Swaminathan 351*1fd5a2e1SPrashanth Swaminathanexit $result 352*1fd5a2e1SPrashanth Swaminathan 353*1fd5a2e1SPrashanth Swaminathan# vim: noai:ts=4:sw=4 354