Steps to a spoony VM (was Re: Compiling Flow.so under linux)
Tony Garnock-Jones
tonyg at lshift.net
Thu Sep 13 19:33:03 UTC 2007
Below are my notes from building a VM capable of running memory.image.
Note that I ran VMMaker three times - the first two times are not
needed! I was just proceeding in small steps to do things like look at
diffs etc etc.
Things that puzzle me:
- the calls to halt ("halt(3)" appears a lot in interp.c)
- the call to cleanUpContexts
- the error generating LargeIntegersPlugin
- the nasty code in the generated LargeIntegersPlugin
Regards,
Tony
== COMPILATION NOTES ==
Get http://squeakvm.org/unix/release/Squeak-3.9-8.src.tar.gz
Get http://netjam.org/flow2a5.tar.gz
Get
http://www.netjam.org/flow/releases/current/bits/flow2aPrimitiveSources.zip
Get http://damien.cassou.free.fr/squeak-dev/sq3.9-7067dev07.09.1.zip
Unzip sq3.9-7067dev07.09.1.zip somewhere convenient.
- Untar Squeak-3.9-8.src.tar.gz into the resulting
sq3.9-7067dev07.09.1 directory.
- Unzip spoon.2a12.linux.zip as well
- Unzip flow2a5.tar.gz, and rename "flow/" to "flow2a5/"
- Unzip flow2aPrimitiveSources.zip, and rename "flow/" to "flow2a/"
Edit flow2a/platformSpecific/linux/Makefile.in, commenting out the "cp
Flow.so $(plgdir)" line.
Open the image in the sq3.9-7067dev07.09.1 directory.
Open Package Universe Browser
- Choose "--System--", "VMMaker", "3.8b6.1"
- Middle-click "3.8b6.1", choose "select this version"
- Click "install selection"
Much code downloading and installation happens.
Open VMMaker
- click "Find Path" at the end of the "Path to platforms code" line
- Choose your current working directory's subdirectory "Squeak-3.9-8".
- Click OK
- Click "Find platform" on the "Platform name" line.
- Choose "unix" from the menu that appears.
- Click "Core+Internal" on the "Generate" line
- When it's done, save and quit the image
Rename away the generated source directory:
$ mv src32 src32-without-patches
Reopen the Squeak-Dev image.
File in "./spoon/components/spoonProcessor Changes.st"
Click "Core+Internal" again.
Save and quit the image again.
Rename the generated source directory appropriately:
$ mv src32 src32-with-patches
If you like, examine the core changes to the interpreter:
$ diff -w -ru3 src32-without-patches/ src32-with-patches/
Regenerate the VM one more time, with as many plugins as possible
external, and the rest internal.
- open the image
- middle click "Plugins not built" in the VMMaker
- choose "make all external"
- drag "LargeIntegersSimulator" out of the "External Plugins" panel
into the "Plugins not built" panel
- click "Entire"
- You get an error during LargeIntegersPlugin! Click "proceed".
Save and quit the image.
Edit src32/vm/interp.c
- add the line "#define halt(x)" to the top
- search for the line "cleanUpContexts();" and comment it out
Now apply the changes to the VM sources and build the VM.
$ rm -rf Squeak-3.9-8/platforms/unix/src
$ rm -rf Squeak-3.9-8/platforms/unix/src32
$ rm -rf Squeak-3.9-8/platforms/unix/src64
$ mv src32 Squeak-3.9-8/platforms/unix/src
$ mv Squeak-3.9-8/platforms/unix/src/plugins/Flow/
Flow-plugin-as-generated
$ cp -r flow2a5 Squeak-3.9-8/platforms/unix/plugins/Flow
$ cp flow2a/platformSpecific/linux/Makefile.in
Squeak-3.9-8/platforms/unix/plugins/Flow/
$ mkdir Squeak-3.9-8/build
$ (cd Squeak-3.9-8/platforms/unix/config/; make)
$ (cd Squeak-3.9-8/build/; ../platforms/unix/config/configure
--prefix=/opt/spoon)
Fix LargeIntegers.c line 1370 - comment out the line
halt(,("missing primitive: ", primitiveName));
$ (cd Squeak-3.9-8/build/; make)
$ (cd Squeak-3.9-8/build/; make install)
Now /opt/spoon/bin/squeak memory.image should work.
More information about the Spoon
mailing list