Building Squeak 2.3 for IRIX.

Bill Cattey wdc at MIT.EDU
Tue Feb 23 01:07:59 UTC 1999

Ian:  Thanks muchly for the reply, it nudged me in the right way for me
to work the SGI stuff.

I have successfully built the VM for the SGI.

A transcript of the build is in:

The binary is in:

I now understand the issues I raised:

in sqWindow.c:

	line 1271: &w, &h, &b, &d are incompatible pointer types
	line 1399: &winW, &winH, &winB, &winD are incompatible
	pointer types   (I presume I can ignore these.)

I could ignore them, but it turns out the values are supposed to be
unsigned.  The MIPS compiler complains that pointers to unsigned
integers are different from pointers to signed integers.  Other
compilers don't complain.  But the correct thing is to change the
definitions to be unsigned int.

	GNUMakefile.rules line 18 complains its overriding commands for target
	GNUMakefile.rules line 13 complains its ignoring old commands for
target SqueakVM-2.3-SGI

	Unkinown option: -irix-6.3.o option ignored

This was because there was a space after "SGI" in one of the lines of
GNUmakefile.conf so that it kept trying to make "SqueakVM-2.3-SGI
-irix-6.3.o" and complaining about the bad option, and doing the wrong
dependencies, and overriding rules incorrectly.

	savedWindowSize multiply defined in interp.o and sqWindow.o

I decided I'd worry about this.  I moved savedWindowSize in sqWindow.c
to be one of the extern values imported from the VM.  I don't know why
other compilers didn't complain.  I've seen this sort of problem before,
and it's MIGHTY hard to debug when globals are defined in two modules
that silently conflict.

	I get warnings not to use -c with -O3 -- that I should use -j

I understand this issue, but I am not sure what exactly the right way to
proceed is.  The old IRIX 5.3 build used a different ABI.  (SGI keeps
creating new ones, and slowly fading the old ones away.)  One thing for
sure:  -j should NOT be used.  It would spit out microcode files that
I'm not wizardly enough to deal with.

For now, I have changed "-mips2 -32" to "-n32 mips3".  The advantage of
this option is that it compiles to the newest ABI in a way that will run
on both R4000 series and R5000 series machines.  (I can compile this on
my desk and expect it to run lots of places.)  The n32 ABI is alleged to
be the higest performance of the current 32 bit ABI's extant.  The
DISadvantage is that the compiler is a LOT more finicky.  It gives a
HUGE slew of warnings, which can be ignored, I hope.

A common one is "non-void function should return a value". I guess this
is the situation where a function really isn't returning anything but
needs to be declared int to fit into the schema.

The MIPS compiler also complains that interp.c has more basic blocks
than it cares to run the global optimizer over.  At some point I should
measure the time to compile, and the value of setting "-Olimit 4000" to
prod the optimizer into operating.  I'm not gonna do it now, because I
should not be taking the time to learn how to do performance measurement.

If you like, I can send diffs, or you can look at the modified files
themselves at:
	sqXIcon.bitmap  (It had ^M at ends of lines.  OOPS)

WARNING!  Remember that sqXWindow.c on my site has the previously
mentioned new code to pick more ambitious visuals than DefaultVisual.

A transcript of the build is in:


P.S.  Since I've now got a VM that runs both on Sun and SGI, I have cut
over completely to Squeak 2.3 at MIT.  (I had to keep 2.2 around until I
had an SGI VM.)

More information about the Squeak-dev mailing list