xref: /aosp_15_r20/external/libffi/msvcc.sh (revision 1fd5a2e1d639cd1ddf29dd0c484c123bbd850c21)
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