Hi Dan,

Am Mittwoch, 2. September 2009 19:53:46 schrieb Dan Nicholson:
> On Mon, Aug 31, 2009 at 8:56 AM, Marc Dietrich<[email protected]> wrote:
> > When cross compiling on a 64bit machine, gen_matypes.c is build
> > for the host machine (64bit) but must generates code for the target
> > machine (32bit). This causes wrong offsets all over the place and
> > crashes googleearth on my machine. Solution is to add -m32 when
> > cross compiling.
> >
> > Attached patch is compatible with linux-x86-32 and autoconf based
> > builds.
> > ---
> >  configure.ac          |    1 +
> >  src/mesa/x86/Makefile |    2 +-
> >  2 files changed, 2 insertions(+), 1 deletions(-)
> >
> > diff --git a/configure.ac b/configure.ac
> > index 9d318b3..c5ef676 100644
> > --- a/configure.ac
> > +++ b/configure.ac
> > @@ -126,6 +126,7 @@ AC_ARG_ENABLE([32-bit],
> >  if test "x$enable_32bit" = xyes; then
> >     if test "x$GCC" = xyes; then
> >         CFLAGS="$CFLAGS -m32"
> > +        ARCH_FLAGS="$ARCH_FLAGS -m32"
> >     fi
> >     if test "x$GXX" = xyes; then
> >         CXXFLAGS="$CXXFLAGS -m32"
> > diff --git a/src/mesa/x86/Makefile b/src/mesa/x86/Makefile
> > index aa49a91..69122c1 100644
> > --- a/src/mesa/x86/Makefile
> > +++ b/src/mesa/x86/Makefile
> > @@ -21,7 +21,7 @@ clean:
> >
> >
> >  gen_matypes: gen_matypes.c
> > -       $(HOST_CC) $(INCLUDE_DIRS) $(HOST_CFLAGS) gen_matypes.c -o
> > gen_matypes +       $(HOST_CC) $(ARCH_FLAGS) $(INCLUDE_DIRS)
> > $(HOST_CFLAGS) gen_matypes.c -o gen_matypes
> >
> >  # need some special rules here, unfortunately
> >  matypes.h: ../main/mtypes.h ../tnl/t_context.h gen_matypes
> 
> Hmm, this is a little unfortunate. If you use -m32, then you're going
> to generate a native 32 bit binary, right? That works for the x86_64
> case when you have multilib setup, but what if I was cross compiling
> from PPC or something? I'm guessing not too many people are cross
> compiling mesa for x86 or this would have come up sooner.

you are certainly right and I should have added that this is only a q&d hack. 
I hesitated to introduce a new makefile variable specifying the target width. I 
think it works for most of the few cases where it is needed (most often you 
have a 64bit cpu (x86-64, ppc64, ... with 32bit user-space applications) 
without making it more ugly than it already is.

> Not sure what the general solution is. --enable-32-bit was just a
> quick fix hack and not really intended to be the only way for people
> to build successfully. Definitely configure should set it up that if
> you're not cross compiling, HOST_CC=$CC and HOST_CFLAGS=$CFLAGS. I'd
> never noticed that before.

The real problem is that gen_matypes isn't really cross platform compatible. 
It needs to generate code on host system with a word width of the target, 
which may not work in all cases. So the real fix should be to replace 
gen_matypes which is out of my skills.  Feel free to write a better approach.

Greetings,

Marc

------------------------------------------------------------------------------
Let Crystal Reports handle the reporting - Free Crystal Reports 2008 30-Day 
trial. Simplify your report design, integration and deployment - and focus on 
what you do best, core application coding. Discover what's new with 
Crystal Reports now.  http://p.sf.net/sfu/bobj-july
_______________________________________________
Mesa3d-dev mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/mesa3d-dev

Reply via email to