Add msvc.sh wrapper
This commit is contained in:
312
.pc/msvc/README
Normal file
312
.pc/msvc/README
Normal file
@@ -0,0 +1,312 @@
|
|||||||
|
Status
|
||||||
|
======
|
||||||
|
|
||||||
|
libffi-3.0.10 was released on XXXXXXXXXX, 2010. Check the libffi web
|
||||||
|
page for updates: <URL:http://sourceware.org/libffi/>.
|
||||||
|
|
||||||
|
|
||||||
|
What is libffi?
|
||||||
|
===============
|
||||||
|
|
||||||
|
Compilers for high level languages generate code that follow certain
|
||||||
|
conventions. These conventions are necessary, in part, for separate
|
||||||
|
compilation to work. One such convention is the "calling
|
||||||
|
convention". The "calling convention" is essentially a set of
|
||||||
|
assumptions made by the compiler about where function arguments will
|
||||||
|
be found on entry to a function. A "calling convention" also specifies
|
||||||
|
where the return value for a function is found.
|
||||||
|
|
||||||
|
Some programs may not know at the time of compilation what arguments
|
||||||
|
are to be passed to a function. For instance, an interpreter may be
|
||||||
|
told at run-time about the number and types of arguments used to call
|
||||||
|
a given function. Libffi can be used in such programs to provide a
|
||||||
|
bridge from the interpreter program to compiled code.
|
||||||
|
|
||||||
|
The libffi library provides a portable, high level programming
|
||||||
|
interface to various calling conventions. This allows a programmer to
|
||||||
|
call any function specified by a call interface description at run
|
||||||
|
time.
|
||||||
|
|
||||||
|
FFI stands for Foreign Function Interface. A foreign function
|
||||||
|
interface is the popular name for the interface that allows code
|
||||||
|
written in one language to call code written in another language. The
|
||||||
|
libffi library really only provides the lowest, machine dependent
|
||||||
|
layer of a fully featured foreign function interface. A layer must
|
||||||
|
exist above libffi that handles type conversions for values passed
|
||||||
|
between the two languages.
|
||||||
|
|
||||||
|
|
||||||
|
Supported Platforms
|
||||||
|
===================
|
||||||
|
|
||||||
|
Libffi has been ported to many different platforms.
|
||||||
|
For specific configuration details and testing status, please
|
||||||
|
refer to the wiki page here:
|
||||||
|
|
||||||
|
http://www.moxielogic.org/wiki/index.php?title=Libffi_3.0.10
|
||||||
|
|
||||||
|
At the time of release, the following basic configurations have been
|
||||||
|
tested:
|
||||||
|
|
||||||
|
|--------------+------------------|
|
||||||
|
| Architecture | Operating System |
|
||||||
|
|--------------+------------------|
|
||||||
|
| Alpha | Linux |
|
||||||
|
| Alpha | Tru64 |
|
||||||
|
| ARM | Linux |
|
||||||
|
| AVR32 | Linux |
|
||||||
|
| HPPA | HPUX |
|
||||||
|
| IA-64 | Linux |
|
||||||
|
| MIPS | IRIX |
|
||||||
|
| MIPS | Linux |
|
||||||
|
| MIPS64 | Linux |
|
||||||
|
| PowerPC | Linux |
|
||||||
|
| PowerPC | Mac OSX |
|
||||||
|
| PowerPC | FreeBSD |
|
||||||
|
| PowerPC64 | Linux |
|
||||||
|
| S390 | Linux |
|
||||||
|
| S390X | Linux |
|
||||||
|
| SPARC | Linux |
|
||||||
|
| SPARC | Solaris |
|
||||||
|
| SPARC64 | Linux |
|
||||||
|
| SPARC64 | FreeBSD |
|
||||||
|
| X86 | FreeBSD |
|
||||||
|
| X86 | kFreeBSD |
|
||||||
|
| X86 | Linux |
|
||||||
|
| X86 | Mac OSX |
|
||||||
|
| X86 | OpenBSD |
|
||||||
|
| X86 | Solaris |
|
||||||
|
| X86 | Windows/Cygwin |
|
||||||
|
| X86 | Windows/MingW |
|
||||||
|
| X86-64 | FreeBSD |
|
||||||
|
| X86-64 | Linux |
|
||||||
|
| X86-64 | OpenBSD |
|
||||||
|
| X86-64 | Windows/MingW |
|
||||||
|
|--------------+------------------|
|
||||||
|
|
||||||
|
Please send additional platform test results to
|
||||||
|
libffi-discuss@sourceware.org and feel free to update the wiki page
|
||||||
|
above.
|
||||||
|
|
||||||
|
Installing libffi
|
||||||
|
=================
|
||||||
|
|
||||||
|
First you must configure the distribution for your particular
|
||||||
|
system. Go to the directory you wish to build libffi in and run the
|
||||||
|
"configure" program found in the root directory of the libffi source
|
||||||
|
distribution.
|
||||||
|
|
||||||
|
You may want to tell configure where to install the libffi library and
|
||||||
|
header files. To do that, use the --prefix configure switch. Libffi
|
||||||
|
will install under /usr/local by default.
|
||||||
|
|
||||||
|
If you want to enable extra run-time debugging checks use the the
|
||||||
|
--enable-debug configure switch. This is useful when your program dies
|
||||||
|
mysteriously while using libffi.
|
||||||
|
|
||||||
|
Another useful configure switch is --enable-purify-safety. Using this
|
||||||
|
will add some extra code which will suppress certain warnings when you
|
||||||
|
are using Purify with libffi. Only use this switch when using
|
||||||
|
Purify, as it will slow down the library.
|
||||||
|
|
||||||
|
Configure has many other options. Use "configure --help" to see them all.
|
||||||
|
|
||||||
|
Once configure has finished, type "make". Note that you must be using
|
||||||
|
GNU make. You can ftp GNU make from prep.ai.mit.edu:/pub/gnu.
|
||||||
|
|
||||||
|
To ensure that libffi is working as advertised, type "make check".
|
||||||
|
This will require that you have DejaGNU installed.
|
||||||
|
|
||||||
|
To install the library and header files, type "make install".
|
||||||
|
|
||||||
|
|
||||||
|
History
|
||||||
|
=======
|
||||||
|
|
||||||
|
See the ChangeLog files for details.
|
||||||
|
|
||||||
|
3.0.10 ???-??-??
|
||||||
|
Fix the N64 build on mips-sgi-irix6.5.
|
||||||
|
Testsuite fixes for Tru64 Unix.
|
||||||
|
|
||||||
|
3.0.9 Dec-31-09
|
||||||
|
Add AVR32 and win64 ports. Add ARM softfp support.
|
||||||
|
Many fixes for AIX, Solaris, HP-UX, *BSD.
|
||||||
|
Several PowerPC and x86-64 bug fixes.
|
||||||
|
Build DLL for windows.
|
||||||
|
|
||||||
|
3.0.8 Dec-19-08
|
||||||
|
Add *BSD, BeOS, and PA-Linux support.
|
||||||
|
|
||||||
|
3.0.7 Nov-11-08
|
||||||
|
Fix for ppc FreeBSD.
|
||||||
|
(thanks to Andreas Tobler)
|
||||||
|
|
||||||
|
3.0.6 Jul-17-08
|
||||||
|
Fix for closures on sh.
|
||||||
|
Mark the sh/sh64 stack as non-executable.
|
||||||
|
(both thanks to Kaz Kojima)
|
||||||
|
|
||||||
|
3.0.5 Apr-3-08
|
||||||
|
Fix libffi.pc file.
|
||||||
|
Fix #define ARM for IcedTea users.
|
||||||
|
Fix x86 closure bug.
|
||||||
|
|
||||||
|
3.0.4 Feb-24-08
|
||||||
|
Fix x86 OpenBSD configury.
|
||||||
|
|
||||||
|
3.0.3 Feb-22-08
|
||||||
|
Enable x86 OpenBSD thanks to Thomas Heller, and
|
||||||
|
x86-64 FreeBSD thanks to Björn König and Andreas Tobler.
|
||||||
|
Clean up test instruction in README.
|
||||||
|
|
||||||
|
3.0.2 Feb-21-08
|
||||||
|
Improved x86 FreeBSD support.
|
||||||
|
Thanks to Björn König.
|
||||||
|
|
||||||
|
3.0.1 Feb-15-08
|
||||||
|
Fix instruction cache flushing bug on MIPS.
|
||||||
|
Thanks to David Daney.
|
||||||
|
|
||||||
|
3.0.0 Feb-15-08
|
||||||
|
Many changes, mostly thanks to the GCC project.
|
||||||
|
Cygnus Solutions is now Red Hat.
|
||||||
|
|
||||||
|
[10 years go by...]
|
||||||
|
|
||||||
|
1.20 Oct-5-98
|
||||||
|
Raffaele Sena produces ARM port.
|
||||||
|
|
||||||
|
1.19 Oct-5-98
|
||||||
|
Fixed x86 long double and long long return support.
|
||||||
|
m68k bug fixes from Andreas Schwab.
|
||||||
|
Patch for DU assembler compatibility for the Alpha from Richard
|
||||||
|
Henderson.
|
||||||
|
|
||||||
|
1.18 Apr-17-98
|
||||||
|
Bug fixes and MIPS configuration changes.
|
||||||
|
|
||||||
|
1.17 Feb-24-98
|
||||||
|
Bug fixes and m68k port from Andreas Schwab. PowerPC port from
|
||||||
|
Geoffrey Keating. Various bug x86, Sparc and MIPS bug fixes.
|
||||||
|
|
||||||
|
1.16 Feb-11-98
|
||||||
|
Richard Henderson produces Alpha port.
|
||||||
|
|
||||||
|
1.15 Dec-4-97
|
||||||
|
Fixed an n32 ABI bug. New libtool, auto* support.
|
||||||
|
|
||||||
|
1.14 May-13-97
|
||||||
|
libtool is now used to generate shared and static libraries.
|
||||||
|
Fixed a minor portability problem reported by Russ McManus
|
||||||
|
<mcmanr@eq.gs.com>.
|
||||||
|
|
||||||
|
1.13 Dec-2-96
|
||||||
|
Added --enable-purify-safety to keep Purify from complaining
|
||||||
|
about certain low level code.
|
||||||
|
Sparc fix for calling functions with < 6 args.
|
||||||
|
Linux x86 a.out fix.
|
||||||
|
|
||||||
|
1.12 Nov-22-96
|
||||||
|
Added missing ffi_type_void, needed for supporting void return
|
||||||
|
types. Fixed test case for non MIPS machines. Cygnus Support
|
||||||
|
is now Cygnus Solutions.
|
||||||
|
|
||||||
|
1.11 Oct-30-96
|
||||||
|
Added notes about GNU make.
|
||||||
|
|
||||||
|
1.10 Oct-29-96
|
||||||
|
Added configuration fix for non GNU compilers.
|
||||||
|
|
||||||
|
1.09 Oct-29-96
|
||||||
|
Added --enable-debug configure switch. Clean-ups based on LCLint
|
||||||
|
feedback. ffi_mips.h is always installed. Many configuration
|
||||||
|
fixes. Fixed ffitest.c for sparc builds.
|
||||||
|
|
||||||
|
1.08 Oct-15-96
|
||||||
|
Fixed n32 problem. Many clean-ups.
|
||||||
|
|
||||||
|
1.07 Oct-14-96
|
||||||
|
Gordon Irlam rewrites v8.S again. Bug fixes.
|
||||||
|
|
||||||
|
1.06 Oct-14-96
|
||||||
|
Gordon Irlam improved the sparc port.
|
||||||
|
|
||||||
|
1.05 Oct-14-96
|
||||||
|
Interface changes based on feedback.
|
||||||
|
|
||||||
|
1.04 Oct-11-96
|
||||||
|
Sparc port complete (modulo struct passing bug).
|
||||||
|
|
||||||
|
1.03 Oct-10-96
|
||||||
|
Passing struct args, and returning struct values works for
|
||||||
|
all architectures/calling conventions. Expanded tests.
|
||||||
|
|
||||||
|
1.02 Oct-9-96
|
||||||
|
Added SGI n32 support. Fixed bugs in both o32 and Linux support.
|
||||||
|
Added "make test".
|
||||||
|
|
||||||
|
1.01 Oct-8-96
|
||||||
|
Fixed float passing bug in mips version. Restructured some
|
||||||
|
of the code. Builds cleanly with SGI tools.
|
||||||
|
|
||||||
|
1.00 Oct-7-96
|
||||||
|
First release. No public announcement.
|
||||||
|
|
||||||
|
|
||||||
|
Authors & Credits
|
||||||
|
=================
|
||||||
|
|
||||||
|
libffi was originally written by Anthony Green <green@redhat.com>.
|
||||||
|
|
||||||
|
The developers of the GNU Compiler Collection project have made
|
||||||
|
innumerable valuable contributions. See the ChangeLog file for
|
||||||
|
details.
|
||||||
|
|
||||||
|
Some of the ideas behind libffi were inspired by Gianni Mariani's free
|
||||||
|
gencall library for Silicon Graphics machines.
|
||||||
|
|
||||||
|
The closure mechanism was designed and implemented by Kresten Krab
|
||||||
|
Thorup.
|
||||||
|
|
||||||
|
Major processor architecture ports were contributed by the following
|
||||||
|
developers:
|
||||||
|
|
||||||
|
alpha Richard Henderson
|
||||||
|
arm Raffaele Sena
|
||||||
|
cris Simon Posnjak, Hans-Peter Nilsson
|
||||||
|
frv Anthony Green
|
||||||
|
ia64 Hans Boehm
|
||||||
|
m32r Kazuhiro Inaoka
|
||||||
|
m68k Andreas Schwab
|
||||||
|
mips Anthony Green, Casey Marshall
|
||||||
|
mips64 David Daney
|
||||||
|
pa Randolph Chung, Dave Anglin, Andreas Tobler
|
||||||
|
powerpc Geoffrey Keating, Andreas Tobler,
|
||||||
|
David Edelsohn, John Hornkvist
|
||||||
|
powerpc64 Jakub Jelinek
|
||||||
|
s390 Gerhard Tonn, Ulrich Weigand
|
||||||
|
sh Kaz Kojima
|
||||||
|
sh64 Kaz Kojima
|
||||||
|
sparc Anthony Green, Gordon Irlam
|
||||||
|
x86 Anthony Green, Jon Beniston
|
||||||
|
x86-64 Bo Thorsen
|
||||||
|
|
||||||
|
Jesper Skov and Andrew Haley both did more than their fair share of
|
||||||
|
stepping through the code and tracking down bugs.
|
||||||
|
|
||||||
|
Thanks also to Tom Tromey for bug fixes, documentation and
|
||||||
|
configuration help.
|
||||||
|
|
||||||
|
Thanks to Jim Blandy, who provided some useful feedback on the libffi
|
||||||
|
interface.
|
||||||
|
|
||||||
|
Andreas Tobler has done a tremendous amount of work on the testsuite.
|
||||||
|
|
||||||
|
Alex Oliva solved the executable page problem for SElinux.
|
||||||
|
|
||||||
|
The list above is almost certainly incomplete and inaccurate. I'm
|
||||||
|
happy to make corrections or additions upon request.
|
||||||
|
|
||||||
|
If you have a problem, or have found a bug, please send a note to
|
||||||
|
green@redhat.com.
|
||||||
185
.pc/msvc/msvcc.sh
Normal file
185
.pc/msvc/msvcc.sh
Normal file
@@ -0,0 +1,185 @@
|
|||||||
|
#!/bin/sh
|
||||||
|
|
||||||
|
# ***** BEGIN LICENSE BLOCK *****
|
||||||
|
# Version: MPL 1.1/GPL 2.0/LGPL 2.1
|
||||||
|
#
|
||||||
|
# The contents of this file are subject to the Mozilla Public License Version
|
||||||
|
# 1.1 (the "License"); you may not use this file except in compliance with
|
||||||
|
# the License. You may obtain a copy of the License at
|
||||||
|
# http://www.mozilla.org/MPL/
|
||||||
|
#
|
||||||
|
# Software distributed under the License is distributed on an "AS IS" basis,
|
||||||
|
# WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
|
||||||
|
# for the specific language governing rights and limitations under the
|
||||||
|
# License.
|
||||||
|
#
|
||||||
|
# The Original Code is the MSVC wrappificator.
|
||||||
|
#
|
||||||
|
# The Initial Developer of the Original Code is
|
||||||
|
# Timothy Wall <twalljava@dev.java.net>.
|
||||||
|
# Portions created by the Initial Developer are Copyright (C) 2009
|
||||||
|
# the Initial Developer. All Rights Reserved.
|
||||||
|
#
|
||||||
|
# Contributor(s):
|
||||||
|
# Daniel Witte <dwitte@mozilla.com>
|
||||||
|
#
|
||||||
|
# Alternatively, the contents of this file may be used under the terms of
|
||||||
|
# either the GNU General Public License Version 2 or later (the "GPL"), or
|
||||||
|
# the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
|
||||||
|
# in which case the provisions of the GPL or the LGPL are applicable instead
|
||||||
|
# of those above. If you wish to allow use of your version of this file only
|
||||||
|
# under the terms of either the GPL or the LGPL, and not to allow others to
|
||||||
|
# use your version of this file under the terms of the MPL, indicate your
|
||||||
|
# decision by deleting the provisions above and replace them with the notice
|
||||||
|
# and other provisions required by the GPL or the LGPL. If you do not delete
|
||||||
|
# the provisions above, a recipient may use your version of this file under
|
||||||
|
# the terms of any one of the MPL, the GPL or the LGPL.
|
||||||
|
#
|
||||||
|
# ***** END LICENSE BLOCK *****
|
||||||
|
|
||||||
|
#
|
||||||
|
# GCC-compatible wrapper for cl.exe and ml.exe. Arguments are given in GCC
|
||||||
|
# format and translated into something sensible for cl or ml.
|
||||||
|
#
|
||||||
|
|
||||||
|
# Disable specific warnings, and enable warnings-as-errors so we catch any
|
||||||
|
# mistranslated args.
|
||||||
|
nowarn="-wd4127 -wd4820 -wd4706 -wd4100 -wd4255 -wd4668 -wd4053 -wd4324"
|
||||||
|
args="-nologo -W3 -WX $nowarn"
|
||||||
|
md=-MD
|
||||||
|
cl="cl"
|
||||||
|
ml="ml"
|
||||||
|
output=
|
||||||
|
|
||||||
|
while [ $# -gt 0 ]
|
||||||
|
do
|
||||||
|
case $1
|
||||||
|
in
|
||||||
|
-fexceptions)
|
||||||
|
# Don't enable exceptions for now.
|
||||||
|
#args="$args -EHac"
|
||||||
|
shift 1
|
||||||
|
;;
|
||||||
|
-m32)
|
||||||
|
shift 1
|
||||||
|
;;
|
||||||
|
-m64)
|
||||||
|
cl="cl" # "$MSVC/x86_amd64/cl"
|
||||||
|
ml="ml64" # "$MSVC/x86_amd64/ml64"
|
||||||
|
shift 1
|
||||||
|
;;
|
||||||
|
-O*)
|
||||||
|
args="$args $1"
|
||||||
|
shift 1
|
||||||
|
;;
|
||||||
|
-g)
|
||||||
|
# Can't specify -RTC1 or -Zi in opt. -Gy is ok. Use -OPT:REF?
|
||||||
|
args="$args -D_DEBUG -RTC1 -Zi"
|
||||||
|
md=-MDd
|
||||||
|
shift 1
|
||||||
|
;;
|
||||||
|
-c)
|
||||||
|
args="$args -c"
|
||||||
|
args="$(echo $args | sed 's%/Fe%/Fo%g')"
|
||||||
|
single="-c"
|
||||||
|
shift 1
|
||||||
|
;;
|
||||||
|
-D*=*)
|
||||||
|
name="$(echo $1|sed 's/-D\([^=][^=]*\)=.*/\1/g')"
|
||||||
|
value="$(echo $1|sed 's/-D[^=][^=]*=//g')"
|
||||||
|
args="$args -D${name}='$value'"
|
||||||
|
defines="$defines -D${name}='$value'"
|
||||||
|
shift 1
|
||||||
|
;;
|
||||||
|
-D*)
|
||||||
|
args="$args $1"
|
||||||
|
defines="$defines $1"
|
||||||
|
shift 1
|
||||||
|
;;
|
||||||
|
-I)
|
||||||
|
args="$args -I$2"
|
||||||
|
includes="$includes -I$2"
|
||||||
|
shift 2
|
||||||
|
;;
|
||||||
|
-I*)
|
||||||
|
args="$args $1"
|
||||||
|
includes="$includes $1"
|
||||||
|
shift 1
|
||||||
|
;;
|
||||||
|
-W|-Wextra)
|
||||||
|
# TODO map extra warnings
|
||||||
|
shift 1
|
||||||
|
;;
|
||||||
|
-Wall)
|
||||||
|
args="$args -Wall"
|
||||||
|
shift 1
|
||||||
|
;;
|
||||||
|
-Werror)
|
||||||
|
args="$args -WX"
|
||||||
|
shift 1
|
||||||
|
;;
|
||||||
|
-W*)
|
||||||
|
# TODO map specific warnings
|
||||||
|
shift 1
|
||||||
|
;;
|
||||||
|
-S)
|
||||||
|
args="$args -FAs"
|
||||||
|
shift 1
|
||||||
|
;;
|
||||||
|
-o)
|
||||||
|
outdir="$(dirname $2)"
|
||||||
|
base="$(basename $2|sed 's/\.[^.]*//g')"
|
||||||
|
if [ -n "$single" ]; then
|
||||||
|
output="-Fo$2"
|
||||||
|
else
|
||||||
|
output="-Fe$2"
|
||||||
|
fi
|
||||||
|
if [ -n "$assembly" ]; then
|
||||||
|
args="$args $output"
|
||||||
|
else
|
||||||
|
args="$args $output -Fd$outdir/$base -Fp$outdir/$base -Fa$outdir/$base"
|
||||||
|
fi
|
||||||
|
shift 2
|
||||||
|
;;
|
||||||
|
*.S)
|
||||||
|
src=$1
|
||||||
|
assembly="true"
|
||||||
|
shift 1
|
||||||
|
;;
|
||||||
|
*.c)
|
||||||
|
args="$args $1"
|
||||||
|
shift 1
|
||||||
|
;;
|
||||||
|
*)
|
||||||
|
# Assume it's an MSVC argument, and pass it through.
|
||||||
|
args="$args $1"
|
||||||
|
shift 1
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
done
|
||||||
|
|
||||||
|
if [ -n "$assembly" ]; then
|
||||||
|
if [ -z "$outdir" ]; then
|
||||||
|
outdir="."
|
||||||
|
fi
|
||||||
|
ppsrc="$outdir/$(basename $src|sed 's/.S$/.asm/g')"
|
||||||
|
echo "$cl -nologo -EP $includes $defines $src > $ppsrc"
|
||||||
|
"$cl" -nologo -EP $includes $defines $src > $ppsrc || exit $?
|
||||||
|
output="$(echo $output | sed 's%/F[dpa][^ ]*%%g')"
|
||||||
|
args="-nologo -safeseh $single $output $ppsrc"
|
||||||
|
|
||||||
|
echo "$ml $args"
|
||||||
|
eval "\"$ml\" $args"
|
||||||
|
result=$?
|
||||||
|
|
||||||
|
# required to fix ml64 broken output?
|
||||||
|
#mv *.obj $outdir
|
||||||
|
else
|
||||||
|
args="$md $args"
|
||||||
|
echo "$cl $args"
|
||||||
|
eval "\"$cl\" $args"
|
||||||
|
result=$?
|
||||||
|
fi
|
||||||
|
|
||||||
|
exit $result
|
||||||
|
|
||||||
@@ -1,5 +1,11 @@
|
|||||||
|
2010-01-15 Anthony Green <green@redhat.com>
|
||||||
|
|
||||||
|
* README: Add notes on building with Microsoft Visual C++.
|
||||||
|
|
||||||
2010-01-15 Daniel Witte <dwitte@mozilla.com>
|
2010-01-15 Daniel Witte <dwitte@mozilla.com>
|
||||||
|
|
||||||
|
* msvcc.sh: New file.
|
||||||
|
|
||||||
* src/x86/win32.S: Port assembly routines to MSVC and #ifdef.
|
* src/x86/win32.S: Port assembly routines to MSVC and #ifdef.
|
||||||
* src/x86/ffi.c: Tweak function declaration and remove excess
|
* src/x86/ffi.c: Tweak function declaration and remove excess
|
||||||
parens.
|
parens.
|
||||||
|
|||||||
8
README
8
README
@@ -109,6 +109,14 @@ will add some extra code which will suppress certain warnings when you
|
|||||||
are using Purify with libffi. Only use this switch when using
|
are using Purify with libffi. Only use this switch when using
|
||||||
Purify, as it will slow down the library.
|
Purify, as it will slow down the library.
|
||||||
|
|
||||||
|
It's also possible to build libffi on Windows platforms with
|
||||||
|
Microsoft's Visual C++ compiler. In this case, use the msvcc.sh
|
||||||
|
wrapper script during configuration like so:
|
||||||
|
|
||||||
|
path/to/configure --enable-shared --enable-static \
|
||||||
|
CC=path/to/msvcc.sh LD=link \
|
||||||
|
CPP=\"cl -nologo -EP\"
|
||||||
|
|
||||||
Configure has many other options. Use "configure --help" to see them all.
|
Configure has many other options. Use "configure --help" to see them all.
|
||||||
|
|
||||||
Once configure has finished, type "make". Note that you must be using
|
Once configure has finished, type "make". Note that you must be using
|
||||||
|
|||||||
185
msvcc.sh
Executable file
185
msvcc.sh
Executable file
@@ -0,0 +1,185 @@
|
|||||||
|
#!/bin/sh
|
||||||
|
|
||||||
|
# ***** BEGIN LICENSE BLOCK *****
|
||||||
|
# Version: MPL 1.1/GPL 2.0/LGPL 2.1
|
||||||
|
#
|
||||||
|
# The contents of this file are subject to the Mozilla Public License Version
|
||||||
|
# 1.1 (the "License"); you may not use this file except in compliance with
|
||||||
|
# the License. You may obtain a copy of the License at
|
||||||
|
# http://www.mozilla.org/MPL/
|
||||||
|
#
|
||||||
|
# Software distributed under the License is distributed on an "AS IS" basis,
|
||||||
|
# WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
|
||||||
|
# for the specific language governing rights and limitations under the
|
||||||
|
# License.
|
||||||
|
#
|
||||||
|
# The Original Code is the MSVC wrappificator.
|
||||||
|
#
|
||||||
|
# The Initial Developer of the Original Code is
|
||||||
|
# Timothy Wall <twalljava@dev.java.net>.
|
||||||
|
# Portions created by the Initial Developer are Copyright (C) 2009
|
||||||
|
# the Initial Developer. All Rights Reserved.
|
||||||
|
#
|
||||||
|
# Contributor(s):
|
||||||
|
# Daniel Witte <dwitte@mozilla.com>
|
||||||
|
#
|
||||||
|
# Alternatively, the contents of this file may be used under the terms of
|
||||||
|
# either the GNU General Public License Version 2 or later (the "GPL"), or
|
||||||
|
# the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
|
||||||
|
# in which case the provisions of the GPL or the LGPL are applicable instead
|
||||||
|
# of those above. If you wish to allow use of your version of this file only
|
||||||
|
# under the terms of either the GPL or the LGPL, and not to allow others to
|
||||||
|
# use your version of this file under the terms of the MPL, indicate your
|
||||||
|
# decision by deleting the provisions above and replace them with the notice
|
||||||
|
# and other provisions required by the GPL or the LGPL. If you do not delete
|
||||||
|
# the provisions above, a recipient may use your version of this file under
|
||||||
|
# the terms of any one of the MPL, the GPL or the LGPL.
|
||||||
|
#
|
||||||
|
# ***** END LICENSE BLOCK *****
|
||||||
|
|
||||||
|
#
|
||||||
|
# GCC-compatible wrapper for cl.exe and ml.exe. Arguments are given in GCC
|
||||||
|
# format and translated into something sensible for cl or ml.
|
||||||
|
#
|
||||||
|
|
||||||
|
# Disable specific warnings, and enable warnings-as-errors so we catch any
|
||||||
|
# mistranslated args.
|
||||||
|
nowarn="-wd4127 -wd4820 -wd4706 -wd4100 -wd4255 -wd4668 -wd4053 -wd4324"
|
||||||
|
args="-nologo -W3 -WX $nowarn"
|
||||||
|
md=-MD
|
||||||
|
cl="cl"
|
||||||
|
ml="ml"
|
||||||
|
output=
|
||||||
|
|
||||||
|
while [ $# -gt 0 ]
|
||||||
|
do
|
||||||
|
case $1
|
||||||
|
in
|
||||||
|
-fexceptions)
|
||||||
|
# Don't enable exceptions for now.
|
||||||
|
#args="$args -EHac"
|
||||||
|
shift 1
|
||||||
|
;;
|
||||||
|
-m32)
|
||||||
|
shift 1
|
||||||
|
;;
|
||||||
|
-m64)
|
||||||
|
cl="cl" # "$MSVC/x86_amd64/cl"
|
||||||
|
ml="ml64" # "$MSVC/x86_amd64/ml64"
|
||||||
|
shift 1
|
||||||
|
;;
|
||||||
|
-O*)
|
||||||
|
args="$args $1"
|
||||||
|
shift 1
|
||||||
|
;;
|
||||||
|
-g)
|
||||||
|
# Can't specify -RTC1 or -Zi in opt. -Gy is ok. Use -OPT:REF?
|
||||||
|
args="$args -D_DEBUG -RTC1 -Zi"
|
||||||
|
md=-MDd
|
||||||
|
shift 1
|
||||||
|
;;
|
||||||
|
-c)
|
||||||
|
args="$args -c"
|
||||||
|
args="$(echo $args | sed 's%/Fe%/Fo%g')"
|
||||||
|
single="-c"
|
||||||
|
shift 1
|
||||||
|
;;
|
||||||
|
-D*=*)
|
||||||
|
name="$(echo $1|sed 's/-D\([^=][^=]*\)=.*/\1/g')"
|
||||||
|
value="$(echo $1|sed 's/-D[^=][^=]*=//g')"
|
||||||
|
args="$args -D${name}='$value'"
|
||||||
|
defines="$defines -D${name}='$value'"
|
||||||
|
shift 1
|
||||||
|
;;
|
||||||
|
-D*)
|
||||||
|
args="$args $1"
|
||||||
|
defines="$defines $1"
|
||||||
|
shift 1
|
||||||
|
;;
|
||||||
|
-I)
|
||||||
|
args="$args -I$2"
|
||||||
|
includes="$includes -I$2"
|
||||||
|
shift 2
|
||||||
|
;;
|
||||||
|
-I*)
|
||||||
|
args="$args $1"
|
||||||
|
includes="$includes $1"
|
||||||
|
shift 1
|
||||||
|
;;
|
||||||
|
-W|-Wextra)
|
||||||
|
# TODO map extra warnings
|
||||||
|
shift 1
|
||||||
|
;;
|
||||||
|
-Wall)
|
||||||
|
args="$args -Wall"
|
||||||
|
shift 1
|
||||||
|
;;
|
||||||
|
-Werror)
|
||||||
|
args="$args -WX"
|
||||||
|
shift 1
|
||||||
|
;;
|
||||||
|
-W*)
|
||||||
|
# TODO map specific warnings
|
||||||
|
shift 1
|
||||||
|
;;
|
||||||
|
-S)
|
||||||
|
args="$args -FAs"
|
||||||
|
shift 1
|
||||||
|
;;
|
||||||
|
-o)
|
||||||
|
outdir="$(dirname $2)"
|
||||||
|
base="$(basename $2|sed 's/\.[^.]*//g')"
|
||||||
|
if [ -n "$single" ]; then
|
||||||
|
output="-Fo$2"
|
||||||
|
else
|
||||||
|
output="-Fe$2"
|
||||||
|
fi
|
||||||
|
if [ -n "$assembly" ]; then
|
||||||
|
args="$args $output"
|
||||||
|
else
|
||||||
|
args="$args $output -Fd$outdir/$base -Fp$outdir/$base -Fa$outdir/$base"
|
||||||
|
fi
|
||||||
|
shift 2
|
||||||
|
;;
|
||||||
|
*.S)
|
||||||
|
src=$1
|
||||||
|
assembly="true"
|
||||||
|
shift 1
|
||||||
|
;;
|
||||||
|
*.c)
|
||||||
|
args="$args $1"
|
||||||
|
shift 1
|
||||||
|
;;
|
||||||
|
*)
|
||||||
|
# Assume it's an MSVC argument, and pass it through.
|
||||||
|
args="$args $1"
|
||||||
|
shift 1
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
done
|
||||||
|
|
||||||
|
if [ -n "$assembly" ]; then
|
||||||
|
if [ -z "$outdir" ]; then
|
||||||
|
outdir="."
|
||||||
|
fi
|
||||||
|
ppsrc="$outdir/$(basename $src|sed 's/.S$/.asm/g')"
|
||||||
|
echo "$cl -nologo -EP $includes $defines $src > $ppsrc"
|
||||||
|
"$cl" -nologo -EP $includes $defines $src > $ppsrc || exit $?
|
||||||
|
output="$(echo $output | sed 's%/F[dpa][^ ]*%%g')"
|
||||||
|
args="-nologo -safeseh $single $output $ppsrc"
|
||||||
|
|
||||||
|
echo "$ml $args"
|
||||||
|
eval "\"$ml\" $args"
|
||||||
|
result=$?
|
||||||
|
|
||||||
|
# required to fix ml64 broken output?
|
||||||
|
#mv *.obj $outdir
|
||||||
|
else
|
||||||
|
args="$md $args"
|
||||||
|
echo "$cl $args"
|
||||||
|
eval "\"$cl\" $args"
|
||||||
|
result=$?
|
||||||
|
fi
|
||||||
|
|
||||||
|
exit $result
|
||||||
|
|
||||||
27
patches/msvc
27
patches/msvc
@@ -2,9 +2,15 @@ Index: libffi/ChangeLog.libffi
|
|||||||
===================================================================
|
===================================================================
|
||||||
--- libffi.orig/ChangeLog.libffi
|
--- libffi.orig/ChangeLog.libffi
|
||||||
+++ libffi/ChangeLog.libffi
|
+++ libffi/ChangeLog.libffi
|
||||||
@@ -1,3 +1,20 @@
|
@@ -1,3 +1,26 @@
|
||||||
|
+2010-01-15 Anthony Green <green@redhat.com>
|
||||||
|
+
|
||||||
|
+ * README: Add notes on building with Microsoft Visual C++.
|
||||||
|
+
|
||||||
+2010-01-15 Daniel Witte <dwitte@mozilla.com>
|
+2010-01-15 Daniel Witte <dwitte@mozilla.com>
|
||||||
+
|
+
|
||||||
|
+ * msvcc.sh: New file.
|
||||||
|
+
|
||||||
+ * src/x86/win32.S: Port assembly routines to MSVC and #ifdef.
|
+ * src/x86/win32.S: Port assembly routines to MSVC and #ifdef.
|
||||||
+ * src/x86/ffi.c: Tweak function declaration and remove excess
|
+ * src/x86/ffi.c: Tweak function declaration and remove excess
|
||||||
+ parens.
|
+ parens.
|
||||||
@@ -918,3 +924,22 @@ Index: libffi/src/x86/win32.S
|
|||||||
+
|
+
|
||||||
+#endif /* !_MSC_VER */
|
+#endif /* !_MSC_VER */
|
||||||
+
|
+
|
||||||
|
Index: libffi/README
|
||||||
|
===================================================================
|
||||||
|
--- libffi.orig/README
|
||||||
|
+++ libffi/README
|
||||||
|
@@ -109,6 +109,14 @@ will add some extra code which will supp
|
||||||
|
are using Purify with libffi. Only use this switch when using
|
||||||
|
Purify, as it will slow down the library.
|
||||||
|
|
||||||
|
+It's also possible to build libffi on Windows platforms with
|
||||||
|
+Microsoft's Visual C++ compiler. In this case, use the msvcc.sh
|
||||||
|
+wrapper script during configuration like so:
|
||||||
|
+
|
||||||
|
+path/to/configure --enable-shared --enable-static \
|
||||||
|
+ CC=path/to/msvcc.sh LD=link \
|
||||||
|
+ CPP=\"cl -nologo -EP\"
|
||||||
|
+
|
||||||
|
Configure has many other options. Use "configure --help" to see them all.
|
||||||
|
|
||||||
|
Once configure has finished, type "make". Note that you must be using
|
||||||
|
|||||||
Reference in New Issue
Block a user