[Vm-dev] How to build a standard Unix interpreter VM on Linux using a Squeak trunk image

David T. Lewis lewis at mail.msen.com
Sat Nov 19 17:28:13 UTC 2011

This is a topic that deserves an occasional update, so here is an updated
step-by-step recipe for building with Squeak on Linux.

These instructions are saved on the swiki at <http://wiki.squeak.org/squeak/6177>

Start with a fresh image such as http://ftp.squeak.org/4.3alpha/Squeak4.3gamma-11793.zip
(any recent Squeak image will do).

Open a new Morphic project in which to work, and enter the project.

Open a new workspace for taking notes as you work, and a transcript to display
any transcript output that might appear.

Open a Monticello browser.

In the Monticello browser, add a new repository (+Repository button).
Select "HTTP" repository type, and edit the repository information as follows:

	location: 'http://www.squeaksource.com/VMMaker'
	user: ''
	password: ''
Open the new repository (select the new entry and click the Open button to get
a new repository browser).

In the repository browser, select category "update" from the list in the left
panel, and select the top entry in the right panel (update-dtl.9.mcm as of
this writing).

Click the "Load" button to load VMMaker. This will load VMMaker and various
related packages and plugins. This will load a base version of these packages
(but you do not yet have the latest updates, see the next step below). You
can see a version identification for your VMMaker package by evaluating
"VMMaker versionString" in your workspace:
  VMMaker versionString ==> '4.7.9'

In the workspace, evaluate the expression "VMMaker updateFromServer". This
will update VMMaker and the other packages to the most up to date versions.
During the merge process,  a merge browser will open with a label such as
"Merging FFI-Pools-eem.3". Highlight the entries and click "Keep", then
click the "Merge" button to accept the merge and proceed (this merge conflict
will not effect your VM, so it is safe to ignore it and proceed).

When the update process is complete, you will have the latest VMMaker version:
  VMMaker versionString ==> '4.7.14'

Save your image. Your image is now prepared for VM code generation, so the
next steps will be to load the platform source code that is required for
code generation and VM building.

