PageRenderTime 11ms CodeModel.GetById 2ms app.highlight 7ms RepoModel.GetById 1ms app.codeStats 0ms

/js/src/ctypes/libffi/msvcc.sh

http://github.com/zpao/v8monkey
Shell | 197 lines | 134 code | 9 blank | 54 comment | 6 complexity | dd56d23e8052ff4dfdd3260b38d9a249 MD5 | raw file
  1#!/bin/sh
  2
  3# ***** BEGIN LICENSE BLOCK *****
  4# Version: MPL 1.1/GPL 2.0/LGPL 2.1
  5#
  6# The contents of this file are subject to the Mozilla Public License Version
  7# 1.1 (the "License"); you may not use this file except in compliance with
  8# the License. You may obtain a copy of the License at
  9# http://www.mozilla.org/MPL/
 10#
 11# Software distributed under the License is distributed on an "AS IS" basis,
 12# WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
 13# for the specific language governing rights and limitations under the
 14# License.
 15#
 16# The Original Code is the MSVC wrappificator.
 17#
 18# The Initial Developer of the Original Code is
 19# Timothy Wall <twalljava@dev.java.net>.
 20# Portions created by the Initial Developer are Copyright (C) 2009
 21# the Initial Developer. All Rights Reserved.
 22#
 23# Contributor(s):
 24#   Daniel Witte <dwitte@mozilla.com>
 25#
 26# Alternatively, the contents of this file may be used under the terms of
 27# either the GNU General Public License Version 2 or later (the "GPL"), or
 28# the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
 29# in which case the provisions of the GPL or the LGPL are applicable instead
 30# of those above. If you wish to allow use of your version of this file only
 31# under the terms of either the GPL or the LGPL, and not to allow others to
 32# use your version of this file under the terms of the MPL, indicate your
 33# decision by deleting the provisions above and replace them with the notice
 34# and other provisions required by the GPL or the LGPL. If you do not delete
 35# the provisions above, a recipient may use your version of this file under
 36# the terms of any one of the MPL, the GPL or the LGPL.
 37#
 38# ***** END LICENSE BLOCK *****
 39
 40#
 41# GCC-compatible wrapper for cl.exe and ml.exe. Arguments are given in GCC
 42# format and translated into something sensible for cl or ml.
 43#
 44
 45args="-nologo -W3"
 46md=-MD
 47cl="cl"
 48ml="ml"
 49safeseh="-safeseh"
 50output=
 51
 52while [ $# -gt 0 ]
 53do
 54  case $1
 55  in
 56    -fexceptions)
 57      # Don't enable exceptions for now.
 58      #args="$args -EHac"
 59      shift 1
 60    ;;
 61    -m32)
 62      shift 1
 63    ;;
 64    -m64)
 65      cl="cl"   # "$MSVC/x86_amd64/cl"
 66      ml="ml64" # "$MSVC/x86_amd64/ml64"
 67      safeseh=
 68      shift 1
 69    ;;
 70    -O0)
 71      args="$args -Od"
 72      shift 1
 73    ;;
 74    -O*)
 75      # If we're optimizing, make sure we explicitly turn on some optimizations
 76      # that are implicitly disabled by debug symbols (-Zi).
 77      args="$args $1 -OPT:REF -OPT:ICF -INCREMENTAL:NO"
 78      shift 1
 79    ;;
 80    -g)
 81      # Enable debug symbol generation.
 82      args="$args -Zi -DEBUG"
 83      shift 1
 84    ;;
 85    -DFFI_DEBUG)
 86      # Link against debug CRT and enable runtime error checks.
 87      args="$args -RTC1"
 88      defines="$defines $1"
 89      md=-MDd
 90      shift 1
 91    ;;
 92    -c)
 93      args="$args -c"
 94      args="$(echo $args | sed 's%/Fe%/Fo%g')"
 95      single="-c"
 96      shift 1
 97    ;;
 98    -D*=*)
 99      name="$(echo $1|sed 's/-D\([^=][^=]*\)=.*/\1/g')"
100      value="$(echo $1|sed 's/-D[^=][^=]*=//g')"
101      args="$args -D${name}='$value'"
102      defines="$defines -D${name}='$value'"
103      shift 1
104    ;;
105    -D*)
106      args="$args $1"
107      defines="$defines $1"
108      shift 1
109    ;;
110    -I)
111      args="$args -I$2"
112      includes="$includes -I$2"
113      shift 2
114    ;;
115    -I*)
116      args="$args $1"
117      includes="$includes $1"
118      shift 1
119    ;;
120    -W|-Wextra)
121      # TODO map extra warnings
122      shift 1
123    ;;
124    -Wall)
125      # -Wall on MSVC is overzealous, and we already build with -W3. Nothing
126      # to do here.
127      shift 1
128    ;;
129    -Werror)
130      args="$args -WX"
131      shift 1
132    ;;
133    -W*)
134      # TODO map specific warnings
135      shift 1
136    ;;
137    -S)
138      args="$args -FAs"
139      shift 1
140    ;;
141    -o)
142      outdir="$(dirname $2)"
143      base="$(basename $2|sed 's/\.[^.]*//g')"
144      if [ -n "$single" ]; then 
145        output="-Fo$2"
146      else
147        output="-Fe$2"
148      fi
149      if [ -n "$assembly" ]; then
150        args="$args $output"
151      else
152        args="$args $output -Fd$outdir/$base -Fp$outdir/$base -Fa$outdir/$base"
153      fi
154      shift 2
155    ;;
156    *.S)
157      src=$1
158      assembly="true"
159      shift 1
160    ;;
161    *.c)
162      args="$args $1"
163      shift 1
164    ;;
165    *)
166      # Assume it's an MSVC argument, and pass it through.
167      args="$args $1"
168      shift 1
169    ;;
170  esac
171done
172
173if [ -n "$assembly" ]; then
174    if [ -z "$outdir" ]; then
175      outdir="."
176    fi
177    ppsrc="$outdir/$(basename $src|sed 's/.S$/.asm/g')"
178    echo "$cl -nologo -EP $includes $defines $src > $ppsrc"
179    "$cl" -nologo -EP $includes $defines $src > $ppsrc || exit $?
180    output="$(echo $output | sed 's%/F[dpa][^ ]*%%g')"
181    args="-nologo $safeseh $single $output $ppsrc"
182
183    echo "$ml $args"
184    eval "\"$ml\" $args"
185    result=$?
186
187    # required to fix ml64 broken output?
188    #mv *.obj $outdir
189else
190    args="$md $args"
191    echo "$cl $args"
192    eval "\"$cl\" $args"
193    result=$?
194fi
195
196exit $result
197