In a Linux terminal window (outside of Squeak), change your directory to
your working Squeak directory (the same directory that you are using to run
your image.

lewis at linux-jh8m:~> cd squeak/Squeak4.3
lewis at linux-jh8m:~/squeak/Squeak4.3>

Check out an up to date copy of the platforms source code. You will need to
have Subversion installed on your Linux system:

lewis at linux-jh8m:~/squeak/Squeak4.3> svn co http://squeakvm.org/svn/squeak/trunk
  <lots of messages snipped>
Checked out revision 2515.
lewis at linux-jh8m:~/squeak/Squeak4.3> svn co http://squeakvm.org/svn/squeak/trunk

This will place all of the platform sources in a subdirectory called
trunk/platforms. It is easier for VMMaker to find this directory if the
platforms directory is in directly in your Squeak directory, so use a symbolic
link to make it so:

lewis at linux-jh8m:~/squeak/Squeak4.3> ln -s trunk/platforms platforms

The platforms sources are now ready for use, so return to your Squeak
image to generate your VM source code.

Open a VMMaker tool withy world menu -> open... -> VMMaker

Click the Help button and have a quick look at the help information. You
can come back to it later to read in more detail.

A list of available plugins appears in the left panel ("Plugins not built").
You can drag entiries from this panel into the "Internal Plugins" panel or
the "External Plugins" panel, or you can right click on the panel and use the
menu to copy all plugins from one panel to another (plugins that cannot be
built on your platform will remain in the "Plugins not built" panel).

We are building our first VM, so we will select just a few important plugins
to build and omit many others for now. After you are confident that you can
build a VM, you can add other plugins and any operating system libraries that
may be needed to support them. You can also use a VMMaker configuration file
to load a saved configuration, but for now we will do the work by hand to
show how it is done.

Use the mouse to drag and drop the following plugin entries from the
"Plugins not built" panel to the "Internal plugins" panel.


Now add some external plugins by dragging the following entries to the
"External plugins" panel:


Click the "Clean out" button to make sure the output directory is empty.
This is not really necessary now, but it is good practice, and you will
want to do it any time you want to guarantee that you are generating a
complete fresh copy of the VM sources.

In the "Generate:" panel, click the "Entire" button. This will generate
all of the VM and plugin source code. In other words, it will translate
the Smalltalk classes in your image into C code, and store the resulting
source code in the "src" directory in your Squeak directory. This generated
source, in combination with the platforms source code that you downloaded
from the Subversion repository, is the complete source code for your new
Squeak VM. 

Now go back to your Linux terminal window to compile and install the VM.
You will need to have the CMake package installed on your Linux system,
so make sure this is done before proceeding.

You should now have all necessary sources in the "platforms" and "src"
directories in your Squeak working directory:

lewis at linux-jh8m:~/squeak/Squeak4.3> ls -ltd platforms src
drwxr-xr-x 4 lewis users 4096 2011-11-19 10:10 src
lrwxrwxrwx 1 lewis users   15 2011-11-19 09:39 platforms -> trunk/platforms

Create a "build" directory for building the VM, and change into that

lewis at linux-jh8m:~/squeak/Squeak4.3> mkdir build
lewis at linux-jh8m:~/squeak/Squeak4.3> cd build
lewis at linux-jh8m:~/squeak/Squeak4.3/build>

We will first run a configuration procedure that uses CMake to configure
the sources for your system. You will find documention for this in
platforms/unix/CMake.txt. The script that runs this procedure has introductory
help, so read this first:

lewis at linux-jh8m:~/squeak/Squeak4.3/build> ../platforms/unix/cmake/configure --help

Now, from your empty build directory, run the actual configuration process.
The parameters specify the location of the generated sources, and also specify
that GL libaries should be avoided (they are not needed for this simple build,
and might cause problems if you do not have the necessary libraries in place).
If you are using a 64-bit operating system, this configuration will build a
64-bit VM (see the configuration help above if you want to specify CFLAGS to
build a 32-bit VM, which you may later want to do if you are building some of
the plugins that work in 32-bit mode).

lewis at linux-jh8m:~/squeak/Squeak4.3/build> ../platforms/unix/cmake/configure --src=../src --without-gl

When the configuration is complete, use make to build the VM:

lewis at linux-jh8m:~/squeak/Squeak4.3/build> make

If you have any errors or problems with the build, you may need to do
some troubleshooting. In most cases the problem will relate to missing
development software that you will need to install on your Linux system.

When the build is complete, your new VM is read to be installed.

lewis at linux-jh8m:~/squeak/Squeak4.3/build> make install

Depending on the security settings of your system, you may need to log
in as root (or use sudo) to perform this last step (but never use root
access for any of the other build steps described above).

Your new Squeak VM is now built and installed, ready to be run as
/usr/local/bin/squeak. You can verify the version of the VM you are
running as follows:

lewis at linux-jh8m:~/squeak/Squeak4.3/build> squeak -version
4.7.14-2515 #1 XShm Sat Nov 19 10:27:11 EST 2011 gcc 4.5.0
Linux linux-jh8m #1 SMP PREEMPT 2010-12-13 11:13:53 +0100 x86_64 x86_64 x86_64 GNU/Linux
plugin path: /usr/local/lib/squeak/4.7.14-2515 [default: /usr/local/lib/squeak/4.7.14-2515/]

Congratulations, you are now a VM builder. You will probably want to add
some more plugins, and you can save and load your VMMaker configurations
for various combinations of plugins with the "Load" and "Save" buttons on
your VMMaker window. For reference, here is a configuration file that
matches the configuration of recent official Unix Squeak VMs on
www.squeakvm.org (note that you will need to locate and install KedamaPlugin
and GStreamer plugin to build a VM that fully matches the standard Unix VM).

Contents of standard-vmmaker-unix.config file:


More information about the Vm-dev mailing list